return content;
}
+static cairo_t *
+gdk_cairo_context_default_cairo_create (GdkCairoContext *self)
+{
+ GdkSurface *surface;
+ cairo_region_t *region;
+ cairo_surface_t *cairo_surface;
+ cairo_t *cr;
+
+ g_return_val_if_fail (GDK_IS_CAIRO_CONTEXT (self), NULL);
+
+ surface = gdk_draw_context_get_surface (GDK_DRAW_CONTEXT (self));
+ if (surface->drawing_context == NULL ||
+ gdk_drawing_context_get_paint_context (surface->drawing_context) != GDK_DRAW_CONTEXT (self))
+ return NULL;
+
+ cairo_surface = _gdk_surface_ref_cairo_surface (surface);
+ cr = cairo_create (cairo_surface);
+
+ region = gdk_surface_get_current_paint_region (surface);
+ gdk_cairo_region (cr, region);
+ cairo_clip (cr);
+
+ cairo_region_destroy (region);
+ cairo_surface_destroy (cairo_surface);
+
+ return cr;
+}
+
static void
gdk_surface_clear_backing_region (GdkSurface *surface)
{
draw_context_class->begin_frame = gdk_cairo_context_begin_frame;
draw_context_class->end_frame = gdk_cairo_context_end_frame;
draw_context_class->surface_resized = gdk_cairo_context_surface_resized;
+
+ klass->cairo_create = gdk_cairo_context_default_cairo_create;
}
static void
cairo_t *
gdk_cairo_context_cairo_create (GdkCairoContext *self)
{
- GdkSurface *surface;
- cairo_region_t *region;
- cairo_surface_t *cairo_surface;
- cairo_t *cr;
-
- g_return_val_if_fail (GDK_IS_CAIRO_CONTEXT (self), NULL);
-
- surface = gdk_draw_context_get_surface (GDK_DRAW_CONTEXT (self));
- if (surface->drawing_context == NULL ||
- gdk_drawing_context_get_paint_context (surface->drawing_context) != GDK_DRAW_CONTEXT (self))
- return NULL;
-
- cairo_surface = _gdk_surface_ref_cairo_surface (surface);
- cr = cairo_create (cairo_surface);
-
- region = gdk_surface_get_current_paint_region (surface);
- gdk_cairo_region (cr, region);
- cairo_clip (cr);
-
- cairo_region_destroy (region);
- cairo_surface_destroy (cairo_surface);
-
- return cr;
+ return GDK_CAIRO_CONTEXT_GET_CLASS (self)->cairo_create (self);
}