Bug 570342 - [StyledText] text modifications above visible area in case of variable height (line spacing, wrap...) cause wrong coordinates and further redraw issues
Summary: [StyledText] text modifications above visible area in case of variable height...
Status: RESOLVED FIXED
Alias: None
Product: Platform
Classification: Eclipse Project
Component: SWT (show other bugs)
Version: 4.19   Edit
Hardware: All All
: P3 critical (vote)
Target Milestone: 4.19 M3   Edit
Assignee: Mickael Istria CLA
QA Contact:
URL:
Whiteboard:
Keywords: regression
Depends on:
Blocks: 569626 570208
  Show dependency tree
 
Reported: 2021-01-13 14:29 EST by Thomas Singer CLA
Modified: 2021-01-14 14:46 EST (History)
3 users (show)

See Also:


Attachments
Snippet to reproduce (878 bytes, text/plain)
2021-01-13 14:29 EST, Thomas Singer CLA
no flags Details
Screenrecording (18.47 KB, image/gif)
2021-01-13 14:34 EST, Thomas Singer CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Thomas Singer CLA 2021-01-13 14:29:14 EST
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.
Comment 1 Thomas Singer CLA 2021-01-13 14:29:40 EST
Created attachment 285272 [details]
Snippet to reproduce
Comment 2 Thomas Singer CLA 2021-01-13 14:34:40 EST
Created attachment 285273 [details]
Screenrecording
Comment 3 Thomas Singer CLA 2021-01-13 14:36:18 EST
This bug is a regression of commit 62873ac2:

Bug 569626 - [StyledText] variable line height moves visible area
Comment 4 Thomas Singer CLA 2021-01-13 14:41:45 EST
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)
Comment 5 Andrey Loskutov CLA 2021-01-13 14:54:41 EST
Mickael, could you please check this one?
Comment 6 Mickael Istria CLA 2021-01-13 14:57:57 EST
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.
Comment 7 Mickael Istria CLA 2021-01-13 16:43:36 EST
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
Comment 8 Eclipse Genie CLA 2021-01-14 04:57:40 EST
New Gerrit change created: https://git.eclipse.org/r/c/platform/eclipse.platform.swt/+/174798
Comment 10 Thomas Singer CLA 2021-01-14 14:26:18 EST
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.
Comment 11 Mickael Istria CLA 2021-01-14 14:46:39 EST
Thanks for the detailed report and testing Thomas!