Browse Source

Better, still not good

flabbet 4 years ago
parent
commit
1a557b1cd8

+ 8 - 1
PixiEditor/Models/Tools/Tools/MoveViewportTool.cs

@@ -8,6 +8,7 @@ namespace PixiEditor.Models.Tools.Tools
     public class MoveViewportTool : ReadonlyTool
     {
         public override ToolType ToolType => ToolType.MoveViewport;
+        private Point _clickPoint;
 
         public MoveViewportTool()
         {
@@ -15,12 +16,18 @@ namespace PixiEditor.Models.Tools.Tools
             Cursor = Cursors.SizeAll;
         }
 
+        public override void OnMouseDown(MouseEventArgs e)
+        {
+             _clickPoint = MousePositionConverter.GetCursorPosition();
+        }
+
         public override void OnMouseMove(MouseEventArgs e)
         {
             if (e.LeftButton == MouseButtonState.Pressed)
             {
                 var point = MousePositionConverter.GetCursorPosition();
-                ViewModelMain.Current.ViewportPosition = new System.Windows.Point(point.X, point.Y);
+                ViewModelMain.Current.ViewportPosition = new System.Windows.Point(point.X - _clickPoint.X, 
+                    point.Y - _clickPoint.Y);
             }
         }
 

+ 1 - 1
PixiEditor/Views/MainDrawingPanel.xaml

@@ -11,7 +11,7 @@
              d:DesignHeight="450" d:DesignWidth="800" x:Name="mainDrawingPanel" PreviewMouseWheel="Zoombox_MouseWheel">
     <xctk:Zoombox PreviewMouseDown="Zoombox_PreviewMouseDown" Cursor="{Binding Cursor}" Name="Zoombox" KeepContentInBounds="True"
                   Loaded="Zoombox_Loaded" IsAnimated="False"
-                  CurrentViewChanged="Zoombox_CurrentViewChanged" DragModifiers="Shift" ZoomModifiers="None">
+                  CurrentViewChanged="Zoombox_CurrentViewChanged" DragModifiers="Blocked" ZoomModifiers="None">
         <i:Interaction.Triggers>
             <i:EventTrigger EventName="MouseMove">
                 <i:InvokeCommandAction Command="{Binding MouseMoveCommand, ElementName=mainDrawingPanel, Mode=OneWay}" />

+ 10 - 3
PixiEditor/Views/MainDrawingPanel.xaml.cs

@@ -78,9 +78,13 @@ namespace PixiEditor.Views
                 panel.Zoombox.Position = default;
                 return;
             }
-            Point relativePoint = panel.Zoombox.PointFromScreen((Point)e.NewValue);       
-            panel.Zoombox.Position = new Point(panel.Zoombox.Position.X + relativePoint.X, 
-                panel.Zoombox.Position.Y + relativePoint.Y);
+            Point absClickPoint = panel.Zoombox.PointToScreen(panel.ClickPosition);
+            Point newVal = (Point)e.NewValue;
+            Point relativePoint = panel.Zoombox.PointFromScreen(
+                new Point(absClickPoint.X + newVal.X, absClickPoint.Y + newVal.Y));  
+            panel.Zoombox.Position = new Point(Math.Clamp(panel.Zoombox.Position.X + relativePoint.X, 0, panel.Zoombox.ActualWidth),
+                Math.Clamp(panel.Zoombox.Position.Y + relativePoint.Y, 0, panel.Zoombox.ActualHeight));
+            panel.LastPoint = panel.Zoombox.Position;
         }
 
         public bool Center
@@ -140,6 +144,8 @@ namespace PixiEditor.Views
         }
 
         public double ClickScale;
+        public Point ClickPosition;
+        public Point LastPoint;
 
         public MainDrawingPanel()
         {
@@ -198,6 +204,7 @@ namespace PixiEditor.Views
         {
             IsUsingZoomTool = ViewModelMain.Current.BitmapManager.SelectedTool is ZoomTool;
             Mouse.Capture((IInputElement)sender, CaptureMode.SubTree);
+            ClickPosition = LastPoint;
             SetClickValues();
         }