From ea79cbdecad0b4b9b73aeaf0ad1a849352099766 Mon Sep 17 00:00:00 2001 From: Aaron Madlon-Kay Date: Tue, 10 Mar 2015 11:22:11 +0900 Subject: [PATCH 1/5] Allow customizing the color of AutoHideButtons instead of making them transparent --- .../swing/docking/AutoHideButton.java | 25 ++++++++++++++++--- .../swing/docking/AutoHideButtonPanel.java | 9 ++----- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main/java/com/vlsolutions/swing/docking/AutoHideButton.java b/src/main/java/com/vlsolutions/swing/docking/AutoHideButton.java index 689ef30..1995a23 100644 --- a/src/main/java/com/vlsolutions/swing/docking/AutoHideButton.java +++ b/src/main/java/com/vlsolutions/swing/docking/AutoHideButton.java @@ -19,8 +19,10 @@ package com.vlsolutions.swing.docking; import javax.swing.*; + import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.Color; import java.awt.Insets; import java.awt.Dimension; import java.beans.*; @@ -54,6 +56,9 @@ public class AutoHideButton extends JLabel { private int blinkCount = 0; private int MAX_BLINKS = UIManager.getInt("DockingDesktop.notificationBlinkCount"); + private Color highlightColor = UIManager.getColor("VLDocking.highlight"); + private Color bgColor = UIManager.getColor("AutoHideButton.background"); + private PropertyChangeListener keyListener = new PropertyChangeListener() { // this is a DockKey listener, not a KeyEvent listener... @@ -107,7 +112,7 @@ private void setNotification(boolean notification) { setBackground(UIManager.getColor("DockingDesktop.notificationColor")); setOpaque(true); } else { - setOpaque(false); + setHighlighted(false); } repaint(); } @@ -142,7 +147,8 @@ public void init(Dockable dockable, int zone) { setFocusable(true); - setOpaque(false); + setBackground(bgColor); + setOpaque(bgColor != null); setIconTextGap(4); setAlignmentY(1); @@ -191,12 +197,23 @@ public boolean isSelected() { /** Selects or unselects the button */ public void setSelected(boolean selected) { this.selected = selected; - setOpaque(selected); - repaint(); + setHighlighted(selected); if(selected) { key.setNotification(false); // in case we were in notification mode } } + + /** Sets the button highlight (on rollover, etc.) */ + public void setHighlighted(boolean highlighted) { + if (highlighted) { + setBackground(highlightColor); + setOpaque(true); + } else { + setBackground(bgColor); + setOpaque(bgColor != null); + } + repaint(); + } public String getUIClassID() { return uiClassID; diff --git a/src/main/java/com/vlsolutions/swing/docking/AutoHideButtonPanel.java b/src/main/java/com/vlsolutions/swing/docking/AutoHideButtonPanel.java index 1e54884..25255ec 100644 --- a/src/main/java/com/vlsolutions/swing/docking/AutoHideButtonPanel.java +++ b/src/main/java/com/vlsolutions/swing/docking/AutoHideButtonPanel.java @@ -101,22 +101,17 @@ public void remove(AutoHideButton btn) { private class ButtonHighlighter extends MouseAdapter { - Color highlight = UIManager.getColor("VLDocking.highlight"); - public void mouseEntered(MouseEvent e) { AutoHideButton btn = (AutoHideButton) e.getSource(); if(! btn.isSelected()) { // selected buttons have their own pain style - btn.setBackground(highlight); - btn.setOpaque(true); - btn.repaint(); + btn.setHighlighted(true); } } public void mouseExited(MouseEvent e) { AutoHideButton btn = (AutoHideButton) e.getSource(); if(! btn.isSelected()) { // selected buttons have their own pain style - btn.setOpaque(false); - btn.repaint(); + btn.setHighlighted(false); } } } From 591161c5e35a9e1e9fe2cc6b45245f3e671218a3 Mon Sep 17 00:00:00 2001 From: Aaron Madlon-Kay Date: Tue, 10 Mar 2015 11:22:25 +0900 Subject: [PATCH 2/5] Fix wrong constant --- .../java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java b/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java index da4e8c2..0fda576 100644 --- a/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java +++ b/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonUI.java @@ -118,7 +118,7 @@ protected void installBorder(AutoHideButton btn) { public void paint(Graphics g, JComponent comp) { AutoHideButton btn = (AutoHideButton) comp; int zone = btn.getZone(); - if(zone == DockingConstants.INT_HIDE_TOP || zone == DockingConstants.INT_SPLIT_BOTTOM) { + if(zone == DockingConstants.INT_HIDE_TOP || zone == DockingConstants.INT_HIDE_BOTTOM) { super.paint(g, comp); } else { // vertical button : we have to rely on a custom paint From 39297ab81f85dbbe02b70990cb3a6fe16e7e5887 Mon Sep 17 00:00:00 2001 From: Aaron Madlon-Kay Date: Wed, 11 Mar 2015 11:37:40 +0900 Subject: [PATCH 3/5] Use Apple-recommended method of detecting OS X --- .../com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java b/src/main/java/com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java index 0dec3db..8418e3e 100644 --- a/src/main/java/com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java +++ b/src/main/java/com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java @@ -62,7 +62,7 @@ public class DockViewTitleBarUI extends PanelUI implements PropertyChangeListener { /* hack to use custom painting except on mac os (ugly opacity effects) */ - private static boolean useCustomPaint = System.getProperty("os.name").toLowerCase().indexOf("mac os") < 0; + private static boolean useCustomPaint = !System.getProperty("os.name").contains("OS X"); private static Color panelColor = UIManager.getColor("Panel.background"); @SuppressWarnings("unused") From e489950416a0f150a2bef0535ba0e409486dbe65 Mon Sep 17 00:00:00 2001 From: Aaron Madlon-Kay Date: Wed, 11 Mar 2015 11:58:05 +0900 Subject: [PATCH 4/5] Allow disabling custom painting of DockViewTitleBar --- .../com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java b/src/main/java/com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java index 8418e3e..3b80d9e 100644 --- a/src/main/java/com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java +++ b/src/main/java/com/vlsolutions/swing/docking/ui/DockViewTitleBarUI.java @@ -62,7 +62,8 @@ public class DockViewTitleBarUI extends PanelUI implements PropertyChangeListener { /* hack to use custom painting except on mac os (ugly opacity effects) */ - private static boolean useCustomPaint = !System.getProperty("os.name").contains("OS X"); + private static boolean useCustomPaint = !System.getProperty("os.name").contains("OS X") + && !UIManager.getBoolean("DockViewTitleBar.disableCustomPaint"); private static Color panelColor = UIManager.getColor("Panel.background"); @SuppressWarnings("unused") From e5fc0b9859e5bb42e3cb5ff0e928ff3464e1fd0b Mon Sep 17 00:00:00 2001 From: Aaron Madlon-Kay Date: Wed, 11 Mar 2015 13:28:10 +0900 Subject: [PATCH 5/5] Allow setting background of AutoHideButtonPanel --- .../swing/docking/ui/AutoHideButtonPanelUI.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonPanelUI.java b/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonPanelUI.java index a711563..c23ac25 100644 --- a/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonPanelUI.java +++ b/src/main/java/com/vlsolutions/swing/docking/ui/AutoHideButtonPanelUI.java @@ -21,6 +21,7 @@ import com.vlsolutions.swing.docking.AutoHideButtonPanel; import com.vlsolutions.swing.docking.DockingConstants; +import java.awt.Color; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; @@ -59,12 +60,14 @@ public AutoHideButtonPanelUI() {} public void installUI(JComponent comp) { super.installUI(comp); installBorder((AutoHideButtonPanel) comp); + installBackground(comp); comp.addPropertyChangeListener(AutoHideButtonPanel.PROPERTY_BORDERZONE, this); } public void uninstallUI(JComponent comp) { super.uninstallUI(comp); comp.setBorder(null); + comp.setBackground(null); comp.removePropertyChangeListener(this); } @@ -85,6 +88,13 @@ protected void installBorder(AutoHideButtonPanel btnPanel) { } } + protected void installBackground(JComponent comp) { + Color color = UIManager.getColor("AutoHideButtonPanel.background"); + if (color != null) { + comp.setBackground(color); + } + } + public void propertyChange(PropertyChangeEvent e) { installBorder((AutoHideButtonPanel) e.getSource()); }