Browse Source

Implemented reference layer top most and imrpoved reference layer icons

CPKreuz 2 years ago
parent
commit
998128d740

+ 0 - 0
src/PixiEditor/Images/Commands/PixiEditor/Document/ClipCanvas.png → src/PixiEditor/Images/Crop.png


BIN
src/PixiEditor/Images/ReferenceLayerAbove.png


BIN
src/PixiEditor/Images/ReferenceLayerBelow.png


+ 6 - 1
src/PixiEditor/PixiEditor.csproj

@@ -334,7 +334,6 @@
 		<None Remove="Images\Commands\PixiEditor\View\ZoomOut.png" />
 		<Resource Include="Images\Commands\PixiEditor\View\ZoomOut.png" />
 		<None Remove="Images\Commands\PixiEditor\Document\ClipCanvas.png" />
-		<Resource Include="Images\Commands\PixiEditor\Document\ClipCanvas.png" />
 		<None Remove="Fonts\feather.ttf" />
 		<Resource Include="Fonts\feather.ttf" />
 		<None Remove="Images\Load.png" />
@@ -386,6 +385,12 @@
 		<Resource Include="Images\Commands\PixiEditor\Document\Rotate180DegLayers.png" />
 		<None Remove="Images\Commands\PixiEditor\Document\Rotate270DegLayers.png" />
 		<Resource Include="Images\Commands\PixiEditor\Document\Rotate270DegLayers.png" />
+		<None Remove="Images\Crop.png" />
+		<Resource Include="Images\Crop.png" />
+		<None Remove="Images\ReferenceLayerAbove.png" />
+		<Resource Include="Images\ReferenceLayerAbove.png" />
+		<None Remove="Images\ReferenceLayerBelow.png" />
+		<Resource Include="Images\ReferenceLayerBelow.png" />
 	</ItemGroup>
 	<ItemGroup>
 		<None Include="..\LICENSE">

+ 1 - 1
src/PixiEditor/ViewModels/SubViewModels/Document/DocumentManagerViewModel.cs

@@ -49,7 +49,7 @@ internal class DocumentManagerViewModel : SubViewModel<ViewModelMain>
     [Evaluator.CanExecute("PixiEditor.HasDocument")]
     public bool DocumentNotNull() => ActiveDocument != null;
 
-    [Command.Basic("PixiEditor.Document.ClipCanvas", "Clip Canvas", "Clip Canvas", CanExecute = "PixiEditor.HasDocument")]
+    [Command.Basic("PixiEditor.Document.ClipCanvas", "Clip Canvas", "Clip Canvas", CanExecute = "PixiEditor.HasDocument", IconPath = "crop.png")]
     public void ClipCanvas() => ActiveDocument?.Operations.ClipCanvas();
 
     [Command.Basic("PixiEditor.Document.FlipImageHorizontal", FlipType.Horizontal, "Flip Image Horizontally", "Flip Image Horizontally", CanExecute = "PixiEditor.HasDocument")]

+ 18 - 0
src/PixiEditor/ViewModels/SubViewModels/Document/ReferenceLayerViewModel.cs

@@ -61,8 +61,26 @@ internal class ReferenceLayerViewModel : INotifyPropertyChanged
         {
             isTransforming = value;
             RaisePropertyChanged(nameof(IsTransforming));
+            RaisePropertyChanged(nameof(ShowHighest));
         }
     }
+    
+    private bool isTopMost;
+    public bool IsTopMost
+    {
+        get => isTopMost;
+        set
+        {
+            isTopMost = value;
+            RaisePropertyChanged(nameof(IsTopMost));
+            RaisePropertyChanged(nameof(ShowHighest));
+        }
+    }
+    
+    public bool ShowHighest
+    {
+        get => IsTopMost || IsTransforming;
+    }
 
     public ReferenceLayerViewModel(DocumentViewModel doc, DocumentInternalParts internals)
     {

+ 21 - 1
src/PixiEditor/ViewModels/SubViewModels/Main/LayersViewModel.cs

@@ -3,6 +3,7 @@ using System.Runtime.CompilerServices;
 using System.Runtime.InteropServices;
 using System.Windows;
 using System.Windows.Input;
+using System.Windows.Media;
 using System.Windows.Media.Imaging;
 using ChunkyImageLib;
 using ChunkyImageLib.DataHolders;
@@ -419,7 +420,7 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         doc.Operations.DeleteReferenceLayer();
     }
 
