Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dalai@blender.org>2021-07-06 18:09:00 +0300
committerDalai Felinto <dalai@blender.org>2021-07-07 11:41:12 +0300
commit3fe0088cab8d400f98895a610613b8d8f15d13a1 (patch)
treeafe3e9193a815d091f9e6314a6fcbaab3ff9253e /source/blender
parent8f94724f2246c9f4c2659f4380dc43fcda28d759 (diff)
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
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/editors/space_outliner/tree/tree_display.hh2
-rw-r--r--source/blender/editors/space_outliner/tree/tree_display_view_layer.cc91
2 files changed, 44 insertions, 49 deletions
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);
+ }
}
}