TabbedPane: support rounded underline selection and rounded card tabs

This commit is contained in:
Karl Tauber
2023-07-31 13:36:18 +02:00
parent dfe4404a17
commit f1351a2093
14 changed files with 183 additions and 47 deletions

View File

@@ -5,6 +5,7 @@ FlatLaf Change Log
#### New features and improvements #### New features and improvements
- TabbedPane: Support rounded underline selection and rounded card tabs.
- Extras: Class `FlatSVGIcon` now uses [JSVG](https://github.com/weisJ/jsvg) - Extras: Class `FlatSVGIcon` now uses [JSVG](https://github.com/weisJ/jsvg)
library (instead of svgSalamander) for rendering. JSVG provides improved SVG library (instead of svgSalamander) for rendering. JSVG provides improved SVG
rendering and uses less memory compared to svgSalamander. (PR #684) rendering and uses less memory compared to svgSalamander. (PR #684)

View File

@@ -49,6 +49,7 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener; import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelEvent;
import java.awt.geom.Area;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeEvent;
@@ -143,6 +144,11 @@ import com.formdev.flatlaf.util.UIScale;
* @uiDefault TabbedPane.tabHeight int * @uiDefault TabbedPane.tabHeight int
* @uiDefault TabbedPane.tabSelectionHeight int * @uiDefault TabbedPane.tabSelectionHeight int
* @uiDefault TabbedPane.cardTabSelectionHeight int * @uiDefault TabbedPane.cardTabSelectionHeight int
* @uiDefault TabbedPane.tabArc int
* @uiDefault TabbedPane.tabSelectionArc int
* @uiDefault TabbedPane.cardTabArc int
* @uiDefault TabbedPane.selectedInsets Insets
* @uiDefault TabbedPane.tabSelectionInsets Insets
* @uiDefault TabbedPane.contentSeparatorHeight int * @uiDefault TabbedPane.contentSeparatorHeight int
* @uiDefault TabbedPane.showTabSeparators boolean * @uiDefault TabbedPane.showTabSeparators boolean
* @uiDefault TabbedPane.tabSeparatorsFullHeight boolean * @uiDefault TabbedPane.tabSeparatorsFullHeight boolean
@@ -219,6 +225,11 @@ public class FlatTabbedPaneUI
@Styleable protected int tabHeight; @Styleable protected int tabHeight;
@Styleable protected int tabSelectionHeight; @Styleable protected int tabSelectionHeight;
/** @since 2 */ @Styleable protected int cardTabSelectionHeight; /** @since 2 */ @Styleable protected int cardTabSelectionHeight;
/** @since 3.2 */ @Styleable protected int tabArc;
/** @since 3.2 */ @Styleable protected int tabSelectionArc;
/** @since 3.2 */ @Styleable protected int cardTabArc;
/** @since 3.2 */ @Styleable protected Insets selectedInsets;
/** @since 3.2 */ @Styleable protected Insets tabSelectionInsets;
@Styleable protected int contentSeparatorHeight; @Styleable protected int contentSeparatorHeight;
@Styleable protected boolean showTabSeparators; @Styleable protected boolean showTabSeparators;
@Styleable protected boolean tabSeparatorsFullHeight; @Styleable protected boolean tabSeparatorsFullHeight;
@@ -344,6 +355,11 @@ public class FlatTabbedPaneUI
tabHeight = UIManager.getInt( "TabbedPane.tabHeight" ); tabHeight = UIManager.getInt( "TabbedPane.tabHeight" );
tabSelectionHeight = UIManager.getInt( "TabbedPane.tabSelectionHeight" ); tabSelectionHeight = UIManager.getInt( "TabbedPane.tabSelectionHeight" );
cardTabSelectionHeight = UIManager.getInt( "TabbedPane.cardTabSelectionHeight" ); cardTabSelectionHeight = UIManager.getInt( "TabbedPane.cardTabSelectionHeight" );
tabArc = UIManager.getInt( "TabbedPane.tabArc" );
tabSelectionArc = UIManager.getInt( "TabbedPane.tabSelectionArc" );
cardTabArc = UIManager.getInt( "TabbedPane.cardTabArc" );
selectedInsets = UIManager.getInsets( "TabbedPane.selectedInsets" );
tabSelectionInsets = UIManager.getInsets( "TabbedPane.tabSelectionInsets" );
contentSeparatorHeight = UIManager.getInt( "TabbedPane.contentSeparatorHeight" ); contentSeparatorHeight = UIManager.getInt( "TabbedPane.contentSeparatorHeight" );
showTabSeparators = UIManager.getBoolean( "TabbedPane.showTabSeparators" ); showTabSeparators = UIManager.getBoolean( "TabbedPane.showTabSeparators" );
tabSeparatorsFullHeight = UIManager.getBoolean( "TabbedPane.tabSeparatorsFullHeight" ); tabSeparatorsFullHeight = UIManager.getBoolean( "TabbedPane.tabSeparatorsFullHeight" );
@@ -1184,10 +1200,41 @@ public class FlatTabbedPaneUI
protected void paintTabBackground( Graphics g, int tabPlacement, int tabIndex, protected void paintTabBackground( Graphics g, int tabPlacement, int tabIndex,
int x, int y, int w, int h, boolean isSelected ) int x, int y, int w, int h, boolean isSelected )
{ {
boolean isCard = (getTabType() == TAB_TYPE_CARD);
// fill whole tab background if tab is rounded or has insets
if( (!isCard && tabArc > 0) ||
(isCard && cardTabArc > 0) ||
(!isCard && selectedInsets != null &&
(selectedInsets.top != 0 || selectedInsets.left != 0 ||
selectedInsets.bottom != 0 || selectedInsets.right != 0)) )
{
Color background = tabPane.getBackgroundAt( tabIndex );
g.setColor( FlatUIUtils.deriveColor( background, tabPane.getBackground() ) );
g.fillRect( x, y, w, h );
}
// apply insets
if( !isCard && selectedInsets != null ) {
Insets insets = new Insets( 0, 0, 0, 0 );
rotateInsets( selectedInsets, insets, tabPane.getTabPlacement() );
x += scale( insets.left );
y += scale( insets.top );
w -= scale( insets.left + insets.right );
h -= scale( insets.top + insets.bottom );
}
// paint tab background // paint tab background
Color background = getTabBackground( tabPlacement, tabIndex, isSelected ); Color background = getTabBackground( tabPlacement, tabIndex, isSelected );
g.setColor( FlatUIUtils.deriveColor( background, tabPane.getBackground() ) ); g.setColor( FlatUIUtils.deriveColor( background, tabPane.getBackground() ) );
g.fillRect( x, y, w, h ); if( !isCard && tabArc > 0 ) {
float arc = scale( (float) tabArc ) / 2f;
FlatUIUtils.paintSelection( (Graphics2D) g, x, y, w, h, null, arc, arc, arc, arc, 0 );
} else if( isCard && cardTabArc > 0 )
((Graphics2D)g).fill( createCardTabOuterPath( tabPlacement, x, y, w, h ) );
else
g.fillRect( x, y, w, h );
} }
/** @since 2 */ /** @since 2 */
@@ -1241,42 +1288,38 @@ public class FlatTabbedPaneUI
protected void paintCardTabBorder( Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h ) { protected void paintCardTabBorder( Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h ) {
Graphics2D g2 = (Graphics2D) g; Graphics2D g2 = (Graphics2D) g;
float borderWidth = scale( (float) contentSeparatorHeight ); Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD );
path.append( createCardTabOuterPath( tabPlacement, x, y, w, h ), false );
path.append( createCardTabInnerPath( tabPlacement, x, y, w, h ), false );
g.setColor( (tabSeparatorColor != null) ? tabSeparatorColor : contentAreaColor ); g.setColor( (tabSeparatorColor != null) ? tabSeparatorColor : contentAreaColor );
g2.fill( path );
}
/** @since 3.2 */
protected Shape createCardTabOuterPath( int tabPlacement, int x, int y, int w, int h ) {
float arc = scale( (float) cardTabArc ) / 2f;
switch( tabPlacement ) { switch( tabPlacement ) {
default: default:
case TOP: case TOP: return FlatUIUtils.createRoundRectanglePath( x, y, w, h, arc, arc, 0, 0 );
case BOTTOM: case BOTTOM: return FlatUIUtils.createRoundRectanglePath( x, y, w, h, 0, 0, arc, arc );
// paint left and right tab border case LEFT: return FlatUIUtils.createRoundRectanglePath( x, y, w, h, arc, 0, arc, 0 );
g2.fill( new Rectangle2D.Float( x, y, borderWidth, h ) ); case RIGHT: return FlatUIUtils.createRoundRectanglePath( x, y, w, h, 0, arc, 0, arc );
g2.fill( new Rectangle2D.Float( x + w - borderWidth, y, borderWidth, h ) );
break;
case LEFT:
case RIGHT:
// paint top and bottom tab border
g2.fill( new Rectangle2D.Float( x, y, w, borderWidth ) );
g2.fill( new Rectangle2D.Float( x, y + h - borderWidth, w, borderWidth ) );
break;
} }
}
if( cardTabSelectionHeight <= 0 ) { /** @since 3.2 */
// if there is no tab selection indicator, paint a top border as well protected Shape createCardTabInnerPath( int tabPlacement, int x, int y, int w, int h ) {
switch( tabPlacement ) { float bw = scale( (float) contentSeparatorHeight );
default: float arc = (scale( (float) cardTabArc ) / 2f) - bw;
case TOP:
g2.fill( new Rectangle2D.Float( x, y, w, borderWidth ) ); switch( tabPlacement ) {
break; default:
case BOTTOM: case TOP: return FlatUIUtils.createRoundRectanglePath( x + bw, y + bw, w - (bw * 2), h - bw, arc, arc, 0, 0 );
g2.fill( new Rectangle2D.Float( x, y + h - borderWidth, w, borderWidth ) ); case BOTTOM: return FlatUIUtils.createRoundRectanglePath( x + bw, y, w - (bw * 2), h - bw, 0, 0, arc, arc );
break; case LEFT: return FlatUIUtils.createRoundRectanglePath( x + bw, y + bw, w - bw, h - (bw * 2), arc, 0, arc, 0 );
case LEFT: case RIGHT: return FlatUIUtils.createRoundRectanglePath( x, y + bw, w - bw, h - (bw * 2), 0, arc, 0, arc );
g2.fill( new Rectangle2D.Float( x, y, borderWidth, h ) );
break;
case RIGHT:
g2.fill( new Rectangle2D.Float( x + w - borderWidth, y, borderWidth, h ) );
break;
}
} }
} }
@@ -1324,38 +1367,62 @@ public class FlatTabbedPaneUI
? (isTabbedPaneOrChildFocused() ? underlineColor : inactiveUnderlineColor) ? (isTabbedPaneOrChildFocused() ? underlineColor : inactiveUnderlineColor)
: disabledUnderlineColor ); : disabledUnderlineColor );
// paint underline selection boolean isCard = (getTabType() == TAB_TYPE_CARD);
boolean atBottom = (getTabType() != TAB_TYPE_CARD); boolean atBottom = !isCard;
Insets contentInsets = atBottom Insets contentInsets = atBottom
? ((!rotateTabRuns && runCount > 1 && !isScrollTabLayout() && getRunForTab( tabPane.getTabCount(), tabIndex ) > 0) ? ((!rotateTabRuns && runCount > 1 && !isScrollTabLayout() && getRunForTab( tabPane.getTabCount(), tabIndex ) > 0)
? new Insets( 0, 0, 0, 0 ) ? new Insets( 0, 0, 0, 0 )
: getContentBorderInsets( tabPlacement )) : getContentBorderInsets( tabPlacement ))
: null; : null;
int tabSelectionHeight = scale( atBottom ? this.tabSelectionHeight : cardTabSelectionHeight ); int tabSelectionHeight = scale( isCard ? cardTabSelectionHeight : this.tabSelectionHeight );
int sx, sy; float arc = scale( (float) (isCard ? cardTabArc : tabSelectionArc) ) / 2f;
int sx = x, sy = y, sw = w, sh = h;
switch( tabPlacement ) { switch( tabPlacement ) {
case TOP: case TOP:
default: default:
sy = atBottom ? (y + h + contentInsets.top - tabSelectionHeight) : y; sy = atBottom ? (y + h + contentInsets.top - tabSelectionHeight) : y;
g.fillRect( x, sy, w, tabSelectionHeight ); sh = tabSelectionHeight;
break; break;
case BOTTOM: case BOTTOM:
sy = atBottom ? (y - contentInsets.bottom) : (y + h - tabSelectionHeight); sy = atBottom ? (y - contentInsets.bottom) : (y + h - tabSelectionHeight);
g.fillRect( x, sy, w, tabSelectionHeight ); sh = tabSelectionHeight;
break; break;
case LEFT: case LEFT:
sx = atBottom ? (x + w + contentInsets.left - tabSelectionHeight) : x; sx = atBottom ? (x + w + contentInsets.left - tabSelectionHeight) : x;
g.fillRect( sx, y, tabSelectionHeight, h ); sw = tabSelectionHeight;
break; break;
case RIGHT: case RIGHT:
sx = atBottom ? (x - contentInsets.right) : (x + w - tabSelectionHeight); sx = atBottom ? (x - contentInsets.right) : (x + w - tabSelectionHeight);
g.fillRect( sx, y, tabSelectionHeight, h ); sw = tabSelectionHeight;
break; break;
} }
// apply insets
if( !isCard && tabSelectionInsets != null ) {
Insets insets = new Insets( 0, 0, 0, 0 );
rotateInsets( tabSelectionInsets, insets, tabPane.getTabPlacement() );
sx += scale( insets.left );
sy += scale( insets.top );
sw -= scale( insets.left + insets.right );
sh -= scale( insets.top + insets.bottom );
}
// paint underline selection
if( arc <= 0 )
g.fillRect( sx, sy, sw, sh );
else {
if( isCard ) {
Area area = new Area( createCardTabOuterPath( tabPlacement, x, y, w, h ) );
area.intersect( new Area( new Rectangle2D.Float( sx, sy, sw, sh ) ) );
((Graphics2D)g).fill( area );
} else
FlatUIUtils.paintSelection( (Graphics2D) g, sx, sy, sw, sh, null, arc, arc, arc, arc, 0 );
}
} }
/** @since 2.2 */ /** @since 2.2 */

