TabbedPane: fixed clipping when painting tab selection in scroll layout

This commit is contained in:
Karl Tauber
2020-10-31 14:20:35 +01:00
parent e45a2df6b6
commit c2ee815cbe
3 changed files with 15 additions and 43 deletions

View File

@@ -875,42 +875,10 @@ public class FlatTabbedPaneUI
}
protected void paintTabSelection( Graphics g, int tabPlacement, int x, int y, int w, int h ) {
// increase clip bounds in scroll-tab-layout to paint over the separator line
Rectangle clipBounds = isScrollTabLayout() ? g.getClipBounds() : null;
if( clipBounds != null &&
this.contentSeparatorHeight != 0 &&
clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) )
{
Rectangle newClipBounds = new Rectangle( clipBounds );
int contentSeparatorHeight = scale( this.contentSeparatorHeight );
switch( tabPlacement ) {
case TOP:
default:
newClipBounds.height += contentSeparatorHeight;
break;
case BOTTOM:
newClipBounds.y -= contentSeparatorHeight;
newClipBounds.height += contentSeparatorHeight;
break;
case LEFT:
newClipBounds.width += contentSeparatorHeight;
break;
case RIGHT:
newClipBounds.x -= contentSeparatorHeight;
newClipBounds.width += contentSeparatorHeight;
break;
}
g.setClip( newClipBounds );
}
g.setColor( tabPane.isEnabled() ? underlineColor : disabledUnderlineColor );
Insets contentInsets = getContentBorderInsets( tabPlacement );
// paint underline selection
Insets contentInsets = getContentBorderInsets( tabPlacement );
int tabSelectionHeight = scale( this.tabSelectionHeight );
switch( tabPlacement ) {
case TOP:
@@ -932,9 +900,6 @@ public class FlatTabbedPaneUI
g.fillRect( x - contentInsets.right, y, tabSelectionHeight, h );
break;
}
if( clipBounds != null )
g.setClip( clipBounds );
}
/**
@@ -1005,8 +970,15 @@ public class FlatTabbedPaneUI
if( isScrollTabLayout() && selectedIndex >= 0 && tabViewport != null ) {
Rectangle tabRect = getTabBounds( tabPane, selectedIndex );
// clip to "scrolling sides" of viewport
// (left and right if horizontal, top and bottom if vertical)
Shape oldClip = g.getClip();
g.setClip( tabViewport.getBounds() );
Rectangle vr = tabViewport.getBounds();
if( isHorizontalTabPlacement() )
g.clipRect( vr.x, 0, vr.width, tabPane.getHeight() );
else
g.clipRect( 0, vr.y, tabPane.getWidth(), vr.height );
paintTabSelection( g, tabPlacement, tabRect.x, tabRect.y, tabRect.width, tabRect.height );
g.setClip( oldClip );
}

View File

@@ -551,7 +551,7 @@ MenuItem.textAcceleratorGap 24
MenuItem.textNoAcceleratorGap 6
MenuItem.underlineSelectionBackground #e6e6e6 javax.swing.plaf.ColorUIResource [UI]
MenuItem.underlineSelectionCheckBackground #ccccff javax.swing.plaf.ColorUIResource [UI]
MenuItem.underlineSelectionColor #4a88c7 javax.swing.plaf.ColorUIResource [UI]
MenuItem.underlineSelectionColor #ffff00 javax.swing.plaf.ColorUIResource [UI]
MenuItem.underlineSelectionHeight 3
@@ -909,7 +909,7 @@ TabbedPane.closeIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTab
TabbedPane.closePressedBackground #00ff00 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.closePressedForeground #000000 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.closeSize 16,16 javax.swing.plaf.DimensionUIResource [UI]
TabbedPane.contentAreaColor #bbbbbb javax.swing.plaf.ColorUIResource [UI]
TabbedPane.contentAreaColor #ff0000 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.contentOpaque true
TabbedPane.contentSeparatorHeight 1
TabbedPane.darkShadow #696969 javax.swing.plaf.ColorUIResource [UI]
@@ -943,7 +943,7 @@ TabbedPane.tabSeparatorsFullHeight false
TabbedPane.tabsOpaque true
TabbedPane.tabsOverlapBorder false
TabbedPane.textIconGap 4
TabbedPane.underlineColor #4a88c7 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.underlineColor #ffff00 javax.swing.plaf.ColorUIResource [UI]
TabbedPaneUI com.formdev.flatlaf.ui.FlatTabbedPaneUI
@@ -1138,7 +1138,7 @@ ToggleButton.tab.disabledUnderlineColor #7a7a7a javax.swing.plaf.ColorUIResou
ToggleButton.tab.focusBackground #dddddd javax.swing.plaf.ColorUIResource [UI]
ToggleButton.tab.hoverBackground #eeeeee javax.swing.plaf.ColorUIResource [UI]
ToggleButton.tab.selectedBackground #00ff00 javax.swing.plaf.ColorUIResource [UI]
ToggleButton.tab.underlineColor #4a88c7 javax.swing.plaf.ColorUIResource [UI]
ToggleButton.tab.underlineColor #ffff00 javax.swing.plaf.ColorUIResource [UI]
ToggleButton.tab.underlineHeight 2
ToggleButton.textIconGap 4
ToggleButton.textShiftOffset 0

View File

@@ -277,12 +277,12 @@ SplitPaneDivider.oneTouchHoverArrowColor=#f00
TabbedPane.disabledForeground=#777
TabbedPane.selectedBackground=#0f0
TabbedPane.selectedForeground=#00f
TabbedPane.underlineColor=#4A88C7
TabbedPane.underlineColor=#ff0
TabbedPane.disabledUnderlineColor=#7a7a7a
TabbedPane.hoverColor=#eee
TabbedPane.focusColor=#ddd
TabbedPane.tabSeparatorColor=#00f
TabbedPane.contentAreaColor=#bbb
TabbedPane.contentAreaColor=#f00
TabbedPane.closeSize=16,16
TabbedPane.closeArc=999