[mutter/gbsneto/split-pick-paint: 4/4] clutter/actor: Remove pick code from paint



commit 8bbde5edced2678a1d37d1ceeafca4bf0f5180d9
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date:   Thu Oct 17 17:08:19 2019 +0200

    clutter/actor: Remove pick code from paint
    
    Now that they are properly split, remove the pick
    code from paint paths.
    
    https://gitlab.gnome.org/GNOME/mutter/merge_requests/865

 clutter/clutter/clutter-actor.c | 147 +++++++++++++---------------------------
 1 file changed, 48 insertions(+), 99 deletions(-)
---
diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c
index 2262b9978..e722ecdd8 100644
--- a/clutter/clutter/clutter-actor.c
+++ b/clutter/clutter/clutter-actor.c
@@ -3877,7 +3877,6 @@ void
 clutter_actor_paint (ClutterActor *self)
 {
   ClutterActorPrivate *priv;
-  ClutterPickMode pick_mode;
   ClutterActorBox clip;
   gboolean clip_set = FALSE;
   ClutterStage *stage;
@@ -3888,16 +3887,11 @@ clutter_actor_paint (ClutterActor *self)
     return;
 
   priv = self->priv;
-
-  pick_mode = _clutter_context_get_pick_mode ();
-
-  if (pick_mode == CLUTTER_PICK_NONE)
-    priv->propagated_one_redraw = FALSE;
+  priv->propagated_one_redraw = FALSE;
 
   /* It's an important optimization that we consider painting of
    * actors with 0 opacity to be a NOP... */
-  if (pick_mode == CLUTTER_PICK_NONE &&
-      /* ignore top-levels, since they might be transparent */
+  if (/* ignore top-levels, since they might be transparent */
       !CLUTTER_ACTOR_IS_TOPLEVEL (self) &&
       /* Use the override opacity if its been set */
       ((priv->opacity_override >= 0) ?
@@ -3989,31 +3983,21 @@ clutter_actor_paint (ClutterActor *self)
 
   if (clip_set)
     {
-      if (pick_mode == CLUTTER_PICK_NONE)
-        {
-          CoglFramebuffer *fb = _clutter_stage_get_active_framebuffer (stage);
+      CoglFramebuffer *fb = _clutter_stage_get_active_framebuffer (stage);
 
-          cogl_framebuffer_push_rectangle_clip (fb,
-                                                clip.x1,
-                                                clip.y1,
-                                                clip.x2,
-                                                clip.y2);
-        }
-      else
-        {
-          if (!_clutter_actor_push_pick_clip (self, &clip))
-            clip_set = FALSE;
-        }
+      cogl_framebuffer_push_rectangle_clip (fb,
+                                            clip.x1,
+                                            clip.y1,
+                                            clip.x2,
+                                            clip.y2);
     }
 
-  if (pick_mode == CLUTTER_PICK_NONE)
-    {
-      /* We check whether we need to add the flatten effect before
-         each paint so that we can avoid having a mechanism for
-         applications to notify when the value of the
-         has_overlaps virtual changes. */
-      add_or_remove_flatten_effect (self);
-    }
+  /* We check whether we need to add the flatten effect before
+   * each paint so that we can avoid having a mechanism for
+   * applications to notify when the value of the
+   * has_overlaps virtual changes.
+   */
+  add_or_remove_flatten_effect (self);
 
   /* We save the current paint volume so that the next time the
    * actor queues a redraw we can constrain the redraw to just
@@ -4042,7 +4026,7 @@ clutter_actor_paint (ClutterActor *self)
    * paint then the last-paint-volume would likely represent the new
    * actor position not the old.
    */
-  if (!in_clone_paint () && pick_mode == CLUTTER_PICK_NONE)
+  if (!in_clone_paint ())
     {
       gboolean success;
       /* annoyingly gcc warns if uninitialized even though
@@ -4072,28 +4056,19 @@ clutter_actor_paint (ClutterActor *self)
 
   clutter_actor_continue_paint (self);
 
-  if (G_UNLIKELY (clutter_paint_debug_flags & CLUTTER_DEBUG_PAINT_VOLUMES &&
-                  pick_mode == CLUTTER_PICK_NONE))
+  if (G_UNLIKELY (clutter_paint_debug_flags & CLUTTER_DEBUG_PAINT_VOLUMES))
     _clutter_actor_draw_paint_volume (self);
 
   /* If we make it here then the actor has run through a complete
      paint run including all the effects so it's no longer dirty */
-  if (pick_mode == CLUTTER_PICK_NONE)
-    priv->is_dirty = FALSE;
+  priv->is_dirty = FALSE;
 
 done:
   if (clip_set)
     {
-      if (pick_mode == CLUTTER_PICK_NONE)
-        {
-          CoglFramebuffer *fb = _clutter_stage_get_active_framebuffer (stage);
+      CoglFramebuffer *fb = _clutter_stage_get_active_framebuffer (stage);
 
-          cogl_framebuffer_pop_clip (fb);
-        }
-      else
-        {
-          _clutter_actor_pop_pick_clip (self);
-        }
+      cogl_framebuffer_pop_clip (fb);
     }
 
   cogl_pop_matrix ();
@@ -4135,43 +4110,28 @@ clutter_actor_continue_paint (ClutterActor *self)
      actual actor */
   if (priv->next_effect_to_paint == NULL)
     {
-      if (_clutter_context_get_pick_mode () == CLUTTER_PICK_NONE)
-        {
-          ClutterPaintNode *dummy;
+      ClutterPaintNode *dummy;
 
-          /* XXX - this will go away in 2.0, when we can get rid of this
-           * stuff and switch to a pure retained render tree of PaintNodes
-           * for the entire frame, starting from the Stage; the paint()
-           * virtual function can then be called directly.
-           */
-          dummy = _clutter_dummy_node_new (self);
-          clutter_paint_node_set_name (dummy, "Root");
+      /* XXX - this will go away in 2.0, when we can get rid of this
+       * stuff and switch to a pure retained render tree of PaintNodes
+       * for the entire frame, starting from the Stage; the paint()
+       * virtual function can then be called directly.
+       */
+      dummy = _clutter_dummy_node_new (self);
+      clutter_paint_node_set_name (dummy, "Root");
 
-          /* XXX - for 1.12, we use the return value of paint_node() to
-           * decide whether we should emit the ::paint signal.
-           */
-          clutter_actor_paint_node (self, dummy);
-          clutter_paint_node_unref (dummy);
+      /* XXX - for 1.12, we use the return value of paint_node() to
+       * decide whether we should emit the ::paint signal.
+       */
+      clutter_actor_paint_node (self, dummy);
+      clutter_paint_node_unref (dummy);
 
-          /* XXX:2.0 - Call the paint() virtual directly */
-          if (g_signal_has_handler_pending (self, actor_signals[PAINT],
-                                            0, TRUE))
-            g_signal_emit (self, actor_signals[PAINT], 0);
-          else
-            CLUTTER_ACTOR_GET_CLASS (self)->paint (self);
-        }
+      /* XXX:2.0 - Call the paint() virtual directly */
+      if (g_signal_has_handler_pending (self, actor_signals[PAINT],
+                                        0, TRUE))
+        g_signal_emit (self, actor_signals[PAINT], 0);
       else
-        {
-          /* The actor will log a silhouette of itself to the stage pick log.
-           *
-           * XXX:2.0 - Call the pick() virtual directly
-           */
-          if (g_signal_has_handler_pending (self, actor_signals[PICK],
-                                            0, TRUE))
-            g_signal_emit (self, actor_signals[PICK], 0);
-          else
-            CLUTTER_ACTOR_GET_CLASS (self)->pick (self);
-        }
+        CLUTTER_ACTOR_GET_CLASS (self)->paint (self);
     }
   else
     {
@@ -4185,31 +4145,20 @@ clutter_actor_continue_paint (ClutterActor *self)
       priv->current_effect = priv->next_effect_to_paint->data;
       priv->next_effect_to_paint = priv->next_effect_to_paint->next;
 
-      if (_clutter_context_get_pick_mode () == CLUTTER_PICK_NONE)
+      if (priv->is_dirty)
         {
-          if (priv->is_dirty)
-            {
-              /* If there's an effect queued with this redraw then all
-                 effects up to that one will be considered dirty. It
-                 is expected the queued effect will paint the cached
-                 image and not call clutter_actor_continue_paint again
-                 (although it should work ok if it does) */
-              if (priv->effect_to_redraw == NULL ||
-                  priv->current_effect != priv->effect_to_redraw)
-                run_flags |= CLUTTER_EFFECT_PAINT_ACTOR_DIRTY;
-            }
-
-          _clutter_effect_paint (priv->current_effect, run_flags);
+          /* If there's an effect queued with this redraw then all
+           * effects up to that one will be considered dirty. It
+           * is expected the queued effect will paint the cached
+           * image and not call clutter_actor_continue_paint again
+           * (although it should work ok if it does)
+           */
+          if (priv->effect_to_redraw == NULL ||
+              priv->current_effect != priv->effect_to_redraw)
+            run_flags |= CLUTTER_EFFECT_PAINT_ACTOR_DIRTY;
         }
-      else
-        {
-          /* We can't determine when an actor has been modified since
-             its last pick so lets just assume it has always been
-             modified */
-          run_flags |= CLUTTER_EFFECT_PAINT_ACTOR_DIRTY;
 
-          _clutter_effect_pick (priv->current_effect, run_flags);
-        }
+      _clutter_effect_paint (priv->current_effect, run_flags);
 
       priv->current_effect = old_current_effect;
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]