View File

@@ -671,7 +671,12 @@ SplitPaneDivider.gripGap = 2
TabbedPane.tabHeight = 32 TabbedPane.tabHeight = 32
TabbedPane.tabSelectionHeight = 3 TabbedPane.tabSelectionHeight = 3
TabbedPane.cardTabSelectionHeight = 2 TabbedPane.cardTabSelectionHeight = 3
TabbedPane.tabArc = 0
TabbedPane.tabSelectionArc = 0
TabbedPane.cardTabArc = 12
TabbedPane.selectedInsets = 0,0,0,0
TabbedPane.tabSelectionInsets = 0,0,0,0
TabbedPane.contentSeparatorHeight = 1 TabbedPane.contentSeparatorHeight = 1
TabbedPane.showTabSeparators = false TabbedPane.showTabSeparators = false
TabbedPane.tabSeparatorsFullHeight = false TabbedPane.tabSeparatorsFullHeight = false

View File

@@ -261,6 +261,15 @@ Spinner.buttonPressedArrowColor = lighten($Spinner.buttonArrowColor,20%,derived
Spinner.buttonSeparatorWidth = 0 Spinner.buttonSeparatorWidth = 0
#---- TabbedPane ----
TabbedPane.tabSelectionHeight = 4
TabbedPane.cardTabSelectionHeight = 4
TabbedPane.tabArc = $Button.arc
TabbedPane.tabSelectionArc = $TabbedPane.tabSelectionHeight
TabbedPane.cardTabArc = $Button.arc
#---- TextArea --- #---- TextArea ---
TextArea.disabledBackground = @disabledComponentBackground TextArea.disabledBackground = @disabledComponentBackground

View File

@@ -260,6 +260,15 @@ Spinner.buttonHoverArrowColor = lighten($Spinner.buttonArrowColor,20%,derived no
Spinner.buttonPressedArrowColor = lighten($Spinner.buttonArrowColor,30%,derived noAutoInverse) Spinner.buttonPressedArrowColor = lighten($Spinner.buttonArrowColor,30%,derived noAutoInverse)
#---- TabbedPane ----
TabbedPane.tabSelectionHeight = 4
TabbedPane.cardTabSelectionHeight = 4
TabbedPane.tabArc = $Button.arc
TabbedPane.tabSelectionArc = $TabbedPane.tabSelectionHeight
TabbedPane.cardTabArc = $Button.arc
#---- TextArea --- #---- TextArea ---
TextArea.disabledBackground = @disabledComponentBackground TextArea.disabledBackground = @disabledComponentBackground

View File

@@ -732,6 +732,11 @@ public class TestFlatStyleableInfo
"tabHeight", int.class, "tabHeight", int.class,
"tabSelectionHeight", int.class, "tabSelectionHeight", int.class,
"cardTabSelectionHeight", int.class, "cardTabSelectionHeight", int.class,
"tabArc", int.class,
"tabSelectionArc", int.class,
"cardTabArc", int.class,
"selectedInsets", Insets.class,
"tabSelectionInsets", Insets.class,
"contentSeparatorHeight", int.class, "contentSeparatorHeight", int.class,
"showTabSeparators", boolean.class, "showTabSeparators", boolean.class,
"tabSeparatorsFullHeight", boolean.class, "tabSeparatorsFullHeight", boolean.class,

View File

@@ -738,6 +738,11 @@ public class TestFlatStyleableValue
testInteger( c, ui, "tabHeight", 123 ); testInteger( c, ui, "tabHeight", 123 );
testInteger( c, ui, "tabSelectionHeight", 123 ); testInteger( c, ui, "tabSelectionHeight", 123 );
testInteger( c, ui, "cardTabSelectionHeight", 123 ); testInteger( c, ui, "cardTabSelectionHeight", 123 );
testInteger( c, ui, "tabArc", 123 );
testInteger( c, ui, "tabSelectionArc", 123 );
testInteger( c, ui, "cardTabArc", 123 );
testInsets( c, ui, "selectedInsets", 1,2,3,4 );
testInsets( c, ui, "tabSelectionInsets", 1,2,3,4 );
testInteger( c, ui, "contentSeparatorHeight", 123 ); testInteger( c, ui, "contentSeparatorHeight", 123 );
testBoolean( c, ui, "showTabSeparators", false ); testBoolean( c, ui, "showTabSeparators", false );
testBoolean( c, ui, "tabSeparatorsFullHeight", false ); testBoolean( c, ui, "tabSeparatorsFullHeight", false );

View File

@@ -917,6 +917,11 @@ public class TestFlatStyling
ui.applyStyle( "tabHeight: 30" ); ui.applyStyle( "tabHeight: 30" );
ui.applyStyle( "tabSelectionHeight: 3" ); ui.applyStyle( "tabSelectionHeight: 3" );
ui.applyStyle( "cardTabSelectionHeight: 2" ); ui.applyStyle( "cardTabSelectionHeight: 2" );
ui.applyStyle( "tabArc: 3" );
ui.applyStyle( "tabSelectionArc: 4" );
ui.applyStyle( "cardTabArc: 5" );
ui.applyStyle( "selectedInsets: 1,2,3,4" );
ui.applyStyle( "tabSelectionInsets: 1,2,3,4" );
ui.applyStyle( "contentSeparatorHeight: 1" ); ui.applyStyle( "contentSeparatorHeight: 1" );
ui.applyStyle( "showTabSeparators: false" ); ui.applyStyle( "showTabSeparators: false" );
ui.applyStyle( "tabSeparatorsFullHeight: false" ); ui.applyStyle( "tabSeparatorsFullHeight: false" );

View File

@@ -1037,7 +1037,8 @@ TabbedPane.buttonArc 6
TabbedPane.buttonHoverBackground #303234 HSL 210 4 20 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) TabbedPane.buttonHoverBackground #303234 HSL 210 4 20 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%)
TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.buttonPressedBackground #282a2c HSL 210 5 16 com.formdev.flatlaf.util.DerivedColor [UI] darken(8%) TabbedPane.buttonPressedBackground #282a2c HSL 210 5 16 com.formdev.flatlaf.util.DerivedColor [UI] darken(8%)
TabbedPane.cardTabSelectionHeight 2 TabbedPane.cardTabArc 12
TabbedPane.cardTabSelectionHeight 3
TabbedPane.closeArc 4 TabbedPane.closeArc 4
TabbedPane.closeCrossFilledSize 7.5 TabbedPane.closeCrossFilledSize 7.5
TabbedPane.closeCrossLineWidth 1 TabbedPane.closeCrossLineWidth 1
@@ -1068,18 +1069,22 @@ TabbedPane.labelShift 1
TabbedPane.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] TabbedPane.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.scrollButtonsPlacement both TabbedPane.scrollButtonsPlacement both
TabbedPane.scrollButtonsPolicy asNeededSingle TabbedPane.scrollButtonsPolicy asNeededSingle
TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectedLabelShift -1 TabbedPane.selectedLabelShift -1
TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectionFollowsFocus true TabbedPane.selectionFollowsFocus true
TabbedPane.shadow #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] TabbedPane.shadow #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.showTabSeparators false TabbedPane.showTabSeparators false
TabbedPane.tabAlignment center TabbedPane.tabAlignment center
TabbedPane.tabArc 0
TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaAlignment leading
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabHeight 32 TabbedPane.tabHeight 32
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabRunOverlay 0 TabbedPane.tabRunOverlay 0
TabbedPane.tabSelectionArc 0
TabbedPane.tabSelectionHeight 3 TabbedPane.tabSelectionHeight 3
TabbedPane.tabSelectionInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabSeparatorsFullHeight false TabbedPane.tabSeparatorsFullHeight false
TabbedPane.tabType underlined TabbedPane.tabType underlined
TabbedPane.tabWidthMode preferred TabbedPane.tabWidthMode preferred

View File

@@ -1042,7 +1042,8 @@ TabbedPane.buttonArc 6
TabbedPane.buttonHoverBackground #e0e0e0 HSL 0 0 88 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) TabbedPane.buttonHoverBackground #e0e0e0 HSL 0 0 88 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse)
TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.buttonPressedBackground #d9d9d9 HSL 0 0 85 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) TabbedPane.buttonPressedBackground #d9d9d9 HSL 0 0 85 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse)
TabbedPane.cardTabSelectionHeight 2 TabbedPane.cardTabArc 12
TabbedPane.cardTabSelectionHeight 3
TabbedPane.closeArc 4 TabbedPane.closeArc 4
TabbedPane.closeCrossFilledSize 7.5 TabbedPane.closeCrossFilledSize 7.5
TabbedPane.closeCrossLineWidth 1 TabbedPane.closeCrossLineWidth 1
@@ -1073,18 +1074,22 @@ TabbedPane.labelShift 1
TabbedPane.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] TabbedPane.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.scrollButtonsPlacement both TabbedPane.scrollButtonsPlacement both
TabbedPane.scrollButtonsPolicy asNeededSingle TabbedPane.scrollButtonsPolicy asNeededSingle
TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectedLabelShift -1 TabbedPane.selectedLabelShift -1
TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectionFollowsFocus true TabbedPane.selectionFollowsFocus true
TabbedPane.shadow #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] TabbedPane.shadow #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.showTabSeparators false TabbedPane.showTabSeparators false
TabbedPane.tabAlignment center TabbedPane.tabAlignment center
TabbedPane.tabArc 0
TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaAlignment leading
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabHeight 32 TabbedPane.tabHeight 32
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabRunOverlay 0 TabbedPane.tabRunOverlay 0
TabbedPane.tabSelectionArc 0
TabbedPane.tabSelectionHeight 3 TabbedPane.tabSelectionHeight 3
TabbedPane.tabSelectionInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabSeparatorsFullHeight false TabbedPane.tabSeparatorsFullHeight false
TabbedPane.tabType underlined TabbedPane.tabType underlined
TabbedPane.tabWidthMode preferred TabbedPane.tabWidthMode preferred

