deform-effect: Use macros for subclassing boilerplate

Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
This commit is contained in:
Bilal Elmoussaoui 2023-11-10 17:51:20 +01:00
parent accff6b937
commit 581343dc9a
3 changed files with 51 additions and 42 deletions

View File

@ -35,7 +35,6 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBlurEffect, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBoxLayout, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBoxLayout, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBrightnessContrastEffect, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterBrightnessContrastEffect, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterClone, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterClone, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDeformEffect, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDesaturateEffect, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDesaturateEffect, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterFixedLayout, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterFixedLayout, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterFlowLayout, g_object_unref) G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterFlowLayout, g_object_unref)

View File

@ -62,7 +62,7 @@
#define DEFAULT_N_TILES 32 #define DEFAULT_N_TILES 32
struct _ClutterDeformEffectPrivate typedef struct _ClutterDeformEffectPrivate
{ {
CoglPipeline *back_pipeline; CoglPipeline *back_pipeline;
@ -80,7 +80,7 @@ struct _ClutterDeformEffectPrivate
gulong allocation_id; gulong allocation_id;
guint is_dirty : 1; guint is_dirty : 1;
}; } ClutterDeformEffectPrivate;
enum enum
{ {
@ -129,14 +129,19 @@ vbo_invalidate (ClutterActor *actor,
GParamSpec *pspec, GParamSpec *pspec,
ClutterDeformEffect *effect) ClutterDeformEffect *effect)
{ {
effect->priv->is_dirty = TRUE; ClutterDeformEffectPrivate *priv =
clutter_deform_effect_get_instance_private (effect);
priv->is_dirty = TRUE;
} }
static void static void
clutter_deform_effect_set_actor (ClutterActorMeta *meta, clutter_deform_effect_set_actor (ClutterActorMeta *meta,
ClutterActor *actor) ClutterActor *actor)
{ {
ClutterDeformEffectPrivate *priv = CLUTTER_DEFORM_EFFECT (meta)->priv; ClutterDeformEffect *effect = CLUTTER_DEFORM_EFFECT (meta);
ClutterDeformEffectPrivate *priv =
clutter_deform_effect_get_instance_private (effect);
if (priv->allocation_id != 0) if (priv->allocation_id != 0)
{ {
@ -166,8 +171,9 @@ clutter_deform_effect_paint_target (ClutterOffscreenEffect *effect,
ClutterPaintNode *node, ClutterPaintNode *node,
ClutterPaintContext *paint_context) ClutterPaintContext *paint_context)
{ {
ClutterDeformEffect *self= CLUTTER_DEFORM_EFFECT (effect); ClutterDeformEffect *self = CLUTTER_DEFORM_EFFECT (effect);
ClutterDeformEffectPrivate *priv = self->priv; ClutterDeformEffectPrivate *priv =
clutter_deform_effect_get_instance_private (self);
CoglPipeline *pipeline; CoglPipeline *pipeline;
CoglDepthState depth_state; CoglDepthState depth_state;
@ -335,7 +341,8 @@ clutter_deform_effect_paint_target (ClutterOffscreenEffect *effect,
static inline void static inline void
clutter_deform_effect_free_arrays (ClutterDeformEffect *self) clutter_deform_effect_free_arrays (ClutterDeformEffect *self)
{ {
ClutterDeformEffectPrivate *priv = self->priv; ClutterDeformEffectPrivate *priv =
clutter_deform_effect_get_instance_private (self);
g_clear_object (&priv->buffer); g_clear_object (&priv->buffer);
g_clear_object (&priv->primitive); g_clear_object (&priv->primitive);
@ -345,7 +352,8 @@ clutter_deform_effect_free_arrays (ClutterDeformEffect *self)
static void static void
clutter_deform_effect_init_arrays (ClutterDeformEffect *self) clutter_deform_effect_init_arrays (ClutterDeformEffect *self)
{ {
ClutterDeformEffectPrivate *priv = self->priv; ClutterDeformEffectPrivate *priv =
clutter_deform_effect_get_instance_private (self);
gint x, y, direction, n_indices; gint x, y, direction, n_indices;
CoglAttribute *attributes[3]; CoglAttribute *attributes[3];
guint16 *static_indices; guint16 *static_indices;
@ -485,7 +493,8 @@ clutter_deform_effect_init_arrays (ClutterDeformEffect *self)
static inline void static inline void
clutter_deform_effect_free_back_pipeline (ClutterDeformEffect *self) clutter_deform_effect_free_back_pipeline (ClutterDeformEffect *self)
{ {
ClutterDeformEffectPrivate *priv = self->priv; ClutterDeformEffectPrivate *priv =
clutter_deform_effect_get_instance_private (self);
g_clear_object (&priv->back_pipeline); g_clear_object (&priv->back_pipeline);
} }
@ -508,16 +517,18 @@ clutter_deform_effect_set_property (GObject *gobject,
GParamSpec *pspec) GParamSpec *pspec)
{ {
ClutterDeformEffect *self = CLUTTER_DEFORM_EFFECT (gobject); ClutterDeformEffect *self = CLUTTER_DEFORM_EFFECT (gobject);
ClutterDeformEffectPrivate *priv =
clutter_deform_effect_get_instance_private (self);
switch (prop_id) switch (prop_id)
{ {
case PROP_X_TILES: case PROP_X_TILES:
clutter_deform_effect_set_n_tiles (self, g_value_get_uint (value), clutter_deform_effect_set_n_tiles (self, g_value_get_uint (value),
self->priv->y_tiles); priv->y_tiles);
break; break;
case PROP_Y_TILES: case PROP_Y_TILES:
clutter_deform_effect_set_n_tiles (self, self->priv->x_tiles, clutter_deform_effect_set_n_tiles (self, priv->x_tiles,
g_value_get_uint (value)); g_value_get_uint (value));
break; break;
@ -537,7 +548,9 @@ clutter_deform_effect_get_property (GObject *gobject,
GValue *value, GValue *value,
GParamSpec *pspec) GParamSpec *pspec)
{ {
ClutterDeformEffectPrivate *priv = CLUTTER_DEFORM_EFFECT (gobject)->priv; ClutterDeformEffect *effect = CLUTTER_DEFORM_EFFECT (gobject);
ClutterDeformEffectPrivate *priv =
clutter_deform_effect_get_instance_private (effect);
switch (prop_id) switch (prop_id)
{ {
@ -623,9 +636,11 @@ clutter_deform_effect_class_init (ClutterDeformEffectClass *klass)
static void static void
clutter_deform_effect_init (ClutterDeformEffect *self) clutter_deform_effect_init (ClutterDeformEffect *self)
{ {
self->priv = clutter_deform_effect_get_instance_private (self); ClutterDeformEffectPrivate *priv =
self->priv->x_tiles = self->priv->y_tiles = DEFAULT_N_TILES; clutter_deform_effect_get_instance_private (self);
self->priv->back_pipeline = NULL;
priv->x_tiles = priv->y_tiles = DEFAULT_N_TILES;
priv->back_pipeline = NULL;
clutter_deform_effect_init_arrays (self); clutter_deform_effect_init_arrays (self);
} }
@ -650,7 +665,7 @@ clutter_deform_effect_set_back_material (ClutterDeformEffect *effect,
g_return_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect)); g_return_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect));
g_return_if_fail (pipeline == NULL || COGL_IS_PIPELINE (pipeline)); g_return_if_fail (pipeline == NULL || COGL_IS_PIPELINE (pipeline));
priv = effect->priv; priv = clutter_deform_effect_get_instance_private (effect);
clutter_deform_effect_free_back_pipeline (effect); clutter_deform_effect_free_back_pipeline (effect);
@ -674,9 +689,12 @@ clutter_deform_effect_set_back_material (ClutterDeformEffect *effect,
CoglPipeline* CoglPipeline*
clutter_deform_effect_get_back_material (ClutterDeformEffect *effect) clutter_deform_effect_get_back_material (ClutterDeformEffect *effect)
{ {
ClutterDeformEffectPrivate *priv;
g_return_val_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect), NULL); g_return_val_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect), NULL);
return effect->priv->back_pipeline; priv = clutter_deform_effect_get_instance_private (effect);
return priv->back_pipeline;
} }
/** /**
@ -702,7 +720,7 @@ clutter_deform_effect_set_n_tiles (ClutterDeformEffect *effect,
g_return_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect)); g_return_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect));
g_return_if_fail (x_tiles > 0 && y_tiles > 0); g_return_if_fail (x_tiles > 0 && y_tiles > 0);
priv = effect->priv; priv = clutter_deform_effect_get_instance_private (effect);
g_object_freeze_notify (G_OBJECT (effect)); g_object_freeze_notify (G_OBJECT (effect));
@ -749,13 +767,16 @@ clutter_deform_effect_get_n_tiles (ClutterDeformEffect *effect,
guint *x_tiles, guint *x_tiles,
guint *y_tiles) guint *y_tiles)
{ {
ClutterDeformEffectPrivate *priv;
g_return_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect)); g_return_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect));
priv = clutter_deform_effect_get_instance_private (effect);
if (x_tiles != NULL) if (x_tiles != NULL)
*x_tiles = effect->priv->x_tiles; *x_tiles = priv->x_tiles;
if (y_tiles != NULL) if (y_tiles != NULL)
*y_tiles = effect->priv->y_tiles; *y_tiles = priv->y_tiles;
} }
/** /**
@ -769,13 +790,15 @@ void
clutter_deform_effect_invalidate (ClutterDeformEffect *effect) clutter_deform_effect_invalidate (ClutterDeformEffect *effect)
{ {
ClutterActor *actor; ClutterActor *actor;
ClutterDeformEffectPrivate *priv;
g_return_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect)); g_return_if_fail (CLUTTER_IS_DEFORM_EFFECT (effect));
if (effect->priv->is_dirty) priv = clutter_deform_effect_get_instance_private (effect);
if (priv->is_dirty)
return; return;
effect->priv->is_dirty = TRUE; priv->is_dirty = TRUE;
actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect)); actor = clutter_actor_meta_get_actor (CLUTTER_ACTOR_META (effect));
if (actor != NULL) if (actor != NULL)

View File

@ -34,23 +34,13 @@
G_BEGIN_DECLS G_BEGIN_DECLS
#define CLUTTER_TYPE_DEFORM_EFFECT (clutter_deform_effect_get_type ()) #define CLUTTER_TYPE_DEFORM_EFFECT (clutter_deform_effect_get_type ())
#define CLUTTER_DEFORM_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_DEFORM_EFFECT, ClutterDeformEffect))
#define CLUTTER_IS_DEFORM_EFFECT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_DEFORM_EFFECT))
#define CLUTTER_DEFORM_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_DEFORM_EFFECT, ClutterDeformEffectClass))
#define CLUTTER_IS_DEFORM_EFFECT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_DEFORM_EFFECT))
#define CLUTTER_DEFORM_EFFECT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_DEFORM_EFFECT, ClutterDeformEffectClass))
typedef struct _ClutterDeformEffect ClutterDeformEffect; CLUTTER_EXPORT
typedef struct _ClutterDeformEffectPrivate ClutterDeformEffectPrivate; G_DECLARE_DERIVABLE_TYPE (ClutterDeformEffect,
typedef struct _ClutterDeformEffectClass ClutterDeformEffectClass; clutter_deform_effect,
CLUTTER,
struct _ClutterDeformEffect DEFORM_EFFECT,
{ ClutterOffscreenEffect)
/*< private >*/
ClutterOffscreenEffect parent_instance;
ClutterDeformEffectPrivate *priv;
};
/** /**
* ClutterDeformEffectClass: * ClutterDeformEffectClass:
@ -72,9 +62,6 @@ struct _ClutterDeformEffectClass
CoglTextureVertex *vertex); CoglTextureVertex *vertex);
}; };
CLUTTER_EXPORT
GType clutter_deform_effect_get_type (void) G_GNUC_CONST;
CLUTTER_EXPORT CLUTTER_EXPORT
void clutter_deform_effect_set_back_material (ClutterDeformEffect *effect, void clutter_deform_effect_set_back_material (ClutterDeformEffect *effect,
CoglPipeline *material); CoglPipeline *material);