diff options
author | Timm Bäder <mail@baedert.org> | 2020-05-06 19:17:11 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2020-05-10 08:44:20 +0200 |
commit | 1b10020b6e0853f92f75c7b9bae9d08acff2b5f6 (patch) | |
tree | d573507210ea73ae7cef74efc3388444723329fc /gtk/gtkcsstransition.c | |
parent | 57444f77f755423653b0da6e36a74695aa7e1c90 (diff) | |
download | gtk+-1b10020b6e0853f92f75c7b9bae9d08acff2b5f6.tar.gz |
css: Make GtkStyleAnimation and subclasses non-objects
Making them GObjects is unnecessary. This enables further optimizations
down the road. The only place we use them in is gtkcssanimatedstyle.c
after all.
Diffstat (limited to 'gtk/gtkcsstransition.c')
-rw-r--r-- | gtk/gtkcsstransition.c | 90 |
1 files changed, 51 insertions, 39 deletions
diff --git a/gtk/gtkcsstransition.c b/gtk/gtkcsstransition.c index bb872a0b17..fee6d66d71 100644 --- a/gtk/gtkcsstransition.c +++ b/gtk/gtkcsstransition.c @@ -24,27 +24,22 @@ #include "gtkcsseasevalueprivate.h" #include "gtkprogresstrackerprivate.h" -G_DEFINE_TYPE (GtkCssTransition, _gtk_css_transition, GTK_TYPE_STYLE_ANIMATION) - -static GtkStyleAnimation * -gtk_css_transition_advance (GtkStyleAnimation *style_animation, - gint64 timestamp) +struct _GtkCssTransition { - GtkCssTransition *source = (GtkCssTransition *)style_animation; - GtkCssTransition *transition; + GtkStyleAnimation parent; - transition = g_object_new (GTK_TYPE_CSS_TRANSITION, NULL); + guint property; + GtkCssValue *start; + GtkCssValue *ease; + GtkProgressTracker tracker; + guint finished; +}; - transition->property = source->property; - transition->start = _gtk_css_value_ref (source->start); - transition->ease = _gtk_css_value_ref (source->ease); - gtk_progress_tracker_init_copy (&source->tracker, &transition->tracker); - gtk_progress_tracker_advance_frame (&transition->tracker, timestamp); - transition->finished = gtk_progress_tracker_get_state (&transition->tracker) == GTK_PROGRESS_STATE_AFTER; +static GtkStyleAnimation * gtk_css_transition_advance (GtkStyleAnimation *style_animation, + gint64 timestamp); + - return (GtkStyleAnimation *)transition; -} static void gtk_css_transition_apply_values (GtkStyleAnimation *style_animation, @@ -99,35 +94,46 @@ gtk_css_transition_is_static (GtkStyleAnimation *animation) } static void -gtk_css_transition_finalize (GObject *object) +gtk_css_transition_free (GtkStyleAnimation *animation) { - GtkCssTransition *transition = GTK_CSS_TRANSITION (object); + GtkCssTransition *self = (GtkCssTransition *)animation; - _gtk_css_value_unref (transition->start); - _gtk_css_value_unref (transition->ease); + gtk_css_value_unref (self->start); + gtk_css_value_unref (self->ease); - G_OBJECT_CLASS (_gtk_css_transition_parent_class)->finalize (object); + g_slice_free (GtkCssTransition, self); } -static void -_gtk_css_transition_class_init (GtkCssTransitionClass *klass) +static const GtkStyleAnimationClass GTK_CSS_TRANSITION_CLASS = { + "GtkCssTransition", + gtk_css_transition_free, + gtk_css_transition_is_finished, + gtk_css_transition_is_static, + gtk_css_transition_apply_values, + gtk_css_transition_advance, +}; + +static GtkStyleAnimation * +gtk_css_transition_advance (GtkStyleAnimation *style_animation, + gint64 timestamp) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkStyleAnimationClass *animation_class = GTK_STYLE_ANIMATION_CLASS (klass); + GtkCssTransition *source = (GtkCssTransition *)style_animation; + GtkCssTransition *transition; - object_class->finalize = gtk_css_transition_finalize; + transition = g_slice_alloc (sizeof (GtkCssTransition)); + transition->parent.class = >K_CSS_TRANSITION_CLASS; + transition->parent.ref_count = 1; - animation_class->advance = gtk_css_transition_advance; - animation_class->apply_values = gtk_css_transition_apply_values; - animation_class->is_finished = gtk_css_transition_is_finished; - animation_class->is_static = gtk_css_transition_is_static; -} + transition->property = source->property; + transition->start = _gtk_css_value_ref (source->start); + transition->ease = _gtk_css_value_ref (source->ease); -static void -_gtk_css_transition_init (GtkCssTransition *transition) -{ -} + gtk_progress_tracker_init_copy (&source->tracker, &transition->tracker); + gtk_progress_tracker_advance_frame (&transition->tracker, timestamp); + transition->finished = gtk_progress_tracker_get_state (&transition->tracker) == GTK_PROGRESS_STATE_AFTER; + return (GtkStyleAnimation *)transition; +} GtkStyleAnimation * _gtk_css_transition_new (guint property, GtkCssValue *start, @@ -141,7 +147,9 @@ _gtk_css_transition_new (guint property, g_return_val_if_fail (start != NULL, NULL); g_return_val_if_fail (ease != NULL, NULL); - transition = g_object_new (GTK_TYPE_CSS_TRANSITION, NULL); + transition = g_slice_alloc (sizeof (GtkCssTransition)); + transition->parent.class = >K_CSS_TRANSITION_CLASS; + transition->parent.ref_count = 1; transition->property = property; transition->start = _gtk_css_value_ref (start); @@ -150,13 +158,17 @@ _gtk_css_transition_new (guint property, gtk_progress_tracker_advance_frame (&transition->tracker, timestamp); transition->finished = gtk_progress_tracker_get_state (&transition->tracker) == GTK_PROGRESS_STATE_AFTER; - return GTK_STYLE_ANIMATION (transition); + return (GtkStyleAnimation*)transition; } guint _gtk_css_transition_get_property (GtkCssTransition *transition) { - g_return_val_if_fail (GTK_IS_CSS_TRANSITION (transition), 0); - return transition->property; } + +gboolean +_gtk_css_transition_is_transition (GtkStyleAnimation *animation) +{ + return animation->class == >K_CSS_TRANSITION_CLASS; +} |