Skip to content

Commit 811e893

Browse files
committed
ViewerCanvas: fixed: could not follow zoomed point if zooming quickly
1 parent f0eb37e commit 811e893

File tree

1 file changed

+30
-19
lines changed

1 file changed

+30
-19
lines changed

Source/Components/ImageGlass.Views/ViewerCanvas.cs

Lines changed: 30 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,6 @@ public partial class ViewerCanvas : DXCanvas
108108
private AnimatorSource _animatorSource = AnimatorSource.None;
109109
private ImgAnimator? _imgAnimator = null;
110110
private AnimationSource _animationSource = AnimationSource.None;
111-
private bool _shouldRecalculateDrawingRegion = true;
112111

113112
// Navigation buttons
114113
private DXButtonStates _navLeftState = DXButtonStates.Normal;
@@ -175,7 +174,9 @@ public int PaddingLeft
175174
set
176175
{
177176
Padding = new Padding(value, Padding.Top, Padding.Right, Padding.Bottom);
178-
_shouldRecalculateDrawingRegion = true;
177+
178+
// update drawing regions
179+
CalculateDrawingRegion();
179180
Refresh(!_isManualZoom);
180181
}
181182
}
@@ -191,7 +192,9 @@ public int PaddingTop
191192
set
192193
{
193194
Padding = new Padding(Padding.Left, value, Padding.Right, Padding.Bottom);
194-
_shouldRecalculateDrawingRegion = true;
195+
196+
// update drawing regions
197+
CalculateDrawingRegion();
195198
Refresh(!_isManualZoom);
196199
}
197200
}
@@ -207,7 +210,9 @@ public int PaddingRight
207210
set
208211
{
209212
Padding = new Padding(Padding.Left, Padding.Top, value, Padding.Bottom);
210-
_shouldRecalculateDrawingRegion = true;
213+
214+
// update drawing regions
215+
CalculateDrawingRegion();
211216
Refresh(!_isManualZoom);
212217
}
213218
}
@@ -223,7 +228,9 @@ public int PaddingBottom
223228
set
224229
{
225230
Padding = new Padding(Padding.Left, Padding.Top, Padding.Right, value);
226-
_shouldRecalculateDrawingRegion = true;
231+
232+
// update drawing regions
233+
CalculateDrawingRegion();
227234
Refresh(!_isManualZoom);
228235
}
229236
}
@@ -1477,7 +1484,8 @@ protected override void OnMouseLeave(EventArgs e)
14771484

14781485
protected override void OnResize(EventArgs e)
14791486
{
1480-
_shouldRecalculateDrawingRegion = true;
1487+
// update drawing regions
1488+
CalculateDrawingRegion();
14811489

14821490
// redraw the control on resizing if it's not manual zoom
14831491
if (IsReady && Source != ImageSource.Null && !_isManualZoom)
@@ -1545,10 +1553,6 @@ protected override void OnRender(DXGraphics g)
15451553
g.DrawRectangle(ClientRectangle, 0, Color.Transparent, BackColor);
15461554
}
15471555

1548-
1549-
// update drawing regions
1550-
CalculateDrawingRegion();
1551-
15521556
// checkerboard background
15531557
DrawCheckerboardLayer(g);
15541558

@@ -1633,7 +1637,7 @@ protected override void OnRender(DXGraphics g)
16331637
/// </summary>
16341638
protected virtual void CalculateDrawingRegion()
16351639
{
1636-
if (Source == ImageSource.Null || _shouldRecalculateDrawingRegion is false) return;
1640+
if (Source == ImageSource.Null) return;
16371641

16381642
var zoomX = _zoommedPoint.X;
16391643
var zoomY = _zoommedPoint.Y;
@@ -1711,8 +1715,6 @@ protected virtual void CalculateDrawingRegion()
17111715
_yOut = true;
17121716
_srcRect.Y = 0;
17131717
}
1714-
1715-
_shouldRecalculateDrawingRegion = false;
17161718
}
17171719

17181720

@@ -2143,7 +2145,9 @@ public void SetZoomFactor(float zoomValue, bool isManualZoom)
21432145
return;
21442146
}
21452147

2146-
_shouldRecalculateDrawingRegion = true;
2148+
// update drawing regions
2149+
CalculateDrawingRegion();
2150+
21472151
Invalidate();
21482152

21492153
OnZoomChanged?.Invoke(this, new ZoomEventArgs()
@@ -2219,8 +2223,9 @@ public void SetZoomMode(ZoomMode? mode = null, bool isManualZoom = false, bool z
22192223
_zoomMode = zoomMode;
22202224
_zoomFactor = CalculateZoomFactor(zoomMode, SourceWidth, SourceHeight, Width, Height);
22212225
_isManualZoom = isManualZoom;
2222-
_shouldRecalculateDrawingRegion = true;
22232226

2227+
// update drawing regions
2228+
CalculateDrawingRegion();
22242229

22252230
// use webview
22262231
if (UseWebview2)
@@ -2390,9 +2395,11 @@ public bool ZoomToPoint(float factor, PointF? point = null, bool requestRerender
23902395
if (_zoomFactor != newZoomFactor)
23912396
{
23922397
_zoomFactor = Math.Min(MaxZoom, Math.Max(newZoomFactor, MinZoom));
2393-
_shouldRecalculateDrawingRegion = true;
23942398
_isManualZoom = true;
23952399

2400+
// update drawing regions
2401+
CalculateDrawingRegion();
2402+
23962403
// if using Webview2
23972404
if (UseWebview2)
23982405
{
@@ -2499,10 +2506,12 @@ public bool ZoomByDeltaToPoint(float delta, PointF? point = null,
24992506

25002507
_oldZoomFactor = _zoomFactor;
25012508
_zoomFactor = newZoomFactor;
2502-
_shouldRecalculateDrawingRegion = true;
25032509
_isManualZoom = true;
25042510
_zoommedPoint = location.ToVector2();
25052511

2512+
// update drawing regions
2513+
CalculateDrawingRegion();
2514+
25062515
if (UseWebview2)
25072516
{
25082517
var newDelta = _zoomFactor / _oldZoomFactor;
@@ -2625,8 +2634,6 @@ public bool PanTo(float hDistance, float vDistance, bool requestRerender = true)
26252634
}
26262635

26272636
_zoommedPoint = new();
2628-
_shouldRecalculateDrawingRegion = true;
2629-
26302637

26312638
if (_xOut == false)
26322639
{
@@ -2645,6 +2652,10 @@ public bool PanTo(float hDistance, float vDistance, bool requestRerender = true)
26452652
// emit panning event
26462653
Panning?.Invoke(this, new PanningEventArgs(loc, new PointF(_panHostFromPoint)));
26472654

2655+
2656+
// update drawing regions
2657+
CalculateDrawingRegion();
2658+
26482659
if (requestRerender)
26492660
{
26502661
Invalidate();

0 commit comments

Comments
 (0)