API: add gdk_cairo_get_clip_rectangle() convenience API

This commit is contained in:
Benjamin Otte 2010-09-09 01:45:54 +02:00
parent 39b376681c
commit d4f08efd57
4 changed files with 43 additions and 0 deletions

View File

@ -594,6 +594,7 @@ gdk_pango_context_get_for_screen
<FILE>cairo_interaction</FILE>
gdk_window_create_similar_surface
gdk_cairo_create
gdk_cairo_get_clip_rectangle
gdk_cairo_set_source_color
gdk_cairo_set_source_pixbuf
gdk_cairo_set_source_window

View File

@ -288,6 +288,7 @@ gdk_visual_type_get_type G_GNUC_CONST
#if IN_FILE(__GDK_CAIRO_C__)
gdk_cairo_create
gdk_cairo_reset_clip
gdk_cairo_get_clip_rectangle
gdk_cairo_set_source_color
gdk_cairo_set_source_pixbuf
gdk_cairo_set_source_window

View File

@ -89,6 +89,45 @@ gdk_cairo_reset_clip (cairo_t *cr,
GDK_DRAWABLE_GET_CLASS (drawable)->set_cairo_clip (drawable, cr);
}
/**
* gdk_cairo_get_clip_rectangle:
* @cr: a cairo context
* @rect: (out) (allow-none): return location for the clip, or %NULL
*
* This is a convenience function around cairo_clip_extents(). It rounds
* the clip extents to integer coordinates and returns a boolean
* indicating if a clip area exists.
*
* Returns: %TRUE if a clip rectangle exists, %FALSE if all of @cr is
* clipped and all drawing can be skipped.
**/
gboolean
gdk_cairo_get_clip_rectangle (cairo_t *cr,
GdkRectangle *rect)
{
double x1, y1, x2, y2;
gboolean clip_exists;
cairo_clip_extents (cr, &x1, &y1, &x2, &y2);
clip_exists = x1 < x2 && y1 < y2;
if (rect)
{
x1 = floor (x1);
y1 = floor (y1);
x2 = ceil (x2);
y2 = ceil (y2);
rect->x = CLAMP (x1, G_MININT, G_MAXINT);
rect->y = CLAMP (y1, G_MININT, G_MAXINT);
rect->width = CLAMP (x2 - x1, G_MININT, G_MAXINT);
rect->height = CLAMP (y2 - y1, G_MININT, G_MAXINT);
}
return clip_exists;
}
/**
* gdk_cairo_set_source_color:
* @cr: a #cairo_t

View File

@ -33,6 +33,8 @@ G_BEGIN_DECLS
cairo_t *gdk_cairo_create (GdkDrawable *drawable);
void gdk_cairo_reset_clip (cairo_t *cr,
GdkDrawable *drawable);
gboolean gdk_cairo_get_clip_rectangle(cairo_t *cr,
GdkRectangle *rect);
void gdk_cairo_set_source_color (cairo_t *cr,
const GdkColor *color);