mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-12 06:57:13 -06:00
Merge main into system-file-chooser
This commit is contained in:
@@ -63,7 +63,7 @@ public class FlatWindowCloseIcon
|
||||
int iy = y + ((height - iwh) / 2);
|
||||
int ix2 = ix + iwh - 1;
|
||||
int iy2 = iy + iwh - 1;
|
||||
float thickness = SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor;
|
||||
float thickness = Math.max( SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor, 1 );
|
||||
|
||||
Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD, 4 );
|
||||
path.moveTo( ix, iy );
|
||||
|
||||
@@ -38,7 +38,7 @@ public class FlatWindowIconifyIcon
|
||||
@Override
|
||||
protected void paintIconAt1x( Graphics2D g, int x, int y, int width, int height, double scaleFactor ) {
|
||||
int iw = (int) (getSymbolHeight() * scaleFactor);
|
||||
int ih = (int) scaleFactor;
|
||||
int ih = Math.max( (int) scaleFactor, 1 );
|
||||
int ix = x + ((width - iw) / 2);
|
||||
int iy = y + ((height - ih) / 2);
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@ public class FlatWindowMaximizeIcon
|
||||
int iwh = (int) (getSymbolHeight() * scaleFactor);
|
||||
int ix = x + ((width - iwh) / 2);
|
||||
int iy = y + ((height - iwh) / 2);
|
||||
float thickness = SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor;
|
||||
float thickness = Math.max( SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor, 1 );
|
||||
int arc = Math.max( (int) (1.5 * scaleFactor), 2 );
|
||||
|
||||
g.fill( SystemInfo.isWindows_11_orLater
|
||||
|
||||
@@ -45,7 +45,7 @@ public class FlatWindowRestoreIcon
|
||||
int iwh = (int) (getSymbolHeight() * scaleFactor);
|
||||
int ix = x + ((width - iwh) / 2);
|
||||
int iy = y + ((height - iwh) / 2);
|
||||
float thickness = SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor;
|
||||
float thickness = Math.max( SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor, 1 );
|
||||
int arc = Math.max( (int) (1.5 * scaleFactor), 2 );
|
||||
int arcOuter = (int) (arc + (1.5 * scaleFactor));
|
||||
|
||||
|
||||
@@ -653,7 +653,8 @@ public class FlatButtonUI
|
||||
}
|
||||
|
||||
protected Color getBackground( JComponent c ) {
|
||||
boolean toolBarButton = isToolBarButton( c ) || isBorderlessButton( c );
|
||||
boolean def = isDefaultButton( c );
|
||||
boolean toolBarButton = !def && (isToolBarButton( c ) || isBorderlessButton( c ));
|
||||
|
||||
// selected state
|
||||
if( ((AbstractButton)c).isSelected() ) {
|
||||
@@ -681,7 +682,6 @@ public class FlatButtonUI
|
||||
toolbarPressedBackground );
|
||||
}
|
||||
|
||||
boolean def = isDefaultButton( c );
|
||||
return buttonStateColor( c,
|
||||
getBackgroundBase( c, def ),
|
||||
disabledBackground,
|
||||
@@ -733,7 +733,8 @@ public class FlatButtonUI
|
||||
|
||||
protected Color getForeground( JComponent c ) {
|
||||
Color fg = c.getForeground();
|
||||
boolean toolBarButton = isToolBarButton( c ) || isBorderlessButton( c );
|
||||
boolean def = isDefaultButton( c );
|
||||
boolean toolBarButton = !def && (isToolBarButton( c ) || isBorderlessButton( c ));
|
||||
|
||||
// selected state
|
||||
if( ((AbstractButton)c).isSelected() ) {
|
||||
@@ -759,7 +760,6 @@ public class FlatButtonUI
|
||||
toolbarPressedForeground );
|
||||
}
|
||||
|
||||
boolean def = isDefaultButton( c );
|
||||
return buttonStateColor( c,
|
||||
getForegroundBase( c, def ),
|
||||
disabledText,
|
||||
|
||||
@@ -376,31 +376,68 @@ public class FlatFileChooserUI
|
||||
if( icon != null )
|
||||
return icon;
|
||||
|
||||
// get system icon
|
||||
if( f != null ) {
|
||||
try {
|
||||
icon = getFileChooser().getFileSystemView().getSystemIcon( f );
|
||||
} catch( NullPointerException ex ) {
|
||||
// Java 21 may throw a NPE for exe files that use default Windows exe icon
|
||||
}
|
||||
// new proxy icon
|
||||
//
|
||||
// Note: Since this is a super light weight icon object, we do not add it
|
||||
// to the icon cache here. This keeps cache small in case of large directories
|
||||
// with thousands of files when icons of all files are only needed to compute
|
||||
// the layout of list/table, but never painted because located outside of visible area.
|
||||
// When an icon needs to be painted, the proxy adds it to the icon cache
|
||||
// and loads the real icon.
|
||||
return new FlatFileViewIcon( f );
|
||||
}
|
||||
|
||||
if( icon != null ) {
|
||||
if( icon instanceof ImageIcon )
|
||||
icon = new ScaledImageIcon( (ImageIcon) icon );
|
||||
cacheIcon( f, icon );
|
||||
return icon;
|
||||
}
|
||||
//---- class FlatFileViewIcon -----------------------------------------
|
||||
|
||||
/**
|
||||
* A proxy icon that has a fixed (scaled) width/height (16x16) and
|
||||
* gets/loads the real (system) icon only for painting.
|
||||
* Avoids unnecessary getting/loading system icons.
|
||||
*/
|
||||
private class FlatFileViewIcon
|
||||
implements Icon
|
||||
{
|
||||
private final File f;
|
||||
private Icon realIcon;
|
||||
|
||||
FlatFileViewIcon( File f ) {
|
||||
this.f = f;
|
||||
}
|
||||
|
||||
// get default icon
|
||||
icon = super.getIcon( f );
|
||||
|
||||
if( icon instanceof ImageIcon ) {
|
||||
icon = new ScaledImageIcon( (ImageIcon) icon );
|
||||
cacheIcon( f, icon );
|
||||
@Override
|
||||
public int getIconWidth() {
|
||||
return UIScale.scale( 16 );
|
||||
}
|
||||
|
||||
return icon;
|
||||
@Override
|
||||
public int getIconHeight() {
|
||||
return UIScale.scale( 16 );
|
||||
}
|
||||
|
||||
@Override
|
||||
public void paintIcon( Component c, Graphics g, int x, int y ) {
|
||||
// get icon on demand
|
||||
if( realIcon == null ) {
|
||||
// get system icon
|
||||
try {
|
||||
if( f != null )
|
||||
realIcon = getFileChooser().getFileSystemView().getSystemIcon( f );
|
||||
} catch( NullPointerException ex ) {
|
||||
// Java 21 may throw a NPE for exe files that use default Windows exe icon
|
||||
}
|
||||
|
||||
// get default icon
|
||||
if( realIcon == null )
|
||||
realIcon = FlatFileView.super.getIcon( f );
|
||||
|
||||
if( realIcon instanceof ImageIcon )
|
||||
realIcon = new ScaledImageIcon( (ImageIcon) realIcon );
|
||||
|
||||
cacheIcon( f, this );
|
||||
}
|
||||
|
||||
realIcon.paintIcon( c, g, x, y );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -90,10 +90,10 @@ class FlatNativeLibrary
|
||||
classifier = SystemInfo.isAARCH64 ? "macos-arm64" : "macos-x86_64";
|
||||
ext = "dylib";
|
||||
|
||||
} else if( SystemInfo.isLinux && SystemInfo.isX86_64 ) {
|
||||
// Linux: requires x86_64
|
||||
} else if( SystemInfo.isLinux && (SystemInfo.isX86_64 || SystemInfo.isAARCH64)) {
|
||||
// Linux: requires x86_64 or aarch64
|
||||
|
||||
classifier = "linux-x86_64";
|
||||
classifier = SystemInfo.isAARCH64 ? "linux-arm64" : "linux-x86_64";
|
||||
ext = "so";
|
||||
|
||||
// Load libjawt.so (part of JRE) explicitly because it is not found
|
||||
|
||||
@@ -138,7 +138,7 @@ public class FlatPopupFactory
|
||||
|
||||
// create drop shadow popup
|
||||
Popup popupForScreenOfOwner = getPopupForScreenOfOwner( owner, contents, x, y, forceHeavyWeight );
|
||||
GraphicsConfiguration gc = owner.getGraphicsConfiguration();
|
||||
GraphicsConfiguration gc = (owner != null) ? owner.getGraphicsConfiguration() : null;
|
||||
return (gc != null && gc.isTranslucencyCapable())
|
||||
? new DropShadowPopup( popupForScreenOfOwner, owner, contents )
|
||||
: new NonFlashingPopup( popupForScreenOfOwner, owner, contents );
|
||||
@@ -306,7 +306,7 @@ public class FlatPopupFactory
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( gc == null )
|
||||
if( gc == null && owner != null )
|
||||
gc = owner.getGraphicsConfiguration();
|
||||
if( gc == null )
|
||||
return null;
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user