diff options
author | Nathan Craddock <nzcraddock@gmail.com> | 2020-11-20 18:47:51 +0300 |
---|---|---|
committer | Nathan Craddock <nzcraddock@gmail.com> | 2020-11-20 18:47:51 +0300 |
commit | 2afdb4ba8754d690ccad058fdbcab21f83c62b5c (patch) | |
tree | b0a04f9e98be6cd80534fd8131b3b3466d66e620 /source/blender/editors/space_outliner/outliner_tree.c | |
parent | 96995b2343d96c75e3d03dbfaf8785fb8b28bfc5 (diff) |
Outliner: Object state filter invert toggle
This adds an invert toggle for the outliner object state filters.
There are some cases where we want a filter for invertable states (Selected,
Unselected) and having a single toggle to invert the filter reduces the
number of separate filter types needed. This removes the "Hidden" filter
which can now be replicated with an inverted "Visible" filter.
Differential Revision: https://developer.blender.org/D9598
Diffstat (limited to 'source/blender/editors/space_outliner/outliner_tree.c')
-rw-r--r-- | source/blender/editors/space_outliner/outliner_tree.c | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index 83be26793ee..159511546be 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -1913,9 +1913,6 @@ static int outliner_exclude_filter_get(const SpaceOutliner *space_outliner) case SO_FILTER_OB_VISIBLE: exclude_filter |= SO_FILTER_OB_STATE_VISIBLE; break; - case SO_FILTER_OB_HIDDEN: - exclude_filter |= SO_FILTER_OB_STATE_HIDDEN; - break; case SO_FILTER_OB_SELECTED: exclude_filter |= SO_FILTER_OB_STATE_SELECTED; break; @@ -1992,32 +1989,34 @@ static bool outliner_element_visible_get(ViewLayer *view_layer, } } + bool is_visible = true; if (exclude_filter & SO_FILTER_OB_STATE_VISIBLE) { if ((base->flag & BASE_VISIBLE_VIEWLAYER) == 0) { - return false; - } - } - else if (exclude_filter & SO_FILTER_OB_STATE_HIDDEN) { - if ((base->flag & BASE_VISIBLE_VIEWLAYER) != 0) { - return false; + is_visible = false; } } else if (exclude_filter & SO_FILTER_OB_STATE_SELECTED) { if ((base->flag & BASE_SELECTED) == 0) { - return false; + is_visible = false; } } else if (exclude_filter & SO_FILTER_OB_STATE_SELECTABLE) { if ((base->flag & BASE_SELECTABLE) == 0) { - return false; + is_visible = false; } } else { BLI_assert(exclude_filter & SO_FILTER_OB_STATE_ACTIVE); if (base != BASACT(view_layer)) { - return false; + is_visible = false; } } + + if (exclude_filter & SO_FILTER_OB_STATE_INVERSE) { + is_visible = !is_visible; + } + + return is_visible; } if ((te->parent != NULL) && (TREESTORE(te->parent)->type == 0) && |