53 memset(tvc, 0,
sizeof(*tvc));
83 if (view_co_y < (te_iter->ys +
UI_UNIT_Y)) {
84 if (view_co_y >= te_iter->ys) {
98 if (te_next && (view_co_y < (te_next->
ys +
UI_UNIT_Y))) {
116 bool *r_is_merged_icon)
120 bool over_element =
false;
123 over_element = (view_co_x > child_te->
xs) && (view_co_x < child_te->xend);
128 if (r_is_merged_icon) {
129 *r_is_merged_icon =
true;
135 child_te, view_co_x, r_is_merged_icon);
136 if (te != child_te) {
140 child_te = child_te->
next;
156 bool *r_is_merged_icon,
157 bool *r_is_over_icon)
166 *r_is_over_icon =
true;
176 if (te->store_elem == store_elem) {
193 if (te == child_te) {
230 if (tselem->
id ==
id) {
246 if (te->directdata == pchan) {
264 if (te->directdata == ebone) {
318 int filter_tselem_flag,
329 if (filter_te_flag && (te->flag & filter_te_flag) == 0) {
332 else if (filter_tselem_flag && (tselem->
flag & filter_tselem_flag) == 0) {
336 func_retval = func(te, customdata);
348 space_outliner, &subtree, filter_te_flag, filter_tselem_flag, func, customdata)) {
402 if ((
TREESTORE(te)->flag & flag) == flag) {
406 if (active_element) {
407 return active_element;
436 (view_co_x > te->
xs);
438 return outside_left && (view_co_x < te->
xend);
449 return (view_co_x > (te->
xs +
UI_UNIT_X * 2)) && (view_co_x < te->
xend);
455 return (view_co_x > te->
xs) && (view_co_x < te->
xs +
UI_UNIT_X);
461 int tree_width, tree_height;
struct Scene * CTX_data_scene(const bContext *C)
struct SpaceOutliner * CTX_wm_space_outliner(const bContext *C)
struct ViewLayer * CTX_data_view_layer(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct Base * BKE_view_layer_base_find(struct ViewLayer *view_layer, struct Object *ob)
General operations, lookup, etc. for blender objects.
struct Object * BKE_object_pose_armature_get(struct Object *ob)
struct TreeStoreElem * BKE_outliner_treehash_lookup_any(void *treehash, short type, short nr, struct ID *id)
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)
#define OBACT(_view_layer)
@ SO_RESTRICT_INDIRECT_ONLY
void ED_region_tag_redraw_no_rebuild(struct ARegion *region)
void ED_region_tag_redraw(struct ARegion *region)
void UI_view2d_region_to_view(const struct View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
void outliner_tree_dimensions(SpaceOutliner *space_outliner, int *r_width, int *r_height)
bool outliner_requires_rebuild_on_open_change(const struct SpaceOutliner *space_outliner)
TreeTraversalAction(* TreeTraversalFunc)(struct TreeElement *te, void *customdata)
#define TSELEM_OPEN(telm, sv)
void outliner_scroll_view(SpaceOutliner *space_outliner, ARegion *region, int delta_y)
bool outliner_tree_traverse(const SpaceOutliner *space_outliner, ListBase *tree, int filter_te_flag, int filter_tselem_flag, TreeTraversalFunc func, void *customdata)
TreeElement * outliner_find_id(SpaceOutliner *space_outliner, ListBase *lb, const ID *id)
ID * outliner_search_back(TreeElement *te, short idcode)
TreeElement * outliner_find_element_with_flag(const ListBase *lb, short flag)
bool outliner_item_is_co_within_close_toggle(const TreeElement *te, float view_co_x)
bool outliner_item_is_co_over_name(const TreeElement *te, float view_co_x)
TreeElement * outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem)
TreeElement * outliner_find_editbone(ListBase *lb, const EditBone *ebone)
bool outliner_item_is_co_over_name_icons(const TreeElement *te, float view_co_x)
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)
Base * ED_outliner_give_base_under_cursor(bContext *C, const int mval[2])
bool outliner_is_element_visible(const TreeElement *te)
void outliner_viewcontext_init(const bContext *C, TreeViewContext *tvc)
float outliner_restrict_columns_width(const SpaceOutliner *space_outliner)
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_parent_element(ListBase *lb, TreeElement *parent_te, const TreeElement *child_te)
TreeElement * outliner_find_tse(SpaceOutliner *space_outliner, const TreeStoreElem *tse)
TreeElement * outliner_find_posechannel(ListBase *lb, const bPoseChannel *pchan)
static TreeElement * outliner_find_item_at_x_in_row_recursive(const TreeElement *parent_te, float view_co_x, bool *r_is_merged_icon)
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)
SpaceOutliner_Runtime * runtime
struct TreeElement * parent
struct TreeElement * next
struct ViewLayer * view_layer