View File

@@ -1047,7 +1047,8 @@ TabbedPane.buttonArc 12
TabbedPane.buttonHoverBackground #111111 HSL 0 0 7 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) TabbedPane.buttonHoverBackground #111111 HSL 0 0 7 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%)
TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.buttonPressedBackground #0a0a0a HSL 0 0 4 com.formdev.flatlaf.util.DerivedColor [UI] darken(8%) TabbedPane.buttonPressedBackground #0a0a0a HSL 0 0 4 com.formdev.flatlaf.util.DerivedColor [UI] darken(8%)
TabbedPane.cardTabSelectionHeight 2 TabbedPane.cardTabArc 12
TabbedPane.cardTabSelectionHeight 4
TabbedPane.closeArc 4 TabbedPane.closeArc 4
TabbedPane.closeCrossFilledSize 7.5 TabbedPane.closeCrossFilledSize 7.5
TabbedPane.closeCrossLineWidth 1 TabbedPane.closeCrossLineWidth 1
@@ -1078,18 +1079,22 @@ TabbedPane.labelShift 1
TabbedPane.light #cccccc19 10% HSLA 0 0 80 10 javax.swing.plaf.ColorUIResource [UI] TabbedPane.light #cccccc19 10% HSLA 0 0 80 10 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.scrollButtonsPlacement both TabbedPane.scrollButtonsPlacement both
TabbedPane.scrollButtonsPolicy asNeededSingle TabbedPane.scrollButtonsPolicy asNeededSingle
TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectedLabelShift -1 TabbedPane.selectedLabelShift -1
TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectionFollowsFocus true TabbedPane.selectionFollowsFocus true
TabbedPane.shadow #1e1e1e HSL 0 0 12 javax.swing.plaf.ColorUIResource [UI] TabbedPane.shadow #1e1e1e HSL 0 0 12 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.showTabSeparators false TabbedPane.showTabSeparators false
TabbedPane.tabAlignment center TabbedPane.tabAlignment center
TabbedPane.tabArc 12
TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaAlignment leading
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabHeight 32 TabbedPane.tabHeight 32
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabRunOverlay 0 TabbedPane.tabRunOverlay 0
TabbedPane.tabSelectionHeight 3 TabbedPane.tabSelectionArc 4
TabbedPane.tabSelectionHeight 4
TabbedPane.tabSelectionInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabSeparatorsFullHeight false TabbedPane.tabSeparatorsFullHeight false
TabbedPane.tabType underlined TabbedPane.tabType underlined
TabbedPane.tabWidthMode preferred TabbedPane.tabWidthMode preferred

