Browse Source

correctly scale offsets for pointer placement mode.

pull/547/head
Dan Walmsley 10 years ago
parent
commit
e931bcf79c
  1. 10
      src/Avalonia.Controls/Primitives/Popup.cs

10
src/Avalonia.Controls/Primitives/Popup.cs

@ -10,6 +10,7 @@ using Avalonia.LogicalTree;
using Avalonia.Metadata;
using Avalonia.Rendering;
using Avalonia.VisualTree;
using Avalonia.Layout;
namespace Avalonia.Controls.Primitives
{
@ -317,21 +318,22 @@ namespace Avalonia.Controls.Primitives
if (target?.GetVisualRoot() == null)
{
mode = PlacementMode.Pointer;
}
}
switch (mode)
{
case PlacementMode.Pointer:
if (MouseDevice.Instance != null)
{
var offset = new Point(HorizontalOffset, VerticalOffset);
return new Point(MouseDevice.Instance.Position.X + offset.X, MouseDevice.Instance.Position.Y + offset.Y);
// Scales the Horizontal and Vertical offset to screen co-ordinates.
var screenOffset = new Point(HorizontalOffset * (PopupRoot as ILayoutRoot).LayoutScaling, VerticalOffset * (PopupRoot as ILayoutRoot).LayoutScaling);
return MouseDevice.Instance.Position + screenOffset;
}
return default(Point);
case PlacementMode.Bottom:
return target?.PointToScreen(new Point(0 + HorizontalOffset, target.Bounds.Height + VerticalOffset)) ?? zero;
case PlacementMode.Right:

Loading…
Cancel
Save