diff options
author | Julian Eisel <julian@blender.org> | 2022-08-19 22:56:09 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2022-08-19 23:22:25 +0300 |
commit | c2a6c3a4e24193893626ebbf07b0f02ce250cc61 (patch) | |
tree | 127af35399ce5ef985878d1aefc0a708ba09dc28 /source/blender/editors/space_outliner/outliner_intern.hh | |
parent | 51b79e4775e1f661df9aac60b7d355b72aa8b748 (diff) |
Outliner: Refactor how lazy-building of children is done
Makes the lazy-building (where children are only built when the parent
isn't collapsed) more generic, so more display modes can use it. So far
this was hardcoded for the "Data API" display mode.
This will be used to work around a big performance issue with the
Library Overrides Hierachies view in a complex production file, see
following commit.
Diffstat (limited to 'source/blender/editors/space_outliner/outliner_intern.hh')
-rw-r--r-- | source/blender/editors/space_outliner/outliner_intern.hh | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/source/blender/editors/space_outliner/outliner_intern.hh b/source/blender/editors/space_outliner/outliner_intern.hh index 5362782dd84..46585289b8c 100644 --- a/source/blender/editors/space_outliner/outliner_intern.hh +++ b/source/blender/editors/space_outliner/outliner_intern.hh @@ -153,7 +153,10 @@ enum { /* Closed items display their children as icon within the row. TE_ICONROW is for * these child-items that are visible but only within the row of the closed parent. */ TE_ICONROW = (1 << 1), - TE_LAZY_CLOSED = (1 << 2), + /** Treat the element as if it had children, e.g. draw an icon to un-collapse it, even if it + * doesn't. Used where children are lazy-built only if the parent isn't collapsed (see + * #AbstractTreeDisplay::is_lazy_built()). */ + TE_PRETEND_HAS_CHILDREN = (1 << 2), TE_FREE_NAME = (1 << 3), TE_DRAGGING = (1 << 4), TE_CHILD_NOT_IN_COLLECTION = (1 << 6), @@ -276,11 +279,6 @@ struct TreeElement *outliner_add_collection_recursive(SpaceOutliner *space_outli bool outliner_requires_rebuild_on_select_or_active_change( const struct SpaceOutliner *space_outliner); -/** - * Check if a display mode needs a full rebuild if the open/collapsed state changes. - * Element types in these modes don't actually add children if collapsed, so the rebuild is needed. - */ -bool outliner_requires_rebuild_on_open_change(const struct SpaceOutliner *space_outliner); typedef struct IDsSelectedData { struct ListBase selected_array; @@ -461,10 +459,7 @@ void outliner_set_coordinates(const struct ARegion *region, /** * Open or close a tree element, optionally toggling all children recursively. */ -void outliner_item_openclose(struct SpaceOutliner *space_outliner, - TreeElement *te, - bool open, - bool toggle_all); +void outliner_item_openclose(TreeElement *te, bool open, bool toggle_all); /* outliner_dragdrop.c */ |