Commit: 2bd62b076fac80e073557a7d1dff0e989aaa97c1
Author: Brecht Van Lommel
Date:   Wed Nov 28 14:05:08 2018 +0100
Branches: blender2.8
https://developer.blender.org/rB2bd62b076fac80e073557a7d1dff0e989aaa97c1

Outliner/visibility: revert changes for now until we find better solutions.

See T57857 for discussion. This reverts:

"Outliner: Do not gray out empty collections"
4521d3e7074d2e08ca813e1f4a2297f5000f335b.

"Remove eye column from the outliner"
fd16b359977c8932ada8db4ff0e43d0402fdc280.

Fix/workaround issues in pose and edit mode"
6d2e2e30d50c40f302b62d3601b5742d7c7056c6.

"Per view-layer collection visibility"
4de6a210c69fe254518ca8d6c860782c54f03749.

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

M       release/scripts/startup/bl_ui/space_view3d.py
M       source/blender/blenkernel/BKE_layer.h
M       source/blender/blenkernel/intern/layer.c
M       source/blender/depsgraph/intern/builder/deg_builder_nodes_view_layer.cc
M       
source/blender/depsgraph/intern/builder/deg_builder_relations_view_layer.cc
M       source/blender/editors/object/object_edit.c
M       source/blender/editors/screen/screen_context.c
M       source/blender/editors/space_outliner/outliner_draw.c
M       source/blender/editors/space_outliner/outliner_intern.h
M       source/blender/editors/space_outliner/outliner_tree.c
M       source/blender/editors/transform/transform_conversions.c
M       source/blender/makesdna/DNA_layer_types.h
M       source/blender/makesrna/intern/rna_layer.c

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

diff --git a/release/scripts/startup/bl_ui/space_view3d.py 
b/release/scripts/startup/bl_ui/space_view3d.py
index 2ae8c911a6d..77f9c2332ac 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -4078,8 +4078,11 @@ class VIEW3D_PT_collections(Panel):
             sub = row.split()
             subrow = sub.row(align=True)
             subrow.alignment = 'RIGHT'
-            subrow.active = collection.is_visible # Parent collection runtime 
visibility
-            subrow.prop(child, "hide_viewport", text="", emboss=False)
+            icon = 'HIDE_OFF' if has_visible_objects else 'HIDE_ON'
+            props = subrow.operator("object.hide_collection", text="", 
icon=icon, emboss=False)
+            props.collection_index = index
+            props.toggle = True
+            subrow.prop(child.collection, "hide_select", text="", emboss=False)
 
         for child in collection.children:
             index = self._draw_collection(layout, view_layer, child, index)
diff --git a/source/blender/blenkernel/BKE_layer.h 
b/source/blender/blenkernel/BKE_layer.h
index 5e0d3f6c5a5..e98fa189379 100644
--- a/source/blender/blenkernel/BKE_layer.h
+++ b/source/blender/blenkernel/BKE_layer.h
@@ -113,8 +113,6 @@ bool BKE_layer_collection_objects_select(
         struct ViewLayer *view_layer, struct LayerCollection *lc, bool 
deselect);
 bool BKE_layer_collection_has_selected_objects(
         struct ViewLayer *view_layer, struct LayerCollection *lc);
