DesktopIcon: use derived color for icon background, based on background color of JDesktopPane

This commit is contained in:
Karl Tauber
2021-04-11 14:48:19 +02:00
parent 7f906ba0ea
commit a7a4a19824
7 changed files with 34 additions and 6 deletions

View File

@@ -16,10 +16,12 @@
package com.formdev.flatlaf.ui;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Insets;
@@ -33,6 +35,7 @@ import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.event.MouseInputAdapter;
import javax.swing.event.MouseInputListener;
import javax.swing.JLabel;
@@ -229,6 +232,21 @@ public class FlatDesktopIconUI
return getPreferredSize( c );
}
@Override
public void update( Graphics g, JComponent c ) {
if( c.isOpaque() ) {
// fill background with color derived from desktop pane
Color background = c.getBackground();
JDesktopPane desktopPane = desktopIcon.getDesktopPane();
g.setColor( (desktopPane != null)
? FlatUIUtils.deriveColor( background, desktopPane.getBackground() )
: background );
g.fillRect( 0, 0, c.getWidth(), c.getHeight() );
}
paint( g, c );
}
void updateDockIcon() {
// use invoke later to make sure that components are updated when switching LaF
EventQueue.invokeLater( () -> {

View File

@@ -166,7 +166,7 @@ Desktop.background = #3E434C
#---- DesktopIcon ----
DesktopIcon.background = lighten($Desktop.background,10%)
DesktopIcon.background = lighten($Desktop.background,10%,derived)
#---- InternalFrame ----

View File

@@ -172,7 +172,7 @@ Desktop.background = #E6EBF0
#---- DesktopIcon ----
DesktopIcon.background = darken($Desktop.background,10%)
DesktopIcon.background = darken($Desktop.background,10%,derived)
#---- HelpButton ----