diff options
author | Felipe Heidrich <fheidric> | 2008-10-16 18:50:14 +0000 |
---|---|---|
committer | Felipe Heidrich <fheidric> | 2008-10-16 18:50:14 +0000 |
commit | bc7f8339619528151102bb0d9962270d28e28aed (patch) | |
tree | 95632b531863acdbda8edeb57dc5afeef3eae59a /bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledTextRenderer.java | |
parent | f08ba928393ae11e2b54ef7eac4741a87a2ca56a (diff) | |
download | eclipse.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.java | 22 |
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; } |