diff --git a/platform/platform-api/src/com/intellij/ui/components/JBViewport.java b/platform/platform-api/src/com/intellij/ui/components/JBViewport.java index 14087fe7c086..01f66c2be3a3 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBViewport.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBViewport.java @@ -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(); + } } } } diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java index fd0ba892a6c9..0eca9b21798e 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/EditorGutterComponentImpl.java @@ -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