Window decorations:

- use window border color from UI defaults
- support "active" and "inactive" window border colors
- better window border colors for dark themes
This commit is contained in:
Karl Tauber
2020-07-01 10:33:19 +02:00
parent 41da023bdd
commit a308114b2f
7 changed files with 42 additions and 7 deletions

View File

@@ -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

View File

@@ -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;
* <!-- FlatRootPaneUI -->
*
* @uiDefault RootPane.border Border
* @uiDefault RootPane.activeBorderColor Color
* @uiDefault RootPane.inactiveBorderColor Color
*
* <!-- FlatWindowResizer -->
*
@@ -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 );
}

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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