void resetCache(int firstLine, int count) { int maxLineIndex = renderer.maxWidthLineIndex; renderer.reset(firstLine, count); renderer.calculateClientArea(); if (0 <= maxLineIndex && maxLineIndex < content.getLineCount()) { renderer.calculate(maxLineIndex, 1); } setScrollBars(true); if (!isFixedLineHeight()) { if (topIndex > firstLine) { verticalScrollOffset = -1; } renderer.calculateIdle(); } } /**
int getClusterPrevious(int offset, int lineIndex) { int lineOffset = content.getOffsetAtLine(lineIndex); TextLayout layout = renderer.getTextLayout(lineIndex); offset -= lineOffset; offset = layout.getPreviousOffset(offset, SWT.MOVEMENT_CLUSTER); offset += lineOffset; renderer.disposeTextLayout(layout); return offset; } /**
int getVerticalScrollOffset() { if (verticalScrollOffset == -1) { renderer.calculate(0, topIndex); int height = 0; for (int i = 0; i < topIndex; i++) { height += renderer.getLineHeight(i); } height -= topIndexY; verticalScrollOffset = height; } return verticalScrollOffset; } int getVisualLineIndex(TextLayout layout, int offsetInLine) {
renderer.copyInto(printerRenderer); fontData = styledText.getFont().getFontData()[0]; tabLength = styledText.tabLength; StyledTextEvent event = styledText.getLineBackgroundData(lineOffset, line); if (event != null && event.lineBackground != null) { printerRenderer.setLineBackground(i, 1, event.lineBackground); printerRenderer.setLineSegments(i, 1, event.segments); printerRenderer.setLineSegmentChars(i, 1, event.segmentsChars); printerRenderer.setLineIndent(i, 1, event.indent); printerRenderer.setLineAlignment(i, 1, event.alignment); printerRenderer.setLineJustify(i, 1, event.justify); printerRenderer.setLineBullet(i, 1, event.bullet); StyleRange[] styles = event.styles; if (styles != null && styles.length > 0) { printerRenderer.setStyleRanges(event.ranges, styles); resources = new HashMap<> (); for (int i = 0; i < lineCount; i++) { Color color = printerRenderer.getLineBackground(i, null); if (color != null) { if (printOptions.printLineBackground) { printerRenderer.setLineBackground(i, 1, printerColor); } else { printerRenderer.setLineBackground(i, 1, null);
if (wordWrap) { if (oldWidth != clientAreaWidth) { renderer.reset(0, content.getLineCount()); verticalScrollOffset = -1; renderer.calculateIdle(); super.redraw(); renderer.calculateClientArea(); setScrollBars(true); claimRightFreeSpace();
while (lineIndex < lineCount) { if (delta <= 0) break; delta -= renderer.getLineHeight(lineIndex++); if (lineIndex < lineCount && -delta + renderer.getLineHeight(lineIndex) <= clientAreaHeight - topMargin - bottomMargin) { topIndex = lineIndex; topIndexY = -delta; } else { topIndex = lineIndex - 1; topIndexY = -renderer.getLineHeight(topIndex) - delta; int lineIndex = topIndex; while (lineIndex > 0) { int lineHeight = renderer.getLineHeight(lineIndex - 1); if (delta + lineHeight > 0) break; delta += lineHeight; lineIndex--; if (lineIndex == 0 || -delta + renderer.getLineHeight(lineIndex) <= clientAreaHeight - topMargin - bottomMargin) { topIndex = lineIndex; topIndexY = - delta; } else { topIndex = lineIndex - 1; topIndexY = - renderer.getLineHeight(topIndex) - delta; int width = renderer.getWidth(); renderer.calculateClientArea(); if (width != renderer.getWidth()) { setScrollBars(false);
clipboard = new Clipboard(display); installDefaultContent(); renderer = new StyledTextRenderer(getDisplay(), this); renderer.setContent(content); renderer.setFont(getFont(), tabLength); ime = new IME(this, SWT.NONE); defaultCaret = new Caret(this, SWT.NONE);
selection = styledText.getSelectionRange(); printerRenderer = new StyledTextRenderer(printer, null); printerRenderer.setContent(copyContent(styledText.getContent())); cacheLineData(styledText);
renderer.setLineBackground(startLine, lineCount, background); } else { renderer.clearLineBackground(startLine, lineCount);
int rangeCount = styleCount << 1; int start = newRanges[0]; int modifyStart = getRangeIndex(start, -1, rangeCount), modifyEnd; boolean insert = modifyStart == rangeCount; if (!insert) { int end = newRanges[newRanges.length - 2] + newRanges[newRanges.length - 1]; modifyEnd = getRangeIndex(end, modifyStart - 1, rangeCount); insert = modifyStart == modifyEnd && ranges[modifyStart] >= end; addMerge(newRanges, newStyles, newRanges.length, modifyStart, modifyStart); return; int grow = addMerge(mergeRanges, mergeStyles, mergeCount, modifyStart, modifyEnd + modifyLast); rangeCount += grow; modifyStart = modifyEnd += grow; int modifyStart = getRangeIndex(start, -1, styleCount), modifyEnd; boolean insert = modifyStart == styleCount; if (!insert) { int end = newStyles[newStyles.length - 1].start + newStyles[newStyles.length - 1].length; modifyEnd = getRangeIndex(end, modifyStart - 1, styleCount); insert = modifyStart == modifyEnd && styles[modifyStart].start >= end; addMerge(newStyles, newStyles.length, modifyStart, modifyStart); return; int grow = addMerge(mergeStyles, mergeCount, modifyStart, modifyEnd + modifyLast); modifyStart = modifyEnd += grow;
int getLineHeight(int lineIndex) { if (lineHeight[lineIndex] == -1) { calculate(lineIndex, 1); } return lineHeight[lineIndex]; } int getLineIndent(int index, int defaultIndent) {
/** * Disposes of the resources and the <code>PrintRenderer</code>. */ void dispose() { if (gc != null) { gc.dispose(); gc = null; } if (resources != null) { Iterator<Resource> enumeration = resources.values().iterator(); while (enumeration.hasNext()) { Resource resource = enumeration.next(); resource.dispose(); } resources = null; } if (printerFont != null) { printerFont.dispose(); printerFont = null; } if (printerRenderer != null) { printerRenderer.dispose(); printerRenderer = null; } } void init() {
void setVariableLineHeight () { if (!fixedLineHeight) return; fixedLineHeight = false; renderer.calculateIdle(); } /**
/** * Adds a line background listener. A LineGetBackground event is sent by the * widget to determine the background color for a line. * * @param listener the listener * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT when listener is null</li> * </ul> */ public void addLineBackgroundListener(LineBackgroundListener listener) { checkWidget(); if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (!isListening(ST.LineGetBackground)) { renderer.clearLineBackground(0, content.getLineCount()); } addListener(ST.LineGetBackground, new StyledTextListener(listener)); } /**
/** * Adds a line style listener. A LineGetStyle event is sent by the widget to * determine the styles for a line. * * @param listener the listener * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT when listener is null</li> * </ul> */ public void addLineStyleListener(LineStyleListener listener) { checkWidget(); if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); if (!isListening(ST.LineGetStyle)) { setStyleRanges(0, 0, null, null, true); renderer.clearLineStyle(0, content.getLineCount()); } addListener(ST.LineGetStyle, new StyledTextListener(listener)); setCaretLocation(); } /**
renderer.copyInto(printerRenderer); fontData = styledText.getFont().getFontData()[0]; tabLength = styledText.tabLength; StyledTextEvent event = styledText.getLineBackgroundData(lineOffset, line); if (event != null && event.lineBackground != null) { printerRenderer.setLineBackground(i, 1, event.lineBackground); printerRenderer.setLineSegments(i, 1, event.segments); printerRenderer.setLineSegmentChars(i, 1, event.segmentsChars); printerRenderer.setLineIndent(i, 1, event.indent); printerRenderer.setLineAlignment(i, 1, event.alignment); printerRenderer.setLineJustify(i, 1, event.justify); printerRenderer.setLineBullet(i, 1, event.bullet); StyleRange[] styles = event.styles; if (styles != null && styles.length > 0) { printerRenderer.setStyleRanges(event.ranges, styles); resources = new HashMap<> (); for (int i = 0; i < lineCount; i++) { Color color = printerRenderer.getLineBackground(i, null); if (color != null) { if (printOptions.printLineBackground) { printerRenderer.setLineBackground(i, 1, printerColor); } else { printerRenderer.setLineBackground(i, 1, null);
if (wordWrap) { if (oldWidth != clientAreaWidth) { renderer.reset(0, content.getLineCount()); verticalScrollOffset = -1; renderer.calculateIdle(); super.redraw(); renderer.calculateClientArea(); setScrollBars(true); claimRightFreeSpace();
while (lineIndex < lineCount) { if (delta <= 0) break; delta -= renderer.getLineHeight(lineIndex++); if (lineIndex < lineCount && -delta + renderer.getLineHeight(lineIndex) <= clientAreaHeight - topMargin - bottomMargin) { topIndex = lineIndex; topIndexY = -delta; } else { topIndex = lineIndex - 1; topIndexY = -renderer.getLineHeight(topIndex) - delta; int lineIndex = topIndex; while (lineIndex > 0) { int lineHeight = renderer.getLineHeight(lineIndex - 1); if (delta + lineHeight > 0) break; delta += lineHeight; lineIndex--; if (lineIndex == 0 || -delta + renderer.getLineHeight(lineIndex) <= clientAreaHeight - topMargin - bottomMargin) { topIndex = lineIndex; topIndexY = - delta; } else { topIndex = lineIndex - 1; topIndexY = - renderer.getLineHeight(topIndex) - delta; int width = renderer.getWidth(); renderer.calculateClientArea(); if (width != renderer.getWidth()) { setScrollBars(false);
clipboard = new Clipboard(display); installDefaultContent(); renderer = new StyledTextRenderer(getDisplay(), this); renderer.setContent(content); renderer.setFont(getFont(), tabLength); ime = new IME(this, SWT.NONE); defaultCaret = new Caret(this, SWT.NONE);
int getVerticalScrollOffset() { if (verticalScrollOffset == -1) { renderer.calculate(0, topIndex); int height = 0; for (int i = 0; i < topIndex; i++) { height += renderer.getLineHeight(i); } height -= topIndexY; verticalScrollOffset = height; } return verticalScrollOffset; } int getVisualLineIndex(TextLayout layout, int offsetInLine) {