From e12a3f91c5b325d2beda98c7d9d09b77c378da70 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Wed, 17 Oct 2018 16:33:30 +0100 Subject: [PATCH] add a render info message so dpi can be set. --- .../Remote/Server/RemoteServerTopLevelImpl.cs | 8 +++++++- .../DesignWindowLoader.cs | 4 +--- .../Remote/RemoteDesignerEntryPoint.cs | 15 +++++++++++---- src/Avalonia.Remote.Protocol/ViewportMessages.cs | 7 +++++++ 4 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs b/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs index 08af820fe1..ec61dbc037 100644 --- a/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs +++ b/src/Avalonia.Controls/Remote/Server/RemoteServerTopLevelImpl.cs @@ -45,6 +45,13 @@ namespace Avalonia.Controls.Remote.Server } Dispatcher.UIThread.Post(RenderIfNeeded); } + if(obj is ClientRenderInfoMessage renderInfo) + { + lock(_lock) + { + _dpi = new Vector(renderInfo.DpiX, renderInfo.DpiY); + } + } if (obj is ClientSupportedPixelFormatsMessage supportedFormats) { lock (_lock) @@ -74,7 +81,6 @@ namespace Avalonia.Controls.Remote.Server allocation = _pendingAllocation; _pendingAllocation = null; } - _dpi = new Vector(allocation.DpiX, allocation.DpiY); ClientSize = new Size(allocation.Width, allocation.Height); RenderIfNeeded(); }); diff --git a/src/Avalonia.DesignerSupport/DesignWindowLoader.cs b/src/Avalonia.DesignerSupport/DesignWindowLoader.cs index e724649a7e..a34a893e0b 100644 --- a/src/Avalonia.DesignerSupport/DesignWindowLoader.cs +++ b/src/Avalonia.DesignerSupport/DesignWindowLoader.cs @@ -13,7 +13,7 @@ namespace Avalonia.DesignerSupport { public class DesignWindowLoader { - public static Window LoadDesignerWindow(string xaml, string assemblyPath, Vector dpi) + public static Window LoadDesignerWindow(string xaml, string assemblyPath) { Window window; Control control; @@ -70,8 +70,6 @@ namespace Avalonia.DesignerSupport if (!window.IsSet(Window.SizeToContentProperty)) window.SizeToContent = SizeToContent.WidthAndHeight; } - - (window.PlatformImpl as RemoteServerTopLevelImpl).SetDpi(dpi); window.Show(); Design.ApplyDesignModeProperties(window, control); diff --git a/src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs b/src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs index 4cd14d56d1..cf36dd622a 100644 --- a/src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs +++ b/src/Avalonia.DesignerSupport/Remote/RemoteDesignerEntryPoint.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Net; using System.Reflection; @@ -15,6 +15,8 @@ namespace Avalonia.DesignerSupport.Remote { private static ClientSupportedPixelFormatsMessage s_supportedPixelFormats; private static ClientViewportAllocatedMessage s_viewportAllocatedMessage; + private static ClientRenderInfoMessage s_renderInfoMessage; + private static IAvaloniaRemoteTransportConnection s_transport; class CommandLineArgs { @@ -161,7 +163,8 @@ namespace Avalonia.DesignerSupport.Remote PreviewerWindowingPlatform.PreFlightMessages = new List { s_supportedPixelFormats, - s_viewportAllocatedMessage + s_viewportAllocatedMessage, + s_renderInfoMessage }; } @@ -173,6 +176,11 @@ namespace Avalonia.DesignerSupport.Remote s_supportedPixelFormats = formats; RebuildPreFlight(); } + if (obj is ClientRenderInfoMessage renderInfo) + { + s_renderInfoMessage = renderInfo; + RebuildPreFlight(); + } if (obj is ClientViewportAllocatedMessage viewport) { s_viewportAllocatedMessage = viewport; @@ -191,8 +199,7 @@ namespace Avalonia.DesignerSupport.Remote s_currentWindow = null; try { - var dpi = s_viewportAllocatedMessage != null ? new Vector(s_viewportAllocatedMessage.DpiX, s_viewportAllocatedMessage.DpiY) : new Vector(96, 96); - s_currentWindow = DesignWindowLoader.LoadDesignerWindow(xaml.Xaml, xaml.AssemblyPath, dpi); + s_currentWindow = DesignWindowLoader.LoadDesignerWindow(xaml.Xaml, xaml.AssemblyPath); s_transport.Send(new UpdateXamlResultMessage(){Handle = s_currentWindow.PlatformImpl?.Handle?.Handle.ToString()}); } catch (Exception e) diff --git a/src/Avalonia.Remote.Protocol/ViewportMessages.cs b/src/Avalonia.Remote.Protocol/ViewportMessages.cs index 0627e9d629..dc4550b846 100644 --- a/src/Avalonia.Remote.Protocol/ViewportMessages.cs +++ b/src/Avalonia.Remote.Protocol/ViewportMessages.cs @@ -37,6 +37,13 @@ public PixelFormat[] Formats { get; set; } } + [AvaloniaRemoteMessageGuid("7A3c25d3-3652-438D-8EF1-86E942CC96C0")] + public class ClientRenderInfoMessage + { + public double DpiX { get; set; } + public double DpiY { get; set; } + } + [AvaloniaRemoteMessageGuid("68014F8A-289D-4851-8D34-5367EDA7F827")] public class FrameReceivedMessage {