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