void (@NotNull Rectangle r) { Rectangle visibleRect = viewport.getViewRect(); if (r.y <= visibleRect.y) { return; } int excessiveHeight = r.y + r.height - (visibleRect.y + visibleRect.height); if (excessiveHeight <= 0) { return; } int verticalShift = Math.min(r.y - visibleRect.y, excessiveHeight); if (verticalShift > 0) { viewport.setViewPosition(new Point(visibleRect.x, visibleRect.y + verticalShift)); } }