Revert "Revert "Bug 541415 - setLineVerticalIndent makes getTopPixel fail""
Make setLineVerticalIndent reset the outdated verticalOffsetPixel when
the indent affects the scroll location, so vertifactOffset gets
recomputed later when necessary.
This reverts commit 33ab81d8513fb320fbe759c8b766299f584d5c3f.
Change-Id: I62a23f7f538090477ab162e3df3889c0af5060e1
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
index 0de1267..ed4a25a 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
@@ -9401,6 +9401,9 @@
}
setVariableLineHeight();
int oldBottom = getLinePixel(lineIndex + 1);
+ if (oldBottom <= getClientArea().height) {
+ verticalScrollOffset = -1;
+ }
renderer.setLineVerticalIndent(lineIndex, verticalLineIndent);
resetCache(lineIndex, 1);
int newBottom = getLinePixel(lineIndex + 1);
diff --git a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
index 7306481..bd67ad3 100644
--- a/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
+++ b/tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_custom_StyledText.java
@@ -24,6 +24,8 @@
import java.util.HashMap;
import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.BidiSegmentListener;
@@ -4823,6 +4825,17 @@
}
@Test
+public void test_verticalIndent_changeRelativeBounds() {
+ String _5000lines = IntStream.range(1, 5001).mapToObj(n -> Integer.toString(n)).collect(Collectors.joining("\n"));
+ text.setText(_5000lines);
+ text.setSize(500, 200);
+ text.invokeAction(ST.TEXT_END);
+ text.setLineVerticalIndent(text.getContent().getLineCount() - 1, 10);
+ text.invokeAction(ST.TEXT_START);
+ assertEquals(0, text.getTopPixel());
+}
+
+@Test
public void test_setWordWrapZ(){
String testString = "Line1\nLine2";