diff --git a/GSS2.UI.Core/ViewModels/CameraViewModel.cs b/GSS2.UI.Core/ViewModels/CameraViewModel.cs index 514a42f..7a3b362 100644 --- a/GSS2.UI.Core/ViewModels/CameraViewModel.cs +++ b/GSS2.UI.Core/ViewModels/CameraViewModel.cs @@ -8,8 +8,6 @@ using CommunityToolkit.Mvvm.ComponentModel; using Avalonia.Media; -using LiveChartsCore.Measure; - namespace GSS2.UI.Core.ViewModels; public partial class CameraViewModel : ViewModelBase, IDisposable @@ -21,7 +19,7 @@ public partial class CameraViewModel : ViewModelBase, IDisposable public event EventHandler? RenderReqested; - [ObservableProperty] private Color _backgroundColor = Colors.Transparent; + [ObservableProperty] private Color _background = Colors.Transparent; [ObservableProperty] private Stretch _stretchMode = Stretch.Uniform; [ObservableProperty] private TileMode _tileMode = TileMode.None; diff --git a/GSS2.UI.Core/Views/CameraView.axaml b/GSS2.UI.Core/Views/CameraView.axaml index 43798c4..79ab294 100644 --- a/GSS2.UI.Core/Views/CameraView.axaml +++ b/GSS2.UI.Core/Views/CameraView.axaml @@ -6,5 +6,8 @@ x:DataType="vm:CameraViewModel" x:Class="GSS2.UI.Core.Views.CameraView" HorizontalAlignment="Stretch" - VerticalAlignment="Stretch"> + VerticalAlignment="Stretch" + Background="{Binding Background}" + StretchMode="{Binding StretchMode}" + TileMode="{Binding TileMode}"> diff --git a/GSS2.UI.Core/Views/CameraView.axaml.cs b/GSS2.UI.Core/Views/CameraView.axaml.cs index 6fe2b2e..4709404 100644 --- a/GSS2.UI.Core/Views/CameraView.axaml.cs +++ b/GSS2.UI.Core/Views/CameraView.axaml.cs @@ -13,7 +13,7 @@ using Avalonia.Threading; using Avalonia.Input; using GSS2.UI.Core.ViewModels; -using System.ComponentModel; +using Avalonia.Markup.Xaml; namespace GSS2.UI.Core.Views; @@ -196,9 +196,29 @@ public partial class CameraView : OpenGlControlBase private float _panX = 0; private float _panY = 0; + public static readonly StyledProperty BackgroundProperty = AvaloniaProperty.Register(nameof(Background), defaultValue: Colors.Transparent); + public Color Background + { + get => GetValue(BackgroundProperty); + set => SetValue(BackgroundProperty, value); + } + public static readonly StyledProperty StretchModeProperty = AvaloniaProperty.Register(nameof(StretchMode), defaultValue: Stretch.Uniform); + public Stretch StretchMode + { + get => GetValue(StretchModeProperty); + set => SetValue(StretchModeProperty, value); + } + public static readonly StyledProperty TileModeProperty = AvaloniaProperty.Register(nameof(TileMode), defaultValue: TileMode.None); + public TileMode TileMode + { + get => GetValue(TileModeProperty); + set => SetValue(TileModeProperty, value); + } + public CameraView(ILogger logger) { _logger = logger; + AvaloniaXamlLoader.Load(this); _logger.LogInformation("{} initialized", nameof(CameraView)); } @@ -219,7 +239,6 @@ public partial class CameraView : OpenGlControlBase } else _logger.LogCritical("Cannot start view finder, data context is null or not camera view model"); - base.OnAttachedToVisualTree(ea); } protected override void OnDetachedFromLogicalTree(LogicalTreeAttachmentEventArgs ea) @@ -339,8 +358,7 @@ public partial class CameraView : OpenGlControlBase public override void Render(DrawingContext context) { - var backgroundColor = (DataContext as CameraViewModel)?.BackgroundColor ?? Colors.Transparent; - context.FillRectangle(new SolidColorBrush(backgroundColor), new Rect(0, 0, Bounds.Width, Bounds.Height)); + context.FillRectangle(new SolidColorBrush(Background), new Rect(0, 0, Bounds.Width, Bounds.Height)); base.Render(context); } private void RenderReqested(object? sender, EventArgs ea) => Dispatcher.UIThread.Invoke(() => RequestNextFrameRendering()); @@ -425,8 +443,8 @@ public partial class CameraView : OpenGlControlBase return; } - var stretchMode = (DataContext as CameraViewModel)?.StretchMode ?? Stretch.Uniform; - var tileMode = (DataContext as CameraViewModel)?.TileMode ?? TileMode.None; + var stretchMode = StretchMode; + var tileMode = TileMode; // 1. Очищаем экран gl.Viewport(0, 0, (int)Bounds.Width, (int)Bounds.Height);