Community
Participate
Working Groups
Please launch the attached snippet (tested on Windows 10), select from the end of the first line until the end and delete (End, Ctrl+Shift+End, Del). The result is a corrupt StyledText.
Created attachment 285272 [details] Snippet to reproduce
Created attachment 285273 [details] Screenrecording
This bug is a regression of commit 62873ac2: Bug 569626 - [StyledText] variable line height moves visible area
After that optical corruption, resize the shell and you will get following exception: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 21 at org.eclipse.swt.custom.StyledTextRenderer.getLineSize(StyledTextRenderer.java:312) at org.eclipse.swt.custom.StyledTextRenderer.getLineHeight(StyledTextRenderer.java:667) at org.eclipse.swt.custom.StyledTextRenderer.getLineHeight(StyledTextRenderer.java:664) at org.eclipse.swt.custom.StyledText.getAvailableHeightAbove(StyledText.java:1872) at org.eclipse.swt.custom.StyledText.claimBottomFreeSpace(StyledText.java:1672) at org.eclipse.swt.custom.StyledText.handleResize(StyledText.java:6347) at org.eclipse.swt.custom.StyledText.lambda$installListeners$1(StyledText.java:5802) 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:1037) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1061) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1042) at org.eclipse.swt.widgets.Control.WM_SIZE(Control.java:5464) at org.eclipse.swt.widgets.Scrollable.WM_SIZE(Scrollable.java:355) 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:4839) 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:5694) at org.eclipse.swt.widgets.Canvas.WM_WINDOWPOSCHANGED(Canvas.java:451) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4852) 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.SetWindowPos(Native Method) at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3276) at org.eclipse.swt.widgets.Composite.setBoundsInPixels(Composite.java:1054) at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3237) at org.eclipse.swt.widgets.Control.setBoundsInPixels(Control.java:3233) at org.eclipse.swt.widgets.Control.setBounds(Control.java:3228) at org.eclipse.swt.layout.FillLayout.layout(FillLayout.java:216) at org.eclipse.swt.widgets.Composite.updateLayout(Composite.java:1328) at org.eclipse.swt.widgets.Composite.WM_SIZE(Composite.java:1733) at org.eclipse.swt.widgets.Canvas.WM_SIZE(Canvas.java:444) at org.eclipse.swt.widgets.Decorations.WM_SIZE(Decorations.java:1646) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4839) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2142) 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.Shell.callWindowProc(Shell.java:508) at org.eclipse.swt.widgets.Control.WM_WINDOWPOSCHANGED(Control.java:5694) at org.eclipse.swt.widgets.Canvas.WM_WINDOWPOSCHANGED(Canvas.java:451) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4852) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2142) 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.Shell.callWindowProc(Shell.java:508) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4863) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2142) 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.Shell.callWindowProc(Shell.java:508) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4863) at org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:340) at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java:1480) at org.eclipse.swt.widgets.Shell.windowProc(Shell.java:2142) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4930) at org.eclipse.swt.internal.win32.OS.DispatchMessage(Native Method) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3624) at StyledTextRegression.main(StyledTextRegression.java:31)
Mickael, could you please check this one?
This is somehow a duplicate of bug 570208. Let's keep both open for the moment, as this one is more precise but the other one is more general and includes other issues.
This can be generalized to text modifications above visible area in case of variable height (line spacing, wrap...) cause wrong coordinates and further redraw issues
New Gerrit change created: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/174798
Gerrit change https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/174798 was merged to [master]. Commit: http://git.eclipse.org/c/platform/eclipse.platform.swt.git/commit/?id=bc0ff16b2bfd9283727a8a7d104af1872d1bbbbf
Mickael, thanks for the quick fix. I couldn't reproduce the issue any more, so the bug could be marked as fixed from my side.
Thanks for the detailed report and testing Thomas!