[gtk+] API: Add gdk_window_create_similar_surface()



commit c989d3000a8f26a09d01282c8dfc7e2d5fde47d8
Author: Benjamin Otte <otte redhat com>
Date:   Thu Aug 12 23:43:11 2010 +0200

    API: Add gdk_window_create_similar_surface()

 docs/reference/gdk/gdk3-sections.txt |    1 +
 gdk/gdk.symbols                      |    1 +
 gdk/gdkwindow.c                      |   49 ++++++++++++++++++++++++++++++++++
 gdk/gdkwindow.h                      |    6 ++++
 4 files changed, 57 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/gdk/gdk3-sections.txt b/docs/reference/gdk/gdk3-sections.txt
index d14ca1b..eb3bf36 100644
--- a/docs/reference/gdk/gdk3-sections.txt
+++ b/docs/reference/gdk/gdk3-sections.txt
@@ -648,6 +648,7 @@ gdk_pango_layout_line_get_clip_region
 <SECTION>
 <TITLE>Cairo Interaction</TITLE>
 <FILE>cairo_interaction</FILE>
+gdk_window_create_similar_surface
 gdk_cairo_create
 gdk_cairo_set_source_color
 gdk_cairo_set_source_pixbuf
diff --git a/gdk/gdk.symbols b/gdk/gdk.symbols
index d4253ee..598d434 100644
--- a/gdk/gdk.symbols
+++ b/gdk/gdk.symbols
@@ -617,6 +617,7 @@ gdk_window_clear_area_e
 gdk_window_constrain_size
 gdk_window_coords_from_parent
 gdk_window_coords_to_parent
+gdk_window_create_similar_surface
 gdk_window_destroy
 gdk_window_end_paint
 gdk_window_flush
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index 89f8bd7..3201184 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -10646,3 +10646,52 @@ _gdk_window_get_input_window_for_event (GdkWindow *native_window,
 
   return event_win;
 }
+
+/**
+ * gdk_window_create_similar_surface:
+ * @window: window to make new surface similar to
+ * @content: the content for the new surface
+ * @width: width of the new surface
+ * @height: height of the new surface
+ *
+ * Create a new surface that is as compatible as possible with the
+ * given @window. For example the new surface will have the same
+ * fallback resolution and font options as @window. Generally, the new
+ * surface will also use the same backend as @window, unless that is
+ * not possible for some reason. The type of the returned surface may
+ * be examined with cairo_surface_get_type().
+ *
+ * Initially the surface contents are all 0 (transparent if contents
+ * have transparency, black otherwise.)
+ *
+ * Returns: a pointer to the newly allocated surface. The caller
+ * owns the surface and should call cairo_surface_destroy() when done
+ * with it.
+ *
+ * This function always returns a valid pointer, but it will return a
+ * pointer to a "nil" surface if @other is already in an error state
+ * or any other error occurs.
+ *
+ * Since: 2.22
+ **/
+cairo_surface_t *
+gdk_window_create_similar_surface (GdkWindow *     window,
+                                   cairo_content_t content,
+                                   int             width,
+                                   int             height)
+{
+  cairo_surface_t *window_surface, *surface;
+
+  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
+  
+  window_surface = _gdk_drawable_ref_cairo_surface (window);
+
+  surface = cairo_surface_create_similar (window_surface,
+                                          content,
+                                          width, height);
+
+  cairo_surface_destroy (window_surface);
+
+  return surface;
+}
+
diff --git a/gdk/gdkwindow.h b/gdk/gdkwindow.h
index bdba84e..516df97 100644
--- a/gdk/gdkwindow.h
+++ b/gdk/gdkwindow.h
@@ -795,6 +795,12 @@ gboolean      gdk_window_get_decorations (GdkWindow       *window,
 void	      gdk_window_set_functions	 (GdkWindow	  *window,
 					  GdkWMFunction	   functions);
 
+cairo_surface_t *
+              gdk_window_create_similar_surface (GdkWindow *window,
+                                          cairo_content_t  content,
+                                          int              width,
+                                          int              height);
+
 void          gdk_window_beep            (GdkWindow       *window);
 void          gdk_window_iconify         (GdkWindow       *window);
 void          gdk_window_deiconify       (GdkWindow       *window);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]