[gtk/render-node-types: 75/75] Add get_type() functions for GskRenderNode subclasses
- From: Emmanuele Bassi <ebassi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/render-node-types: 75/75] Add get_type() functions for GskRenderNode subclasses
- Date: Wed, 8 Apr 2020 14:46:41 +0000 (UTC)
commit 5b263c0f3ea347c244c6dc7959ce7acbe2fe6d5a
Author: Emmanuele Bassi <ebassi gnome org>
Date: Wed Apr 8 15:34:11 2020 +0100
Add get_type() functions for GskRenderNode subclasses
The introspection scanner tries to match a type name with a get_type()
function, in order to correctly identify a type as a class.
If the function is not available, we have two choices:
- add some special case inside the introspection scanner, similar to
how GParamSpec subclasses are handled in GObject
- add a simple get_type() function
The latter is the simplest approach, and we don't need to change that
much, since we still register all render nodes at once.
gsk/gskrendernode.h | 87 +++++++++++++++++++++++++++++++++-------------
gsk/gskrendernodeimpl.c | 33 ++++++++++++++++--
gsk/gskrendernodeprivate.h | 2 ++
3 files changed, 96 insertions(+), 26 deletions(-)
---
diff --git a/gsk/gskrendernode.h b/gsk/gskrendernode.h
index 7cc7b90b62..331be3230b 100644
--- a/gsk/gskrendernode.h
+++ b/gsk/gskrendernode.h
@@ -99,30 +99,27 @@ GskRenderNode * gsk_render_node_deserialize (GBytes
GskParseErrorFunc error_func,
gpointer user_data);
-#define GSK_TYPE_DEBUG_NODE (gsk_render_node_types[GSK_DEBUG_NODE])
-#define GSK_TYPE_COLOR_NODE (gsk_render_node_types[GSK_COLOR_NODE])
-#define GSK_TYPE_TEXTURE_NODE (gsk_render_node_types[GSK_TEXTURE_NODE])
-#define GSK_TYPE_LINEAR_GRADIENT_NODE (gsk_render_node_types[GSK_LINEAR_GRADIENT_NODE])
-#define GSK_TYPE_REPEATING_LINEAR_GRADIENT_NODE (gsk_render_node_types[GSK_REPEATING_LINEAR_GRADIENT_NODE])
-#define GSK_TYPE_BORDER_NODE (gsk_render_node_types[GSK_BORDER_NODE])
-#define GSK_TYPE_INSET_SHADOW_NODE (gsk_render_node_types[GSK_INSET_SHADOW_NODE])
-#define GSK_TYPE_OUTSET_SHADOW_NODE (gsk_render_node_types[GSK_OUTSET_SHADOW_NODE])
-#define GSK_TYPE_CAIRO_NODE (gsk_render_node_types[GSK_CAIRO_NODE])
-#define GSK_TYPE_CONTAINER_NODE (gsk_render_node_types[GSK_CONTAINER_NODE])
-#define GSK_TYPE_TRANSFORM_NODE (gsk_render_node_types[GSK_TRANSFORM_NODE])
-#define GSK_TYPE_OPACITY_NODE (gsk_render_node_types[GSK_OPACITY_NODE])
-#define GSK_TYPE_COLOR_MATRIX_NODE (gsk_render_node_types[GSK_COLOR_MATRIX_NODE])
-#define GSK_TYPE_REPEAT_NODE (gsk_render_node_types[GSK_REPEAT_NODE])
-#define GSK_TYPE_CLIP_NODE (gsk_render_node_types[GSK_CLIP_NODE])
-#define GSK_TYPE_ROUNDED_CLIP_NODE (gsk_render_node_types[GSK_ROUNDED_CLIP_NODE])
-#define GSK_TYPE_SHADOW_NODE (gsk_render_node_types[GSK_SHADOW_NODE])
-#define GSK_TYPE_BLEND_NODE (gsk_render_node_types[GSK_BLEND_NODE])
-#define GSK_TYPE_CROSS_FADE_NODE (gsk_render_node_types[GSK_CROSS_FADE_NODE])
-#define GSK_TYPE_TEXT_NODE (gsk_render_node_types[GSK_TEXT_NODE])
-#define GSK_TYPE_BLUR_NODE (gsk_render_node_types[GSK_BLUR_NODE])
-
-/*< private >*/
-GDK_EXTERN_VAR GType gsk_render_node_types[];
+#define GSK_TYPE_DEBUG_NODE (gsk_debug_node_get_type())
+#define GSK_TYPE_COLOR_NODE (gsk_color_node_get_type())
+#define GSK_TYPE_TEXTURE_NODE (gsk_texture_node_get_type())
+#define GSK_TYPE_LINEAR_GRADIENT_NODE (gsk_linear_gradient_node_get_type())
+#define GSK_TYPE_REPEATING_LINEAR_GRADIENT_NODE (gsk_repeating_linear_gradient_node_get_type())
+#define GSK_TYPE_BORDER_NODE (gsk_border_node_get_type())
+#define GSK_TYPE_INSET_SHADOW_NODE (gsk_inset_shadow_node_get_type())
+#define GSK_TYPE_OUTSET_SHADOW_NODE (gsk_outset_shadow_node_get_type())
+#define GSK_TYPE_CAIRO_NODE (gsk_cairo_node_get_type())
+#define GSK_TYPE_CONTAINER_NODE (gsk_container_node_get_type())
+#define GSK_TYPE_TRANSFORM_NODE (gsk_transform_node_get_type())
+#define GSK_TYPE_OPACITY_NODE (gsk_opacity_node_get_type())
+#define GSK_TYPE_COLOR_MATRIX_NODE (gsk_color_matrix_node_get_type())
+#define GSK_TYPE_REPEAT_NODE (gsk_repeat_node_get_type())
+#define GSK_TYPE_CLIP_NODE (gsk_clip_node_get_type())
+#define GSK_TYPE_ROUNDED_CLIP_NODE (gsk_rounded_clip_node_get_type())
+#define GSK_TYPE_SHADOW_NODE (gsk_shadow_node_get_type())
+#define GSK_TYPE_BLEND_NODE (gsk_blend_node_get_type())
+#define GSK_TYPE_CROSS_FADE_NODE (gsk_cross_fade_node_get_type())
+#define GSK_TYPE_TEXT_NODE (gsk_text_node_get_type())
+#define GSK_TYPE_BLUR_NODE (gsk_blur_node_get_type())
typedef struct _GskDebugNode GskDebugNode;
typedef struct _GskColorNode GskColorNode;
@@ -146,6 +143,8 @@ typedef struct _GskCrossFadeNode GskCrossFadeNode;
typedef struct _GskTextNode GskTextNode;
typedef struct _GskBlurNode GskBlurNode;
+GDK_AVAILABLE_IN_ALL
+GType gsk_debug_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_debug_node_new (GskRenderNode *child,
char *message);
@@ -154,18 +153,24 @@ GskRenderNode * gsk_debug_node_get_child (GskRenderNode
GDK_AVAILABLE_IN_ALL
const char * gsk_debug_node_get_message (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_color_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_color_node_new (const GdkRGBA *rgba,
const graphene_rect_t *bounds);
GDK_AVAILABLE_IN_ALL
const GdkRGBA * gsk_color_node_peek_color (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_texture_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_texture_node_new (GdkTexture *texture,
const graphene_rect_t *bounds);
GDK_AVAILABLE_IN_ALL
GdkTexture * gsk_texture_node_get_texture (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_linear_gradient_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_linear_gradient_node_new (const graphene_rect_t *bounds,
const graphene_point_t *start,
@@ -182,6 +187,8 @@ GDK_AVAILABLE_IN_ALL
const GskColorStop * gsk_linear_gradient_node_peek_color_stops (GskRenderNode *node,
gsize *n_stops);
+GDK_AVAILABLE_IN_ALL
+GType gsk_repeating_linear_gradient_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_repeating_linear_gradient_node_new (const graphene_rect_t *bounds,
const graphene_point_t *start,
@@ -189,6 +196,8 @@ GskRenderNode * gsk_repeating_linear_gradient_node_new (const graph
const GskColorStop *color_stops,
gsize
n_color_stops);
+GDK_AVAILABLE_IN_ALL
+GType gsk_border_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_border_node_new (const GskRoundedRect *outline,
const float border_width[4],
@@ -200,6 +209,8 @@ const float * gsk_border_node_peek_widths (GskRenderNode
GDK_AVAILABLE_IN_ALL
const GdkRGBA * gsk_border_node_peek_colors (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_inset_shadow_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_inset_shadow_node_new (const GskRoundedRect *outline,
const GdkRGBA *color,
@@ -220,6 +231,8 @@ float gsk_inset_shadow_node_get_spread (GskRenderNode
GDK_AVAILABLE_IN_ALL
float gsk_inset_shadow_node_get_blur_radius (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_outset_shadow_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_outset_shadow_node_new (const GskRoundedRect *outline,
const GdkRGBA *color,
@@ -240,6 +253,8 @@ float gsk_outset_shadow_node_get_spread (GskRenderNode
GDK_AVAILABLE_IN_ALL
float gsk_outset_shadow_node_get_blur_radius (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_cairo_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_cairo_node_new (const graphene_rect_t *bounds);
GDK_AVAILABLE_IN_ALL
@@ -247,6 +262,8 @@ cairo_t * gsk_cairo_node_get_draw_context (GskRenderNode
GDK_AVAILABLE_IN_ALL
cairo_surface_t * gsk_cairo_node_peek_surface (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_container_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_container_node_new (GskRenderNode **children,
guint n_children);
@@ -256,6 +273,8 @@ GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_container_node_get_child (GskRenderNode *node,
guint idx);
+GDK_AVAILABLE_IN_ALL
+GType gsk_transform_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_transform_node_new (GskRenderNode *child,
GskTransform *transform);
@@ -264,6 +283,8 @@ GskRenderNode * gsk_transform_node_get_child (GskRenderNode
GDK_AVAILABLE_IN_ALL
GskTransform * gsk_transform_node_get_transform (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_opacity_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_opacity_node_new (GskRenderNode *child,
float opacity);
@@ -272,6 +293,8 @@ GskRenderNode * gsk_opacity_node_get_child (GskRenderNode
GDK_AVAILABLE_IN_ALL
float gsk_opacity_node_get_opacity (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_color_matrix_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_color_matrix_node_new (GskRenderNode *child,
const graphene_matrix_t *color_matrix,
@@ -284,6 +307,8 @@ const graphene_matrix_t *
GDK_AVAILABLE_IN_ALL
const graphene_vec4_t * gsk_color_matrix_node_peek_color_offset (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_repeat_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_repeat_node_new (const graphene_rect_t *bounds,
GskRenderNode *child,
@@ -293,6 +318,8 @@ GskRenderNode * gsk_repeat_node_get_child (GskRenderNode
GDK_AVAILABLE_IN_ALL
const graphene_rect_t * gsk_repeat_node_peek_child_bounds (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_clip_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_clip_node_new (GskRenderNode *child,
const graphene_rect_t *clip);
@@ -301,6 +328,8 @@ GskRenderNode * gsk_clip_node_get_child (GskRenderNode
GDK_AVAILABLE_IN_ALL
const graphene_rect_t * gsk_clip_node_peek_clip (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_rounded_clip_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_rounded_clip_node_new (GskRenderNode *child,
const GskRoundedRect *clip);
@@ -309,6 +338,8 @@ GskRenderNode * gsk_rounded_clip_node_get_child (GskRenderNode
GDK_AVAILABLE_IN_ALL
const GskRoundedRect * gsk_rounded_clip_node_peek_clip (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_shadow_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_shadow_node_new (GskRenderNode *child,
const GskShadow *shadows,
@@ -321,6 +352,8 @@ const GskShadow * gsk_shadow_node_peek_shadow (GskRenderNode
GDK_AVAILABLE_IN_ALL
gsize gsk_shadow_node_get_n_shadows (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_blend_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_blend_node_new (GskRenderNode *bottom,
GskRenderNode *top,
@@ -332,6 +365,8 @@ GskRenderNode * gsk_blend_node_get_top_child (GskRenderNode
GDK_AVAILABLE_IN_ALL
GskBlendMode gsk_blend_node_get_blend_mode (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_cross_fade_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_cross_fade_node_new (GskRenderNode *start,
GskRenderNode *end,
@@ -343,6 +378,8 @@ GskRenderNode * gsk_cross_fade_node_get_end_child (GskRenderNode
GDK_AVAILABLE_IN_ALL
float gsk_cross_fade_node_get_progress (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_text_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_text_node_new (PangoFont *font,
PangoGlyphString *glyphs,
@@ -361,6 +398,8 @@ const GdkRGBA * gsk_text_node_peek_color (GskRenderNode
GDK_AVAILABLE_IN_ALL
const graphene_point_t *gsk_text_node_get_offset (GskRenderNode *node);
+GDK_AVAILABLE_IN_ALL
+GType gsk_blur_node_get_type (void) G_GNUC_CONST;
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_blur_node_new (GskRenderNode *child,
float radius);
diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c
index 48219c5758..14379c2321 100644
--- a/gsk/gskrendernodeimpl.c
+++ b/gsk/gskrendernodeimpl.c
@@ -30,8 +30,6 @@
#include "gdk/gdktextureprivate.h"
#include <cairo-ft.h>
-GType gsk_render_node_types[GSK_RENDER_NODE_TYPE_N_TYPES];
-
static inline void
gsk_cairo_rectangle (cairo_t *cr,
const graphene_rect_t *rect)
@@ -4088,10 +4086,41 @@ gsk_debug_node_get_message (GskRenderNode *node)
return self->message;
}
+GType gsk_render_node_types[GSK_RENDER_NODE_TYPE_N_TYPES];
+
#ifndef I_
# define I_(str) g_intern_static_string ((str))
#endif
+#define GSK_DEFINE_RENDER_NODE_TYPE(type_name, TYPE_ENUM_VALUE) \
+GType \
+type_name ## _get_type (void) { \
+ g_assert (gsk_render_node_types[TYPE_ENUM_VALUE] != G_TYPE_INVALID); \
+ return gsk_render_node_types[TYPE_ENUM_VALUE]; \
+}
+
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_container_node, GSK_CONTAINER_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_cairo_node, GSK_CAIRO_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_color_node, GSK_COLOR_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_linear_gradient_node, GSK_LINEAR_GRADIENT_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_repeating_linear_gradient_node, GSK_REPEATING_LINEAR_GRADIENT_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_border_node, GSK_BORDER_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_texture_node, GSK_TEXTURE_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_inset_shadow_node, GSK_INSET_SHADOW_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_outset_shadow_node, GSK_OUTSET_SHADOW_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_transform_node, GSK_TRANSFORM_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_opacity_node, GSK_OPACITY_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_color_matrix_node, GSK_COLOR_MATRIX_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_repeat_node, GSK_REPEAT_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_clip_node, GSK_CLIP_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_rounded_clip_node, GSK_ROUNDED_CLIP_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_shadow_node, GSK_SHADOW_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_blend_node, GSK_BLEND_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_cross_fade_node, GSK_CROSS_FADE_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_text_node, GSK_TEXT_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_blur_node, GSK_BLUR_NODE)
+GSK_DEFINE_RENDER_NODE_TYPE (gsk_debug_node, GSK_DEBUG_NODE)
+
/*< private >
* gsk_render_node_init_types:
*
diff --git a/gsk/gskrendernodeprivate.h b/gsk/gskrendernodeprivate.h
index 2ca03419e5..c1b5809b4e 100644
--- a/gsk/gskrendernodeprivate.h
+++ b/gsk/gskrendernodeprivate.h
@@ -15,6 +15,8 @@ typedef struct _GskRenderNodeClass GskRenderNodeClass;
*/
#define GSK_RENDER_NODE_TYPE_N_TYPES (GSK_DEBUG_NODE + 1)
+extern GType gsk_render_node_types[];
+
#define GSK_IS_RENDER_NODE_TYPE(node,type) \
(G_TYPE_INSTANCE_GET_CLASS ((node), GSK_TYPE_RENDER_NODE, GskRenderNodeClass)->node_type == (type))
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]