DBE-4211 do not allow expanding a row headers and column headers over the corner for JTable

This commit is contained in:
Sergey Malenkov
2017-04-18 20:30:35 +03:00
parent e167b4a0bf
commit 85fcdf8c55
3 changed files with 14 additions and 10 deletions
@@ -469,7 +469,7 @@ public class JBScrollPane extends JScrollPane {
}
Rectangle vsbBounds = new Rectangle(0, bounds.y - insets.top, 0, 0);
if (vsb != null) {
if (!SystemInfo.isMac && view instanceof JTable) vsb.setOpaque(true);
if (!SystemInfo.isMac && ScrollSettings.isNotSupportedYet(view)) vsb.setOpaque(true);
vsbOpaque = vsb.isOpaque();
if (vsbNeeded) {
adjustForVSB(bounds, insets, vsbBounds, vsbOpaque, vsbOnLeft);
@@ -489,7 +489,7 @@ public class JBScrollPane extends JScrollPane {
}
Rectangle hsbBounds = new Rectangle(bounds.x - insets.left, 0, 0, 0);
if (hsb != null) {
if (!SystemInfo.isMac && view instanceof JTable) hsb.setOpaque(true);
if (!SystemInfo.isMac && ScrollSettings.isNotSupportedYet(view)) hsb.setOpaque(true);
hsbOpaque = hsb.isOpaque();
if (hsbNeeded) {
adjustForHSB(bounds, insets, hsbBounds, hsbOpaque, hsbOnTop);
@@ -561,7 +561,7 @@ public class JBScrollPane extends JScrollPane {
if (hsbOpaque) {
Component corner = hsbOnTop ? (vsbOnLeft ? upperRight : upperLeft) : (vsbOnLeft ? lowerRight : lowerLeft);
fillLowerCorner = corner == null && UIManager.getBoolean("ScrollPane.fillLowerCorner");
if (!fillLowerCorner && ScrollSettings.isHeaderOverCorner(rowHead)) {
if (!fillLowerCorner && ScrollSettings.isHeaderOverCorner(viewport)) {
if (hsbOnTop) rowHeadBounds.y -= hsbBounds.height;
rowHeadBounds.height += hsbBounds.height;
}
@@ -577,7 +577,7 @@ public class JBScrollPane extends JScrollPane {
if (vsbOpaque) {
Component corner = vsbOnLeft ? (hsbOnTop ? lowerLeft : upperLeft) : (hsbOnTop ? lowerRight : upperRight);
fillUpperCorner = corner == null && UIManager.getBoolean("ScrollPane.fillUpperCorner");
if (!fillUpperCorner && ScrollSettings.isHeaderOverCorner(colHead)) {
if (!fillUpperCorner && ScrollSettings.isHeaderOverCorner(viewport)) {
if (vsbOnLeft) colHeadBounds.x -= vsbBounds.width;
colHeadBounds.width += vsbBounds.width;
}
@@ -380,7 +380,7 @@ public class JBViewport extends JViewport implements ZoomableViewport {
}
private static void updateBorder(Component view) {
if (view instanceof JTable) return; // tables are not supported yet
if (ScrollSettings.isNotSupportedYet(view)) return;
if (view instanceof JComponent) {
JComponent component = (JComponent)view;
Border border = component.getBorder();
@@ -471,7 +471,7 @@ public class JBViewport extends JViewport implements ZoomableViewport {
if (vsb != null && vsb.isVisible()) {
boolean opaque = vsb.isOpaque();
if (viewport == pane.getColumnHeader()
? (!opaque || ScrollSettings.isHeaderOverCorner(viewport))
? (!opaque || ScrollSettings.isHeaderOverCorner(pane.getViewport()))
: (!opaque && viewport == pane.getViewport())) {
Alignment va = UIUtil.getClientProperty(vsb, Alignment.class);
if (va == Alignment.LEFT) {
@@ -487,7 +487,7 @@ public class JBViewport extends JViewport implements ZoomableViewport {
if (hsb != null && hsb.isVisible()) {
boolean opaque = hsb.isOpaque();
if (viewport == pane.getRowHeader()
? (!opaque || ScrollSettings.isHeaderOverCorner(viewport))
? (!opaque || ScrollSettings.isHeaderOverCorner(pane.getViewport()))
: (!opaque && viewport == pane.getViewport())) {
Alignment ha = UIUtil.getClientProperty(hsb, Alignment.class);
if (ha == Alignment.TOP) {
@@ -24,8 +24,8 @@ import com.intellij.openapi.util.registry.RegistryValue;
import javax.swing.JDialog;
import javax.swing.JScrollBar;
import javax.swing.JTable;
import javax.swing.JViewport;
import javax.swing.table.JTableHeader;
import javax.swing.RootPaneContainer;
import java.awt.Component;
import java.awt.Container;
@@ -75,8 +75,12 @@ final class ScrollSettings {
}
static boolean isHeaderOverCorner(JViewport viewport) {
if (viewport.getView() instanceof JTableHeader) return false;
return HEADER_OVER_CORNER.asBoolean();
Component view = viewport == null ? null : viewport.getView();
return !isNotSupportedYet(view) && HEADER_OVER_CORNER.asBoolean();
}
static boolean isNotSupportedYet(Component view) {
return view instanceof JTable;
}
static boolean isGapNeededForAnyComponent() {