Files
MesenCE/UI/Debugger/Controls/SpritePreviewPanel.axaml.cs
SourMesen 40335ce735 UI: Update to Avalonia 12, .NET 10 and replace ReactiveUI with MVVM community toolkit (#142)
Also fixes DX11.0 support (for Win7 PCs that aren't fully updated), which stopped working after the recent variable refresh rate changes
2026-07-03 16:04:42 +09:00

78 lines
2.3 KiB
C#

using Avalonia;
using Avalonia.Controls;
using Avalonia.Layout;
using Avalonia.Markup.Xaml;
using CommunityToolkit.Mvvm.ComponentModel;
using Mesen.Config;
using Mesen.Debugger.ViewModels;
using Mesen.Utilities;
using System;
namespace Mesen.Debugger.Controls
{
public class SpritePreviewPanel : MesenUserControl
{
public static readonly StyledProperty<double> InnerHeightProperty = AvaloniaProperty.Register<SpritePreviewPanel, double>(nameof(InnerHeight), 0);
public static readonly StyledProperty<double> InnerWidthProperty = AvaloniaProperty.Register<SpritePreviewPanel, double>(nameof(InnerWidth), 0);
public static readonly StyledProperty<bool> FadePreviewProperty = AvaloniaProperty.Register<SpritePreviewPanel, bool>(nameof(FadePreview), false);
public static readonly StyledProperty<Thickness> BorderSizeProperty = AvaloniaProperty.Register<SpritePreviewPanel, Thickness>(nameof(BorderSize), default);
public bool FadePreview
{
get { return GetValue(FadePreviewProperty); }
set { SetValue(FadePreviewProperty, value); }
}
public double InnerHeight
{
get { return GetValue(InnerHeightProperty); }
set { SetValue(InnerHeightProperty, value); }
}
public double InnerWidth
{
get { return GetValue(InnerWidthProperty); }
set { SetValue(InnerWidthProperty, value); }
}
public Thickness BorderSize
{
get { return GetValue(BorderSizeProperty); }
set { SetValue(BorderSizeProperty, value); }
}
public SpritePreviewModel Model { get; private init; }
public SpriteViewerConfig Config { get; private init; }
[Obsolete("For designer only")]
public SpritePreviewPanel() : this(new(), new()) { }
public SpritePreviewPanel(SpritePreviewModel model, SpriteViewerConfig config)
{
InitializeComponent();
Model = model;
Config = config;
AddDisposable(Model.ObserveProp(nameof(Model.FadePreview), UpdateFadePreviewFlag));
AddDisposable(Config.ObserveProp(nameof(Config.DimOffscreenSprites), UpdateFadePreviewFlag));
}
private void UpdateFadePreviewFlag()
{
FadePreview = Model.FadePreview && Config.DimOffscreenSprites;
}
protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e)
{
base.OnAttachedToVisualTree(e);
BorderSize = new Thickness(1 / LayoutHelper.GetLayoutScale(this));
}
private void InitializeComponent()
{
AvaloniaXamlLoader.Load(this);
}
}
}