Sfoglia il codice sorgente

Added Flip commands

flabbet 2 anni fa
parent
commit
92eca57d4d

+ 27 - 1
src/PixiEditor/ViewModels/SubViewModels/Main/WindowViewModel.cs

@@ -1,6 +1,7 @@
 using System.Collections.ObjectModel;
 using System.Windows.Input;
 using AvalonDock.Layout;
+using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.Helpers;
 using PixiEditor.Models.Commands;
 using PixiEditor.ViewModels.SubViewModels.Document;
@@ -55,10 +56,35 @@ internal class WindowViewModel : SubViewModel<ViewModelMain>
             return;
         CreateNewViewport(doc);
     }
+    
+    [Command.Basic("PixiEditor.Window.CenterActiveViewport", "Center active viewport", "Center active viewport", CanExecute = "PixiEditor.HasDocument")]
+    public void CenterCurrentViewport()
+    {
+        if (ActiveWindow is ViewportWindowViewModel viewport)
+            viewport.CenterViewportTrigger.Execute(this, viewport.Document.SizeBindable);
+    }
+    
+    [Command.Basic("PixiEditor.Window.FlipHorizontally", "Flip Viewport Horizontally", "Flip Viewport Horizontally", CanExecute = "PixiEditor.HasDocument")]
+    public void FlipViewportHorizontally()
+    {
+        if (ActiveWindow is ViewportWindowViewModel viewport)
+        {
+            viewport.FlipX = !viewport.FlipX;
+        }
+    }
+    
+    [Command.Basic("PixiEditor.Window.FlipVertically", "Flip Viewport Vertically", "Flip Viewport Vertically", CanExecute = "PixiEditor.HasDocument")]
+    public void FlipViewportVertically()
+    {
+        if (ActiveWindow is ViewportWindowViewModel viewport)
+        {
+            viewport.FlipY = !viewport.FlipY;
+        }
+    }
 
     public void CreateNewViewport(DocumentViewModel doc)
     {
-        Viewports.Add(new ViewportWindowViewModel(doc));
+        Viewports.Add(new ViewportWindowViewModel(this, doc));
         foreach (var viewport in Viewports.Where(vp => vp.Document == doc))
         {
             viewport.RaisePropertyChanged(nameof(viewport.Index));

+ 29 - 3
src/PixiEditor/ViewModels/ViewportWindowViewModel.cs

@@ -1,22 +1,48 @@
 using ChunkyImageLib.DataHolders;
 using PixiEditor.DrawingApi.Core.Numerics;
 using PixiEditor.Helpers;
+using PixiEditor.ViewModels.SubViewModels;
 using PixiEditor.ViewModels.SubViewModels.Document;
 
 namespace PixiEditor.ViewModels;
 #nullable enable
-internal class ViewportWindowViewModel : NotifyableObject
+internal class ViewportWindowViewModel : SubViewModel<WindowViewModel>
 {
     public DocumentViewModel Document { get; }
 
     public ExecutionTrigger<VecI> CenterViewportTrigger { get; } = new ExecutionTrigger<VecI>();
     public ExecutionTrigger<double> ZoomViewportTrigger { get; } = new ExecutionTrigger<double>();
+    
 
-    public string Index => ViewModelMain.Current?.WindowSubViewModel.CalculateViewportIndex(this) ?? "";
+    public string Index => Owner.CalculateViewportIndex(this) ?? "";
 
     public RelayCommand RequestCloseCommand { get; }
 
-    public ViewportWindowViewModel(DocumentViewModel document)
+    private bool _flipX;
+
+    public bool FlipX
+    {
+        get => _flipX;
+        set
+        {
+            _flipX = value;
+            RaisePropertyChanged(nameof(FlipX));
+        }
+    }
+    
+    private bool _flipY;
+
+    public bool FlipY
+    {
+        get => _flipY;
+        set
+        {
+            _flipY = value;
+            RaisePropertyChanged(nameof(FlipY));
+        }
+    }
+
+    public ViewportWindowViewModel(WindowViewModel owner, DocumentViewModel document) : base(owner)
     {
         Document = document;
         RequestCloseCommand = new RelayCommand(_ => ViewModelMain.Current?.WindowSubViewModel.OnViewportWindowCloseButtonPressed(this));

+ 2 - 0
src/PixiEditor/Views/MainWindow.xaml

@@ -542,6 +542,8 @@
                                             StylusButtonUpCommand="{cmds:Command PixiEditor.Stylus.StylusUp, UseProvided=True}"
                                             StylusGestureCommand="{cmds:Command PixiEditor.Stylus.StylusSystemGesture, UseProvided=True}"
                                             StylusOutOfRangeCommand="{cmds:Command PixiEditor.Stylus.StylusOutOfRange, UseProvided=True}"
+                                            FlipX="{Binding FlipX, Mode=TwoWay}"
+                                            FlipY="{Binding FlipY, Mode=TwoWay}"
                                             Stylus.IsTapFeedbackEnabled="False" 
                                             Stylus.IsTouchFeedbackEnabled="False"
                                             Document="{Binding Document}">