20#include "RNA_prototypes.hh"
44 memset(tvc, 0,
sizeof(*tvc));
56 if (tvc->
obact !=
nullptr) {
75 if (view_co_y < (te_iter->ys +
UI_UNIT_Y)) {
76 if (view_co_y >= te_iter->ys) {
91 if (te_next && (view_co_y < (te_next->
ys +
UI_UNIT_Y))) {
109 bool *r_is_merged_icon)
114 const bool over_element = (view_co_x > child_te->
xs) && (view_co_x < child_te->xend);
119 if (r_is_merged_icon) {
120 *r_is_merged_icon =
true;
126 child_te, view_co_x, r_is_merged_icon);
127 if (te != child_te) {
131 child_te = child_te->
next;
141 bool *r_is_merged_icon,
142 bool *r_is_over_icon)
153 *r_is_over_icon =
true;
162 if (te->store_elem == store_elem) {
178 if (te == child_te) {
195 if (tselem->
id ==
id) {
206 if (
static_cast<ID *
>(
ptr.data) ==
id) {
224 if (te->directdata == pchan) {
242 if (te->directdata == ebone) {
288 int filter_tselem_flag,
299 if (filter_te_flag && (te->flag & filter_te_flag) == 0) {
302 else if (filter_tselem_flag && (tselem->
flag & filter_tselem_flag) == 0) {
306 func_retval = func(te, customdata);
318 space_outliner, &subtree, filter_te_flag, filter_tselem_flag, func, customdata))
385 if (active_element) {
386 return active_element;
418 (view_co_x > te->
xs);
420 return outside_left && (view_co_x < te->
xend);
430 return (view_co_x > (te->
xs +
UI_UNIT_X * 2)) && (view_co_x < te->
xend);
435 return (view_co_x > te->
xs) && (view_co_x < te->
xs +
UI_UNIT_X);
440 int tree_width, tree_height;
442 int y_min = std::min(
int(region->
v2d.
cur.
ymin), -tree_height);
484 Base *base =
nullptr;
517 switch (tselem->
type) {
WorkSpace * CTX_wm_workspace(const bContext *C)
LayerCollection * CTX_data_layer_collection(const bContext *C)
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)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
@ 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()
const PointerRNA & get_pointer_rna() const
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)
TreeElementT * tree_element_cast(const TreeElement *te)
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)
bool RNA_struct_is_ID(const StructRNA *type)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
short lib_override_view_mode
SpaceOutliner_Runtime * runtime
std::unique_ptr< AbstractTreeDisplay > tree_display
LayerCollection * layer_collection
Establish and manage Outliner trees for different display modes.