diff --git a/CHANGELOG.md b/CHANGELOG.md index 74f08aed..519a64ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ FlatLaf Change Log ## Unreleased - Hide focus indicator when window is inactive. +- Improved/fixed window border color in dark themes in custom window + decorations. ## 0.37 diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java index 06891bce..5edffcd5 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java @@ -25,7 +25,7 @@ import java.awt.Graphics2D; import java.awt.Insets; import java.awt.LayoutManager; import java.awt.LayoutManager2; -import java.awt.Toolkit; +import java.awt.Window; import java.beans.PropertyChangeEvent; import java.util.function.Function; import javax.swing.JComponent; @@ -51,6 +51,8 @@ import com.formdev.flatlaf.util.SystemInfo; * * * @uiDefault RootPane.border Border + * @uiDefault RootPane.activeBorderColor Color + * @uiDefault RootPane.inactiveBorderColor Color * * * @@ -323,19 +325,20 @@ public class FlatRootPaneUI public static class FlatWindowBorder extends BorderUIResource.EmptyBorderUIResource { + protected final Color activeBorderColor = UIManager.getColor( "RootPane.activeBorderColor" ); + protected final Color inactiveBorderColor = UIManager.getColor( "RootPane.inactiveBorderColor" ); + protected final Color baseBorderColor = UIManager.getColor( "Panel.background" ); + public FlatWindowBorder() { super( 1, 1, 1, 1 ); } @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { - Object borderColorObj = Toolkit.getDefaultToolkit().getDesktopProperty( - "win.frame.activeBorderColor" ); - Color borderColor = (borderColorObj instanceof Color) - ? (Color) borderColorObj - : UIManager.getColor( "windowBorder" ); + Container parent = c.getParent(); + boolean active = parent instanceof Window ? ((Window)parent).isActive() : false; - g.setColor( borderColor ); + g.setColor( FlatUIUtils.deriveColor( active ? activeBorderColor : inactiveBorderColor, baseBorderColor ) ); HiDPIUtils.paintAtScale1x( (Graphics2D) g, x, y, width, height, this::paintImpl ); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java index a2a76824..2a7fd6bd 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java @@ -385,6 +385,16 @@ public class FlatTitlePane g.fillRect( 0, 0, getWidth(), getHeight() ); } + protected void repaintWindowBorder() { + int width = rootPane.getWidth(); + int height = rootPane.getHeight(); + Insets insets = rootPane.getInsets(); + rootPane.repaint( 0, 0, width, insets.top ); // top + rootPane.repaint( 0, 0, insets.left, height ); // left + rootPane.repaint( 0, height - insets.bottom, width, insets.bottom ); // bottom + rootPane.repaint( width - insets.right, 0, insets.right, height ); // right + } + /** * Iconifies the window. */ @@ -613,6 +623,8 @@ public class FlatTitlePane if( hasJBRCustomDecoration() ) JBRWindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this ); + + repaintWindowBorder(); } @Override @@ -622,6 +634,8 @@ public class FlatTitlePane if( hasJBRCustomDecoration() ) JBRWindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this ); + + repaintWindowBorder(); } @Override diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties index 47b91971..698901a1 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties @@ -239,6 +239,12 @@ ProgressBar.selectionBackground=@foreground RadioButton.icon[filled].centerDiameter=5 +#---- RootPane ---- + +RootPane.activeBorderColor=darken(@background,7%,derived) +RootPane.inactiveBorderColor=darken(@background,5%,derived) + + #---- ScrollBar ---- ScrollBar.track=lighten(@background,1%,derived noAutoInverse) diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties index e455f328..c7f41c69 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties @@ -251,6 +251,12 @@ ProgressBar.selectionBackground=@foreground RadioButton.icon[filled].centerDiameter=5 +#---- RootPane ---- + +RootPane.activeBorderColor=#707070 +RootPane.inactiveBorderColor=lighten($RootPane.activeBorderColor,20%) + + #---- ScrollBar ---- ScrollBar.track=lighten(@background,1%,derived noAutoInverse) diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatDarkLaf_1.8.0_202.txt b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatDarkLaf_1.8.0_202.txt index e34c4911..e1e4b695 100644 --- a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatDarkLaf_1.8.0_202.txt +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatDarkLaf_1.8.0_202.txt @@ -752,6 +752,7 @@ Resizable.resizeBorder [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.F #---- RootPane ---- +RootPane.activeBorderColor #4d5154 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) RootPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRootPaneUI$FlatWindowBorder [UI] RootPane.borderDragThickness 5 RootPane.cornerDragWidth 16 @@ -765,6 +766,7 @@ RootPane.defaultButtonWindowKeyBindings length=8 [Ljava.lang.Object; [6] ctrl released ENTER [7] release RootPane.honorMinimumSizeOnResize true +RootPane.inactiveBorderColor #484c4e com.formdev.flatlaf.util.DerivedColor [UI] darken(5% autoInverse) RootPaneUI com.formdev.flatlaf.ui.FlatRootPaneUI diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatLightLaf_1.8.0_202.txt b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatLightLaf_1.8.0_202.txt index 341e7d0a..1abdbc63 100644 --- a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatLightLaf_1.8.0_202.txt +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/uidefaults/FlatLightLaf_1.8.0_202.txt @@ -757,6 +757,7 @@ Resizable.resizeBorder [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.F #---- RootPane ---- +RootPane.activeBorderColor #707070 javax.swing.plaf.ColorUIResource [UI] RootPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRootPaneUI$FlatWindowBorder [UI] RootPane.borderDragThickness 5 RootPane.cornerDragWidth 16 @@ -770,6 +771,7 @@ RootPane.defaultButtonWindowKeyBindings length=8 [Ljava.lang.Object; [6] ctrl released ENTER [7] release RootPane.honorMinimumSizeOnResize true +RootPane.inactiveBorderColor #a3a3a3 javax.swing.plaf.ColorUIResource [UI] RootPaneUI com.formdev.flatlaf.ui.FlatRootPaneUI