View File

@@ -1051,7 +1051,8 @@ TabbedPane.buttonArc 12
TabbedPane.buttonHoverBackground #e4e4e4 HSL 0 0 89 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) TabbedPane.buttonHoverBackground #e4e4e4 HSL 0 0 89 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse)
TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.buttonPressedBackground #dddddd HSL 0 0 87 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) TabbedPane.buttonPressedBackground #dddddd HSL 0 0 87 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse)
TabbedPane.cardTabSelectionHeight 2 TabbedPane.cardTabArc 12
TabbedPane.cardTabSelectionHeight 4
TabbedPane.closeArc 4 TabbedPane.closeArc 4
TabbedPane.closeCrossFilledSize 7.5 TabbedPane.closeCrossFilledSize 7.5
TabbedPane.closeCrossLineWidth 1 TabbedPane.closeCrossLineWidth 1
@@ -1082,18 +1083,22 @@ TabbedPane.labelShift 1
TabbedPane.light #1f1f1f26 15% HSLA 0 0 12 15 javax.swing.plaf.ColorUIResource [UI] TabbedPane.light #1f1f1f26 15% HSLA 0 0 12 15 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.scrollButtonsPlacement both TabbedPane.scrollButtonsPlacement both
TabbedPane.scrollButtonsPolicy asNeededSingle TabbedPane.scrollButtonsPolicy asNeededSingle
TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectedLabelShift -1 TabbedPane.selectedLabelShift -1
TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectionFollowsFocus true TabbedPane.selectionFollowsFocus true
TabbedPane.shadow #f6f6f6 HSL 0 0 96 javax.swing.plaf.ColorUIResource [UI] TabbedPane.shadow #f6f6f6 HSL 0 0 96 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.showTabSeparators false TabbedPane.showTabSeparators false
TabbedPane.tabAlignment center TabbedPane.tabAlignment center
TabbedPane.tabArc 12
TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaAlignment leading
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabHeight 32 TabbedPane.tabHeight 32
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabRunOverlay 0 TabbedPane.tabRunOverlay 0
TabbedPane.tabSelectionHeight 3 TabbedPane.tabSelectionArc 4
TabbedPane.tabSelectionHeight 4
TabbedPane.tabSelectionInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabSeparatorsFullHeight false TabbedPane.tabSeparatorsFullHeight false
TabbedPane.tabType underlined TabbedPane.tabType underlined
TabbedPane.tabWidthMode preferred TabbedPane.tabWidthMode preferred

