IDEA-168345 Gutter misaligned to document contents when scrolling to the end of the file

This commit is contained in:
Sergey Malenkov
2017-02-28 20:52:45 +03:00
parent 3ad6553058
commit ccea3fe6d0
2 changed files with 29 additions and 17 deletions
@@ -537,25 +537,35 @@ public class JBViewport extends JViewport implements ZoomableViewport {
if (grand instanceof JScrollPane) {
JScrollPane pane = (JScrollPane)grand;
// calculate empty border under vertical scroll bar
if (viewport == pane.getViewport() || viewport == pane.getColumnHeader()) {
JScrollBar vsb = pane.getVerticalScrollBar();
Alignment va = getAlignment(vsb);
if (va == Alignment.LEFT) {
insets.left += vsb.getWidth();
}
else if (va == Alignment.RIGHT && isAlignmentNeeded(view, false)) {
insets.right += vsb.getWidth();
JScrollBar vsb = pane.getVerticalScrollBar();
if (vsb != null && vsb.isVisible()) {
boolean opaque = vsb.isOpaque();
if (viewport == pane.getColumnHeader()
? (!opaque || Registry.is("ide.scroll.layout.header.over.corner"))
: (!opaque && viewport == pane.getViewport())) {
Alignment va = UIUtil.getClientProperty(vsb, Alignment.class);
if (va == Alignment.LEFT) {
insets.left += vsb.getWidth();
}
else if (va == Alignment.RIGHT && (opaque || isAlignmentNeeded(view, false))) {
insets.right += vsb.getWidth();
}
}
}
// calculate empty border under horizontal scroll bar
if (viewport == pane.getViewport() || viewport == pane.getRowHeader()) {
JScrollBar hsb = pane.getHorizontalScrollBar();
Alignment ha = getAlignment(hsb);
if (ha == Alignment.TOP) {
insets.top += hsb.getHeight();
}
else if (ha == Alignment.BOTTOM && isAlignmentNeeded(view, true)) {
insets.bottom += hsb.getHeight();
JScrollBar hsb = pane.getHorizontalScrollBar();
if (hsb != null && hsb.isVisible()) {
boolean opaque = hsb.isOpaque();
if (viewport == pane.getRowHeader()
? (!opaque || Registry.is("ide.scroll.layout.header.over.corner"))
: (!opaque && viewport == pane.getViewport())) {
Alignment ha = UIUtil.getClientProperty(hsb, Alignment.class);
if (ha == Alignment.TOP) {
insets.top += hsb.getHeight();
}
else if (ha == Alignment.BOTTOM && (opaque || isAlignmentNeeded(view, true))) {
insets.bottom += hsb.getHeight();
}
}
}
}
@@ -246,7 +246,9 @@ class EditorGutterComponentImpl extends EditorGutterComponentEx implements Mouse
@Override
public Dimension getPreferredSize() {
int w = getFoldingAreaOffset() + getFoldingAreaWidth();
return new Dimension(w, myEditor.getPreferredHeight());
Dimension size = new Dimension(w, myEditor.getPreferredHeight());
JBInsets.addTo(size, getInsets());
return size;
}
@Override