void () { disposeMarker(); Rectangle visibleArea = myEditor.getScrollingModel().getVisibleAreaOnScrollingFinished(); int caretY = myEditor.visualLineToY(myEditor.getCaretModel().getVisualPosition().line); if (visibleArea.height > 0 && (caretY + myEditor.getLineHeight() <= visibleArea.y || caretY >= (visibleArea.y + visibleArea.height))) { int topLeftCornerOffset = myEditor.logicalPositionToOffset(myEditor.xyToLogicalPosition(visibleArea.getLocation())); myTopLeftCornerMarker = myEditor.getDocument().createRangeMarker(topLeftCornerOffset, topLeftCornerOffset); myViewportShift = myEditor.offsetToXY(topLeftCornerOffset).y - visibleArea.y; } else { myTopLeftCornerMarker = null; myViewportShift = caretY - visibleArea.y; } }