summaryrefslogtreecommitdiffstats
path: root/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java
diff options
context:
space:
mode:
authorFelipe Heidrich <fheidric>2008-10-16 18:50:14 +0000
committerFelipe Heidrich <fheidric>2008-10-16 18:50:14 +0000
commitbc7f8339619528151102bb0d9962270d28e28aed (patch)
tree95632b531863acdbda8edeb57dc5afeef3eae59a /bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java
parentf08ba928393ae11e2b54ef7eac4741a87a2ca56a (diff)
downloadeclipse.platform.swt-bc7f8339619528151102bb0d9962270d28e28aed.tar.gz
eclipse.platform.swt-bc7f8339619528151102bb0d9962270d28e28aed.tar.xz
eclipse.platform.swt-bc7f8339619528151102bb0d9962270d28e28aed.zip
new fix for Bug 212851
also fixes Bug 251089 - StyledText#copy() fails in RTFWriter with AIOOBE
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java')
-rw-r--r--bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java22
1 files changed, 6 insertions, 16 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java
index 0dd84ffa18..273beaaca5 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java
@@ -575,6 +575,7 @@ int[] getRanges(int start, int length) {
if (rangeStart >= rangeCount) return null;
if (ranges[rangeStart] > end) return null;
int rangeEnd = Math.min(rangeCount - 2, getRangeIndex(end, rangeStart - 1, rangeCount));
+ if (ranges[rangeEnd] > end) rangeEnd = Math.max(rangeStart, rangeEnd - 2);
newRanges = new int[rangeEnd - rangeStart + 2];
System.arraycopy(ranges, rangeStart, newRanges, 0, newRanges.length);
} else {
@@ -587,20 +588,14 @@ int[] getRanges(int start, int length) {
StyleRange style = styles[i];
newRanges[j] = style.start;
newRanges[j + 1] = style.length;
- }
+ }
}
if (start > newRanges[0]) {
newRanges[1] = newRanges[0] + newRanges[1] - start;
newRanges[0] = start;
}
if (end < newRanges[newRanges.length - 2] + newRanges[newRanges.length - 1] - 1) {
- if (end < newRanges[newRanges.length - 2]) {
- int[] tmp = new int[newRanges.length - 2];
- System.arraycopy(newRanges, 0, tmp, 0, newRanges.length - 2);
- newRanges = tmp;
- } else {
- newRanges[newRanges.length - 1] = end - newRanges[newRanges.length - 2] + 1;
- }
+ newRanges[newRanges.length - 1] = end - newRanges[newRanges.length - 2] + 1;
}
return newRanges;
}
@@ -613,6 +608,7 @@ StyleRange[] getStyleRanges(int start, int length, boolean includeRanges) {
if (rangeStart >= rangeCount) return null;
if (ranges[rangeStart] > end) return null;
int rangeEnd = Math.min(rangeCount - 2, getRangeIndex(end, rangeStart - 1, rangeCount));
+ if (ranges[rangeEnd] > end) rangeEnd = Math.max(rangeStart, rangeEnd - 2);
newStyles = new StyleRange[((rangeEnd - rangeStart) >> 1) + 1];
if (includeRanges) {
for (int i = rangeStart, j = 0; i <= rangeEnd; i += 2, j++) {
@@ -639,14 +635,8 @@ StyleRange[] getStyleRanges(int start, int length, boolean includeRanges) {
}
style = newStyles[newStyles.length - 1];
if (end < style.start + style.length - 1) {
- if (end < style.start) {
- StyleRange[] tmp = new StyleRange[newStyles.length - 1];
- System.arraycopy(newStyles, 0, tmp, 0, newStyles.length - 1);
- newStyles = tmp;
- } else {
- if (!includeRanges || ranges == null) newStyles[newStyles.length - 1] = style = (StyleRange)style.clone();
- style.length = end - style.start + 1;
- }
+ if (!includeRanges || ranges == null) newStyles[newStyles.length - 1] = style = (StyleRange)style.clone();
+ style.length = end - style.start + 1;
}
return newStyles;
}