From fe3b48054db194b97728f89d3ab48263bd54b818 Mon Sep 17 00:00:00 2001 From: Markus Wenzl Date: Fri, 7 Oct 2022 20:01:48 +0200 Subject: [PATCH 1/3] Added DrmOutputOptions.VideMode property --- .../Avalonia.LinuxFramebuffer/DrmOutputOptions.cs | 2 ++ .../Avalonia.LinuxFramebuffer/Output/DrmOutput.cs | 11 ++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs b/src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs index e92ad02c7a..965d382238 100644 --- a/src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs +++ b/src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs @@ -23,5 +23,7 @@ namespace Avalonia.LinuxFramebuffer /// Default: R0 G0 B0 A0 /// public Color InitialBufferSwappingColor { get; set; } = new Color(0, 0, 0, 0); + + public PixelSize? VideoMode { get; set; } } } diff --git a/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs b/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs index ce210019c0..9bc9d8c7e6 100644 --- a/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs +++ b/src/Linux/Avalonia.LinuxFramebuffer/Output/DrmOutput.cs @@ -51,7 +51,16 @@ namespace Avalonia.LinuxFramebuffer.Output if(connector == null) throw new InvalidOperationException("Unable to find connected DRM connector"); - var mode = connector.Modes.OrderByDescending(x => x.IsPreferred) + DrmModeInfo? mode = null; + + if (options?.VideoMode != null) + { + mode = connector.Modes + .FirstOrDefault(x => x.Resolution.Width == options.VideoMode.Value.Width && + x.Resolution.Height == options.VideoMode.Value.Height); + } + + mode ??= connector.Modes.OrderByDescending(x => x.IsPreferred) .ThenByDescending(x => x.Resolution.Width * x.Resolution.Height) //.OrderByDescending(x => x.Resolution.Width * x.Resolution.Height) .FirstOrDefault(); From fa754f21c8ef257d756b9254bbb4fc43a5d01389 Mon Sep 17 00:00:00 2001 From: Markus Wenzl Date: Fri, 7 Oct 2022 20:07:22 +0200 Subject: [PATCH 2/3] Added doc --- src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs b/src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs index 965d382238..ce843952e7 100644 --- a/src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs +++ b/src/Linux/Avalonia.LinuxFramebuffer/DrmOutputOptions.cs @@ -24,6 +24,10 @@ namespace Avalonia.LinuxFramebuffer /// public Color InitialBufferSwappingColor { get; set; } = new Color(0, 0, 0, 0); + /// + /// specific the video mode with which the DrmOutput should be created, if it is not found it will fallback to the preferred mode. + /// If NULL preferred mode will be used. + /// public PixelSize? VideoMode { get; set; } } } From 4160e9b19f52f4c7cdf13d91d124df6e9d93bb13 Mon Sep 17 00:00:00 2001 From: out4blood88 <96898225+out4blood88@users.noreply.github.com> Date: Sat, 5 Nov 2022 00:14:16 -0700 Subject: [PATCH 3/3] Update UniformGridLayoutState.cs Corrected implementation for UniformGridLayout ItemsStretch Fill and Uniform --- src/Avalonia.Base/Layout/UniformGridLayoutState.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Base/Layout/UniformGridLayoutState.cs b/src/Avalonia.Base/Layout/UniformGridLayoutState.cs index d6b5a30bfc..65cdf4c94b 100644 --- a/src/Avalonia.Base/Layout/UniformGridLayoutState.cs +++ b/src/Avalonia.Base/Layout/UniformGridLayoutState.cs @@ -117,12 +117,12 @@ namespace Avalonia.Layout double extraMinorPixelsForEachItem = 0.0; if (!double.IsInfinity(availableSizeMinor)) { - var numItemsPerColumn = Math.Min( + var numItemsPerColumn = (int)Math.Min( maxItemsPerLine, Math.Max(1.0, availableSizeMinor / (itemSizeMinor + minorItemSpacing))); var usedSpace = (numItemsPerColumn * (itemSizeMinor + minorItemSpacing)) - minorItemSpacing; - var remainingSpace = ((int)(availableSizeMinor - usedSpace)); - extraMinorPixelsForEachItem = remainingSpace / ((int)numItemsPerColumn); + var remainingSpace = availableSizeMinor - usedSpace; + extraMinorPixelsForEachItem = (int)(remainingSpace / numItemsPerColumn); } if (stretch == UniformGridLayoutItemsStretch.Fill)