summaryrefslogtreecommitdiff
path: root/gtk/gtkcsstransition.c
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2020-05-06 19:17:11 +0200
committerTimm Bäder <mail@baedert.org>2020-05-10 08:44:20 +0200
commit1b10020b6e0853f92f75c7b9bae9d08acff2b5f6 (patch)
treed573507210ea73ae7cef74efc3388444723329fc /gtk/gtkcsstransition.c
parent57444f77f755423653b0da6e36a74695aa7e1c90 (diff)
downloadgtk+-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.c90
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 = &GTK_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 = &GTK_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 == &GTK_CSS_TRANSITION_CLASS;
+}