metacity r3596 - in trunk: . src/ui
- From: tthurman svn gnome org
- To: svn-commits-list gnome org
- Subject: metacity r3596 - in trunk: . src/ui
- Date: Mon, 25 Feb 2008 15:39:49 +0000 (GMT)
Author: tthurman
Date: Mon Feb 25 15:39:49 2008
New Revision: 3596
URL: http://svn.gnome.org/viewvc/metacity?rev=3596&view=rev
Log:
2008-02-25 Thomas Wood <thos gnome org>
* src/ui/preview-widget.[ch] (meta_preview_get_clip_region):
allow users of the preview widget to get a mask for windows
in the correct shape for the current theme.
Modified:
trunk/ChangeLog
trunk/src/ui/preview-widget.c
trunk/src/ui/preview-widget.h
Modified: trunk/src/ui/preview-widget.c
==============================================================================
--- trunk/src/ui/preview-widget.c (original)
+++ trunk/src/ui/preview-widget.c Mon Feb 25 15:39:49 2008
@@ -460,3 +460,112 @@
return default_icon;
}
+
+GdkRegion *
+meta_preview_get_clip_region (MetaPreview *preview, gint new_window_width, gint new_window_height)
+{
+ GdkRectangle xrect;
+ GdkRegion *corners_xregion, *window_xregion;
+ gint flags;
+ MetaFrameLayout *fgeom;
+ MetaFrameStyle *frame_style;
+
+ g_return_if_fail (META_IS_PREVIEW (preview));
+
+ flags = (META_PREVIEW (preview)->flags);
+
+ frame_style = meta_theme_get_frame_style (preview->theme,
+ META_FRAME_TYPE_NORMAL, flags);
+
+ fgeom = frame_style->layout;
+
+ corners_xregion = gdk_region_new ();
+
+ if (fgeom->top_left_corner_rounded_radius != 0)
+ {
+ const int corner = fgeom->top_left_corner_rounded_radius;
+ const float radius = sqrt(corner) + corner;
+ int i;
+
+ for (i=0; i<corner; i++)
+ {
+
+ const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
+ xrect.x = 0;
+ xrect.y = i;
+ xrect.width = width;
+ xrect.height = 1;
+
+ gdk_region_union_with_rect (corners_xregion, &xrect);
+ }
+ }
+
+ if (fgeom->top_right_corner_rounded_radius != 0)
+ {
+ const int corner = fgeom->top_right_corner_rounded_radius;
+ const float radius = sqrt(corner) + corner;
+ int i;
+
+ for (i=0; i<corner; i++)
+ {
+ const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
+ xrect.x = new_window_width - width;
+ xrect.y = i;
+ xrect.width = width;
+ xrect.height = 1;
+
+ gdk_region_union_with_rect (corners_xregion, &xrect);
+ }
+ }
+
+ if (fgeom->bottom_left_corner_rounded_radius != 0)
+ {
+ const int corner = fgeom->bottom_left_corner_rounded_radius;
+ const float radius = sqrt(corner) + corner;
+ int i;
+
+ for (i=0; i<corner; i++)
+ {
+ const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
+ xrect.x = 0;
+ xrect.y = new_window_height - i - 1;
+ xrect.width = width;
+ xrect.height = 1;
+
+ gdk_region_union_with_rect (corners_xregion, &xrect);
+ }
+ }
+
+ if (fgeom->bottom_right_corner_rounded_radius != 0)
+ {
+ const int corner = fgeom->bottom_right_corner_rounded_radius;
+ const float radius = sqrt(corner) + corner;
+ int i;
+
+ for (i=0; i<corner; i++)
+ {
+ const int width = floor(0.5 + radius - sqrt(radius*radius - (radius-(i+0.5))*(radius-(i+0.5))));
+ xrect.x = new_window_width - width;
+ xrect.y = new_window_height - i - 1;
+ xrect.width = width;
+ xrect.height = 1;
+
+ gdk_region_union_with_rect (corners_xregion, &xrect);
+ }
+ }
+
+ window_xregion = gdk_region_new ();
+
+ xrect.x = 0;
+ xrect.y = 0;
+ xrect.width = new_window_width;
+ xrect.height = new_window_height;
+
+ gdk_region_union_with_rect (window_xregion, &xrect);
+ gdk_region_subtract (window_xregion, corners_xregion);
+ gdk_region_destroy (corners_xregion);
+
+ return window_xregion;
+}
+
+
Modified: trunk/src/ui/preview-widget.h
==============================================================================
--- trunk/src/ui/preview-widget.h (original)
+++ trunk/src/ui/preview-widget.h Mon Feb 25 15:39:49 2008
@@ -77,6 +77,9 @@
void meta_preview_set_button_layout (MetaPreview *preview,
const MetaButtonLayout *button_layout);
+GdkRegion * meta_preview_get_clip_region (MetaPreview *preview,
+ gint new_window_width,
+ gint new_window_height);
GdkPixbuf* meta_preview_get_icon (void);
GdkPixbuf* meta_preview_get_mini_icon (void);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]