cairocontext: Move a function
authorBenjamin Otte <otte@redhat.com>
Thu, 12 Apr 2018 00:10:22 +0000 (02:10 +0200)
committerBenjamin Otte <otte@redhat.com>
Tue, 24 Apr 2018 21:16:12 +0000 (23:16 +0200)
A function of GdkDrawingContext is only used when drawing with Cairo, so
move it to GdkCairoContext.

docs/reference/gdk/gdk4-sections.txt
gdk/gdkcairocontext.c
gdk/gdkcairocontext.h
gdk/gdkdrawingcontext.c
gdk/gdkdrawingcontext.h
gsk/gskcairorenderer.c

index 2cc4563ce86a27ef1b5671f4476b18012bd6cdd3..c59224ac15b9a73e0cfa31eb4c649682a06b9fab 100644 (file)
@@ -1187,7 +1187,6 @@ GDK_IS_MONITOR
 <FILE>gdkdrawingcontext</FILE>
 GdkDrawingContext
 gdk_drawing_context_get_clip
-gdk_drawing_context_get_cairo_context
 gdk_drawing_context_get_paint_context
 
 <SUBSECTION Standard>
@@ -1204,6 +1203,7 @@ GDK_IS_DRAWING_CONTEXT
 <SECTION>
 <FILE>gdkcairocontext</FILE>
 GdkCairoContext
+gdk_cairo_context_cairo_create
 
 <SUBSECTION Standard>
 gdk_cairo_context_get_type
index 1954b3a339330e77db50346fa287871e18f08cf2..596eaabfa6b26f450421e014b3dc1e2b9fed37d3 100644 (file)
@@ -223,3 +223,46 @@ gdk_cairo_context_init (GdkCairoContext *self)
 {
 }
 
+/**
+ * gdk_cairo_context_cairo_create:
+ * @context: a #GdkCairoContext that is currently drawing
+ *
+ * Retrieves a Cairo context to be used to draw on the #GdkSurface
+ * of @context. A call to gdk_surface_begin_draw_frame() with this
+ * @context must have been done or this function will return %NULL.
+ *
+ * The returned context is guaranteed to be valid until
+ * gdk_surface_end_draw_frame() is called.
+ *
+ * Returns: (transfer full) (nullable): a Cairo context to be used
+ *   to draw the contents of the #GdkSurface. %NULL is returned
+ *   when @contet is not drawing.
+ */
+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;
+}
+
index 0d2948a262aaa766981202ee950b1b80cc0ee469..dc387016131c9abb3078cdd97eb0a756f8666fbb 100644 (file)
@@ -41,6 +41,8 @@ G_BEGIN_DECLS
 GDK_AVAILABLE_IN_ALL
 GType                   gdk_cairo_context_get_type                      (void) G_GNUC_CONST;
 
+GDK_AVAILABLE_IN_ALL
+cairo_t *               gdk_cairo_context_cairo_create                  (GdkCairoContext        *self);
 
 G_END_DECLS
 
index 70569ba9cfae5107067ce1914d020ca7bab2ee8d..55da8b6d83f719ff4c828ef3ef73da07cd5557f7 100644 (file)
@@ -49,7 +49,6 @@
 #include "gdkinternals.h"
 #include "gdkintl.h"
 #include "gdksurfaceimpl.h"
-#include "gdkglcontextprivate.h"
 #include "gdk-private.h"
 
 typedef struct _GdkDrawingContextPrivate GdkDrawingContextPrivate;
@@ -205,56 +204,6 @@ gdk_drawing_context_init (GdkDrawingContext *self)
 {
 }
 
-/**
- * gdk_drawing_context_get_cairo_context:
- * @context: a #GdkDrawingContext created with a %NULL paint context
- *
- * Retrieves a Cairo context to be used to draw on the #GdkSurface
- * that created the #GdkDrawingContext. The @context must have been
- * created without a #GdkDrawContext for this function to work. If
- * gdk_drawing_context_get_paint_context() does not return %NULL,
- * then this function will.
- *
- * The returned context is guaranteed to be valid as long as the
- * #GdkDrawingContext is valid, that is between a call to
- * gdk_surface_begin_draw_frame() and gdk_surface_end_draw_frame().
- *
- * Returns: (transfer none) (nullable): a Cairo context to be used to draw
- *   the contents of the #GdkSurface. The context is owned by the
- *   #GdkDrawingContext and should not be destroyed. %NULL is
- *   returned when a paint context is in used.
- */
-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_SURFACE (priv->surface), NULL);
-
-  if (!GDK_IS_CAIRO_CONTEXT (priv->paint_context))
-    return NULL;
-
-  if (priv->cr == NULL)
-    {
-      cairo_region_t *region;
-      cairo_surface_t *surface;
-
-      surface = _gdk_surface_ref_cairo_surface (priv->surface);
-      priv->cr = cairo_create (surface);
-
-      region = gdk_surface_get_current_paint_region (priv->surface);
-      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 priv->cr;
-}
-
 /**
  * gdk_drawing_context_get_paint_context:
  * @context: a #GdkDrawingContext
index 44bb43b89ca0b01a9729f61464383e7d69dbe174..21faf0542cf2e0dc1ab273b275c21912ae020b50 100644 (file)
@@ -41,9 +41,6 @@ GdkDrawContext* gdk_drawing_context_get_paint_context   (GdkDrawingContext *cont
 GDK_AVAILABLE_IN_ALL
 cairo_region_t *gdk_drawing_context_get_clip            (GdkDrawingContext *context);
 
-GDK_AVAILABLE_IN_ALL
-cairo_t *       gdk_drawing_context_get_cairo_context   (GdkDrawingContext *context);
-
 G_END_DECLS
 
 #endif /* __GDK_DRAWING_CONTEXT_H__ */
index f5871e49a89f959d194a680faf768f8bc068760d..43d47d1aacf2b3290b2c15b1d8604c279d2b8010 100644 (file)
@@ -115,7 +115,7 @@ gsk_cairo_renderer_render (GskRenderer          *renderer,
   context = gdk_surface_begin_draw_frame (surface,
                                           GDK_DRAW_CONTEXT (self->cairo_context),
                                           region);
-  cr = gdk_drawing_context_get_cairo_context (context);
+  cr = gdk_cairo_context_cairo_create (self->cairo_context);
 
   g_return_if_fail (cr != NULL);
 
@@ -135,6 +135,8 @@ gsk_cairo_renderer_render (GskRenderer          *renderer,
 
   gsk_cairo_renderer_do_render (renderer, cr, root);
 
+  cairo_destroy (cr);
+
   gdk_surface_end_draw_frame (surface, context);
 }