Quellcode durchsuchen

Fixed preview layer on resize and rotate wip

flabbet vor 3 Jahren
Ursprung
Commit
7eee8de33b

+ 5 - 1
PixiEditor/Models/DataHolders/Document/Document.Constructors.cs

@@ -29,7 +29,11 @@ namespace PixiEditor.Models.DataHolders
             Layers.CollectionChanged += Layers_CollectionChanged;
             LayerStructure.Groups.CollectionChanged += Groups_CollectionChanged;
             LayerStructure.LayerStructureChanged += LayerStructure_LayerStructureChanged;
-            DocumentSizeChanged += (sender, args) => Renderer.Resize(args.NewWidth, args.NewHeight);
+            DocumentSizeChanged += (sender, args) =>
+            {
+                Renderer.Resize(args.NewWidth, args.NewHeight);
+                GeneratePreviewLayer();
+            };
         }
 
         private void LayerStructure_LayerStructureChanged(object sender, LayerStructureChangedEventArgs e)

+ 48 - 19
PixiEditor/Models/DataHolders/Document/Document.Operations.cs

@@ -47,39 +47,68 @@ namespace PixiEditor.Models.DataHolders
             DocumentSizeChanged?.Invoke(this, new DocumentSizeChangedEventArgs(oldWidth, oldHeight, width, height));
         }
 
-        public void RotateActiveLayer(float degrees)
+        public void RotateActiveDocument(float degrees)
         {
-            Guid layerGuid = ActiveLayer.LayerGuid;
+            object[] processArgs = { degrees };
+            object[] reverseProcessArgs = { -degrees };
 
-            object[] processArgs = { layerGuid, degrees };
-            object[] reverseProcessArgs = { layerGuid, -degrees };
-
-            RotateLayerProcess(processArgs);
+            RotateDocumentProcess(processArgs);
 
             UndoManager.AddUndoChange(new Change(
-                RotateLayerProcess,
+                RotateDocumentProcess,
                 reverseProcessArgs,
-                RotateLayerProcess,
+                RotateDocumentProcess,
                 processArgs,
                 "Rotate layer"));
         }
 
-        private void RotateLayerProcess(object[] parameters)
+        private void RotateDocumentProcess(object[] parameters)
         {
-            Layer layer = Layers.First(x => x.LayerGuid == (Guid)parameters[0]);
-            float degrees = (float)parameters[1];
+            float degrees = (float)parameters[0];
+
+            int oldWidth = Width;
+            int oldHeight = Height;
 
-            using (new SKAutoCanvasRestore(layer.LayerBitmap.SkiaSurface.Canvas, true))
+            foreach (var layer in Layers)
             {
-                var copy = layer.LayerBitmap.SkiaSurface.Snapshot();
-                var canvas = layer.LayerBitmap.SkiaSurface.Canvas;
-                canvas.Clear();
-                canvas.RotateDegrees(degrees, layer.MaxWidth / 2, layer.MaxHeight / 2);
-                canvas.DrawImage(copy, new SKPoint(0, 0));
-                copy.Dispose();
+                using (new SKAutoCanvasRestore(layer.LayerBitmap.SkiaSurface.Canvas, true))
+                {
+                    var copy = layer.LayerBitmap.SkiaSurface.Snapshot();
+                    layer.LayerBitmap.SkiaSurface.Canvas.Clear();
+
+                    int oldMaxWidth = layer.MaxWidth;
+                    int oldMaxHeight = layer.MaxHeight;
+
+                    int biggerSize = Math.Max(layer.Width, layer.Height);
+                    int biggerMaxSize = Math.Max(layer.MaxWidth, layer.MaxHeight);
+
+                    layer.Width = biggerSize;
+                    layer.Height = biggerSize;
+
+                    layer.MaxHeight = biggerMaxSize;
+                    layer.MaxWidth = biggerMaxSize;
+
+                    var canvas = layer.LayerBitmap.SkiaSurface.Canvas;
+                    canvas.RotateDegrees(degrees, oldMaxWidth / 2, oldMaxHeight / 2);
+                    canvas.DrawImage(copy, new SKPoint(0, 0));
+
+                    layer.Width = oldHeight;
+                    layer.Height = oldWidth;
+
+                    layer.MaxHeight = oldMaxWidth;
+                    layer.MaxWidth = oldMaxHeight;
+
+                    copy.Dispose();
+                }
+
+                layer.InvokeLayerBitmapChange();
             }
 
-            layer.InvokeLayerBitmapChange();
+            Height = oldWidth;
+            Width = oldHeight;
+            DocumentSizeChanged?.Invoke(
+                this,
+                new DocumentSizeChangedEventArgs(oldWidth, oldHeight, Width, Height));
         }
 
         /// <summary>

+ 1 - 1
PixiEditor/Models/DataHolders/Document/Document.cs

@@ -46,7 +46,7 @@ namespace PixiEditor.Models.DataHolders
             private set
             {
                 width = value;
-                RaisePropertyChanged("Width");
+                RaisePropertyChanged(nameof(Width));
             }
         }
 

+ 3 - 3
PixiEditor/Models/Layers/Layer.cs

@@ -1,4 +1,4 @@
-using PixiEditor.Helpers.Extensions;
+using PixiEditor.Helpers.Extensions;
 using PixiEditor.Models.DataHolders;
 using PixiEditor.Models.Position;
 using PixiEditor.Models.Undo;
@@ -592,8 +592,8 @@ namespace PixiEditor.Models.Layers
                 return;
             }
 
-            newMaxX = Math.Clamp(Math.Max(newMaxX + 1, Width), 0, MaxWidth - OffsetX);
-            newMaxY = Math.Clamp(Math.Max(newMaxY + 1, Height), 0, MaxHeight - OffsetY);
+            newMaxX = Math.Clamp(Math.Max(newMaxX + 1, Width), 1, MaxWidth - OffsetX);
+            newMaxY = Math.Clamp(Math.Max(newMaxY + 1, Height), 1, MaxHeight - OffsetY);
 
             ResizeCanvas(0, 0, 0, 0, newMaxX, newMaxY);
         }

+ 2 - 1
PixiEditor/PixiEditor.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <OutputType>WinExe</OutputType>
-    <TargetFramework>net5.0-windows</TargetFramework>
+    <TargetFramework>net6.0-windows10.0.22000.0</TargetFramework>
     <UseWPF>true</UseWPF>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
     <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
@@ -16,6 +16,7 @@
     <Authors>Krzysztof Krysiński, Egor Mozgovoy, CPK</Authors>
     <Configurations>Debug;Release;MSIX;MSIX Debug</Configurations>
     <Platforms>AnyCPU;x64;x86</Platforms>
+    <SupportedOSPlatformVersion>7.0</SupportedOSPlatformVersion>
   </PropertyGroup>
 
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='MSIX|AnyCPU'">

+ 1 - 1
PixiEditor/ViewModels/SubViewModels/Main/DocumentViewModel.cs

@@ -35,7 +35,7 @@ namespace PixiEditor.ViewModels.SubViewModels.Main
         {
             if (parameter is double angle)
             {
-                Owner.BitmapManager.ActiveDocument?.RotateActiveLayer((float)angle);
+                Owner.BitmapManager.ActiveDocument?.RotateActiveDocument((float)angle);
             }
         }