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 (ClutterBrightnessContrastEffect, 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 (ClutterFixedLayout, g_object_unref)
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterFlowLayout, g_object_unref)

View File

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

View File

@ -34,23 +34,13 @@
G_BEGIN_DECLS
#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;
typedef struct _ClutterDeformEffectPrivate ClutterDeformEffectPrivate;
typedef struct _ClutterDeformEffectClass ClutterDeformEffectClass;
struct _ClutterDeformEffect
{
/*< private >*/
ClutterOffscreenEffect parent_instance;
ClutterDeformEffectPrivate *priv;
};
CLUTTER_EXPORT
G_DECLARE_DERIVABLE_TYPE (ClutterDeformEffect,
clutter_deform_effect,
CLUTTER,
DEFORM_EFFECT,
ClutterOffscreenEffect)
/**
* ClutterDeformEffectClass:
@ -72,9 +62,6 @@ struct _ClutterDeformEffectClass
CoglTextureVertex *vertex);
};
CLUTTER_EXPORT
GType clutter_deform_effect_get_type (void) G_GNUC_CONST;
CLUTTER_EXPORT
void clutter_deform_effect_set_back_material (ClutterDeformEffect *effect,
CoglPipeline *material);