From fe3b48054db194b97728f89d3ab48263bd54b818 Mon Sep 17 00:00:00 2001 From: Markus Wenzl Date: Fri, 7 Oct 2022 20:01:48 +0200 Subject: [PATCH 1/2] 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/2] 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; } } }