mirror of
https://github.com/brl/mutter.git
synced 2024-11-24 17:10:40 -05:00
allow users of the preview widget to get a mask for windows in the correct
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. svn path=/trunk/; revision=3596
This commit is contained in:
parent
b3f766c618
commit
abdb3fd8b9
@ -1,3 +1,9 @@
|
|||||||
|
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.
|
||||||
|
|
||||||
2008-02-23 Thomas Thurman <tthurman@gnome.org>
|
2008-02-23 Thomas Thurman <tthurman@gnome.org>
|
||||||
|
|
||||||
Refactor handling of boolean preferences.
|
Refactor handling of boolean preferences.
|
||||||
|
@ -460,3 +460,112 @@ meta_preview_get_mini_icon (void)
|
|||||||
|
|
||||||
return default_icon;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -77,6 +77,9 @@ void meta_preview_set_frame_flags (MetaPreview *preview,
|
|||||||
void meta_preview_set_button_layout (MetaPreview *preview,
|
void meta_preview_set_button_layout (MetaPreview *preview,
|
||||||
const MetaButtonLayout *button_layout);
|
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_icon (void);
|
||||||
GdkPixbuf* meta_preview_get_mini_icon (void);
|
GdkPixbuf* meta_preview_get_mini_icon (void);
|
||||||
|
Loading…
Reference in New Issue
Block a user