From 08c7b70497a55a59541019df1d10305fc63f7ca8 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 20 Sep 2019 17:48:45 +0100 Subject: [PATCH 1/3] allow TranslateSize and Point to be overriden. --- .../PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs b/src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs index bb701da651..0647020b12 100644 --- a/src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs +++ b/src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs @@ -43,8 +43,8 @@ namespace Avalonia.Controls.Primitives.PopupPositioning _moveResize(new PixelPoint((int)devicePoint.X, (int)devicePoint.Y), virtualSize, _parent.Scaling); } - public Point TranslatePoint(Point pt) => pt * _parent.Scaling; + public virtual Point TranslatePoint(Point pt) => pt * _parent.Scaling; - public Size TranslateSize(Size size) => size * _parent.Scaling; + public virtual Size TranslateSize(Size size) => size * _parent.Scaling; } } From af88b38bef15ee98bd9a8f3408932f4e37564375 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 20 Sep 2019 17:54:34 +0100 Subject: [PATCH 2/3] fix osx popup positioning. --- src/Avalonia.Native/AvaloniaNativePlatform.cs | 1 - ...OsxManagedPopupPositionerPopupImplHelper.cs | 18 ++++++++++++++++++ src/Avalonia.Native/PopupImpl.cs | 2 +- 3 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 src/Avalonia.Native/OsxManagedPopupPositionerPopupImplHelper.cs diff --git a/src/Avalonia.Native/AvaloniaNativePlatform.cs b/src/Avalonia.Native/AvaloniaNativePlatform.cs index 0da97b915c..6d48ab3829 100644 --- a/src/Avalonia.Native/AvaloniaNativePlatform.cs +++ b/src/Avalonia.Native/AvaloniaNativePlatform.cs @@ -1,7 +1,6 @@ // Copyright (c) The Avalonia Project. All rights reserved. // Licensed under the MIT license. See licence.md file in the project root for full license information. using System; -using System.Diagnostics.Contracts; using System.Runtime.InteropServices; using Avalonia.Controls.Platform; using Avalonia.Input; diff --git a/src/Avalonia.Native/OsxManagedPopupPositionerPopupImplHelper.cs b/src/Avalonia.Native/OsxManagedPopupPositionerPopupImplHelper.cs new file mode 100644 index 0000000000..6c98e3c0cc --- /dev/null +++ b/src/Avalonia.Native/OsxManagedPopupPositionerPopupImplHelper.cs @@ -0,0 +1,18 @@ +// Copyright (c) The Avalonia Project. All rights reserved. +// Licensed under the MIT license. See licence.md file in the project root for full license information. +using Avalonia.Controls.Primitives.PopupPositioning; +using Avalonia.Platform; + +namespace Avalonia.Native +{ + class OsxManagedPopupPositionerPopupImplHelper : ManagedPopupPositionerPopupImplHelper + { + public OsxManagedPopupPositionerPopupImplHelper(IWindowBaseImpl parent, MoveResizeDelegate moveResize) : base(parent, moveResize) + { + + } + public override Point TranslatePoint(Point pt) => pt; + + public override Size TranslateSize(Size size) => size; + } +} diff --git a/src/Avalonia.Native/PopupImpl.cs b/src/Avalonia.Native/PopupImpl.cs index f776ee0132..d7fa1052ff 100644 --- a/src/Avalonia.Native/PopupImpl.cs +++ b/src/Avalonia.Native/PopupImpl.cs @@ -22,7 +22,7 @@ namespace Avalonia.Native { Init(factory.CreatePopup(e), factory.CreateScreens()); } - PopupPositioner = new ManagedPopupPositioner(new ManagedPopupPositionerPopupImplHelper(parent, MoveResize)); + PopupPositioner = new ManagedPopupPositioner(new OsxManagedPopupPositionerPopupImplHelper(parent, MoveResize)); } private void MoveResize(PixelPoint position, Size size, double scaling) From e0f3651cba281e5b42ea09b6575c60e2d3df1fd5 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Fri, 20 Sep 2019 18:14:10 +0100 Subject: [PATCH 3/3] fix bottom right corner on osx. --- .../PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs b/src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs index 0647020b12..8e7e429a73 100644 --- a/src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs +++ b/src/Avalonia.Controls/Primitives/PopupPositioning/ManagedPopupPositionerPopupImplHelper.cs @@ -32,7 +32,7 @@ namespace Avalonia.Controls.Primitives.PopupPositioning { // Popup positioner operates with abstract coordinates, but in our case they are pixel ones var point = _parent.PointToScreen(default); - var size = PixelSize.FromSize(_parent.ClientSize, _parent.Scaling); + var size = TranslateSize(_parent.ClientSize); return new Rect(point.X, point.Y, size.Width, size.Height); }