View File

@@ -1068,7 +1068,8 @@ TabbedPane.buttonArc 6
TabbedPane.buttonHoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] TabbedPane.buttonHoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.buttonPressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] TabbedPane.buttonPressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.cardTabSelectionHeight 2 TabbedPane.cardTabArc 12
TabbedPane.cardTabSelectionHeight 3
TabbedPane.closeArc 999 TabbedPane.closeArc 999
TabbedPane.closeCrossFilledSize 6.5 TabbedPane.closeCrossFilledSize 6.5
TabbedPane.closeCrossLineWidth 2 TabbedPane.closeCrossLineWidth 2
@@ -1103,18 +1104,22 @@ TabbedPane.scrollButtonsPlacement both
TabbedPane.scrollButtonsPolicy asNeededSingle TabbedPane.scrollButtonsPolicy asNeededSingle
TabbedPane.selectedBackground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] TabbedPane.selectedBackground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.selectedForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] TabbedPane.selectedForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectedLabelShift -1 TabbedPane.selectedLabelShift -1
TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.selectionFollowsFocus true TabbedPane.selectionFollowsFocus true
TabbedPane.shadow #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] TabbedPane.shadow #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.showTabSeparators false TabbedPane.showTabSeparators false
TabbedPane.tabAlignment center TabbedPane.tabAlignment center
TabbedPane.tabArc 0
TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaAlignment leading
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabHeight 32 TabbedPane.tabHeight 32
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabRunOverlay 0 TabbedPane.tabRunOverlay 0
TabbedPane.tabSelectionArc 0
TabbedPane.tabSelectionHeight 3 TabbedPane.tabSelectionHeight 3
TabbedPane.tabSelectionInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
TabbedPane.tabSeparatorColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] TabbedPane.tabSeparatorColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI]
TabbedPane.tabSeparatorsFullHeight false TabbedPane.tabSeparatorsFullHeight false
TabbedPane.tabType underlined TabbedPane.tabType underlined

