Add functionality to set overall opacity of a top-level window. (#405316)

2007-04-30  Tor Lillqvist  <tml@novell.com>

	Add functionality to set overall opacity of a top-level
	window. (#405316)

	* gdk/gdk.symbols: Add gdk_window_set_opacity.

	* gdk/x11/gdkwindow-x11.c
	* gdk/win32/gdkwindow-win32.c: Implement
	gdk_window_set_opacity(). On X11 use the _NET_WM_WINDOW_OPACITY
	property. On Win32 use SetLayeredWindowAttributes(LWA_ALPHA).

	* gdk/gdkwindow.h: Declare gdk_window_set_opacity().

	* gdk/x11/gdkscreen-x11.c (gdk_screen_get_rgba_colormap): Document
	that this is not implemented in the Windows backend. Add reference
	to gdk_window_set_opacity().


svn path=/trunk/; revision=17730
This commit is contained in:
Tor Lillqvist
2007-04-30 07:27:22 +00:00
committed by Tor Lillqvist
parent 10862a344a
commit b18f044270
6 changed files with 106 additions and 2 deletions

View File

@ -382,7 +382,12 @@ gdk_screen_get_monitor_geometry (GdkScreen *screen,
* when displaying the window on the screen: in particular, for
* X an appropriate windowing manager and compositing manager
* must be running to provide appropriate display.
*
*
* This functionality is not implemented in the Windows backend.
*
* For setting an overall opacity for a top-level window, see
* gdk_window_set_opacity().
* Return value: a colormap to use for windows with an alpha channel
* or %NULL if the capability is not available.
*

View File

@ -6402,5 +6402,54 @@ gdk_window_beep (GdkWindow *window)
gdk_display_beep (display);
}
/**
* gdk_window_set_opacity:
* @window a top-level #GdkWindow
* @opacity: opacity
*
* Request the windowing system to make @window partially transparent,
* with opacity 0 being fully transparent and 1 fully opaque. (Values
* of the opacity parameter are clamped to the [0,1] range.) On X11
* this works only on X screens with a compositing manager running.
*
* For setting up per-pixel alpha, see gdk_screen_get_rgba_colormap().
*
* Since: 2.12
*/
void
gdk_window_set_opacity (GdkWindow *window,
gdouble opacity)
{
GdkDisplay *display;
guint32 cardinal;
g_return_if_fail (GDK_IS_WINDOW (window));
g_return_if_fail (WINDOW_IS_TOPLEVEL (window));
if (GDK_WINDOW_DESTROYED (window))
return;
display = gdk_drawable_get_display (window);
if (opacity < 0)
opacity = 0;
else if (opacity > 1)
opacity = 1;
cardinal = opacity * 0xffffffff;
if (cardinal == 0xffffffff)
XDeleteProperty (GDK_DISPLAY_XDISPLAY (display),
GDK_WINDOW_XID (window),
gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_WINDOW_OPACITY"));
else
XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
GDK_WINDOW_XID (window),
gdk_x11_get_xatom_by_name_for_display (display, "_NET_WM_WINDOW_OPACITY"),
XA_CARDINAL, 32,
PropModeReplace,
(guchar *) cardinal, 1);
}
#define __GDK_WINDOW_X11_C__
#include "gdkaliasdef.c"