diff options
author | Benjamin Otte <otte@redhat.com> | 2016-11-20 20:24:07 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2016-11-23 18:49:48 +0100 |
commit | 4dedafb79b8b9cf6043b5a9cc5a533bf343071cf (patch) | |
tree | 54c69d1e54f36a358fe2328a327a077678cdd44c | |
parent | 4850271ae81f346fb508692f6939c0c2c5883452 (diff) | |
download | gtk+-4dedafb79b8b9cf6043b5a9cc5a533bf343071cf.tar.gz |
drawingcontext: Add a private struct
This is to control what backends can and cannot access.
-rw-r--r-- | gdk/gdkdrawingcontext.c | 73 | ||||
-rw-r--r-- | gdk/gdkdrawingcontextprivate.h | 5 |
2 files changed, 47 insertions, 31 deletions
diff --git a/gdk/gdkdrawingcontext.c b/gdk/gdkdrawingcontext.c index 2bf4210495..81fb64d970 100644 --- a/gdk/gdkdrawingcontext.c +++ b/gdk/gdkdrawingcontext.c @@ -46,7 +46,16 @@ #include "gdkglcontextprivate.h" #include "gdk-private.h" -G_DEFINE_TYPE (GdkDrawingContext, gdk_drawing_context, G_TYPE_OBJECT) +typedef struct _GdkDrawingContextPrivate GdkDrawingContextPrivate; + +struct _GdkDrawingContextPrivate { + GdkWindow *window; + + cairo_region_t *clip; + cairo_t *cr; +}; + +G_DEFINE_TYPE_WITH_PRIVATE (GdkDrawingContext, gdk_drawing_context, G_TYPE_OBJECT) enum { PROP_0, @@ -63,16 +72,17 @@ static void gdk_drawing_context_dispose (GObject *gobject) { GdkDrawingContext *self = GDK_DRAWING_CONTEXT (gobject); + GdkDrawingContextPrivate *priv = gdk_drawing_context_get_instance_private (self); /* Unset the drawing context, in case somebody is holding * onto the Cairo context */ - if (self->cr != NULL) - gdk_cairo_set_drawing_context (self->cr, NULL); + if (priv->cr != NULL) + gdk_cairo_set_drawing_context (priv->cr, NULL); - g_clear_object (&self->window); - g_clear_pointer (&self->clip, cairo_region_destroy); - g_clear_pointer (&self->cr, cairo_destroy); + g_clear_object (&priv->window); + g_clear_pointer (&priv->clip, cairo_region_destroy); + g_clear_pointer (&priv->cr, cairo_destroy); G_OBJECT_CLASS (gdk_drawing_context_parent_class)->dispose (gobject); } @@ -84,15 +94,16 @@ gdk_drawing_context_set_property (GObject *gobject, GParamSpec *pspec) { GdkDrawingContext *self = GDK_DRAWING_CONTEXT (gobject); + GdkDrawingContextPrivate *priv = gdk_drawing_context_get_instance_private (self); switch (prop_id) { case PROP_WINDOW: - self->window = g_value_dup_object (value); + priv->window = g_value_dup_object (value); break; case PROP_CLIP: - self->clip = g_value_dup_boxed (value); + priv->clip = g_value_dup_boxed (value); break; default: @@ -107,15 +118,16 @@ gdk_drawing_context_get_property (GObject *gobject, GParamSpec *pspec) { GdkDrawingContext *self = GDK_DRAWING_CONTEXT (gobject); + GdkDrawingContextPrivate *priv = gdk_drawing_context_get_instance_private (self); switch (prop_id) { case PROP_WINDOW: - g_value_set_object (value, self->window); + g_value_set_object (value, priv->window); break; case PROP_CLIP: - g_value_set_boxed (value, self->clip); + g_value_set_boxed (value, priv->clip); break; default: @@ -127,8 +139,9 @@ static void gdk_drawing_context_constructed (GObject *gobject) { GdkDrawingContext *self = GDK_DRAWING_CONTEXT (gobject); + GdkDrawingContextPrivate *priv = gdk_drawing_context_get_instance_private (self); - if (self->window == NULL) + if (priv->window == NULL) { g_critical ("The drawing context of type %s does not have a window " "associated to it. Drawing contexts can only be created " @@ -232,29 +245,31 @@ gdk_cairo_get_drawing_context (cairo_t *cr) cairo_t * gdk_drawing_context_get_cairo_context (GdkDrawingContext *context) { + GdkDrawingContextPrivate *priv = gdk_drawing_context_get_instance_private (context); + g_return_val_if_fail (GDK_IS_DRAWING_CONTEXT (context), NULL); - g_return_val_if_fail (GDK_IS_WINDOW (context->window), NULL); + g_return_val_if_fail (GDK_IS_WINDOW (priv->window), NULL); - if (context->cr == NULL) + if (priv->cr == NULL) { cairo_region_t *region; cairo_surface_t *surface; - surface = _gdk_window_ref_cairo_surface (context->window); - context->cr = cairo_create (surface); + surface = _gdk_window_ref_cairo_surface (priv->window); + priv->cr = cairo_create (surface); - gdk_cairo_set_drawing_context (context->cr, context); + gdk_cairo_set_drawing_context (priv->cr, context); - region = gdk_window_get_current_paint_region (context->window); - cairo_region_union (region, context->clip); - gdk_cairo_region (context->cr, region); - cairo_clip (context->cr); + region = gdk_window_get_current_paint_region (priv->window); + cairo_region_union (region, priv->clip); + gdk_cairo_region (priv->cr, region); + cairo_clip (priv->cr); cairo_region_destroy (region); cairo_surface_destroy (surface); } - return context->cr; + return priv->cr; } /** @@ -270,9 +285,11 @@ gdk_drawing_context_get_cairo_context (GdkDrawingContext *context) GdkWindow * gdk_drawing_context_get_window (GdkDrawingContext *context) { + GdkDrawingContextPrivate *priv = gdk_drawing_context_get_instance_private (context); + g_return_val_if_fail (GDK_IS_DRAWING_CONTEXT (context), NULL); - return context->window; + return priv->window; } /** @@ -288,12 +305,14 @@ gdk_drawing_context_get_window (GdkDrawingContext *context) cairo_region_t * gdk_drawing_context_get_clip (GdkDrawingContext *context) { + GdkDrawingContextPrivate *priv = gdk_drawing_context_get_instance_private (context); + g_return_val_if_fail (GDK_IS_DRAWING_CONTEXT (context), NULL); - if (context->clip == NULL) + if (priv->clip == NULL) return NULL; - return cairo_region_copy (context->clip); + return cairo_region_copy (priv->clip); } /** @@ -309,12 +328,14 @@ gdk_drawing_context_get_clip (GdkDrawingContext *context) gboolean gdk_drawing_context_is_valid (GdkDrawingContext *context) { + GdkDrawingContextPrivate *priv = gdk_drawing_context_get_instance_private (context); + g_return_val_if_fail (GDK_IS_DRAWING_CONTEXT (context), FALSE); - if (context->window == NULL) + if (priv->window == NULL) return FALSE; - if (gdk_window_get_drawing_context (context->window) != context) + if (gdk_window_get_drawing_context (priv->window) != context) return FALSE; return TRUE; diff --git a/gdk/gdkdrawingcontextprivate.h b/gdk/gdkdrawingcontextprivate.h index a41cf02a04..8dcc3326ad 100644 --- a/gdk/gdkdrawingcontextprivate.h +++ b/gdk/gdkdrawingcontextprivate.h @@ -12,11 +12,6 @@ G_BEGIN_DECLS struct _GdkDrawingContext { GObject parent_instance; - - GdkWindow *window; - - cairo_region_t *clip; - cairo_t *cr; }; struct _GdkDrawingContextClass |