diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c index ef47909750..3a2732428e 100644 --- a/gtk/gtksnapshot.c +++ b/gtk/gtksnapshot.c @@ -54,6 +54,76 @@ * use gtk_snapshot_new(). */ +typedef struct _GtkSnapshotState GtkSnapshotState; + +typedef GskRenderNode * (* GtkSnapshotCollectFunc) (GtkSnapshot *snapshot, + GtkSnapshotState *state, + GskRenderNode **nodes, + guint n_nodes); + +struct _GtkSnapshotState { + guint start_node_index; + guint n_nodes; + + GskTransform * transform; + + GtkSnapshotCollectFunc collect_func; + union { + struct { + double opacity; + } opacity; + struct { + double radius; + } blur; + struct { + graphene_matrix_t matrix; + graphene_vec4_t offset; + } color_matrix; + struct { + graphene_rect_t bounds; + graphene_rect_t child_bounds; + } repeat; + struct { + graphene_rect_t bounds; + } clip; + struct { + GskRoundedRect bounds; + } rounded_clip; + struct { + gsize n_shadows; + GskShadow *shadows; + GskShadow a_shadow; /* Used if n_shadows == 1 */ + } shadow; + struct { + GskBlendMode blend_mode; + GskRenderNode *bottom_node; + } blend; + struct { + double progress; + GskRenderNode *start_node; + } cross_fade; + struct { + char *message; + } debug; + } data; +}; + +/* This is a nasty little hack. We typedef GtkSnapshot to the fake object GdkSnapshot + * so that we don't need to typecast between them. + * After all, the GdkSnapshot only exist so poor language bindings don't trip. Hardcore + * C code can just blatantly ignore such layering violations with a typedef. + */ +struct _GdkSnapshot { + GObject parent_instance; /* it's really GdkSnapshot, but don't tell anyone! */ + + GArray *state_stack; + GPtrArray *nodes; +}; + +struct _GtkSnapshotClass { + GObjectClass parent_class; /* it's really GdkSnapshotClass, but don't tell anyone! */ +}; + G_DEFINE_TYPE (GtkSnapshot, gtk_snapshot, GDK_TYPE_SNAPSHOT) static void diff --git a/gtk/gtksnapshotprivate.h b/gtk/gtksnapshotprivate.h index aebf5c3840..99714c5a99 100644 --- a/gtk/gtksnapshotprivate.h +++ b/gtk/gtksnapshotprivate.h @@ -24,76 +24,6 @@ G_BEGIN_DECLS -typedef struct _GtkSnapshotState GtkSnapshotState; - -typedef GskRenderNode * (* GtkSnapshotCollectFunc) (GtkSnapshot *snapshot, - GtkSnapshotState *state, - GskRenderNode **nodes, - guint n_nodes); - -struct _GtkSnapshotState { - guint start_node_index; - guint n_nodes; - - GskTransform * transform; - - GtkSnapshotCollectFunc collect_func; - union { - struct { - double opacity; - } opacity; - struct { - double radius; - } blur; - struct { - graphene_matrix_t matrix; - graphene_vec4_t offset; - } color_matrix; - struct { - graphene_rect_t bounds; - graphene_rect_t child_bounds; - } repeat; - struct { - graphene_rect_t bounds; - } clip; - struct { - GskRoundedRect bounds; - } rounded_clip; - struct { - gsize n_shadows; - GskShadow *shadows; - GskShadow a_shadow; /* Used if n_shadows == 1 */ - } shadow; - struct { - GskBlendMode blend_mode; - GskRenderNode *bottom_node; - } blend; - struct { - double progress; - GskRenderNode *start_node; - } cross_fade; - struct { - char *message; - } debug; - } data; -}; - -/* This is a nasty little hack. We typedef GtkSnapshot to the fake object GdkSnapshot - * so that we don't need to typecast between them. - * After all, the GdkSnapshot only exist so poor language bindings don't trip. Hardcore - * C code can just blatantly ignore such layering violations with a typedef. - */ -struct _GdkSnapshot { - GObject parent_instance; /* it's really GdkSnapshot, but don't tell anyone! */ - - GArray *state_stack; - GPtrArray *nodes; -}; - -struct _GtkSnapshotClass { - GObjectClass parent_class; /* it's really GdkSnapshotClass, but don't tell anyone! */ -}; - void gtk_snapshot_append_text (GtkSnapshot *snapshot, PangoFont *font, PangoGlyphString *glyphs,