Browse Source

Previewer: simplified translate operations

MarcinZiabek 3 years ago
parent
commit
d24d887a3a
2 changed files with 13 additions and 16 deletions
  1. 9 12
      QuestPDF.Previewer/InteractiveCanvas.cs
  2. 4 4
      QuestPDF.Previewer/PreviewerControl.cs

+ 9 - 12
QuestPDF.Previewer/InteractiveCanvas.cs

@@ -23,24 +23,23 @@ class InteractiveCanvas : ICustomDrawOperation
     private const float MaxScale = 10f;
     private const float MaxScale = 10f;
 
 
     private const float PageSpacing = 25f;
     private const float PageSpacing = 25f;
-    private const float SafeZone = InnerGradientSize;
+    private const float SafeZone = 25f;
 
 
     public float TotalPagesHeight => Pages.Sum(x => x.Size.Height) + (Pages.Count - 1) * PageSpacing;
     public float TotalPagesHeight => Pages.Sum(x => x.Size.Height) + (Pages.Count - 1) * PageSpacing;
     public float TotalHeight => TotalPagesHeight + SafeZone * 2 / Scale;
     public float TotalHeight => TotalPagesHeight + SafeZone * 2 / Scale;
     public float MaxWidth => Pages.Any() ? Pages.Max(x => x.Size.Width) : 0;
     public float MaxWidth => Pages.Any() ? Pages.Max(x => x.Size.Width) : 0;
     
     
-    public float MaxTranslateY => -(Height / 2 - SafeZone) / Scale;
-    public float MinTranslateY => (Height / 2 + SafeZone) / Scale - TotalHeight;
+    public float MaxTranslateY => TotalHeight - Height / Scale;
 
 
     public float ScrollPercentY
     public float ScrollPercentY
     {
     {
         get
         get
         {
         {
-            return Math.Clamp(1 - (TranslateY - MinTranslateY) / (MaxTranslateY - MinTranslateY), 0, 1);
+            return TranslateY / MaxTranslateY;
         }
         }
         set
         set
         {
         {
-            TranslateY = (1 - value) * (MaxTranslateY - MinTranslateY) + MinTranslateY;
+            TranslateY = value * MaxTranslateY;
         }
         }
     }
     }
 
 
@@ -66,7 +65,7 @@ class InteractiveCanvas : ICustomDrawOperation
         if (TotalPagesHeight * Scale > Height)
         if (TotalPagesHeight * Scale > Height)
         {
         {
             TranslateY = Math.Min(TranslateY, MaxTranslateY);
             TranslateY = Math.Min(TranslateY, MaxTranslateY);
-            TranslateY = Math.Max(TranslateY, MinTranslateY);
+            TranslateY = Math.Max(TranslateY, 0);
         }
         }
         else
         else
         {
         {
@@ -128,10 +127,10 @@ class InteractiveCanvas : ICustomDrawOperation
 
 
         var originalMatrix = canvas.TotalMatrix;
         var originalMatrix = canvas.TotalMatrix;
 
 
-        canvas.Translate(Width / 2, Height / 2);
+        canvas.Translate(Width / 2, 0);
         
         
         canvas.Scale(Scale);
         canvas.Scale(Scale);
-        canvas.Translate(TranslateX, TranslateY);
+        canvas.Translate(TranslateX, -TranslateY + SafeZone / Scale);
 
 
         foreach (var page in Pages)
         foreach (var page in Pages)
         {
         {
@@ -142,9 +141,7 @@ class InteractiveCanvas : ICustomDrawOperation
         }
         }
 
 
         canvas.SetMatrix(originalMatrix);
         canvas.SetMatrix(originalMatrix);
-        
-        if (TranslateY < 0)
-            DrawInnerGradient(canvas);
+        DrawInnerGradient(canvas);
     }
     }
     
     
     public void Dispose() { }
     public void Dispose() { }
@@ -178,7 +175,7 @@ class InteractiveCanvas : ICustomDrawOperation
 
 
     #region inner viewport gradient
     #region inner viewport gradient
 
 
-    private const int InnerGradientSize = 24;
+    private const int InnerGradientSize = (int)SafeZone;
     private static readonly SKColor InnerGradientColor = SKColor.Parse("#666");
     private static readonly SKColor InnerGradientColor = SKColor.Parse("#666");
     
     
     private void DrawInnerGradient(SKCanvas canvas)
     private void DrawInnerGradient(SKCanvas canvas)

+ 4 - 4
QuestPDF.Previewer/PreviewerControl.cs

@@ -61,15 +61,15 @@ namespace QuestPDF.Previewer
             if ((e.KeyModifiers & KeyModifiers.Control) != 0)
             if ((e.KeyModifiers & KeyModifiers.Control) != 0)
             {
             {
                 var scaleFactor = 1 + e.Delta.Y / 10f;
                 var scaleFactor = 1 + e.Delta.Y / 10f;
-                var point = Bounds.Center - Bounds.TopLeft - e.GetPosition(this);
+                var point = new Point(Bounds.Center.X, Bounds.Top) - e.GetPosition(this);
                 
                 
-                InteractiveCanvas.ZoomToPoint((float)point.X, (float)point.Y, (float)scaleFactor);
+                InteractiveCanvas.ZoomToPoint((float)point.X, -(float)point.Y, (float)scaleFactor);
             }
             }
                 
                 
             if (e.KeyModifiers == KeyModifiers.None)
             if (e.KeyModifiers == KeyModifiers.None)
             {
             {
                 var translation = (float)e.Delta.Y * 25;
                 var translation = (float)e.Delta.Y * 25;
-                InteractiveCanvas.TranslateWithCurrentScale(0, translation);
+                InteractiveCanvas.TranslateWithCurrentScale(0, -translation);
             }
             }
                 
                 
             InvalidateVisual();
             InvalidateVisual();
@@ -86,7 +86,7 @@ namespace QuestPDF.Previewer
             {
             {
                 var currentPosition = e.GetPosition(this);
                 var currentPosition = e.GetPosition(this);
                 var translation = currentPosition - MousePosition;
                 var translation = currentPosition - MousePosition;
-                InteractiveCanvas.TranslateWithCurrentScale((float)translation.X, (float)translation.Y);
+                InteractiveCanvas.TranslateWithCurrentScale((float)translation.X, -(float)translation.Y);
                 
                 
                 InvalidateVisual();
                 InvalidateVisual();
             }
             }