diff --git a/Processes/RemoteDesktopProcess.cs b/Processes/RemoteDesktopProcess.cs index d1ff162..559a840 100644 --- a/Processes/RemoteDesktopProcess.cs +++ b/Processes/RemoteDesktopProcess.cs @@ -1,3 +1,4 @@ +using Cosmos.Kernel.System.Graphics; using Cosmos.Kernel.System.Keyboard; using RemSox.Networking; @@ -38,6 +39,19 @@ internal sealed class RemoteDesktopProcess() : Process("Remote Desktop Server") server.ListenTo("SyncRequest", async _ => { + Canvas canvas = FullScreenCanvas.GetFullScreenCanvas(); + RenderCommand screenInfo = new() + { + Type = RenderCommandType.ScreenInfo, + WindowId = 0, + ElementId = 0, + Properties = new() + { + ["Width"] = (int)canvas.Mode.Width, + ["Height"] = (int)canvas.Mode.Height, + }, + }; + networkSource?.Render([screenInfo]); WindowManager.InvalidateAll(); }); diff --git a/UI/GUI/Rendering/CanvasRenderSource.cs b/UI/GUI/Rendering/CanvasRenderSource.cs index b9fdde4..04f96f7 100644 --- a/UI/GUI/Rendering/CanvasRenderSource.cs +++ b/UI/GUI/Rendering/CanvasRenderSource.cs @@ -26,6 +26,7 @@ public sealed class CanvasRenderSource : IRenderSource private static Point lastPointerPosition = new(-1, -1); private static Point cursorPosition; + private static int screenWidth, screenHeight; private static readonly Lock renderLock = new(); @@ -62,6 +63,12 @@ public sealed class CanvasRenderSource : IRenderSource isPositionDirty = true; break; + case RenderCommandType.ScreenInfo: + screenWidth = Get(command.Properties, "Width", 640); + screenHeight = Get(command.Properties, "Height", 480); + isPositionDirty = true; + break; + default: if (windowCanvases.ContainsKey(command.WindowId)) { diff --git a/UI/GUI/Rendering/RenderCommand.cs b/UI/GUI/Rendering/RenderCommand.cs index 27d05b9..a4daffb 100644 --- a/UI/GUI/Rendering/RenderCommand.cs +++ b/UI/GUI/Rendering/RenderCommand.cs @@ -95,6 +95,11 @@ public class RenderCommand WriteInt16(s, Position.X); WriteInt16(s, Position.Y); break; + + case RenderCommandType.ScreenInfo: + WriteUInt16(s, GetProp("Width", 0)); + WriteUInt16(s, GetProp("Height", 0)); + break; } } @@ -163,6 +168,11 @@ public class RenderCommand case RenderCommandType.SetCursor: pos = new Point(ReadInt16(data, ref offset), ReadInt16(data, ref offset)); break; + + case RenderCommandType.ScreenInfo: + props["Width"] = ReadUInt16(data, ref offset); + props["Height"] = ReadUInt16(data, ref offset); + break; } return new RenderCommand diff --git a/UI/GUI/Rendering/RenderCommandType.cs b/UI/GUI/Rendering/RenderCommandType.cs index 7a9caca..83098e7 100644 --- a/UI/GUI/Rendering/RenderCommandType.cs +++ b/UI/GUI/Rendering/RenderCommandType.cs @@ -17,4 +17,6 @@ public enum RenderCommandType : byte RemovePrimitives = 0x20, SetCursor = 0x30, + + ScreenInfo = 0xF0, }