com.sun.jna.examples

Class WindowUtils

public class WindowUtils extends Object

Provides additional features on a Java Window. NOTE: since there is no explicit way to force PopupFactory to use a heavyweight popup, and anything but a heavyweight popup will be clipped by a window mask, an additional subwindow is added to all masked windows to implicitly force PopupFactory to use a heavyweight window and avoid clipping.

NOTE: Neither shaped windows nor transparency currently works with Java 1.4 under X11. This is at least partly due to 1.4 using multiple X11 windows for a single given Java window. It *might* be possible to remedy by applying the window region/transparency to all descendants, but I haven't tried it. In addition, windows must be both displayable and visible before the corresponding native Drawable may be obtained; in later Java versions, the window need only be displayable.

NOTE: If you use setWindowMask and override Window#paint(Graphics) on OS X, you'll need to explicitly set the clip mask on the Graphics object with the window mask; only the content pane of the window and below have the window mask automatically applied.

NOTE: On OSX, the property apple.awt.draggableWindowBackground is set automatically when a window's background color has an alpha component. That property must be set to its final value before the heavyweight peer for the Window is created. Once Component#addNotify has been called on the component, causing creation of the heavyweight peer, changing this property has no effect.

See Also: Apple Technote 2007

Nested Class Summary
abstract static classWindowUtils.NativeWindowUtils
Window utilities with differing native implementations.
protected static classWindowUtils.RepaintTrigger
This can be installed over a JLayeredPane in order to listen for repaint requests.
Field Summary
static ShapeMASK_NONE
Use this to clear a window mask.
Method Summary
static GraphicsConfigurationgetAlphaCompatibleGraphicsConfiguration()
Returns a GraphicsConfiguration comptible with alpha compositing.
static booleanisWindowAlphaSupported()
Indicate a window can have a global alpha setting.
static voidsetComponentMask(Component c, Shape mask)
Applies the given mask to the given heavyweight component.
static voidsetWindowAlpha(Window w, float alpha)
Set the overall window transparency.
static voidsetWindowMask(Window w, Shape mask)
Applies the given mask to the given window.
static voidsetWindowMask(Window w, Icon mask)
Applies the given mask to the given window.
static voidsetWindowTransparent(Window w, boolean transparent)
Set the window to be transparent.

Field Detail

MASK_NONE

public static final Shape MASK_NONE
Use this to clear a window mask.

Method Detail

getAlphaCompatibleGraphicsConfiguration

public static GraphicsConfiguration getAlphaCompatibleGraphicsConfiguration()
Returns a GraphicsConfiguration comptible with alpha compositing.

isWindowAlphaSupported

public static boolean isWindowAlphaSupported()
Indicate a window can have a global alpha setting.

setComponentMask

public static void setComponentMask(Component c, Shape mask)
Applies the given mask to the given heavyweight component. Does nothing if the operation is not supported. The mask is treated as a bitmap and ignores transparency.

setWindowAlpha

public static void setWindowAlpha(Window w, float alpha)
Set the overall window transparency. An alpha of 1.0 is fully opaque, 0.0 fully transparent. The alpha level is applied equally to all window pixels.

NOTE: Windows requires that sun.java2d.noddraw=true in order for alpha to work.

NOTE: On OSX, the property apple.awt.draggableWindowBackground must be set to its final value before the heavyweight peer for the Window is created. Once Component#addNotify has been called on the component, causing creation of the heavyweight peer, changing this property has no effect.

See Also: Apple Technote 2007

setWindowMask

public static void setWindowMask(Window w, Shape mask)
Applies the given mask to the given window. Does nothing if the operation is not supported. The mask is treated as a bitmap and ignores transparency.

setWindowMask

public static void setWindowMask(Window w, Icon mask)
Applies the given mask to the given window. Does nothing if the operation is not supported. The mask is treated as a bitmap and ignores transparency.

setWindowTransparent

public static void setWindowTransparent(Window w, boolean transparent)
Set the window to be transparent. Only explicitly painted pixels will be non-transparent. All pixels will be composited with whatever is under the window using their alpha values. On OSX, the property apple.awt.draggableWindowBackground must be set to its final value before the heavyweight peer for the Window is created. Once Component#addNotify has been called on the component, causing creation of the heavyweight peer, changing this property has no effect.

See Also: Apple Technote 2007

Copyright © 2007-2009 Timothy Wall. All Rights Reserved.