Skip to content

Commit 6e219e1

Browse files
committed
Revert "Corrected TextLayout to produce right number of lines when '\r\n'"
This reverts commit 6104592.
1 parent 22eece1 commit 6e219e1

File tree

3 files changed

+11
-183
lines changed

3 files changed

+11
-183
lines changed

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/TextLayout.java

+11-33
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242
*/
4343
public final class TextLayout extends Resource {
4444
Font font;
45-
String text, segmentsText, originalText;
45+
String text, segmentsText;
4646
int lineSpacingInPoints;
4747
int ascent, descent;
4848
int alignment;
@@ -309,7 +309,7 @@ public TextLayout (Device device) {
309309
styles[0] = new StyleItem();
310310
styles[1] = new StyleItem();
311311
stylesCount = 2;
312-
text = originalText = ""; //$NON-NLS-1$
312+
text = ""; //$NON-NLS-1$
313313
long[] ppv = new long[1];
314314
OS.OleInitialize(0);
315315
if (COM.CoCreateInstance(COM.CLSID_CMultiLanguage, 0, COM.CLSCTX_INPROC_SERVER, COM.IID_IMLangFontLink2, ppv) == OS.S_OK) {
@@ -2724,16 +2724,8 @@ private int getScaledVerticalIndent() {
27242724
*/
27252725
public TextStyle getStyle (int offset) {
27262726
checkLayout();
2727-
int length = originalText.length();
2727+
int length = text.length();
27282728
if (!(0 <= offset && offset < length)) SWT.error(SWT.ERROR_INVALID_RANGE);
2729-
int crCount = 0, subStringLength = originalText.subSequence(0, offset+1).length();
2730-
for (int crIndex = 0; crIndex < subStringLength; crIndex++) {
2731-
if (originalText.charAt(crIndex) == '\r') {
2732-
crCount++;
2733-
}
2734-
}
2735-
offset = offset - crCount;
2736-
27372729
for (int i=1; i<stylesCount; i++) {
27382730
if (styles[i].start > offset) {
27392731
return styles[i - 1].style;
@@ -2964,11 +2956,15 @@ StyleItem[] merge (long items, int itemCount) {
29642956
linkBefore = false;
29652957
}
29662958
char ch = segmentsText.charAt(start);
2967-
if (ch == '\r' && start + 1 < end) {
2968-
ch = segmentsText.charAt(start + 1);
2959+
switch (ch) {
2960+
case '\r':
2961+
case '\n':
2962+
item.lineBreak = true;
2963+
break;
2964+
case '\t':
2965+
item.tab = true;
2966+
break;
29692967
}
2970-
item.lineBreak = ch == '\n';
2971-
item.tab = ch == '\t';
29722968
if (itemLimit == -1) {
29732969
nextItemIndex = itemIndex + 1;
29742970
OS.MoveMemory(scriptItem, items + nextItemIndex * SCRIPT_ITEM.sizeof, SCRIPT_ITEM.sizeof);
@@ -3459,22 +3455,6 @@ public void setStyle (TextStyle style, int start, int end) {
34593455
int length = text.length();
34603456
if (length == 0) return;
34613457
if (start > end) return;
3462-
3463-
int startCount = 0;
3464-
int endCount = 0;
3465-
for (int crIndex = originalText.indexOf('\r', 0); crIndex >= 0; crIndex = originalText.indexOf('\r', crIndex + 1)) {
3466-
if (crIndex < start) {
3467-
++startCount;
3468-
} else if (crIndex <= end) {
3469-
++endCount;
3470-
} else {
3471-
break;
3472-
}
3473-
}
3474-
endCount = endCount + startCount;
3475-
start -= startCount;
3476-
end -= endCount;
3477-
34783458
start = Math.min(Math.max(0, start), length - 1);
34793459
end = Math.min(Math.max(0, end), length - 1);
34803460
int low = -1;
@@ -3588,8 +3568,6 @@ public void setTabs (int[] tabs) {
35883568
*/
35893569
public void setText (String text) {
35903570
checkLayout();
3591-
this.originalText = text;
3592-
text = text.replace("\r", "");
35933571
if (text == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
35943572
if (text.equals(this.text)) return;
35953573
freeRuns();

tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_TextLayout.java

-81
Original file line numberDiff line numberDiff line change
@@ -547,60 +547,6 @@ public void test_setStyle() {
547547
assertNull(layout.getStyle(4));
548548
assertNull(layout.getStyle(5));
549549
layout.dispose();
550-
551-
layout = new TextLayout (display);
552-
layout.setText("\rabc\ndef\r\rghi\n\njkl\r\nmno\r\n\r\npqr\r");
553-
layout.setStyle(s1, 0, 5);//abcd
554-
layout.setStyle (s2, 7, 10);//fg
555-
layout.setStyle (s3, 11, 18);//hijkl
556-
layout.setStyle (s4, 19, 24);//mno
557-
assertEquals(s1, layout.getStyle(0));
558-
assertEquals(s1, layout.getStyle(1));
559-
assertEquals(s1, layout.getStyle(3));
560-
assertEquals(s1, layout.getStyle(4));
561-
assertEquals(s1, layout.getStyle(5));
562-
563-
assertEquals(s2, layout.getStyle(7));
564-
assertEquals(s2, layout.getStyle(8));
565-
assertEquals(s2, layout.getStyle(9));
566-
assertEquals(s2, layout.getStyle(10));
567-
568-
assertEquals(s3, layout.getStyle(12));
569-
assertEquals(s3, layout.getStyle(13));
570-
assertEquals(s3, layout.getStyle(14));
571-
assertEquals(s3, layout.getStyle(15));
572-
573-
assertEquals(s4, layout.getStyle(19));
574-
assertEquals(s4, layout.getStyle(20));
575-
assertEquals(s4, layout.getStyle(22));
576-
assertEquals(s4, layout.getStyle(23));
577-
assertEquals(s4, layout.getStyle(24));
578-
579-
layout.setStyle (null, 0, 3);//abc
580-
assertNull(layout.getStyle(0));
581-
582-
layout.setStyle(s1, 0, 9);//abcdef
583-
assertEquals(s1, layout.getStyle(8));
584-
585-
layout.setStyle (s2, 1, 24);//abcdefghijklmno
586-
assertEquals(s2, layout.getStyle(7));
587-
assertEquals(s2, layout.getStyle(8));
588-
assertEquals(s2, layout.getStyle(14));
589-
assertEquals(s2, layout.getStyle(18));
590-
assertEquals(s2, layout.getStyle(22));
591-
assertEquals(s2, layout.getStyle(23));
592-
assertEquals(s2, layout.getStyle(24));
593-
594-
layout.setStyle (s3, 0, 30);//abcdefghijklmnopqr
595-
assertEquals(s3, layout.getStyle(0));
596-
assertEquals(s3, layout.getStyle(1));
597-
assertEquals(s3, layout.getStyle(30));
598-
599-
layout.setStyle (s4, 1, 30);//abcdefghijklmnopqr
600-
assertEquals(s4, layout.getStyle(1));
601-
assertEquals(s4, layout.getStyle(29));
602-
assertEquals(s4, layout.getStyle(30));
603-
layout.dispose();
604550
}
605551

606552
@Test
@@ -1273,31 +1219,4 @@ public void test_Bug579335_win32_StyledText_LongLine() {
12731219
font.dispose();
12741220
}
12751221
}
1276-
1277-
@Test
1278-
public void test_getLineCount() {
1279-
// Skipping this test for GTK and Cocoa as this pr #1320 applies only for
1280-
// windows platform.
1281-
// Without pr #1320(master) : Number of lines: 11 (for Cocoa it is : 10)
1282-
// Expected : Number of lines: 7 (for Cocoa it is : 10)
1283-
TextLayout layout = new TextLayout(display);
1284-
try {
1285-
String text = "\rabc\ndef\r\rghi\n\njkl\r\nmno\r\n\r\npqr\r";
1286-
layout.setText(text);
1287-
int lineCount = layout.getLineCount();
1288-
1289-
int expected = 0;
1290-
if (SwtTestUtil.isWindows) {
1291-
expected = 7;
1292-
} else if (SwtTestUtil.isCocoa) {
1293-
expected = 10;
1294-
} else if (SwtTestUtil.isGTK) {
1295-
expected = 11;
1296-
}
1297-
1298-
assertEquals(expected, lineCount);
1299-
} finally {
1300-
layout.dispose();
1301-
}
1302-
}
13031222
}

tests/org.eclipse.swt.tests/ManualTests/org/eclipse/swt/tests/manual/Issue184_CarriageReturnHandled.java

-69
This file was deleted.

0 commit comments

Comments
 (0)