deform-effect: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
This commit is contained in:
parent
accff6b937
commit
581343dc9a
@ -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)
|
||||||
|
@ -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)
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user