JIDE: JideTabbedPane: fixed disabled tab text, which was unreadable in dark themes

This commit is contained in:
Karl Tauber
2021-03-27 19:19:17 +01:00
parent 6e990a7e31
commit 98a3c4b0f5

View File

@@ -44,6 +44,7 @@ import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI; import javax.swing.plaf.ComponentUI;
import com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon; import com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.Graphics2DProxy;
import com.formdev.flatlaf.util.UIScale; import com.formdev.flatlaf.util.UIScale;
import com.jidesoft.plaf.LookAndFeelFactory; import com.jidesoft.plaf.LookAndFeelFactory;
import com.jidesoft.plaf.UIDefaultsLookup; import com.jidesoft.plaf.UIDefaultsLookup;
@@ -59,6 +60,7 @@ import com.jidesoft.swing.JideTabbedPane.NoFocusButton;
public class FlatJideTabbedPaneUI public class FlatJideTabbedPaneUI
extends BasicJideTabbedPaneUI extends BasicJideTabbedPaneUI
{ {
protected Color disabledForeground;
protected Color selectedBackground; protected Color selectedBackground;
protected Color underlineColor; protected Color underlineColor;
protected Color disabledUnderlineColor; protected Color disabledUnderlineColor;
@@ -96,6 +98,7 @@ public class FlatJideTabbedPaneUI
_background = UIDefaultsLookup.getColor( "JideTabbedPane.background" ); _background = UIDefaultsLookup.getColor( "JideTabbedPane.background" );
disabledForeground = UIManager.getColor( "TabbedPane.disabledForeground" );
selectedBackground = UIManager.getColor( "TabbedPane.selectedBackground" ); selectedBackground = UIManager.getColor( "TabbedPane.selectedBackground" );
underlineColor = UIManager.getColor( "TabbedPane.underlineColor" ); underlineColor = UIManager.getColor( "TabbedPane.underlineColor" );
disabledUnderlineColor = UIManager.getColor( "TabbedPane.disabledUnderlineColor" ); disabledUnderlineColor = UIManager.getColor( "TabbedPane.disabledUnderlineColor" );
@@ -127,6 +130,7 @@ public class FlatJideTabbedPaneUI
protected void uninstallDefaults() { protected void uninstallDefaults() {
super.uninstallDefaults(); super.uninstallDefaults();
disabledForeground = null;
selectedBackground = null; selectedBackground = null;
underlineColor = null; underlineColor = null;
disabledUnderlineColor = null; disabledUnderlineColor = null;
@@ -301,8 +305,38 @@ public class FlatJideTabbedPaneUI
protected void paintText( Graphics g, int tabPlacement, Font font, FontMetrics metrics, protected void paintText( Graphics g, int tabPlacement, Font font, FontMetrics metrics,
int tabIndex, String title, Rectangle textRect, boolean isSelected ) int tabIndex, String title, Rectangle textRect, boolean isSelected )
{ {
if( !_tabPane.isEnabled() || !_tabPane.isEnabledAt( tabIndex ) ) {
// super method paints disabled text twice with different colors
// and one pixel offset to simulate disabled text
// --> draw only once with disabledForeground
class DisabledTextGraphics extends Graphics2DProxy {
private int count;
public DisabledTextGraphics( Graphics delegate ) {
super( (Graphics2D) delegate );
}
@Override
public Graphics create() {
return new DisabledTextGraphics( super.create() );
}
@Override
public void drawString( String str, int x, int y ) {
count++;
if( (count % 2) != 1 )
return;
setColor( disabledForeground );
super.drawString( str, x, y );
}
}
g = new DisabledTextGraphics( g );
}
Graphics g2 = g;
FlatUIUtils.runWithoutRenderingHints( g, oldRenderingHints, () -> { FlatUIUtils.runWithoutRenderingHints( g, oldRenderingHints, () -> {
super.paintText( g, tabPlacement, font, metrics, tabIndex, title, textRect, isSelected ); super.paintText( g2, tabPlacement, font, metrics, tabIndex, title, textRect, isSelected );
} ); } );
} }