-bool BKE_layer_collection_has_layer_collection(
-        struct LayerCollection *lc_parent, struct LayerCollection *lc_child);
 
 void BKE_base_set_visible(struct Scene *scene, struct ViewLayer *view_layer, 
struct Base *base, bool extend);
 void BKE_layer_collection_set_visible(struct Scene *scene, struct ViewLayer 
*view_layer, struct LayerCollection *lc, bool extend);
diff --git a/source/blender/blenkernel/intern/layer.c 
b/source/blender/blenkernel/intern/layer.c
index 76960fbc088..9931c29a8c2 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -610,7 +610,7 @@ int BKE_layer_collection_findindex(ViewLayer *view_layer, 
const LayerCollection
 static short layer_collection_sync(
         ViewLayer *view_layer, const ListBase *lb_scene,
         ListBase *lb_layer, ListBase *new_object_bases,
-        short parent_exclude, short parent_restrict, short 
parent_layer_restrict)
+        short parent_exclude, short parent_restrict)
 {
        /* TODO: support recovery after removal of intermediate collections, 
reordering, ..
         * For local edits we can make editing operating do the appropriate 
thing, but for
@@ -655,17 +655,15 @@ static short layer_collection_sync(
 
                /* Collection restrict is inherited. */
                short child_restrict = parent_restrict;
-               short child_layer_restrict = parent_layer_restrict;
                if (!(collection->flag & COLLECTION_IS_MASTER)) {
                        child_restrict |= collection->flag;
-                       child_layer_restrict |= lc->flag;
                }
 
                /* Sync child collections. */
                short child_runtime_flag = layer_collection_sync(
                        view_layer, &collection->children,
                        &lc->layer_collections, new_object_bases,
-                       lc->flag, child_restrict, child_layer_restrict);
+                       lc->flag, child_restrict);
 
                /* Layer collection exclude is not inherited. */
                if (lc->flag & LAYER_COLLECTION_EXCLUDE) {
@@ -676,10 +674,6 @@ static short layer_collection_sync(
                        lc->runtime_flag = child_runtime_flag;
                }
 
-               if ((child_layer_restrict & LAYER_COLLECTION_RESTRICT_VIEW) == 
0) {
-                       lc->runtime_flag |= LAYER_COLLECTION_VISIBLE;
-               }
-
                /* Sync objects, except if collection was excluded. */
                for (CollectionObject *cob = collection->gobject.first; cob; 
cob = cob->next) {
                        if (cob->ob == NULL) {
@@ -707,7 +701,6 @@ static short layer_collection_sync(
                        int object_restrict = base->object->restrictflag;
 
                        if (((child_restrict & COLLECTION_RESTRICT_VIEW) == 0) 
&&
-                           ((child_layer_restrict & 
LAYER_COLLECTION_RESTRICT_VIEW) == 0) &&
                            ((object_restrict & OB_RESTRICT_VIEW) == 0))
                        {
                                base->flag |= BASE_VISIBLE | BASE_ENABLED | 
BASE_ENABLED_VIEWPORT;
@@ -721,6 +714,7 @@ static short layer_collection_sync(
 
                        if (((child_restrict & COLLECTION_RESTRICT_RENDER) == 
0) &&
                            ((object_restrict & OB_RESTRICT_RENDER) == 0))
+
                        {
                                base->flag |= BASE_ENABLED_RENDER;
                        }
@@ -797,11 +791,11 @@ void BKE_layer_collection_sync(const Scene *scene, 
ViewLayer *view_layer)
        const ListBase collections = {&child, &child};
        ListBase new_object_bases = {NULL, NULL};
 
-       const short parent_exclude = 0, parent_restrict = 0, 
parent_layer_restrict = 0;
+       const short parent_exclude = 0, parent_restrict = 0;
        layer_collection_sync(
                view_layer, &collections,
                &view_layer->layer_collections, &new_object_bases,
-               parent_exclude, parent_restrict, parent_layer_restrict);
+               parent_exclude, parent_restrict);
 
        /* Any remaning object bases are to be removed. */
        for (Base *base = view_layer->object_bases.first; base; base = 
base->next) {
@@ -925,7 +919,7 @@ bool BKE_layer_collection_has_selected_objects(ViewLayer 
*view_layer, LayerColle
                for (CollectionObject *cob = lc->collection->gobject.first; 
cob; cob = cob->next) {
                        Base *base = BKE_view_layer_base_find(view_layer, 
cob->ob);
 
-                       if (base && (base->flag & BASE_SELECTED) && (base->flag 
& BASE_VISIBLE)) {
+                       if (base && (base->flag & BASE_SELECTED)) {
                                return true;
                        }
                }
@@ -940,20 +934,6 @@ bool BKE_layer_collection_has_selected_objects(ViewLayer 
*view_layer, LayerColle
        return false;
 }
 
-bool BKE_layer_collection_has_layer_collection(LayerCollection *lc_parent, 
LayerCollection *lc_child)
-{
-       if (lc_parent == lc_child) {
-               return true;
-       }
-
-       for (LayerCollection *lc_iter = lc_parent->layer_collections.first; 
lc_iter; lc_iter = lc_iter->next) {
-               if (BKE_layer_collection_has_layer_collection(lc_iter, 
lc_child)) {
-                       return true;
-               }
-       }
-       return false;
-}
-
 /* ---------------------------------------------------------------------- */
 
 /* Update after toggling visibility of an object base. */
@@ -975,62 +955,44 @@ void BKE_base_set_visible(Scene *scene, ViewLayer 
*view_layer, Base *base, bool
        BKE_layer_collection_sync(scene, view_layer);
 }
 
-static void layer_collection_flag_set_recursive(LayerCollection *lc, const int 
flag)
-{
-       lc->flag |= flag;
-       for (LayerCollection *lc_iter = lc->layer_collections.first; lc_iter; 
lc_iter = lc_iter->next) {
-               layer_collection_flag_set_recursive(lc_iter, flag);
-       }
-}
-
-static void layer_collection_flag_unset_recursive(LayerCollection *lc, const 
int flag)
-{
-       lc->flag &= ~flag;
-       for (LayerCollection *lc_iter = lc->layer_collections.first; lc_iter; 
lc_iter = lc_iter->next) {
-               layer_collection_flag_unset_recursive(lc_iter, flag);
-       }
-}
-
-/**
- * Set collection per-view layer visiblity.
- * When not extending, we show all the direct parents and all children of the 
layer collection.
- */
 void BKE_layer_collection_set_visible(Scene *scene, ViewLayer *view_layer, 
LayerCollection *lc, bool extend)
 {
        if (!extend) {
-               /* Make only this collection visible. */
-               for (LayerCollection *lc_iter = 
view_layer->layer_collections.first; lc_iter; lc_iter = lc_iter->next) {
-                       layer_collection_flag_set_recursive(lc_iter, 
LAYER_COLLECTION_RESTRICT_VIEW);
-               }
-
-               /* Make all the direct parents visible. */
-               LayerCollection *lc_parent = lc;
-               LayerCollection *lc_master = 
view_layer->layer_collections.first;
-               for (LayerCollection *lc_iter = 
lc_master->layer_collections.first; lc_iter; lc_iter = lc_iter->next) {
-                       if (BKE_layer_collection_has_layer_collection(lc_iter, 
lc)) {
-                               lc_parent = lc_iter;
-                               break;
-                       }
+               /* Make only objects from one collection visible. */
+               for (Base *base = view_layer->object_bases.first; base; base = 
base->next) {
+                       base->flag |= BASE_HIDDEN;
                }
 
-               while (lc_parent != lc) {
-                       lc_parent->flag &= ~LAYER_COLLECTION_RESTRICT_VIEW;
+               FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(lc->collection, ob)
+               {
+                       Base *base = 
BLI_ghash_lookup(view_layer->object_bases_hash, ob);
 
-                       for (LayerCollection *lc_iter = 
lc_parent->layer_collections.first; lc_iter; lc_iter = lc_iter->next) {
-                               if 
(BKE_layer_collection_has_layer_collection(lc_iter, lc)) {
-                                       lc_parent = lc_iter;
-                                       break;
-                               }
+                       if (base) {
+                               base->flag &= ~BASE_HIDDEN;
                        }
                }
-
-               /* Make all the children visible. */
-               layer_collection_flag_unset_recursive(lc, 
LAYER_COLLECTION_RESTRICT_VIEW);
+               FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
 
                BKE_layer_collection_activate(view_layer, lc);
        }
        else {
-               lc->flag ^= LAYER_COLLECTION_RESTRICT_VIEW;
+               /* Toggle visibility of objects from collection. */
+               bool hide = (lc->runtime_flag & 
LAYER_COLLECTION_HAS_VISIBLE_OBJECTS) != 0;
+
+               FOREACH_COLLECTION_OBJECT_RECURSIVE_BEGIN(lc->collection, ob)
+               {
+                       Base *base = 
BLI_ghash_lookup(view_layer->object_bases_hash, ob);
+
+                       if (base) {
+                               if (hide) {
+                                       base->flag |= BASE_HIDDEN;
+                               }
+                               else {
+                                       base->flag &= ~BASE_HIDDEN;
+                               }
+                       }
+               }
+               FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
        }
 
        BKE_layer_collection_sync(scene, view_layer);
@@ -1139,7 +1101,7 @@ typedef struct LayerObjectBaseIteratorData {
        Base *base;
 } LayerObjectBaseIteratorData;
 
-static bool object_bases_iterator_is_valid_ex(View3D *v3d, Base *base, const 
int flags)
+static bool object_bases_iterator_is_valid_ex(View3D *v3d, Base *base, const 
int flag)
 {
        if (v3d != NULL) {
                if ((v3d->object_type_exclude_viewport & (1 << 
base->object->type)) != 0) {
@@ -1150,12 +1112,12 @@ static bool object_bases_iterator_is_valid_ex(View3D 
*v3d, Base *base, const int
                        return false;
                }
        }
-       /* Any flag satisfies the condition. */
-       if (flags == ~0) {
-               return (base->flag != 0);
+
+       if ((base->flag & flag) == 0) {
+               return false;
        }
-       /* flags may be more than one flag, so we can't check != 0. */
-       return ((base->flag & flags) == flags);
+
+       return true;
 }
 
 static bool object_bases_iterator_is_valid(View3D *v3d, Base *base)
@@ -1243,12 +1205,12 @@ static void objects_iterator_end(BLI_Iterator *iter)
 
 void BKE_view_layer_selected_objects_iterator_begin(BLI_Itera

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to