Community
Participate
Working Groups
I'm having a problem where a StyledText control gets an SWT.Paint event without the correct SWT.Resize event before, because of another SWT.Resize listener that triggers the paint. This is the stacktrace for the SWT.Paint event (the ... sections are our application code, hard to press into a snippet): at org.eclipse.swt.custom.StyledText.handlePaint(StyledText.java:6262) at org.eclipse.swt.custom.StyledText.lambda$installListeners$1(StyledText.java:5801) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4209) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1043) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1067) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1052) at org.eclipse.swt.widgets.Composite.WM_PAINT(Composite.java:1533) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4817) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4938) at org.eclipse.swt.internal.win32.OS.RedrawWindow(Native Method) at org.eclipse.swt.widgets.Control.update(Control.java:4604) at org.eclipse.swt.widgets.Control.update(Control.java:4597) ... at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4209) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1043) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1067) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1048) at org.eclipse.swt.widgets.Control.WM_SIZE(Control.java:5462) at org.eclipse.swt.widgets.Scrollable.WM_SIZE(Scrollable.java:360) at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:1722) at org.eclipse.swt.widgets.Canvas.WM_SIZE(Canvas.java:444) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4837) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4930) at org.eclipse.swt.internal.win32.OS.DefWindowProc(Native Method) at org.eclipse.swt.widgets.Scrollable.callWindowProc(Scrollable.java:91) at org.eclipse.swt.widgets.Control.WM_WINDOWPOSCHANGED(Control.java:5692) at org.eclipse.swt.widgets.Canvas.WM_WINDOWPOSCHANGED(Canvas.java:451) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4850) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4938) at org.eclipse.swt.internal.win32.OS.EndDeferWindowPos(Native Method) at org.eclipse.swt.widgets.Composite.resizeChildren(Composite.java:986) at org.eclipse.swt.widgets.Composite.resizeChildren(Composite.java:963) at org.eclipse.swt.widgets.Composite.setResizeChildren(Composite.java:1159) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1329) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1334) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1313) at org.eclipse.swt.widgets.Composite.setLayoutDeferred(Composite.java:1120) at org.eclipse.swt.widgets.Display.runDeferredLayouts(Display.java:4050) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3619) ... Currently, the StyledText caches the clientArea values received in the SWT.Resize event. Maybe in handlePaint it should get the actual values from getClientArea() instead of using the cached values? If course, in our SWT.Resize listener I could delay the further handling using display.asyncExec, but I consider such delays as bad code style.
Created attachment 286613 [details] Screenshots of such paint artefacts