Skip to content

Commit 4fc1aaa

Browse files
Fix LineNumberRuler glitch from incorrect listener order on zoom
This change ensures that zoom change events occur *after* DPI zoom registry listeners have handled all necessary resize adjustments, particularly for styled text and its associated line number ruler. Previously, zoom changes triggered buffer image invalidation prematurely, leading to multiple redundant resize events. This caused incorrect top pixel calculations when the scrollbar was adjusted after zoom, resulting in rendering glitches during redraws of line numbers. By deferring the SWT.ZoomChanged event until all DPI-related resize listeners have completed, we avoid early image invalidation. Now, the redraw uses a correctly invalidated buffer image, and top pixel calculations are accurate, eliminating rendering artifacts. Tested by simulating zoom changes and full scroll-down scenarios—line number ruler now renders consistently without glitches.
1 parent 8b45dd8 commit 4fc1aaa

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/internal/DPIZoomChangeRegistry.java

+5-1
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,11 @@ public static void applyChange(Widget widget, int newZoom, float scalingFactor)
6161
event.widget = widget;
6262
event.detail = newZoom;
6363
event.doit = true;
64-
widget.notifyListeners(SWT.ZoomChanged, event);
64+
widget.getDisplay().asyncExec(() -> {
65+
if(!widget.isDisposed()) {
66+
widget.notifyListeners(SWT.ZoomChanged, event);
67+
};
68+
});
6569
}
6670

6771
public static void registerHandler(DPIZoomChangeHandler zoomChangeVisitor, Class<? extends Widget> clazzToRegisterFor) {

0 commit comments

Comments
 (0)