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

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