Browse Source

Fixed zoom drag operation

Krzysztof Krysiński 2 years ago
parent
commit
f566172480

+ 1 - 1
src/PixiEditor.UpdateInstaller/Directory.Build.props

@@ -1,6 +1,6 @@
 <Project>
 <Project>
   <PropertyGroup>
   <PropertyGroup>
     <Nullable>enable</Nullable>
     <Nullable>enable</Nullable>
-    <AvaloniaVersion>11.0.0</AvaloniaVersion>
+    <AvaloniaVersion>11.0.3</AvaloniaVersion>
   </PropertyGroup>
   </PropertyGroup>
 </Project>
 </Project>

+ 2 - 2
src/PixiEditor.Zoombox/Operations/ZoomDragOperation.cs

@@ -24,7 +24,7 @@ internal class ZoomDragOperation : IDragOperation
 
 
     public void Start(PointerEventArgs e)
     public void Start(PointerEventArgs e)
     {
     {
-        screenScaleOrigin = Zoombox.ToVecD(e.GetPosition(parent.mainGrid));
+        screenScaleOrigin = Zoombox.ToVecD(e.GetPosition(parent.mainCanvas));
         scaleOrigin = parent.ToZoomboxSpace(screenScaleOrigin);
         scaleOrigin = parent.ToZoomboxSpace(screenScaleOrigin);
         originalScale = parent.Scale;
         originalScale = parent.Scale;
         capturedPointer = e.Pointer;
         capturedPointer = e.Pointer;
@@ -33,7 +33,7 @@ internal class ZoomDragOperation : IDragOperation
 
 
     public void Update(PointerEventArgs e)
     public void Update(PointerEventArgs e)
     {
     {
-        Point curScreenPos = e.GetPosition(parent.mainGrid);
+        Point curScreenPos = e.GetPosition(parent.mainCanvas);
         double deltaX = curScreenPos.X - screenScaleOrigin.X;
         double deltaX = curScreenPos.X - screenScaleOrigin.X;
         double deltaPower = deltaX / 10.0;
         double deltaPower = deltaX / 10.0;
 
 

+ 5 - 5
src/PixiEditor.Zoombox/Zoombox.axaml.cs

@@ -292,7 +292,7 @@ public partial class Zoombox : UserControl, INotifyPropertyChanged
         FlipX = false;
         FlipX = false;
         FlipY = false;
         FlipY = false;
         Scale = 1 / scaleFactor;
         Scale = 1 / scaleFactor;
-        Center = newSize / 2;
+        Center = newSize / 2 * scaleFactor;
     }
     }
 
 
     public void ZoomIntoCenter(double delta)
     public void ZoomIntoCenter(double delta)
@@ -300,11 +300,11 @@ public partial class Zoombox : UserControl, INotifyPropertyChanged
         ZoomInto(new VecD(mainCanvas.Bounds.Width / 2, mainCanvas.Bounds.Height / 2), delta);
         ZoomInto(new VecD(mainCanvas.Bounds.Width / 2, mainCanvas.Bounds.Height / 2), delta);
     }
     }
 
 
-    public void ZoomInto(VecD mousePos, double delta)
+    public void ZoomInto(VecD position, double delta)
     {
     {
         if (delta == 0)
         if (delta == 0)
             return;
             return;
-        VecD oldZoomboxMousePos = ToZoomboxSpace(mousePos);
+        VecD oldZoomboxPosition = ToZoomboxSpace(position);
 
 
         int curIndex = GetClosestRoundZoomValueIndex(Scale);
         int curIndex = GetClosestRoundZoomValueIndex(Scale);
         int nextIndex = curIndex;
         int nextIndex = curIndex;
@@ -316,8 +316,8 @@ public partial class Zoombox : UserControl, INotifyPropertyChanged
         newScale = Math.Clamp(newScale, MinScale, MaxScale);
         newScale = Math.Clamp(newScale, MinScale, MaxScale);
         Scale = newScale;
         Scale = newScale;
 
 
-        VecD newZoomboxMousePos = ToZoomboxSpace(mousePos);
-        VecD deltaCenter = oldZoomboxMousePos - newZoomboxMousePos;
+        VecD newZoomboxMousePosition = ToZoomboxSpace(position);
+        VecD deltaCenter = oldZoomboxPosition - newZoomboxMousePosition;
         Center += deltaCenter;
         Center += deltaCenter;
     }
     }