int startY = getLinePixel(startLine) + topMargin;
int startY = getLinePixel(startLine);
void handleTextChanged(TextChangedEvent event) {	lineCache.textChanged(lastTextChangeStart, 		lastTextChangeNewLineCount, 		lastTextChangeReplaceLineCount);	setScrollBars(true);	// update selection/caret location after styles have been changed.	// otherwise any text measuring could be incorrect	// 	// also, this needs to be done after all scrolling. Otherwise, 	// selection redraw would be flushed during scroll which is wrong.	// in some cases new text would be drawn in scroll source area even 	// though the intent is to scroll it.	// fixes 1GB93QT	updateSelection(		lastTextChangeStart, 		lastTextChangeReplaceCharCount, 		lastTextChangeNewCharCount);			if (lastTextChangeReplaceLineCount > 0) {		// Only check for unused space when lines are deleted.		// Fixes 1GFL4LY		// Scroll up so that empty lines below last text line are used.		// Fixes 1GEYJM0		claimBottomFreeSpace();	}	if (lastTextChangeReplaceCharCount > 0) {		// fixes bug 8273		claimRightFreeSpace();	}	// do direct drawing if the text change is confined to a single line.	// optimization and fixes bug 13999. see also handleTextChanging.	if (lastTextChangeNewLineCount == 0 && lastTextChangeReplaceLineCount == 0) {		int startLine = content.getLineAtOffset(lastTextChangeStart);		int startY = getLinePixel(startLine) + topMargin;		int height = lineCache.getLineHeight(startLine);		if (DOUBLE_BUFFER) {			GC gc = getGC();			Caret caret = getCaret();			boolean caretVisible = false;			if (caret != null) {				caretVisible = caret.getVisible();				caret.setVisible(false);			}			performPaint(gc, startLine, startY, height);			if (caret != null) {				caret.setVisible(caretVisible);			}			gc.dispose();		} else {			redraw(0, startY, getClientArea().width, height, false);			update();		}	}}