diff --git a/CHANGELOG.md b/CHANGELOG.md index 772d3e7c..fbbf1b69 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ FlatLaf Change Log #### New features and improvements +- TabbedPane: Support rounded underline selection and rounded card tabs. - Extras: Class `FlatSVGIcon` now uses [JSVG](https://github.com/weisJ/jsvg) library (instead of svgSalamander) for rendering. JSVG provides improved SVG rendering and uses less memory compared to svgSalamander. (PR #684) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java index 6cc8efb9..52bc470c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java @@ -49,6 +49,7 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.event.MouseWheelEvent; +import java.awt.geom.Area; import java.awt.geom.Path2D; import java.awt.geom.Rectangle2D; import java.beans.PropertyChangeEvent; @@ -143,6 +144,11 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TabbedPane.tabHeight int * @uiDefault TabbedPane.tabSelectionHeight 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.showTabSeparators boolean * @uiDefault TabbedPane.tabSeparatorsFullHeight boolean @@ -219,6 +225,11 @@ public class FlatTabbedPaneUI @Styleable protected int tabHeight; @Styleable protected int tabSelectionHeight; /** @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 boolean showTabSeparators; @Styleable protected boolean tabSeparatorsFullHeight; @@ -344,6 +355,11 @@ public class FlatTabbedPaneUI tabHeight = UIManager.getInt( "TabbedPane.tabHeight" ); tabSelectionHeight = UIManager.getInt( "TabbedPane.tabSelectionHeight" ); 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" ); showTabSeparators = UIManager.getBoolean( "TabbedPane.showTabSeparators" ); tabSeparatorsFullHeight = UIManager.getBoolean( "TabbedPane.tabSeparatorsFullHeight" ); @@ -1184,10 +1200,41 @@ public class FlatTabbedPaneUI protected void paintTabBackground( Graphics g, int tabPlacement, int tabIndex, 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 Color background = getTabBackground( tabPlacement, tabIndex, isSelected ); 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 */ @@ -1241,42 +1288,38 @@ public class FlatTabbedPaneUI protected void paintCardTabBorder( Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h ) { 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 ); + 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 ) { default: - case TOP: - case BOTTOM: - // paint left and right tab border - g2.fill( new Rectangle2D.Float( x, y, borderWidth, h ) ); - 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; + case TOP: return FlatUIUtils.createRoundRectanglePath( x, y, w, h, arc, arc, 0, 0 ); + case BOTTOM: return FlatUIUtils.createRoundRectanglePath( x, y, w, h, 0, 0, arc, arc ); + case LEFT: return FlatUIUtils.createRoundRectanglePath( x, y, w, h, arc, 0, arc, 0 ); + case RIGHT: return FlatUIUtils.createRoundRectanglePath( x, y, w, h, 0, arc, 0, arc ); } + } - if( cardTabSelectionHeight <= 0 ) { - // if there is no tab selection indicator, paint a top border as well - switch( tabPlacement ) { - default: - case TOP: - g2.fill( new Rectangle2D.Float( x, y, w, borderWidth ) ); - break; - case BOTTOM: - g2.fill( new Rectangle2D.Float( x, y + h - borderWidth, w, borderWidth ) ); - break; - case LEFT: - g2.fill( new Rectangle2D.Float( x, y, borderWidth, h ) ); - break; - case RIGHT: - g2.fill( new Rectangle2D.Float( x + w - borderWidth, y, borderWidth, h ) ); - break; - } + /** @since 3.2 */ + protected Shape createCardTabInnerPath( int tabPlacement, int x, int y, int w, int h ) { + float bw = scale( (float) contentSeparatorHeight ); + float arc = (scale( (float) cardTabArc ) / 2f) - bw; + + switch( tabPlacement ) { + default: + case TOP: return FlatUIUtils.createRoundRectanglePath( x + bw, y + bw, w - (bw * 2), h - bw, arc, arc, 0, 0 ); + case BOTTOM: return FlatUIUtils.createRoundRectanglePath( x + bw, y, w - (bw * 2), h - bw, 0, 0, arc, arc ); + case LEFT: return FlatUIUtils.createRoundRectanglePath( x + bw, y + bw, w - bw, h - (bw * 2), arc, 0, arc, 0 ); + case RIGHT: return FlatUIUtils.createRoundRectanglePath( x, y + bw, w - bw, h - (bw * 2), 0, arc, 0, arc ); } } @@ -1324,38 +1367,62 @@ public class FlatTabbedPaneUI ? (isTabbedPaneOrChildFocused() ? underlineColor : inactiveUnderlineColor) : disabledUnderlineColor ); - // paint underline selection - boolean atBottom = (getTabType() != TAB_TYPE_CARD); + boolean isCard = (getTabType() == TAB_TYPE_CARD); + boolean atBottom = !isCard; Insets contentInsets = atBottom ? ((!rotateTabRuns && runCount > 1 && !isScrollTabLayout() && getRunForTab( tabPane.getTabCount(), tabIndex ) > 0) ? new Insets( 0, 0, 0, 0 ) : getContentBorderInsets( tabPlacement )) : null; - int tabSelectionHeight = scale( atBottom ? this.tabSelectionHeight : cardTabSelectionHeight ); - int sx, sy; + int tabSelectionHeight = scale( isCard ? cardTabSelectionHeight : this.tabSelectionHeight ); + float arc = scale( (float) (isCard ? cardTabArc : tabSelectionArc) ) / 2f; + int sx = x, sy = y, sw = w, sh = h; switch( tabPlacement ) { case TOP: default: sy = atBottom ? (y + h + contentInsets.top - tabSelectionHeight) : y; - g.fillRect( x, sy, w, tabSelectionHeight ); + sh = tabSelectionHeight; break; case BOTTOM: sy = atBottom ? (y - contentInsets.bottom) : (y + h - tabSelectionHeight); - g.fillRect( x, sy, w, tabSelectionHeight ); + sh = tabSelectionHeight; break; case LEFT: sx = atBottom ? (x + w + contentInsets.left - tabSelectionHeight) : x; - g.fillRect( sx, y, tabSelectionHeight, h ); + sw = tabSelectionHeight; break; case RIGHT: sx = atBottom ? (x - contentInsets.right) : (x + w - tabSelectionHeight); - g.fillRect( sx, y, tabSelectionHeight, h ); + sw = tabSelectionHeight; 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 */ diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties index 358c3cec..6278e004 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties @@ -671,7 +671,12 @@ SplitPaneDivider.gripGap = 2 TabbedPane.tabHeight = 32 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.showTabSeparators = false TabbedPane.tabSeparatorsFullHeight = false diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/themes/FlatMacDarkLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/themes/FlatMacDarkLaf.properties index a92e4981..d490fe73 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/themes/FlatMacDarkLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/themes/FlatMacDarkLaf.properties @@ -261,6 +261,15 @@ Spinner.buttonPressedArrowColor = lighten($Spinner.buttonArrowColor,20%,derived Spinner.buttonSeparatorWidth = 0 +#---- TabbedPane ---- + +TabbedPane.tabSelectionHeight = 4 +TabbedPane.cardTabSelectionHeight = 4 +TabbedPane.tabArc = $Button.arc +TabbedPane.tabSelectionArc = $TabbedPane.tabSelectionHeight +TabbedPane.cardTabArc = $Button.arc + + #---- TextArea --- TextArea.disabledBackground = @disabledComponentBackground diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/themes/FlatMacLightLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/themes/FlatMacLightLaf.properties index dbfc0768..dc90bebd 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/themes/FlatMacLightLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/themes/FlatMacLightLaf.properties @@ -260,6 +260,15 @@ Spinner.buttonHoverArrowColor = lighten($Spinner.buttonArrowColor,20%,derived no 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.disabledBackground = @disabledComponentBackground diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java index 16a8e8f0..028030d8 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java @@ -732,6 +732,11 @@ public class TestFlatStyleableInfo "tabHeight", int.class, "tabSelectionHeight", int.class, "cardTabSelectionHeight", int.class, + "tabArc", int.class, + "tabSelectionArc", int.class, + "cardTabArc", int.class, + "selectedInsets", Insets.class, + "tabSelectionInsets", Insets.class, "contentSeparatorHeight", int.class, "showTabSeparators", boolean.class, "tabSeparatorsFullHeight", boolean.class, diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java index 54e72610..7e5b1127 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java @@ -738,6 +738,11 @@ public class TestFlatStyleableValue testInteger( c, ui, "tabHeight", 123 ); testInteger( c, ui, "tabSelectionHeight", 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 ); testBoolean( c, ui, "showTabSeparators", false ); testBoolean( c, ui, "tabSeparatorsFullHeight", false ); diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java index 29c7a5b1..a336b380 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java @@ -917,6 +917,11 @@ public class TestFlatStyling ui.applyStyle( "tabHeight: 30" ); ui.applyStyle( "tabSelectionHeight: 3" ); 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( "showTabSeparators: false" ); ui.applyStyle( "tabSeparatorsFullHeight: false" ); diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt index 016a5f46..e42760e3 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt @@ -1037,7 +1037,8 @@ TabbedPane.buttonArc 6 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.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.closeCrossFilledSize 7.5 TabbedPane.closeCrossLineWidth 1 @@ -1068,18 +1069,22 @@ TabbedPane.labelShift 1 TabbedPane.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] TabbedPane.scrollButtonsPlacement both TabbedPane.scrollButtonsPolicy asNeededSingle +TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedLabelShift -1 TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectionFollowsFocus true TabbedPane.shadow #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] TabbedPane.showTabSeparators false TabbedPane.tabAlignment center +TabbedPane.tabArc 0 TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabHeight 32 TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabRunOverlay 0 +TabbedPane.tabSelectionArc 0 TabbedPane.tabSelectionHeight 3 +TabbedPane.tabSelectionInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabSeparatorsFullHeight false TabbedPane.tabType underlined TabbedPane.tabWidthMode preferred diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt index 36c6d31c..48ad820c 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt @@ -1042,7 +1042,8 @@ TabbedPane.buttonArc 6 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.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.closeCrossFilledSize 7.5 TabbedPane.closeCrossLineWidth 1 @@ -1073,18 +1074,22 @@ TabbedPane.labelShift 1 TabbedPane.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] TabbedPane.scrollButtonsPlacement both TabbedPane.scrollButtonsPolicy asNeededSingle +TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedLabelShift -1 TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectionFollowsFocus true TabbedPane.shadow #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] TabbedPane.showTabSeparators false TabbedPane.tabAlignment center +TabbedPane.tabArc 0 TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabHeight 32 TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabRunOverlay 0 +TabbedPane.tabSelectionArc 0 TabbedPane.tabSelectionHeight 3 +TabbedPane.tabSelectionInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabSeparatorsFullHeight false TabbedPane.tabType underlined TabbedPane.tabWidthMode preferred diff --git a/flatlaf-testing/dumps/uidefaults/FlatMacDarkLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatMacDarkLaf_1.8.0.txt index d82d54d8..a4e2258c 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatMacDarkLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatMacDarkLaf_1.8.0.txt @@ -1047,7 +1047,8 @@ TabbedPane.buttonArc 12 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.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.closeCrossFilledSize 7.5 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.scrollButtonsPlacement both TabbedPane.scrollButtonsPolicy asNeededSingle +TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedLabelShift -1 TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectionFollowsFocus true TabbedPane.shadow #1e1e1e HSL 0 0 12 javax.swing.plaf.ColorUIResource [UI] TabbedPane.showTabSeparators false TabbedPane.tabAlignment center +TabbedPane.tabArc 12 TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabHeight 32 TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] 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.tabType underlined TabbedPane.tabWidthMode preferred diff --git a/flatlaf-testing/dumps/uidefaults/FlatMacLightLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatMacLightLaf_1.8.0.txt index b678cad6..5bc7dc73 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatMacLightLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatMacLightLaf_1.8.0.txt @@ -1051,7 +1051,8 @@ TabbedPane.buttonArc 12 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.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.closeCrossFilledSize 7.5 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.scrollButtonsPlacement both TabbedPane.scrollButtonsPolicy asNeededSingle +TabbedPane.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedLabelShift -1 TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectionFollowsFocus true TabbedPane.shadow #f6f6f6 HSL 0 0 96 javax.swing.plaf.ColorUIResource [UI] TabbedPane.showTabSeparators false TabbedPane.tabAlignment center +TabbedPane.tabArc 12 TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabHeight 32 TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] 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.tabType underlined TabbedPane.tabWidthMode preferred diff --git a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt index 164661ef..1aa93d6b 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt @@ -1068,7 +1068,8 @@ TabbedPane.buttonArc 6 TabbedPane.buttonHoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [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.cardTabSelectionHeight 2 +TabbedPane.cardTabArc 12 +TabbedPane.cardTabSelectionHeight 3 TabbedPane.closeArc 999 TabbedPane.closeCrossFilledSize 6.5 TabbedPane.closeCrossLineWidth 2 @@ -1103,18 +1104,22 @@ TabbedPane.scrollButtonsPlacement both TabbedPane.scrollButtonsPolicy asNeededSingle 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.selectedInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectedLabelShift -1 TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.selectionFollowsFocus true TabbedPane.shadow #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] TabbedPane.showTabSeparators false TabbedPane.tabAlignment center +TabbedPane.tabArc 0 TabbedPane.tabAreaAlignment leading TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabHeight 32 TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] TabbedPane.tabRunOverlay 0 +TabbedPane.tabSelectionArc 0 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.tabSeparatorsFullHeight false TabbedPane.tabType underlined diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt index 3071f5a1..a3a403d7 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt @@ -831,6 +831,7 @@ TabbedPane.buttonArc TabbedPane.buttonHoverBackground TabbedPane.buttonInsets TabbedPane.buttonPressedBackground +TabbedPane.cardTabArc TabbedPane.cardTabSelectionHeight TabbedPane.closeArc TabbedPane.closeCrossFilledSize @@ -868,18 +869,22 @@ TabbedPane.scrollButtonsPlacement TabbedPane.scrollButtonsPolicy TabbedPane.selectedBackground TabbedPane.selectedForeground +TabbedPane.selectedInsets TabbedPane.selectedLabelShift TabbedPane.selectedTabPadInsets TabbedPane.selectionFollowsFocus TabbedPane.shadow TabbedPane.showTabSeparators TabbedPane.tabAlignment +TabbedPane.tabArc TabbedPane.tabAreaAlignment TabbedPane.tabAreaInsets TabbedPane.tabHeight TabbedPane.tabInsets TabbedPane.tabRunOverlay +TabbedPane.tabSelectionArc TabbedPane.tabSelectionHeight +TabbedPane.tabSelectionInsets TabbedPane.tabSeparatorColor TabbedPane.tabSeparatorsFullHeight TabbedPane.tabType