View File

@@ -831,6 +831,7 @@ TabbedPane.buttonArc
TabbedPane.buttonHoverBackground TabbedPane.buttonHoverBackground
TabbedPane.buttonInsets TabbedPane.buttonInsets
TabbedPane.buttonPressedBackground TabbedPane.buttonPressedBackground
TabbedPane.cardTabArc
TabbedPane.cardTabSelectionHeight TabbedPane.cardTabSelectionHeight
TabbedPane.closeArc TabbedPane.closeArc
TabbedPane.closeCrossFilledSize TabbedPane.closeCrossFilledSize
@@ -868,18 +869,22 @@ TabbedPane.scrollButtonsPlacement
TabbedPane.scrollButtonsPolicy TabbedPane.scrollButtonsPolicy
TabbedPane.selectedBackground TabbedPane.selectedBackground
TabbedPane.selectedForeground TabbedPane.selectedForeground
TabbedPane.selectedInsets
TabbedPane.selectedLabelShift TabbedPane.selectedLabelShift
TabbedPane.selectedTabPadInsets TabbedPane.selectedTabPadInsets
TabbedPane.selectionFollowsFocus TabbedPane.selectionFollowsFocus
TabbedPane.shadow TabbedPane.shadow
TabbedPane.showTabSeparators TabbedPane.showTabSeparators
TabbedPane.tabAlignment TabbedPane.tabAlignment
TabbedPane.tabArc
TabbedPane.tabAreaAlignment TabbedPane.tabAreaAlignment
TabbedPane.tabAreaInsets TabbedPane.tabAreaInsets
TabbedPane.tabHeight TabbedPane.tabHeight
TabbedPane.tabInsets TabbedPane.tabInsets
TabbedPane.tabRunOverlay TabbedPane.tabRunOverlay
TabbedPane.tabSelectionArc
TabbedPane.tabSelectionHeight TabbedPane.tabSelectionHeight
TabbedPane.tabSelectionInsets
TabbedPane.tabSeparatorColor TabbedPane.tabSeparatorColor
TabbedPane.tabSeparatorsFullHeight TabbedPane.tabSeparatorsFullHeight
TabbedPane.tabType TabbedPane.tabType