interval: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
This commit is contained in:
parent
43d6f73714
commit
84dabd9f8b
@ -35,7 +35,6 @@ 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 (ClutterDesaturateEffect, g_object_unref)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterDesaturateEffect, g_object_unref)
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterInputDevice, g_object_unref)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterInputDevice, g_object_unref)
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterInterval, g_object_unref)
|
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterScrollActor, g_object_unref)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterScrollActor, g_object_unref)
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterStage, g_object_unref)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterStage, g_object_unref)
|
||||||
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterText, g_object_unref)
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC (ClutterText, g_object_unref)
|
||||||
|
@ -77,12 +77,12 @@ enum
|
|||||||
N_VALUES
|
N_VALUES
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _ClutterIntervalPrivate
|
typedef struct _ClutterIntervalPrivate
|
||||||
{
|
{
|
||||||
GType value_type;
|
GType value_type;
|
||||||
|
|
||||||
GValue *values;
|
GValue *values;
|
||||||
};
|
} ClutterIntervalPrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (ClutterInterval,
|
G_DEFINE_TYPE_WITH_CODE (ClutterInterval,
|
||||||
clutter_interval,
|
clutter_interval,
|
||||||
@ -376,7 +376,8 @@ clutter_interval_real_compute_value (ClutterInterval *interval,
|
|||||||
static void
|
static void
|
||||||
clutter_interval_finalize (GObject *gobject)
|
clutter_interval_finalize (GObject *gobject)
|
||||||
{
|
{
|
||||||
ClutterIntervalPrivate *priv = CLUTTER_INTERVAL (gobject)->priv;
|
ClutterIntervalPrivate *priv =
|
||||||
|
clutter_interval_get_instance_private (CLUTTER_INTERVAL (gobject));
|
||||||
|
|
||||||
if (G_IS_VALUE (&priv->values[INITIAL]))
|
if (G_IS_VALUE (&priv->values[INITIAL]))
|
||||||
g_value_unset (&priv->values[INITIAL]);
|
g_value_unset (&priv->values[INITIAL]);
|
||||||
@ -433,9 +434,8 @@ clutter_interval_get_property (GObject *gobject,
|
|||||||
GValue *value,
|
GValue *value,
|
||||||
GParamSpec *pspec)
|
GParamSpec *pspec)
|
||||||
{
|
{
|
||||||
ClutterIntervalPrivate *priv;
|
ClutterIntervalPrivate *priv =
|
||||||
|
clutter_interval_get_instance_private (CLUTTER_INTERVAL (gobject));
|
||||||
priv = clutter_interval_get_instance_private (CLUTTER_INTERVAL (gobject));
|
|
||||||
|
|
||||||
switch (prop_id)
|
switch (prop_id)
|
||||||
{
|
{
|
||||||
@ -511,10 +511,11 @@ clutter_interval_class_init (ClutterIntervalClass *klass)
|
|||||||
static void
|
static void
|
||||||
clutter_interval_init (ClutterInterval *self)
|
clutter_interval_init (ClutterInterval *self)
|
||||||
{
|
{
|
||||||
self->priv = clutter_interval_get_instance_private (self);
|
ClutterIntervalPrivate *priv =
|
||||||
|
clutter_interval_get_instance_private (self);
|
||||||
|
|
||||||
self->priv->value_type = G_TYPE_INVALID;
|
priv->value_type = G_TYPE_INVALID;
|
||||||
self->priv->values = g_malloc0 (sizeof (GValue) * N_VALUES);
|
priv->values = g_malloc0 (sizeof (GValue) * N_VALUES);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
@ -522,7 +523,8 @@ clutter_interval_set_value_internal (ClutterInterval *interval,
|
|||||||
gint index_,
|
gint index_,
|
||||||
const GValue *value)
|
const GValue *value)
|
||||||
{
|
{
|
||||||
ClutterIntervalPrivate *priv = interval->priv;
|
ClutterIntervalPrivate *priv =
|
||||||
|
clutter_interval_get_instance_private (interval);
|
||||||
GType value_type;
|
GType value_type;
|
||||||
|
|
||||||
g_assert (index_ >= INITIAL && index_ <= RESULT);
|
g_assert (index_ >= INITIAL && index_ <= RESULT);
|
||||||
@ -571,7 +573,8 @@ clutter_interval_get_value_internal (ClutterInterval *interval,
|
|||||||
gint index_,
|
gint index_,
|
||||||
GValue *value)
|
GValue *value)
|
||||||
{
|
{
|
||||||
ClutterIntervalPrivate *priv = interval->priv;
|
ClutterIntervalPrivate *priv =
|
||||||
|
clutter_interval_get_instance_private (interval);
|
||||||
|
|
||||||
g_assert (index_ >= INITIAL && index_ <= RESULT);
|
g_assert (index_ >= INITIAL && index_ <= RESULT);
|
||||||
|
|
||||||
@ -582,7 +585,9 @@ static gboolean
|
|||||||
clutter_interval_set_initial_internal (ClutterInterval *interval,
|
clutter_interval_set_initial_internal (ClutterInterval *interval,
|
||||||
va_list *args)
|
va_list *args)
|
||||||
{
|
{
|
||||||
GType gtype = interval->priv->value_type;
|
ClutterIntervalPrivate *priv =
|
||||||
|
clutter_interval_get_instance_private (interval);
|
||||||
|
GType gtype = priv->value_type;
|
||||||
GValue value = G_VALUE_INIT;
|
GValue value = G_VALUE_INIT;
|
||||||
gchar *error;
|
gchar *error;
|
||||||
|
|
||||||
@ -611,7 +616,9 @@ static gboolean
|
|||||||
clutter_interval_set_final_internal (ClutterInterval *interval,
|
clutter_interval_set_final_internal (ClutterInterval *interval,
|
||||||
va_list *args)
|
va_list *args)
|
||||||
{
|
{
|
||||||
GType gtype = interval->priv->value_type;
|
ClutterIntervalPrivate *priv =
|
||||||
|
clutter_interval_get_instance_private (interval);
|
||||||
|
GType gtype = priv->value_type;
|
||||||
GValue value = G_VALUE_INIT;
|
GValue value = G_VALUE_INIT;
|
||||||
gchar *error;
|
gchar *error;
|
||||||
|
|
||||||
@ -640,7 +647,9 @@ static void
|
|||||||
clutter_interval_get_interval_valist (ClutterInterval *interval,
|
clutter_interval_get_interval_valist (ClutterInterval *interval,
|
||||||
va_list var_args)
|
va_list var_args)
|
||||||
{
|
{
|
||||||
GType gtype = interval->priv->value_type;
|
ClutterIntervalPrivate *priv =
|
||||||
|
clutter_interval_get_instance_private (interval);
|
||||||
|
GType gtype = priv->value_type;
|
||||||
GValue value = G_VALUE_INIT;
|
GValue value = G_VALUE_INIT;
|
||||||
gchar *error;
|
gchar *error;
|
||||||
|
|
||||||
@ -758,11 +767,13 @@ clutter_interval_clone (ClutterInterval *interval)
|
|||||||
ClutterInterval *retval;
|
ClutterInterval *retval;
|
||||||
GType gtype;
|
GType gtype;
|
||||||
GValue *tmp;
|
GValue *tmp;
|
||||||
|
ClutterIntervalPrivate *priv;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), NULL);
|
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), NULL);
|
||||||
g_return_val_if_fail (interval->priv->value_type != G_TYPE_INVALID, NULL);
|
priv = clutter_interval_get_instance_private (interval);
|
||||||
|
g_return_val_if_fail (priv->value_type != G_TYPE_INVALID, NULL);
|
||||||
|
|
||||||
gtype = interval->priv->value_type;
|
gtype = priv->value_type;
|
||||||
retval = g_object_new (CLUTTER_TYPE_INTERVAL, "value-type", gtype, NULL);
|
retval = g_object_new (CLUTTER_TYPE_INTERVAL, "value-type", gtype, NULL);
|
||||||
|
|
||||||
tmp = clutter_interval_peek_initial_value (interval);
|
tmp = clutter_interval_peek_initial_value (interval);
|
||||||
@ -785,9 +796,12 @@ clutter_interval_clone (ClutterInterval *interval)
|
|||||||
GType
|
GType
|
||||||
clutter_interval_get_value_type (ClutterInterval *interval)
|
clutter_interval_get_value_type (ClutterInterval *interval)
|
||||||
{
|
{
|
||||||
|
ClutterIntervalPrivate *priv;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), G_TYPE_INVALID);
|
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), G_TYPE_INVALID);
|
||||||
|
|
||||||
return interval->priv->value_type;
|
priv = clutter_interval_get_instance_private (interval);
|
||||||
|
return priv->value_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -867,9 +881,12 @@ clutter_interval_get_initial_value (ClutterInterval *interval,
|
|||||||
GValue *
|
GValue *
|
||||||
clutter_interval_peek_initial_value (ClutterInterval *interval)
|
clutter_interval_peek_initial_value (ClutterInterval *interval)
|
||||||
{
|
{
|
||||||
|
ClutterIntervalPrivate *priv;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), NULL);
|
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), NULL);
|
||||||
|
|
||||||
return interval->priv->values + INITIAL;
|
priv = clutter_interval_get_instance_private (interval);
|
||||||
|
return priv->values + INITIAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -948,9 +965,12 @@ clutter_interval_set_final (ClutterInterval *interval,
|
|||||||
GValue *
|
GValue *
|
||||||
clutter_interval_peek_final_value (ClutterInterval *interval)
|
clutter_interval_peek_final_value (ClutterInterval *interval)
|
||||||
{
|
{
|
||||||
|
ClutterIntervalPrivate *priv;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), NULL);
|
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), NULL);
|
||||||
|
|
||||||
return interval->priv->values + FINAL;
|
priv = clutter_interval_get_instance_private (interval);
|
||||||
|
return priv->values + FINAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -975,10 +995,12 @@ void
|
|||||||
clutter_interval_set_interval (ClutterInterval *interval,
|
clutter_interval_set_interval (ClutterInterval *interval,
|
||||||
...)
|
...)
|
||||||
{
|
{
|
||||||
|
ClutterIntervalPrivate *priv;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_INTERVAL (interval));
|
g_return_if_fail (CLUTTER_IS_INTERVAL (interval));
|
||||||
g_return_if_fail (interval->priv->value_type != G_TYPE_INVALID);
|
priv = clutter_interval_get_instance_private (interval);
|
||||||
|
g_return_if_fail (priv->value_type != G_TYPE_INVALID);
|
||||||
|
|
||||||
va_start (args, interval);
|
va_start (args, interval);
|
||||||
|
|
||||||
@ -1013,10 +1035,12 @@ void
|
|||||||
clutter_interval_get_interval (ClutterInterval *interval,
|
clutter_interval_get_interval (ClutterInterval *interval,
|
||||||
...)
|
...)
|
||||||
{
|
{
|
||||||
|
ClutterIntervalPrivate *priv;
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_IS_INTERVAL (interval));
|
g_return_if_fail (CLUTTER_IS_INTERVAL (interval));
|
||||||
g_return_if_fail (interval->priv->value_type != G_TYPE_INVALID);
|
priv = clutter_interval_get_instance_private (interval);
|
||||||
|
g_return_if_fail (priv->value_type != G_TYPE_INVALID);
|
||||||
|
|
||||||
va_start (args, interval);
|
va_start (args, interval);
|
||||||
clutter_interval_get_interval_valist (interval, args);
|
clutter_interval_get_interval_valist (interval, args);
|
||||||
@ -1089,22 +1113,24 @@ const GValue *
|
|||||||
clutter_interval_compute (ClutterInterval *interval,
|
clutter_interval_compute (ClutterInterval *interval,
|
||||||
gdouble factor)
|
gdouble factor)
|
||||||
{
|
{
|
||||||
|
ClutterIntervalPrivate *priv;
|
||||||
GValue *value;
|
GValue *value;
|
||||||
gboolean res;
|
gboolean res;
|
||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), NULL);
|
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), NULL);
|
||||||
|
|
||||||
value = &(interval->priv->values[RESULT]);
|
priv = clutter_interval_get_instance_private (interval);
|
||||||
|
value = &(priv->values[RESULT]);
|
||||||
|
|
||||||
if (G_VALUE_TYPE (value) == G_TYPE_INVALID)
|
if (G_VALUE_TYPE (value) == G_TYPE_INVALID)
|
||||||
g_value_init (value, interval->priv->value_type);
|
g_value_init (value, priv->value_type);
|
||||||
|
|
||||||
res = CLUTTER_INTERVAL_GET_CLASS (interval)->compute_value (interval,
|
res = CLUTTER_INTERVAL_GET_CLASS (interval)->compute_value (interval,
|
||||||
factor,
|
factor,
|
||||||
value);
|
value);
|
||||||
|
|
||||||
if (res)
|
if (res)
|
||||||
return interval->priv->values + RESULT;
|
return priv->values + RESULT;
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -1125,7 +1151,7 @@ clutter_interval_is_valid (ClutterInterval *interval)
|
|||||||
|
|
||||||
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), FALSE);
|
g_return_val_if_fail (CLUTTER_IS_INTERVAL (interval), FALSE);
|
||||||
|
|
||||||
priv = interval->priv;
|
priv = clutter_interval_get_instance_private (interval);
|
||||||
|
|
||||||
return G_IS_VALUE (&priv->values[INITIAL]) &&
|
return G_IS_VALUE (&priv->values[INITIAL]) &&
|
||||||
G_IS_VALUE (&priv->values[FINAL]);
|
G_IS_VALUE (&priv->values[FINAL]);
|
||||||
|
@ -33,22 +33,13 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define CLUTTER_TYPE_INTERVAL (clutter_interval_get_type ())
|
#define CLUTTER_TYPE_INTERVAL (clutter_interval_get_type ())
|
||||||
#define CLUTTER_INTERVAL(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CLUTTER_TYPE_INTERVAL, ClutterInterval))
|
|
||||||
#define CLUTTER_IS_INTERVAL(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CLUTTER_TYPE_INTERVAL))
|
|
||||||
#define CLUTTER_INTERVAL_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CLUTTER_TYPE_INTERVAL, ClutterIntervalClass))
|
|
||||||
#define CLUTTER_IS_INTERVAL_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CLUTTER_TYPE_INTERVAL))
|
|
||||||
#define CLUTTER_INTERVAL_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CLUTTER_TYPE_INTERVAL, ClutterIntervalClass))
|
|
||||||
|
|
||||||
typedef struct _ClutterIntervalPrivate ClutterIntervalPrivate;
|
CLUTTER_EXPORT
|
||||||
typedef struct _ClutterIntervalClass ClutterIntervalClass;
|
G_DECLARE_DERIVABLE_TYPE (ClutterInterval,
|
||||||
|
clutter_interval,
|
||||||
struct _ClutterInterval
|
CLUTTER,
|
||||||
{
|
INTERVAL,
|
||||||
/*< private >*/
|
GInitiallyUnowned)
|
||||||
GInitiallyUnowned parent_instance;
|
|
||||||
|
|
||||||
ClutterIntervalPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ClutterIntervalClass:
|
* ClutterIntervalClass:
|
||||||
@ -72,9 +63,6 @@ struct _ClutterIntervalClass
|
|||||||
GValue *value);
|
GValue *value);
|
||||||
};
|
};
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
GType clutter_interval_get_type (void) G_GNUC_CONST;
|
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
ClutterInterval *clutter_interval_new (GType gtype,
|
ClutterInterval *clutter_interval_new (GType gtype,
|
||||||
...);
|
...);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user