-    [Command.Basic("PixiEditor.Layer.TransformReferenceLayer", "Transform reference layer", "Transform reference layer", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", IconPath = "Tools/MoveImage.png")]
+    [Command.Basic("PixiEditor.Layer.TransformReferenceLayer", "Transform reference layer", "Transform reference layer", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", IconPath = "crop.png")]
     public void TransformReferenceLayer()
     {
         var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;
@@ -429,6 +430,16 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         doc.Operations.TransformReferenceLayer();
     }
 
+    [Command.Basic("PixiEditor.Layer.ToggleReferenceLayerTopMost", "Toggle reference layer position", "Toggle reference layer between highest/lowest", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", IconEvaluator = "PixiEditor.Layer.ToggleReferenceLayerTopMostIcon")]
+    public void ToggleReferenceLayerTopMost()
+    {
+        var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;
+        if (doc is null)
+            return;
+
+        doc.ReferenceLayerViewModel.IsTopMost = !doc.ReferenceLayerViewModel.IsTopMost;
+    }
+
     [Command.Basic("PixiEditor.Layer.ResetReferenceLayerPosition", "Reset reference layer position", "Reset reference layer position", CanExecute = "PixiEditor.Layer.ReferenceLayerExists", IconPath = "Layout.png")]
     public void ResetReferenceLayerPosition()
     {
@@ -439,4 +450,13 @@ internal class LayersViewModel : SubViewModel<ViewModelMain>
         doc.Operations.ResetReferenceLayerPosition();
     }
 
+    [Evaluator.Icon("PixiEditor.Layer.ToggleReferenceLayerTopMostIcon")]
+    public ImageSource GetAboveEverythingReferenceLayerIcon()
+    {
+        var doc = Owner.DocumentManagerSubViewModel.ActiveDocument;
+        if (doc is null || doc.ReferenceLayerViewModel.IsTopMost)
+            return new BitmapImage(new Uri("pack://application:,,,/Images/ReferenceLayerBelow.png"));
+
+        return new BitmapImage(new Uri("pack://application:,,,/Images/ReferenceLayerAbove.png"));
+    }
 }

+ 13 - 3
src/PixiEditor/Views/UserControls/Layers/ReferenceLayer.xaml

@@ -124,14 +124,24 @@
                             Style="{StaticResource ImageButtonStyle}" 
                             ToolTip="Transform reference layer"
                             RenderOptions.BitmapScalingMode="HighQuality"
-                            Width="25" Height="25" HorizontalAlignment="Right">
+                            Width="20" Height="20" HorizontalAlignment="Right">
+                        <Button.Background>
+                            <ImageBrush ImageSource="/Images/Crop.png"/>
+                        </Button.Background>
+                    </Button>
+                    <Button Cursor="Hand" DockPanel.Dock="Right"
+                            Command="{cmds:Command PixiEditor.Layer.ToggleReferenceLayerTopMost}"
+                            Style="{StaticResource ImageButtonStyle}" 
+                            ToolTip="{Binding Document.ReferenceLayerViewModel.ShowHighest, ElementName=uc, Converter={converters:BoolToValueConverter FalseValue='Put reference layer above', TrueValue='Put reference layer below'}}"
+                            RenderOptions.BitmapScalingMode="HighQuality"
+                            Width="20" Height="20" HorizontalAlignment="Right">
                         <Button.Background>
-                            <ImageBrush ImageSource="/Images/Tools/MoveImage.png"/>
+                            <ImageBrush ImageSource="{Binding Document.ReferenceLayerViewModel.ShowHighest, ElementName=uc, Converter={converters:BoolToValueConverter FalseValue='Images/ReferenceLayerAbove.png', TrueValue='Images/ReferenceLayerBelow.png'}}"/>
                         </Button.Background>
                     </Button>
                     <TextBlock IsEnabled="{Binding ElementName=uc, Path=IsEnabled}" HorizontalAlignment="Center"
                                 Margin="0 0 5 0" Foreground="White" 
-                                FontSize="15" VerticalAlignment="Center">Reference Layer</TextBlock>
+                                FontSize="15" VerticalAlignment="Center">Reference</TextBlock>
                 </DockPanel>
             </Grid>
         </DockPanel>

+ 3 - 2
src/PixiEditor/Views/UserControls/Viewport.xaml

@@ -150,8 +150,9 @@
                 <Grid>
                     <Canvas
                         Visibility="{Binding Source={vm:ToolVM ColorPickerToolViewModel}, Path=PickFromReferenceLayer, Converter={converters:BoolToVisibilityConverter}}"
-                        ZIndex="{Binding Document.ReferenceLayerViewModel.IsTransforming, Converter={converters:BoolToIntConverter}}"
-                        Opacity="{Binding Document.ReferenceLayerViewModel.IsTransforming, Converter={converters:BoolToValueConverter FalseValue=1.0, TrueValue=0.75}}">
+                        ZIndex="{Binding Document.ReferenceLayerViewModel.ShowHighest, Converter={converters:BoolToIntConverter}}"
+                        IsHitTestVisible="{Binding Document.ReferenceLayerViewModel.IsTransforming}"
+                        Opacity="{Binding Document.ReferenceLayerViewModel.ShowHighest, Converter={converters:BoolToValueConverter FalseValue=1.0, TrueValue=0.6}}">
                         <Image
                             Focusable="False"
                             Width="{Binding Document.ReferenceLayerViewModel.ReferenceBitmap.Width}"