[gtk+] selection: Add texture getter/setter



commit 20de4c86ad1d89feb2c54793ea4f42000f015696
Author: Benjamin Otte <otte redhat com>
Date:   Sat Dec 2 14:25:35 2017 +0100

    selection: Add texture getter/setter

 docs/reference/gtk/gtk4-sections.txt |    2 +
 gtk/gtkselection.c                   |   64 ++++++++++++++++++++++++++++++++++
 gtk/gtkselection.h                   |    5 +++
 3 files changed, 71 insertions(+), 0 deletions(-)
---
diff --git a/docs/reference/gtk/gtk4-sections.txt b/docs/reference/gtk/gtk4-sections.txt
index 4a73241..fb52430 100644
--- a/docs/reference/gtk/gtk4-sections.txt
+++ b/docs/reference/gtk/gtk4-sections.txt
@@ -5207,6 +5207,8 @@ gtk_selection_data_set_pixbuf
 gtk_selection_data_get_pixbuf
 gtk_selection_data_set_surface
 gtk_selection_data_get_surface
+gtk_selection_data_set_texture
+gtk_selection_data_get_texture
 gtk_selection_data_set_uris
 gtk_selection_data_get_uris
 gtk_selection_data_get_targets
diff --git a/gtk/gtkselection.c b/gtk/gtkselection.c
index b848485..f90f5ef 100644
--- a/gtk/gtkselection.c
+++ b/gtk/gtkselection.c
@@ -90,6 +90,7 @@
 #include "gdk-pixbuf/gdk-pixbuf.h"
 
 #include "gdk/gdkcontentformatsprivate.h"
+#include "gdk/gdktextureprivate.h"
 
 #ifdef GDK_WINDOWING_X11
 #include "x11/gdkx.h"
@@ -1556,6 +1557,69 @@ gtk_selection_data_get_pixbuf (const GtkSelectionData *selection_data)
 }
 
 /**
+ * gtk_selection_data_set_texture:
+ * @selection_data: a #GtkSelectionData
+ * @texture: a #GdkTexture
+ * 
+ * Sets the contents of the selection from a #GdkTexture.
+ * The surface is converted to the form determined by
+ * @selection_data->target.
+ * 
+ * Returns: %TRUE if the selection was successfully set,
+ *   otherwise %FALSE.
+ *
+ * Since: 3.94
+ **/
+gboolean
+gtk_selection_data_set_texture (GtkSelectionData *selection_data,
+                                GdkTexture       *texture)
+{
+  cairo_surface_t *surface;
+  gboolean retval;
+
+  g_return_val_if_fail (selection_data != NULL, FALSE);
+  g_return_val_if_fail (GDK_IS_TEXTURE (texture), FALSE);
+
+  surface = gdk_texture_download_surface (texture);
+  retval = gtk_selection_data_set_surface (selection_data, surface);
+  cairo_surface_destroy (surface);
+
+  return retval;
+}
+
+/**
+ * gtk_selection_data_get_texture:
+ * @selection_data: a #GtkSelectionData
+ * 
+ * Gets the contents of the selection data as a #GdkPixbuf.
+ * 
+ * Returns: (nullable) (transfer full): if the selection data
+ *   contained a recognized image type and it could be converted to a
+ *   #GdkTexture, a newly allocated texture is returned, otherwise
+ *   %NULL.  If the result is non-%NULL it must be freed with
+ *   g_object_unref().
+ *
+ * Since: 3.94
+ **/
+GdkTexture *
+gtk_selection_data_get_texture (const GtkSelectionData *selection_data)
+{
+  GdkTexture *texture;
+  GdkPixbuf *pixbuf;
+
+  g_return_val_if_fail (selection_data != NULL, NULL);
+
+  pixbuf = gtk_selection_data_get_pixbuf (selection_data);
+  if (pixbuf == NULL)
+    return NULL;
+
+  texture = gdk_texture_new_for_pixbuf (pixbuf);
+  g_object_unref (pixbuf);
+
+  return texture;
+}
+
+/**
  * gtk_selection_data_set_uris:
  * @selection_data: a #GtkSelectionData
  * @uris: (array zero-terminated=1): a %NULL-terminated array of
diff --git a/gtk/gtkselection.h b/gtk/gtkselection.h
index 3f0d69b..b386b0f 100644
--- a/gtk/gtkselection.h
+++ b/gtk/gtkselection.h
@@ -115,6 +115,11 @@ gboolean gtk_selection_data_set_surface (GtkSelectionData  *selection_data,
                                          cairo_surface_t   *surface);
 GDK_AVAILABLE_IN_ALL
 GdkPixbuf *gtk_selection_data_get_pixbuf (const GtkSelectionData  *selection_data);
+GDK_AVAILABLE_IN_3_94
+gboolean gtk_selection_data_set_texture (GtkSelectionData *selection_data,
+                                         GdkTexture       *texture);
+GDK_AVAILABLE_IN_3_94
+GdkTexture *gtk_selection_data_get_texture (const GtkSelectionData *selection_data);
 GDK_AVAILABLE_IN_ALL
 gboolean gtk_selection_data_set_uris (GtkSelectionData     *selection_data,
                                       gchar               **uris);


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