[gtk+/wip/matthiasc/shadertoy: 3/5] Export more snapshot api
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/matthiasc/shadertoy: 3/5] Export more snapshot api
- Date: Tue, 3 Oct 2017 22:09:52 +0000 (UTC)
commit 0b8d58ca3dc4cc4c72863722b0f6965baaeeb266
Author: Matthias Clasen <mclasen redhat com>
Date: Sun Sep 24 14:45:07 2017 -0400
Export more snapshot api
We currently don't export enough api to do custom snapshots
outside libgtk. To demonstrate this in gtk4-demo, export
the necessary api here.
gtk/gtksnapshot.c | 65 ++++++++++++++++++++++++++++++++++++----------
gtk/gtksnapshot.h | 7 +++++
gtk/gtksnapshotprivate.h | 3 ++
gtk/gtkwidget.h | 4 +++
gtk/gtkwidgetprivate.h | 3 --
5 files changed, 65 insertions(+), 17 deletions(-)
---
diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c
index d846d7b..1fc517e 100644
--- a/gtk/gtksnapshot.c
+++ b/gtk/gtksnapshot.c
@@ -125,13 +125,13 @@ gtk_snapshot_state_clear (GtkSnapshotState *state)
g_clear_pointer (&state->name, g_free);
}
-void
-gtk_snapshot_init (GtkSnapshot *snapshot,
- GskRenderer *renderer,
- gboolean record_names,
- const cairo_region_t *clip,
- const char *name,
- ...)
+static void
+gtk_snapshot_init_va (GtkSnapshot *snapshot,
+ GskRenderer *renderer,
+ gboolean record_names,
+ const cairo_region_t *clip,
+ const char *name,
+ va_list args)
{
char *str;
@@ -142,13 +142,7 @@ gtk_snapshot_init (GtkSnapshot *snapshot,
snapshot->nodes = g_ptr_array_new_with_free_func ((GDestroyNotify)gsk_render_node_unref);
if (name && record_names)
- {
- va_list args;
-
- va_start (args, name);
- str = g_strdup_vprintf (name, args);
- va_end (args);
- }
+ str = g_strdup_vprintf (name, args);
else
str = NULL;
@@ -159,6 +153,38 @@ gtk_snapshot_init (GtkSnapshot *snapshot,
gtk_snapshot_collect_default);
}
+void
+gtk_snapshot_init (GtkSnapshot *snapshot,
+ GskRenderer *renderer,
+ gboolean record_names,
+ const cairo_region_t *clip,
+ const char *name,
+ ...)
+{
+ va_list args;
+
+ va_start (args, name);
+ gtk_snapshot_init_va (snapshot, renderer, record_names, clip, name, args);
+ va_end (args);
+}
+
+GtkSnapshot *
+gtk_snapshot_new (GtkSnapshot *parent,
+ const char *name,
+ ...)
+{
+ GtkSnapshot *snapshot;
+ va_list args;
+
+ snapshot = g_new (GtkSnapshot, 1);
+
+ va_start (args, name);
+ gtk_snapshot_init_va (snapshot, parent->renderer, parent->record_names, NULL, name, args);
+ va_end (args);
+
+ return snapshot;
+}
+
/**
* gtk_snapshot_push:
* @snapshot: a #GtkSnapshot
@@ -1021,6 +1047,17 @@ gtk_snapshot_finish (GtkSnapshot *snapshot)
return result;
}
+GskRenderNode *
+gtk_snapshot_free (GtkSnapshot *snapshot)
+{
+ GskRenderNode *node;
+
+ node = gtk_snapshot_finish (snapshot);
+ g_free (snapshot);
+
+ return node;
+}
+
/**
* gtk_snapshot_pop:
* @snapshot: a #GtkSnapshot
diff --git a/gtk/gtksnapshot.h b/gtk/gtksnapshot.h
index b5e21ae..c10b84c 100644
--- a/gtk/gtksnapshot.h
+++ b/gtk/gtksnapshot.h
@@ -36,6 +36,13 @@
G_BEGIN_DECLS
+GDK_AVAILABLE_IN_3_92
+GtkSnapshot * gtk_snapshot_new (GtkSnapshot *parent,
+ const char *name,
+ ...) G_GNUC_PRINTF (2, 3);
+GDK_AVAILABLE_IN_3_92
+GskRenderNode * gtk_snapshot_free (GtkSnapshot *snapshot);
+
GDK_AVAILABLE_IN_3_90
void gtk_snapshot_push (GtkSnapshot *snapshot,
gboolean keep_coordinates,
diff --git a/gtk/gtksnapshotprivate.h b/gtk/gtksnapshotprivate.h
index 1319df7..0682a8d 100644
--- a/gtk/gtksnapshotprivate.h
+++ b/gtk/gtksnapshotprivate.h
@@ -87,14 +87,17 @@ struct _GtkSnapshot {
GPtrArray *nodes;
};
+GDK_AVAILABLE_IN_ALL
void gtk_snapshot_init (GtkSnapshot *state,
GskRenderer *renderer,
gboolean record_names,
const cairo_region_t *clip,
const char *name,
...) G_GNUC_PRINTF (5, 6);
+GDK_AVAILABLE_IN_ALL
GskRenderNode * gtk_snapshot_finish (GtkSnapshot *state);
+GDK_AVAILABLE_IN_ALL
GskRenderer * gtk_snapshot_get_renderer (const GtkSnapshot *snapshot);
G_END_DECLS
diff --git a/gtk/gtkwidget.h b/gtk/gtkwidget.h
index ff2aa77..65bcb31 100644
--- a/gtk/gtkwidget.h
+++ b/gtk/gtkwidget.h
@@ -518,6 +518,10 @@ void gtk_widget_unrealize (GtkWidget *widget);
GDK_AVAILABLE_IN_ALL
void gtk_widget_draw (GtkWidget *widget,
cairo_t *cr);
+GDK_AVAILABLE_IN_3_92
+void gtk_widget_snapshot (GtkWidget *widget,
+ GtkSnapshot *snapshot);
+
/* Queuing draws */
GDK_AVAILABLE_IN_ALL
void gtk_widget_queue_draw (GtkWidget *widget);
diff --git a/gtk/gtkwidgetprivate.h b/gtk/gtkwidgetprivate.h
index 6e0b746..0b7595e 100644
--- a/gtk/gtkwidgetprivate.h
+++ b/gtk/gtkwidgetprivate.h
@@ -282,9 +282,6 @@ void gtk_widget_render (GtkWidget
GdkWindow *window,
const cairo_region_t *region);
-
-void gtk_widget_snapshot (GtkWidget *widget,
- GtkSnapshot *snapshot);
void gtk_widget_adjust_size_request (GtkWidget *widget,
GtkOrientation orientation,
gint *minimum_size,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]