[Bf-blender-cvs] [3fe0088cab8] master: Fix T89559: Outliner shows extra view layer column when it shouldn't

Dalai Felinto noreply at git.blender.org
Wed Jul 7 10:46:27 CEST 2021


Commit: 3fe0088cab8d400f98895a610613b8d8f15d13a1
Author: Dalai Felinto
Date:   Tue Jul 6 17:09:00 2021 +0200
Branches: master
https://developer.blender.org/rB3fe0088cab8d400f98895a610613b8d8f15d13a1

Fix T89559: Outliner shows extra view layer column when it shouldn't

This issue happened because of some miscommunication during the original
patch review. Since we have the parent element in other outliner modes
(Blender File, Data API) I was on the fence here. Rolling this back now
so that when Show All View Layers is off we don't see the current View
Layer top element.

The fix is simple, but it was better to format the code around to
follow the style in this file.

Differential Revision: https://developer.blender.org/D11830

===================================================================

M	source/blender/editors/space_outliner/tree/tree_display.hh
M	source/blender/editors/space_outliner/tree/tree_display_view_layer.cc

===================================================================

diff --git a/source/blender/editors/space_outliner/tree/tree_display.hh b/source/blender/editors/space_outliner/tree/tree_display.hh
index f089a149805..96af8258010 100644
--- a/source/blender/editors/space_outliner/tree/tree_display.hh
+++ b/source/blender/editors/space_outliner/tree/tree_display.hh
@@ -86,7 +86,7 @@ class TreeDisplayViewLayer final : public AbstractTreeDisplay {
   ListBase buildTree(const TreeSourceData &source_data) override;
 
  private:
-  void add_view_layer(ListBase &, TreeElement &);
+  void add_view_layer(Scene &, ListBase &, TreeElement *);
   void add_layer_collections_recursive(ListBase &, ListBase &, TreeElement &);
   void add_layer_collection_objects(ListBase &, LayerCollection &, TreeElement &);
   void add_layer_collection_objects_children(TreeElement &);
diff --git a/source/blender/editors/space_outliner/tree/tree_display_view_layer.cc b/source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
index 402526bbe8d..c3d0aecd3cb 100644
--- a/source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
+++ b/source/blender/editors/space_outliner/tree/tree_display_view_layer.cc
@@ -70,74 +70,69 @@ TreeDisplayViewLayer::TreeDisplayViewLayer(SpaceOutliner &space_outliner)
 ListBase TreeDisplayViewLayer::buildTree(const TreeSourceData &source_data)
 {
   ListBase tree = {nullptr};
-
   Scene *scene = source_data.scene;
   show_objects_ = !(space_outliner_.filter & SO_FILTER_NO_OBJECT);
 
-  const bool show_children = (space_outliner_.filter & SO_FILTER_NO_CHILDREN) == 0;
-
   for (auto *view_layer : ListBaseWrapper<ViewLayer>(scene->view_layers)) {
+    view_layer_ = view_layer;
+
     if (space_outliner_.filter & SO_FILTER_NO_VIEW_LAYERS) {
       if (view_layer != source_data.view_layer) {
         continue;
       }
-    }
 
-    TreeElement &te_view_layer = *outliner_add_element(
-        &space_outliner_, &tree, scene, nullptr, TSE_R_LAYER, 0);
-    TREESTORE(&te_view_layer)->flag &= ~TSE_CLOSED;
-    te_view_layer.name = view_layer->name;
-    te_view_layer.directdata = view_layer;
-    view_layer_ = view_layer;
-
-    if (space_outliner_.filter & SO_FILTER_NO_COLLECTION) {
-      /* Show objects in the view layer. */
-      for (Base *base : List<Base>(view_layer_->object_bases)) {
-        TreeElement *te_object = outliner_add_element(&space_outliner_,
-                                                      &te_view_layer.subtree,
-                                                      base->object,
-                                                      &te_view_layer,
-                                                      TSE_SOME_ID,
-                                                      0);
-        te_object->directdata = base;
-      }
-
-      if (show_children) {
-        outliner_make_object_parent_hierarchy(&tree);
-      }
+      add_view_layer(*scene, tree, (TreeElement *)nullptr);
     }
     else {
-      /* Show collections in the view layer. */
-      TreeElement &ten = *outliner_add_element(&space_outliner_,
-                                               &te_view_layer.subtree,
-                                               source_data.scene,
-                                               &te_view_layer,
-                                               TSE_VIEW_COLLECTION_BASE,
-                                               0);
-      ten.name = IFACE_("Scene Collection");
-      TREESTORE(&ten)->flag &= ~TSE_CLOSED;
-
-      add_view_layer(ten.subtree, ten);
-      if (show_children) {
-        add_layer_collection_objects_children(ten);
-      }
+      TreeElement &te_view_layer = *outliner_add_element(
+          &space_outliner_, &tree, scene, nullptr, TSE_R_LAYER, 0);
+      TREESTORE(&te_view_layer)->flag &= ~TSE_CLOSED;
+      te_view_layer.name = view_layer->name;
+      te_view_layer.directdata = view_layer;
+
+      add_view_layer(*scene, te_view_layer.subtree, &te_view_layer);
     }
   }
 
   return tree;
 }
 
-void TreeDisplayViewLayer::add_view_layer(ListBase &tree, TreeElement &parent)
+void TreeDisplayViewLayer::add_view_layer(Scene &scene, ListBase &tree, TreeElement *parent)
 {
-  /* First layer collection is for master collection, don't show it. */
-  LayerCollection *lc = static_cast<LayerCollection *>(view_layer_->layer_collections.first);
-  if (lc == nullptr) {
-    return;
+  const bool show_children = (space_outliner_.filter & SO_FILTER_NO_CHILDREN) == 0;
+
+  if (space_outliner_.filter & SO_FILTER_NO_COLLECTION) {
+    /* Show objects in the view layer. */
+    for (Base *base : List<Base>(view_layer_->object_bases)) {
+      TreeElement *te_object = outliner_add_element(
+          &space_outliner_, &tree, base->object, parent, TSE_SOME_ID, 0);
+      te_object->directdata = base;
+    }
+
+    if (show_children) {
+      outliner_make_object_parent_hierarchy(&tree);
+    }
   }
+  else {
+    /* Show collections in the view layer. */
+    TreeElement &ten = *outliner_add_element(
+        &space_outliner_, &tree, &scene, parent, TSE_VIEW_COLLECTION_BASE, 0);
+    ten.name = IFACE_("Scene Collection");
+    TREESTORE(&ten)->flag &= ~TSE_CLOSED;
+
+    /* First layer collection is for master collection, don't show it. */
+    LayerCollection *lc = static_cast<LayerCollection *>(view_layer_->layer_collections.first);
+    if (lc == nullptr) {
+      return;
+    }
 
-  add_layer_collections_recursive(tree, lc->layer_collections, parent);
-  if (show_objects_) {
-    add_layer_collection_objects(tree, *lc, parent);
+    add_layer_collections_recursive(ten.subtree, lc->layer_collections, ten);
+    if (show_objects_) {
+      add_layer_collection_objects(ten.subtree, *lc, ten);
+    }
+    if (show_children) {
+      add_layer_collection_objects_children(ten);
+    }
   }
 }



More information about the Bf-blender-cvs mailing list