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.Metadata;
using Avalonia.Rendering; using Avalonia.Rendering;
using Avalonia.VisualTree; using Avalonia.VisualTree;
using Avalonia.Layout;
namespace Avalonia.Controls.Primitives namespace Avalonia.Controls.Primitives
{ {
@ -317,21 +318,22 @@ namespace Avalonia.Controls.Primitives
if (target?.GetVisualRoot() == null) if (target?.GetVisualRoot() == null)
{ {
mode = PlacementMode.Pointer; mode = PlacementMode.Pointer;
} }
switch (mode) switch (mode)
{ {
case PlacementMode.Pointer: case PlacementMode.Pointer:
if (MouseDevice.Instance != null) if (MouseDevice.Instance != null)
{ {
var offset = new Point(HorizontalOffset, VerticalOffset); // 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 new Point(MouseDevice.Instance.Position.X + offset.X, MouseDevice.Instance.Position.Y + offset.Y); return MouseDevice.Instance.Position + screenOffset;
} }
return default(Point); return default(Point);
case PlacementMode.Bottom: case PlacementMode.Bottom:
return target?.PointToScreen(new Point(0 + HorizontalOffset, target.Bounds.Height + VerticalOffset)) ?? zero; return target?.PointToScreen(new Point(0 + HorizontalOffset, target.Bounds.Height + VerticalOffset)) ?? zero;
case PlacementMode.Right: case PlacementMode.Right:

Loading…
Cancel
Save