From f9eb140e62a4c56f12b8d205f220719f2d0ae3b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 22 May 2020 23:04:31 +0200 Subject: [PATCH] clutter/actor: Add API to pick frame clock The frame clock wouldn't be useable yet, but none the less, add API to get the frame clock best suited for driving the actor. Currently this translates to the fastest one, but that might change. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1285 --- clutter/clutter/clutter-actor.c | 35 +++++++++++++++++++++++++++++++++ clutter/clutter/clutter-actor.h | 3 +++ 2 files changed, 38 insertions(+) diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 821eddf11..095e80ed5 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -652,6 +652,7 @@ #include "clutter-scriptable.h" #include "clutter-script-private.h" #include "clutter-stage-private.h" +#include "clutter-stage-view-private.h" #include "clutter-timeline.h" #include "clutter-transition.h" #include "clutter-units.h" @@ -16250,6 +16251,40 @@ clutter_actor_peek_stage_views (ClutterActor *self) return self->priv->stage_views; } +/** + * clutter_actor_pick_frame_clock: + * @self: a #ClutterActor + * + * Pick the most suitable frame clock for driving animations for this actor. + * + * Returns: (transfer none): a #ClutterFrameClock + */ +ClutterFrameClock * +clutter_actor_pick_frame_clock (ClutterActor *self) +{ + float max_refresh_rate = 0.0; + ClutterStageView *best_view = NULL; + GList *l; + + for (l = self->priv->stage_views; l; l = l->next) + { + ClutterStageView *view = l->data; + float refresh_rate; + + refresh_rate = clutter_stage_view_get_refresh_rate (view); + if (refresh_rate > max_refresh_rate) + { + best_view = view; + max_refresh_rate = refresh_rate; + } + } + + if (best_view) + return clutter_stage_view_get_frame_clock (best_view); + else + return NULL; +} + /** * clutter_actor_has_overlaps: * @self: A #ClutterActor diff --git a/clutter/clutter/clutter-actor.h b/clutter/clutter/clutter-actor.h index 128acac1a..e5fa72bae 100644 --- a/clutter/clutter/clutter-actor.h +++ b/clutter/clutter/clutter-actor.h @@ -924,6 +924,9 @@ GList * clutter_actor_peek_stage_views (ClutterActor *self); CLUTTER_EXPORT void clutter_actor_invalidate_transform (ClutterActor *self); +CLUTTER_EXPORT +ClutterFrameClock * clutter_actor_pick_frame_clock (ClutterActor *self); + G_END_DECLS #endif /* __CLUTTER_ACTOR_H__ */