[mutter] stage: Add 'prepare-frame' signal
- From: Marge Bot <marge-bot src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [mutter] stage: Add 'prepare-frame' signal
- Date: Fri, 29 Apr 2022 21:19:38 +0000 (UTC)
commit cecf4cd87cf35a1e2ec0367e5fabba09337fd0fd
Author: Jonas Ã…dahl <jadahl gmail com>
Date: Fri Apr 29 16:02:08 2022 +0200
stage: Add 'prepare-frame' signal
This is a signal that will be emitted between the 'before-update' and
'before-paint'. It can be used to handle things when you know whether
there is an update, and you know whether a paint or not will happen, by
looking at the current damage.
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2393>
clutter/clutter/clutter-stage-private.h | 2 ++
clutter/clutter/clutter-stage-view.c | 1 +
clutter/clutter/clutter-stage.c | 24 ++++++++++++++++++++++++
3 files changed, 27 insertions(+)
---
diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h
index e9ba5707ed..b1a8105d22 100644
--- a/clutter/clutter/clutter-stage-private.h
+++ b/clutter/clutter/clutter-stage-private.h
@@ -49,6 +49,8 @@ void clutter_stage_paint_view (ClutterStage
void clutter_stage_emit_before_update (ClutterStage *stage,
ClutterStageView *view);
+void clutter_stage_emit_prepare_frame (ClutterStage *stage,
+ ClutterStageView *view);
void clutter_stage_emit_before_paint (ClutterStage *stage,
ClutterStageView *view);
void clutter_stage_emit_after_paint (ClutterStage *stage,
diff --git a/clutter/clutter/clutter-stage-view.c b/clutter/clutter/clutter-stage-view.c
index 8a82de71ed..2e47237f0a 100644
--- a/clutter/clutter/clutter-stage-view.c
+++ b/clutter/clutter/clutter-stage-view.c
@@ -1183,6 +1183,7 @@ handle_frame_clock_frame (ClutterFrameClock *frame_clock,
frame = CLUTTER_FRAME_INIT;
_clutter_stage_window_prepare_frame (stage_window, view, &frame);
+ clutter_stage_emit_prepare_frame (stage, view);
if (clutter_stage_view_has_redraw_clip (view))
{
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index ed803a4352..e97cd54a3f 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -162,6 +162,7 @@ enum
DEACTIVATE,
DELETE_EVENT,
BEFORE_UPDATE,
+ PREPARE_FRAME,
BEFORE_PAINT,
AFTER_PAINT,
AFTER_UPDATE,
@@ -465,6 +466,13 @@ clutter_stage_emit_before_update (ClutterStage *stage,
g_signal_emit (stage, stage_signals[BEFORE_UPDATE], 0, view);
}
+void
+clutter_stage_emit_prepare_frame (ClutterStage *stage,
+ ClutterStageView *view)
+{
+ g_signal_emit (stage, stage_signals[PREPARE_FRAME], 0, view);
+}
+
void
clutter_stage_emit_before_paint (ClutterStage *stage,
ClutterStageView *view)
@@ -1408,6 +1416,22 @@ clutter_stage_class_init (ClutterStageClass *klass)
NULL, NULL, NULL,
G_TYPE_NONE, 1,
CLUTTER_TYPE_STAGE_VIEW);
+ /**
+ * ClutterStage::prepare-frame:
+ * @stage: the stage that received the event
+ * @view: a #ClutterStageView
+ *
+ * The ::prepare-frame signal is emitted after the stage is updated,
+ * before the stage is painted, even if it will not be painted.
+ */
+ stage_signals[PREPARE_FRAME] =
+ g_signal_new (I_("prepare-frame"),
+ G_TYPE_FROM_CLASS (gobject_class),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL, NULL,
+ G_TYPE_NONE, 1,
+ CLUTTER_TYPE_STAGE_VIEW);
/**
* ClutterStage::before-paint:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]