diff options
Diffstat (limited to 'src/macosx/classes/com')
-rw-r--r-- | src/macosx/classes/com/apple/laf/AquaPanelUI.java | 10 | ||||
-rw-r--r-- | src/macosx/classes/com/apple/laf/AquaRootPaneUI.java | 8 | ||||
-rw-r--r-- | src/macosx/classes/com/apple/laf/AquaToolBarUI.java | 12 | ||||
-rw-r--r-- | src/macosx/classes/com/apple/laf/AquaUtils.java | 50 |
4 files changed, 76 insertions, 4 deletions
diff --git a/src/macosx/classes/com/apple/laf/AquaPanelUI.java b/src/macosx/classes/com/apple/laf/AquaPanelUI.java index 07a758f7d..960705b8e 100644 --- a/src/macosx/classes/com/apple/laf/AquaPanelUI.java +++ b/src/macosx/classes/com/apple/laf/AquaPanelUI.java @@ -32,10 +32,20 @@ import javax.swing.plaf.basic.BasicPanelUI; import com.apple.laf.AquaUtils.RecyclableSingleton; import com.apple.laf.AquaUtils.RecyclableSingletonFromDefaultConstructor; +import java.awt.Graphics; + public class AquaPanelUI extends BasicPanelUI { static RecyclableSingleton<AquaPanelUI> instance = new RecyclableSingletonFromDefaultConstructor<AquaPanelUI>(AquaPanelUI.class); public static ComponentUI createUI(final JComponent c) { return instance.get(); } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java b/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java index e7277128f..6f3c1f253 100644 --- a/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java +++ b/src/macosx/classes/com/apple/laf/AquaRootPaneUI.java @@ -319,4 +319,12 @@ public class AquaRootPaneUI extends BasicRootPaneUI implements AncestorListener, updateComponentTreeUIActivation(element, active); } } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/src/macosx/classes/com/apple/laf/AquaToolBarUI.java b/src/macosx/classes/com/apple/laf/AquaToolBarUI.java index 660cff318..bf87e2d1b 100644 --- a/src/macosx/classes/com/apple/laf/AquaToolBarUI.java +++ b/src/macosx/classes/com/apple/laf/AquaToolBarUI.java @@ -73,9 +73,7 @@ public class AquaToolBarUI extends BasicToolBarUI implements SwingConstants { g.translate(x, y); if (c.isOpaque()) { - final Color background = c.getBackground(); - g.setColor(background); - g.fillRect(0, 0, w - 1, h - 1); + AquaUtils.fillRect(g, c, c.getBackground(), 0, 0, w - 1, h - 1); } final Color oldColor = g.getColor(); @@ -137,4 +135,12 @@ public class AquaToolBarUI extends BasicToolBarUI implements SwingConstants { return true; } } + + @Override + public final void update(final Graphics g, final JComponent c) { + if (c.isOpaque()) { + AquaUtils.fillRect(g, c); + } + paint(g, c); + } } diff --git a/src/macosx/classes/com/apple/laf/AquaUtils.java b/src/macosx/classes/com/apple/laf/AquaUtils.java index 58b0d1efb..0592da714 100644 --- a/src/macosx/classes/com/apple/laf/AquaUtils.java +++ b/src/macosx/classes/com/apple/laf/AquaUtils.java @@ -28,18 +28,19 @@ package com.apple.laf; import java.awt.*; import java.awt.image.*; import java.lang.ref.SoftReference; -import java.lang.ref.WeakReference; import java.lang.reflect.Method; import java.security.PrivilegedAction; import java.util.*; import javax.swing.*; import javax.swing.border.Border; +import javax.swing.plaf.UIResource; import sun.awt.AppContext; import sun.lwawt.macosx.CImage; import sun.lwawt.macosx.CImage.Creator; +import sun.lwawt.macosx.CPlatformWindow; import sun.swing.SwingUtilities2; import com.apple.laf.AquaImageFactory.SlicedImageControl; @@ -389,4 +390,51 @@ public class AquaUtils { return false; } } + + protected static boolean isWindowTextured(final Component c) { + if (!(c instanceof JComponent)) { + return false; + } + final JRootPane pane = ((JComponent) c).getRootPane(); + if (pane == null) { + return false; + } + Object prop = pane.getClientProperty( + CPlatformWindow.WINDOW_BRUSH_METAL_LOOK); + if (prop != null) { + return Boolean.parseBoolean(prop.toString()); + } + prop = pane.getClientProperty(CPlatformWindow.WINDOW_STYLE); + return prop != null && "textured".equals(prop); + } + + private static Color resetAlpha(final Color color) { + return new Color(color.getRed(), color.getGreen(), color.getBlue(), 0); + } + + protected static void fillRect(final Graphics g, final Component c) { + fillRect(g, c, c.getBackground(), 0, 0, c.getWidth(), c.getHeight()); + } + + protected static void fillRect(final Graphics g, final Component c, + final Color color, final int x, final int y, + final int w, final int h) { + if (!(g instanceof Graphics2D)) { + return; + } + final Graphics2D cg = (Graphics2D) g.create(); + try { + if (color instanceof UIResource && isWindowTextured(c) + && color.equals(SystemColor.window)) { + cg.setComposite(AlphaComposite.Src); + cg.setColor(resetAlpha(color)); + } else { + cg.setColor(color); + } + cg.fillRect(x, y, w, h); + } finally { + cg.dispose(); + } + } } + |