Commit: ee3d36f78a59ebde397962d97fde4a4137f3aada Author: Julian Eisel Date: Wed Sep 7 12:05:56 2022 +0200 Branches: temp-outliner-new-element-storage https://developer.blender.org/rBee3d36f78a59ebde397962d97fde4a4137f3aada
Outliner: Initial (half working) port to new element storage Basicaly the idea is to have a C++ class to better manage the runtime tree element storage and access. This branch doesn't even compile yet, it's just an early experiment so far that I don't only want to keep locally. =================================================================== M source/blender/editors/space_outliner/outliner_dragdrop.cc M source/blender/editors/space_outliner/outliner_draw.cc M source/blender/editors/space_outliner/outliner_intern.hh M source/blender/editors/space_outliner/outliner_tree.cc M source/blender/editors/space_outliner/outliner_utils.cc M source/blender/editors/space_outliner/space_outliner.cc M source/blender/editors/space_outliner/tree/common.cc M source/blender/editors/space_outliner/tree/common.hh M source/blender/editors/space_outliner/tree/tree_display.hh M source/blender/editors/space_outliner/tree/tree_display_data.cc M source/blender/editors/space_outliner/tree/tree_display_libraries.cc M source/blender/editors/space_outliner/tree/tree_display_orphaned.cc M source/blender/editors/space_outliner/tree/tree_display_override_library_hierarchies.cc M source/blender/editors/space_outliner/tree/tree_display_override_library_properties.cc M source/blender/editors/space_outliner/tree/tree_display_scenes.cc M source/blender/editors/space_outliner/tree/tree_display_sequencer.cc M source/blender/editors/space_outliner/tree/tree_display_view_layer.cc M source/blender/editors/space_outliner/tree/tree_element.cc M source/blender/editors/space_outliner/tree/tree_element.hh M source/blender/editors/space_outliner/tree/tree_element_anim_data.cc M source/blender/editors/space_outliner/tree/tree_element_driver.cc M source/blender/editors/space_outliner/tree/tree_element_id.cc M source/blender/editors/space_outliner/tree/tree_element_id_scene.cc M source/blender/editors/space_outliner/tree/tree_element_nla.cc M source/blender/editors/space_outliner/tree/tree_element_overrides.cc M source/blender/editors/space_outliner/tree/tree_element_rna.cc M source/blender/editors/space_outliner/tree/tree_element_scene_objects.cc M source/blender/editors/space_outliner/tree/tree_element_seq.cc M source/blender/editors/space_outliner/tree/tree_element_view_layer.cc =================================================================== diff --git a/source/blender/editors/space_outliner/outliner_dragdrop.cc b/source/blender/editors/space_outliner/outliner_dragdrop.cc index 4a0e00b8bf1..4f27af6bcea 100644 --- a/source/blender/editors/space_outliner/outliner_dragdrop.cc +++ b/source/blender/editors/space_outliner/outliner_dragdrop.cc @@ -64,9 +64,9 @@ static TreeElement *outliner_dropzone_element(TreeElement *te, } } /* Not it. Let's look at its children. */ - if (children && (TREESTORE(te)->flag & TSE_CLOSED) == 0 && (te->subtree.first)) { - LISTBASE_FOREACH (TreeElement *, te_sub, &te->subtree) { - TreeElement *te_valid = outliner_dropzone_element(te_sub, fmval, children); + if (children && (TREESTORE(te)->flag & TSE_CLOSED) == 0) { + for (TreeElement &te_sub : te->child_elements) { + TreeElement *te_valid = outliner_dropzone_element(&te_sub, fmval, children); if (te_valid) { return te_valid; } @@ -139,14 +139,14 @@ static TreeElement *outliner_drop_insert_find(bContext *C, if (view_mval[1] < (te_hovered->ys + margin)) { if (TSELEM_OPEN(TREESTORE(te_hovered), space_outliner) && - !BLI_listbase_is_empty(&te_hovered->subtree)) { + !te_hovered->child_elements.is_empty()) { /* inserting after a open item means we insert into it, but as first child */ - if (BLI_listbase_is_empty(&te_hovered->subtree)) { + if (te_hovered->child_elements.is_empty()) { *r_insert_type = TE_INSERT_INTO; return te_hovered; } *r_insert_type = TE_INSERT_BEFORE; - return static_cast<TreeElement *>(te_hovered->subtree.first); + return &*te_hovered->child_elements.begin(); } *r_insert_type = TE_INSERT_AFTER; return te_hovered; diff --git a/source/blender/editors/space_outliner/outliner_draw.cc b/source/blender/editors/space_outliner/outliner_draw.cc index 3f99b19cd16..acddf2b2b1d 100644 --- a/source/blender/editors/space_outliner/outliner_draw.cc +++ b/source/blender/editors/space_outliner/outliner_draw.cc @@ -81,22 +81,22 @@ namespace blender::ed::outliner { * \{ */ static void outliner_tree_dimensions_impl(SpaceOutliner *space_outliner, - ListBase *lb, + SubTree &subtree, int *width, int *height) { - LISTBASE_FOREACH (TreeElement *, te, lb) { - *width = MAX2(*width, te->xend); + for (TreeElement &te : subtree) { + *width = MAX2(*width, te.xend); if (height != nullptr) { *height += UI_UNIT_Y; } - TreeStoreElem *tselem = TREESTORE(te); + TreeStoreElem *tselem = TREESTORE(&te); if (TSELEM_OPEN(tselem, space_outliner)) { - outliner_tree_dimensions_impl(space_outliner, &te->subtree, width, height); + outliner_tree_dimensions_impl(space_outliner, te.child_elements, width, height); } else { - outliner_tree_dimensions_impl(space_outliner, &te->subtree, width, nullptr); + outliner_tree_dimensions_impl(space_outliner, te.child_elements, width, nullptr); } } } @@ -105,7 +105,8 @@ void outliner_tree_dimensions(SpaceOutliner *space_outliner, int *r_width, int * { *r_width = 0; *r_height = 0; - outliner_tree_dimensions_impl(space_outliner, &space_outliner->tree, r_width, r_height); + outliner_tree_dimensions_impl( + space_outliner, space_outliner->runtime->root_elements, r_width, r_height); } /** @@ -1030,7 +1031,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, ViewLayer *view_layer, ARegion *region, SpaceOutliner *space_outliner, - ListBase *lb, + SubTree &subtree, RestrictPropertiesActive props_active_parent) { /* Get RNA properties (once for speed). */ @@ -1105,16 +1106,16 @@ static void outliner_draw_restrictbuts(uiBlock *block, /* Create buttons. */ uiBut *bt; - LISTBASE_FOREACH (TreeElement *, te, lb) { - TreeStoreElem *tselem = TREESTORE(te); + for (TreeElement &te : subtree) { + TreeStoreElem *tselem = TREESTORE(&te); RestrictPropertiesActive props_active = props_active_parent; - if (te->ys + 2 * UI_UNIT_Y >= region->v2d.cur.ymin && te->ys <= region->v2d.cur.ymax) { + if (te.ys + 2 * UI_UNIT_Y >= region->v2d.cur.ymin && te.ys <= region->v2d.cur.ymax) { if (tselem->type == TSE_R_LAYER && ELEM(space_outliner->outlinevis, SO_SCENES, SO_VIEW_LAYER)) { if (space_outliner->show_restrict_flags & SO_RESTRICT_RENDER) { /* View layer render toggle. */ - ViewLayer *layer = static_cast<ViewLayer *>(te->directdata); + ViewLayer *layer = static_cast<ViewLayer *>(te.directdata); bt = uiDefIconButBitS(block, UI_BTYPE_ICON_TOGGLE_N, @@ -1122,7 +1123,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, 0, ICON_RESTRICT_RENDER_OFF, (int)(region->v2d.cur.xmax - restrict_offsets.render), - te->ys, + te.ys, UI_UNIT_X, UI_UNIT_Y, &layer->flag, @@ -1136,18 +1137,18 @@ static void outliner_draw_restrictbuts(uiBlock *block, UI_but_drawflag_enable(bt, UI_BUT_ICON_REVERSE); } } - else if (((tselem->type == TSE_SOME_ID) && (te->idcode == ID_OB)) && - (te->flag & TE_CHILD_NOT_IN_COLLECTION)) { + else if (((tselem->type == TSE_SOME_ID) && (te.idcode == ID_OB)) && + (te.flag & TE_CHILD_NOT_IN_COLLECTION)) { /* Don't show restrict columns for children that are not directly inside the collection. */ } - else if ((tselem->type == TSE_SOME_ID) && (te->idcode == ID_OB)) { + else if ((tselem->type == TSE_SOME_ID) && (te.idcode == ID_OB)) { PointerRNA ptr; Object *ob = (Object *)tselem->id; RNA_id_pointer_create(&ob->id, &ptr); if (space_outliner->show_restrict_flags & SO_RESTRICT_HIDE) { - Base *base = (te->directdata) ? (Base *)te->directdata : - BKE_view_layer_base_find(view_layer, ob); + Base *base = (te.directdata) ? (Base *)te.directdata : + BKE_view_layer_base_find(view_layer, ob); if (base) { PointerRNA base_ptr; RNA_pointer_create(&scene->id, &RNA_ObjectBase, base, &base_ptr); @@ -1156,7 +1157,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, 0, 0, (int)(region->v2d.cur.xmax - restrict_offsets.hide), - te->ys, + te.ys, UI_UNIT_X, UI_UNIT_Y, &base_ptr, @@ -1183,7 +1184,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, 0, 0, (int)(region->v2d.cur.xmax - restrict_offsets.select), - te->ys, + te.ys, UI_UNIT_X, UI_UNIT_Y, &ptr, @@ -1208,7 +1209,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, 0, 0, (int)(region->v2d.cur.xmax - restrict_offsets.viewport), - te->ys, + te.ys, UI_UNIT_X, UI_UNIT_Y, &ptr, @@ -1233,7 +1234,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, 0, 0, (int)(region->v2d.cur.xmax - restrict_offsets.render), - te->ys, + te.ys, UI_UNIT_X, UI_UNIT_Y, &ptr, @@ -1253,7 +1254,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, } } else if (tselem->type == TSE_CONSTRAINT) { - bConstraint *con = (bConstraint *)te->directdata; + bConstraint *con = (bConstraint *)te.directdata; PointerRNA ptr; RNA_pointer_create(tselem->id, &RNA_Constraint, con, &ptr); @@ -1264,7 +1265,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, 0, 0, (int)(region->v2d.cur.xmax - restrict_offsets.hide), - te->ys, + te.ys, UI_UNIT_X, UI_UNIT_Y, &ptr, @@ -1282,7 +1283,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, } } else if (tselem->type == TSE_MODIFIER) { - ModifierData *md = (ModifierData *)te->directdata; + ModifierData *md = (ModifierData *)te.directdata; PointerRNA ptr; RNA_pointer_create(tselem->id, &RNA_Modifier, md, &ptr); @@ -1293,7 +1294,7 @@ static void outliner_draw_restrictbuts(uiBlock *block, 0, 0, (int)(region->v2d.cur.xmax - restrict_offsets.viewport), - te->ys, + te.ys, @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs