From 8e0341743b41a99eb3f2806d22d09156bcf977c4 Mon Sep 17 00:00:00 2001 From: hexawyz <8518235+hexawyz@users.noreply.github.com> Date: Sun, 9 Feb 2025 04:12:50 +0100 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20Plug=20in=20the=20reset=20image?= =?UTF-8?q?=20button=20for=20embedded=20monitors.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EmbeddedMonitorImageSettingsControl.xaml | 2 +- .../EmbeddedMonitorFeaturesViewModel.cs | 26 ++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/Exo/Ui/Exo.Settings.Ui/EmbeddedMonitorImageSettingsControl.xaml b/src/Exo/Ui/Exo.Settings.Ui/EmbeddedMonitorImageSettingsControl.xaml index f26cdc2..218a881 100644 --- a/src/Exo/Ui/Exo.Settings.Ui/EmbeddedMonitorImageSettingsControl.xaml +++ b/src/Exo/Ui/Exo.Settings.Ui/EmbeddedMonitorImageSettingsControl.xaml @@ -45,7 +45,7 @@ - diff --git a/src/Exo/Ui/Exo.Settings.Ui/ViewModels/EmbeddedMonitorFeaturesViewModel.cs b/src/Exo/Ui/Exo.Settings.Ui/ViewModels/EmbeddedMonitorFeaturesViewModel.cs index 2adff1a..15d8eb4 100644 --- a/src/Exo/Ui/Exo.Settings.Ui/ViewModels/EmbeddedMonitorFeaturesViewModel.cs +++ b/src/Exo/Ui/Exo.Settings.Ui/ViewModels/EmbeddedMonitorFeaturesViewModel.cs @@ -286,7 +286,7 @@ protected override void Reset() break; } } - _currentGraphics?.Reset(); + (_currentGraphics as IResettable)?.Reset(); } internal void UpdateConfiguration(EmbeddedMonitorConfigurationUpdate configuration) @@ -330,7 +330,7 @@ internal void UpdateConfiguration(EmbeddedMonitorConfigurationUpdate configurati } } -internal abstract class EmbeddedMonitorGraphicsViewModel : ChangeableBindableObject +internal abstract class EmbeddedMonitorGraphicsViewModel : ResettableBindableObject { private readonly EmbeddedMonitorViewModel _monitor; private readonly Guid _id; @@ -367,7 +367,7 @@ protected override void OnChanged(bool isChanged) internal abstract ValueTask ApplyAsync(CancellationToken cancellationToken); - internal virtual void Reset() { } + protected override void Reset() { } } internal sealed class EmbeddedMonitorBuiltInGraphicsViewModel : EmbeddedMonitorGraphicsViewModel @@ -440,24 +440,26 @@ public ImageViewModel? Image if (SetChangeableValue(ref _image, value, ChangedProperty.Image)) { // TODO: Improve this to initialize the crop rectangle to a better value automatically. - if (value is not null && !IsRegionValid(_cropRectangle)) + if (value is not null) { var imageSize = Monitor.ImageSize; if (imageSize.Width == imageSize.Height) { - var s = Math.Min(value.Width, value.Height); - CropRectangle = new() { Left = (value.Width - s) >>> 1, Top = (value.Height - s) >>> 1, Width = s, Height = s }; + var minDimension = Math.Min(value.Width, value.Height); + CropRectangle = new() { Left = (value.Width - minDimension) >>> 1, Top = (value.Height - minDimension) >>> 1, Width = minDimension, Height = minDimension }; + // Just to avoid the applicable change below that would be duplicated. This needs to go away. + return; } } - else - { - // Not ideal but good enough for now. - IApplicable.NotifyCanExecuteChanged(); - } + + // Not ideal but good enough for now. (Basically can fire if the applicable state stays false. We can do a check on IsValid later on.) + IApplicable.NotifyCanExecuteChanged(); } } } + private bool IsImageChanged => (_image?.Id).GetValueOrDefault() != _initialImageId; + public MonitorShape Shape => Monitor.Shape; public Size ImageSize => Monitor.ImageSize; @@ -549,7 +551,7 @@ internal void UpdateConfiguration(EmbeddedMonitorImageConfiguration configuratio OnChangeStateChange(wasChanged); } - internal override void Reset() + protected override void Reset() { if (!IsChanged) return; bool imageChanged = false;