From 208b8238cad7dcfe1f19ecc4e09688d4ece1d28d Mon Sep 17 00:00:00 2001 From: dragonmacher <48328597+dragonmacher@users.noreply.github.com> Date: Tue, 16 Apr 2024 17:37:50 -0400 Subject: [PATCH] GP-4316 - Updated how empty border buttons paint their focused state --- .../Docking/data/docking.theme.properties | 7 +++++++ .../docking/theme/gui/ThemeColorTableModel.java | 6 +++--- .../docking/widgets/AbstractGCellRenderer.java | 2 +- .../java/docking/widgets/EmptyBorderButton.java | 15 ++++++++++++++- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/Ghidra/Framework/Docking/data/docking.theme.properties b/Ghidra/Framework/Docking/data/docking.theme.properties index 26fe3ad3a6..cf957e6ef2 100644 --- a/Ghidra/Framework/Docking/data/docking.theme.properties +++ b/Ghidra/Framework/Docking/data/docking.theme.properties @@ -31,6 +31,7 @@ color.fg.filterfield = color.palette.black color.border.bevel.highlight = color.palette.lightgray color.border.bevel.shadow = color.palette.gray color.border.provider.disconnected = color.palette.orange +color.border.button.focused = [color]system.color.bg.selected.view color.fg.button = color.palette.black color.bg.filechooser = color.bg @@ -178,3 +179,9 @@ color.bg.highlight = #703401 // orangish color.bg.filechooser.shortcut = [color]system.color.bg.view +[CDE/Motif] + +// the tab pane focus color represents the standard motif focus color +color.border.button.focused = [color]laf.color.TabbedPane.focus + + diff --git a/Ghidra/Framework/Docking/src/main/java/docking/theme/gui/ThemeColorTableModel.java b/Ghidra/Framework/Docking/src/main/java/docking/theme/gui/ThemeColorTableModel.java index 0e04fab709..69663dcf52 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/theme/gui/ThemeColorTableModel.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/theme/gui/ThemeColorTableModel.java @@ -224,14 +224,14 @@ public class ThemeColorTableModel extends GDynamicColumnTableModel { - public ThemeColorRenderer() { - setFont(Gui.getFont("font.monospaced")); + @Override + protected Font getDefaultFont() { + return fixedWidthFont; } @Override public Component getTableCellRendererComponent(GTableCellRenderingData data) { JLabel label = (JLabel) super.getTableCellRendererComponent(data); - setFont(Gui.getFont("font.monospaced")); ResolvedColor resolved = (ResolvedColor) data.getValue(); String text = getValueText(resolved); diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java index 63b64e3beb..3c8455d07d 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/AbstractGCellRenderer.java @@ -39,7 +39,7 @@ import utilities.util.reflection.ReflectionUtilities; * colors, and highlights the drop target in a drag-n-drop operation. *

* The preferred method to change the font used by this renderer is {@link #setBaseFontId(String)}. - * If you would like this renderer to use a monospaced font, then, as an alternative to creating a + * If you would like this renderer to use a monospaced font, then, as an alternative to creating a * font ID, you can instead override {@link #getDefaultFont()} to return this * class's {@link #fixedWidthFont}. Also, the fixed width font of this class is based on the * default font set when calling {@link #setBaseFontId(String)}, so it stays up-to-date with theme diff --git a/Ghidra/Framework/Docking/src/main/java/docking/widgets/EmptyBorderButton.java b/Ghidra/Framework/Docking/src/main/java/docking/widgets/EmptyBorderButton.java index 320c2ab88c..206dbebb2f 100644 --- a/Ghidra/Framework/Docking/src/main/java/docking/widgets/EmptyBorderButton.java +++ b/Ghidra/Framework/Docking/src/main/java/docking/widgets/EmptyBorderButton.java @@ -15,6 +15,7 @@ */ package docking.widgets; +import java.awt.Color; import java.awt.event.*; import javax.swing.*; @@ -23,6 +24,7 @@ import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import generic.theme.GColor; import ghidra.docking.util.LookAndFeelUtils; import resources.ResourceManager; @@ -55,6 +57,13 @@ public class EmptyBorderButton extends JButton { public static final Border LOWERED_BUTTON_BORDER = BorderFactory.createCompoundBorder( BorderFactory.createLoweredBevelBorder(), BorderFactory.createEmptyBorder(1, 1, 1, 1)); + /** + * A border to signal when the button has focus. + */ + private static final Color FOCUS_COLOR = new GColor("color.border.button.focused"); + public static final Border FOCUSED_BUTTON_BORDER = BorderFactory.createCompoundBorder( + BorderFactory.createEmptyBorder(2, 2, 2, 2), BorderFactory.createLineBorder(FOCUS_COLOR)); + /** * Construct a new EmptyBorderButton. * @@ -169,13 +178,17 @@ public class EmptyBorderButton extends JButton { setBorder(getRaisedBorder()); } else if (isFocusOwner()) { - setBorder(getRaisedBorder()); + setBorder(getFocusedBorder()); } else { setBorder(NO_BUTTON_BORDER); } } + protected Border getFocusedBorder() { + return FOCUSED_BUTTON_BORDER; + } + protected Border getRaisedBorder() { return RAISED_BUTTON_BORDER; }