20#include "RNA_prototypes.hh"
43 memset(tvc, 0,
sizeof(*tvc));
52 if (tvc->
obact !=
nullptr) {
71 if (view_co_y < (te_iter->ys +
UI_UNIT_Y)) {
72 if (view_co_y >= te_iter->ys) {
87 if (te_next && (view_co_y < (te_next->
ys +
UI_UNIT_Y))) {
105 bool *r_is_merged_icon)
110 const bool over_element = (view_co_x > child_te->
xs) && (view_co_x < child_te->xend);
115 if (r_is_merged_icon) {
116 *r_is_merged_icon =
true;
122 child_te, view_co_x, r_is_merged_icon);
123 if (te != child_te) {
127 child_te = child_te->
next;
137 bool *r_is_merged_icon,
138 bool *r_is_over_icon)
149 *r_is_over_icon =
true;
158 if (te->store_elem == store_elem) {
174 if (te == child_te) {
191 if (tselem->
id ==
id) {
207 if (te->directdata == pchan) {
225 if (te->directdata == ebone) {
271 int filter_tselem_flag,
282 if (filter_te_flag && (te->flag & filter_te_flag) == 0) {
285 else if (filter_tselem_flag && (tselem->
flag & filter_tselem_flag) == 0) {
289 func_retval = func(te, customdata);
301 space_outliner, &subtree, filter_te_flag, filter_tselem_flag, func, customdata))
368 if (active_element) {
369 return active_element;
401 (view_co_x > te->
xs);
403 return outside_left && (view_co_x < te->
xend);
413 return (view_co_x > (te->
xs +
UI_UNIT_X * 2)) && (view_co_x < te->
xend);
418 return (view_co_x > te->
xs) && (view_co_x < te->
xs +
UI_UNIT_X);
423 int tree_width, tree_height;
425 int y_min = std::min(
int(region->v2d.cur.ymin), -tree_height);
427 region->v2d.cur.ymax += delta_y;
428 region->v2d.cur.ymin += delta_y;
433 offset = region->v2d.cur.ymax;
434 region->v2d.cur.ymax -= offset;
435 region->v2d.cur.ymin -= offset;
437 else if (region->v2d.cur.ymin < y_min) {
438 offset = y_min - region->v2d.cur.ymin;
439 region->v2d.cur.ymax += offset;
440 region->v2d.cur.ymin += offset;
467 Base *base =
nullptr;
500 switch (tselem->
type) {
SpaceOutliner * CTX_wm_space_outliner(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
Object * BKE_view_layer_active_object_get(const ViewLayer *view_layer)
Base * BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
General operations, lookup, etc. for blender objects.
Object * BKE_object_pose_armature_get(Object *ob)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
@ TSE_VIEW_COLLECTION_BASE
#define OBEDIT_FROM_OBACT(ob)
eSpaceOutliner_LibOverrideViewMode
@ SO_LIB_OVERRIDE_VIEW_HIERARCHIES
@ SO_LIB_OVERRIDE_VIEW_PROPERTIES
@ SO_RESTRICT_INDIRECT_ONLY
void ED_region_tag_redraw_no_rebuild(ARegion *region)
void ED_region_tag_redraw(ARegion *region)
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
bool outliner_item_is_co_within_close_toggle(const TreeElement *te, float view_co_x)
TreeTraversalAction(*)(TreeElement *te, void *customdata) TreeTraversalFunc
bool outliner_item_is_co_over_icon(const TreeElement *te, float view_co_x)
void outliner_tag_redraw_avoid_rebuild_on_open_change(const SpaceOutliner *space_outliner, ARegion *region)
TreeElement * outliner_find_posechannel(ListBase *lb, const bPoseChannel *pchan)
TreeElement * outliner_find_item_at_x_in_row(const SpaceOutliner *space_outliner, TreeElement *parent_te, float view_co_x, bool *r_is_merged_icon, bool *r_is_over_icon)
TreeElement * outliner_find_id(SpaceOutliner *space_outliner, ListBase *lb, const ID *id)
static TreeElement * outliner_find_item_at_x_in_row_recursive(const TreeElement *parent_te, float view_co_x, bool *r_is_merged_icon)
float outliner_right_columns_width(const SpaceOutliner *space_outliner)
TreeElement * outliner_search_back_te(TreeElement *te, short idcode)
TreeElement * outliner_find_item_at_y(const SpaceOutliner *space_outliner, const ListBase *tree, float view_co_y)
void outliner_viewcontext_init(const bContext *C, TreeViewContext *tvc)
bool outliner_is_element_in_view(const TreeElement *te, const View2D *v2d)
TreeElement * outliner_find_editbone(ListBase *lb, const EditBone *ebone)
void outliner_scroll_view(SpaceOutliner *space_outliner, ARegion *region, int delta_y)
bool outliner_is_element_visible(const TreeElement *te)
bool outliner_tree_traverse(const SpaceOutliner *space_outliner, ListBase *tree, int filter_te_flag, int filter_tselem_flag, TreeTraversalFunc func, void *customdata)
ID * outliner_search_back(TreeElement *te, short idcode)
TreeElement * outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem)
TreeElement * outliner_find_parent_element(ListBase *lb, TreeElement *parent_te, const TreeElement *child_te)
bool outliner_item_is_co_over_name(const TreeElement *te, float view_co_x)
bool outliner_item_is_co_over_name_icons(const TreeElement *te, float view_co_x)
TreeElement * outliner_find_element_with_flag(const ListBase *lb, short flag)
void outliner_tree_dimensions(SpaceOutliner *space_outliner, int *r_width, int *r_height)
#define TSELEM_OPEN(telm, sv)
Base * ED_outliner_give_base_under_cursor(bContext *C, const int mval[2])
bool ED_outliner_give_rna_under_cursor(bContext *C, const int mval[2], PointerRNA *r_ptr)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
short lib_override_view_mode
SpaceOutliner_Runtime * runtime
std::unique_ptr< AbstractTreeDisplay > tree_display
Establish and manage Outliner trees for different display modes.