94 *width = std::max(*width,
int(te->xend));
95 if (height !=
nullptr) {
125 const short id_type =
GS(id->name);
154 ebone->flag &= ~flag;
191 Bone *bone =
static_cast<Bone *
>(poin2);
262 const char *propname)
276 ID *
id = ob ? &ob->
id : &scene->id;
277 StructRNA *struct_rna = ob ? &RNA_Object : &RNA_ObjectBase;
278 void *data = ob ? (
void *)ob : (
void *)base;
287 ob_iter =
static_cast<Object *
>(ob_iter->id.next))
298 if (base_iter ==
nullptr) {
324 char *propname =
static_cast<char *
>(poin2);
333 Base *base =
static_cast<Base *
>(poin);
334 char *propname =
static_cast<char *
>(poin2);
388 if (base_or_object_prop) {
410 Collection *collection_iter = layer_collection ?
411 (collection ? layer_collection_iter->
collection :
nullptr) :
415 layer_collection_iter,
417 layer_or_collection_prop,
440 const bool value_cmp,
449 const Collection *collection_ensure_cmp = collection_cmp ? collection_cmp :
454 else if (collection_ensure == collection_ensure_cmp) {
461 if (value != value_cmp) {
468 if (value == value_cmp) {
477 Collection *collection_iter = layer_collection ?
478 (collection ? layer_collection_iter->
collection :
nullptr) :
484 layer_collection_cmp,
487 layer_or_collection_prop,
488 layer_collection_iter,
503 const char *propname,
507 const bool is_hide = strstr(propname,
"hide_") !=
nullptr;
513 Collection *top_collection = collection ? scene->master_collection :
nullptr;
515 bool was_isolated = (value == is_hide);
520 layer_or_collection_prop,
521 top_layer_collection,
529 top_layer_collection,
531 layer_or_collection_prop,
540 top_layer_collection,
542 layer_or_collection_prop,
551 layer_or_collection_prop,
556 if (layer_collection) {
565 while (lc_parent != layer_collection) {
567 scene, lc_parent, collection ? lc_parent->
collection :
nullptr, &
ptr);
595 const char *propname)
605 if (!
ELEM(
true, do_isolate, extend)) {
610 ID *
id = collection ? &collection->id : &scene->id;
611 StructRNA *struct_rna = collection ? &RNA_Collection : &RNA_LayerCollection;
612 void *data = collection ? (
void *)collection : (
void *)layer_collection;
620 if (layer_collection !=
nullptr) {
623 struct_rna = collection ? &RNA_Object : &RNA_ObjectBase;
632 layer_or_collection_prop,
641 layer_or_collection_prop,
660 char *propname =
static_cast<char *
>(poin2);
671 char *propname =
static_cast<char *
>(poin2);
673 C, layer_collection, layer_collection->
collection, propname);
683 char *propname =
static_cast<char *
>(poin2);
695 const char *undo_str =
nullptr;
702 auto id_rename_helper = [bmain, tselem, oldname]() ->
bool {
703 std::string new_name = tselem->
id->
name + 2;
712 if (id_rename_helper()) {
713 undo_str =
"Rename Data-Block";
748 "Library path '%s' does not exist, correct this before saving",
754 "Library path '%s' is now valid, please reload the library",
756 lib->id.tag &= ~ID_TAG_MISSING;
763 switch (tselem->
type) {
770 undo_str =
"Rename Vertex Group";
775 if (id_rename_helper()) {
776 undo_str =
"Rename Data-Block";
784 undo_str =
"Rename NLA Track";
791 char newname[
sizeof(ebone->
name)];
800 undo_str =
"Rename Edit Bone";
811 char newname[
sizeof(bone->
name)];
823 undo_str =
"Rename Bone";
833 char newname[
sizeof(pchan->
name)];
848 undo_str =
"Rename Pose Bone";
866 undo_str =
"Rename Grease Pencil Layer";
877 std::string new_name(node.name());
878 node.set_name(oldname);
879 grease_pencil.rename_node(*bmain, node, new_name);
882 undo_str =
"Rename Grease Pencil Drawing";
890 char newname[
sizeof(view_layer->
name)];
899 undo_str =
"Rename View Layer";
904 if (id_rename_helper()) {
905 undo_str =
"Rename Data-Block";
921 undo_str =
"Rename Bone Collection";
926 tselem->
flag &= ~TSE_TEXTBUT;
1068 if (layer_collection !=
nullptr) {
1069 *layer_collection_ptr =
RNA_pointer_create(&scene->id, &RNA_LayerCollection, layer_collection);
1073 if (layer_collection) {
1075 layer_collection_ptr, collection_ptr, props, props_active);
1128 } restrict_offsets = {0};
1129 int restrict_column_offset = 0;
1168 if (te->ys + 2 *
UI_UNIT_Y >= region->v2d.cur.ymin && te->ys <= region->v2d.cur.ymax) {
1180 ICON_RESTRICT_RENDER_OFF,
1181 int(region->v2d.cur.xmax - restrict_offsets.render),
1188 TIP_(
"Use view layer for rendering"));
1205 Base *base = (te->directdata) ? (
Base *)te->directdata :
1213 int(region->v2d.cur.xmax - restrict_offsets.hide),
1222 TIP_(
"Temporarily hide in viewport\n"
1223 " \u2022 Shift to set children"));
1238 int(region->v2d.cur.xmax - restrict_offsets.select),
1247 TIP_(
"Disable selection in viewport\n"
1248 " \u2022 Shift to set children"));
1261 int(region->v2d.cur.xmax - restrict_offsets.viewport),
1270 TIP_(
"Globally disable in viewports\n"
1271 " \u2022 Shift to set children"));
1284 int(region->v2d.cur.xmax - restrict_offsets.render),
1293 TIP_(
"Globally disable in renders\n"
1294 " \u2022 Shift to set children"));
1312 int(region->v2d.cur.xmax - restrict_offsets.hide),
1338 int(region->v2d.cur.xmax - restrict_offsets.viewport),
1359 int(region->v2d.cur.xmax - restrict_offsets.render),
1388 int(region->v2d.cur.xmax - restrict_offsets.viewport),
1397 TIP_(
"Restrict visibility in the 3D View\n"
1398 " \u2022 Shift to set children"));
1409 ICON_RESTRICT_SELECT_OFF,
1410 int(region->v2d.cur.xmax - restrict_offsets.select),
1417 TIP_(
"Restrict selection in the 3D View\n"
1418 " \u2022 Shift to set children"));
1433 ICON_RESTRICT_VIEW_OFF,
1434 int(region->v2d.cur.xmax - restrict_offsets.viewport),
1441 TIP_(
"Restrict visibility in the 3D View\n"
1442 " \u2022 Shift to set children"));
1453 ICON_RESTRICT_SELECT_OFF,
1454 int(region->v2d.cur.xmax - restrict_offsets.select),
1461 TIP_(
"Restrict selection in the 3D View\n"
1462 " \u2022 Shift to set children"));
1469 ID *
id = tselem->
id;
1478 int(region->v2d.cur.xmax - restrict_offsets.hide),
1485 TIP_(
"Restrict visibility in the 3D View"));
1497 int(region->v2d.cur.xmax - restrict_offsets.select),
1504 TIP_(
"Restrict editing of strokes and keyframes in this layer"));
1514 if (node.is_layer()) {
1518 else if (node.is_group()) {
1528 int(region->v2d.cur.xmax - restrict_offsets.hide),
1539 if (node.parent_group() && node.parent_group()->is_visible()) {
1549 scene, te, &collection_ptr, &layer_collection_ptr, &props, &props_active))
1557 if (layer_collection !=
nullptr) {
1563 int(region->v2d.cur.xmax) - restrict_offsets.enable,
1567 &layer_collection_ptr,
1581 int(region->v2d.cur.xmax - restrict_offsets.hide),
1585 &layer_collection_ptr,
1590 TIP_(
"Temporarily hide in viewport\n"
1591 " \u2022 Ctrl to isolate collection\n"
1592 " \u2022 Shift to set inside collections and objects"));
1596 (
char *)
"hide_viewport");
1608 int(region->v2d.cur.xmax - restrict_offsets.holdout),
1612 &layer_collection_ptr,
1617 TIP_(
"Mask out objects in collection from view layer\n"
1618 " \u2022 Ctrl to isolate collection\n"
1619 " \u2022 Shift to set inside collections"));
1636 int(region->v2d.cur.xmax - restrict_offsets.indirect_only),
1640 &layer_collection_ptr,
1645 TIP_(
"Objects in collection only contribute indirectly (through shadows and "
1646 "reflections) in the view layer\n"
1647 " \u2022 Ctrl to isolate collection\n"
1648 " \u2022 Shift to set inside collections"));
1652 (
char *)
"indirect_only");
1667 int(region->v2d.cur.xmax - restrict_offsets.viewport),
1676 TIP_(
"Globally disable in viewports\n"
1677 " \u2022 Ctrl to isolate collection\n"
1678 " \u2022 Shift to set inside collections and objects"));
1679 if (layer_collection !=
nullptr) {
1683 (
char *)
"hide_viewport");
1689 (
char *)
"hide_viewport");
1702 int(region->v2d.cur.xmax - restrict_offsets.render),
1711 TIP_(
"Globally disable in renders\n"
1712 " \u2022 Ctrl to isolate collection\n"
1713 " \u2022 Shift to set inside collections and objects"));
1714 if (layer_collection !=
nullptr) {
1718 (
char *)
"hide_render");
1735 int(region->v2d.cur.xmax - restrict_offsets.select),
1744 TIP_(
"Disable selection in viewport\n"
1745 " \u2022 Ctrl to isolate collection\n"
1746 " \u2022 Shift to set inside collections and objects"));
1747 if (layer_collection !=
nullptr) {
1751 (
char *)
"hide_select");
1769 scene, te, &collection_ptr, &layer_collection_ptr, &props, &props_active);
1774 block, scene, view_layer, region, space_outliner, &te->subtree, props_active);
1789 ID *
id = tselem->id;
1796 const char *tip =
nullptr;
1800 const bool is_object =
GS(id->name) ==
ID_OB;
1816 TIP_(
"Number of users"));
1820 if (has_fake_user) {
1821 tip = is_linked ?
TIP_(
"Item is protected from deletion") :
1822 TIP_(
"Click to remove protection from deletion");
1826 tip = is_linked ?
TIP_(
"Item is not protected from deletion") :
1827 TIP_(
"Click to add protection from deletion");
1831 TIP_(
"Item has no users and will be removed") :
1832 TIP_(
"Item has no users and will be removed.\nClick to protect from deletion");
1859 if (!real_users && !has_fake_user) {
1860 uchar overlay_color[4];
1876 const float pad_y = 0.5f *
U.pixelsize;
1891 if (!override_elem) {
1915 StringRefNull op_label = override_op_elem->get_override_operation_label();
1941 (prop_type ==
PROP_ENUM) ?
nullptr :
"",
1957 block,
ptr, prop, ICON_NONE, x + pad_x, te->ys + pad_y, item_max_width, item_height);
1966 if (!idptr_a || !idptr_b) {
1969 const ID *id_a = (
const ID *)idptr_a->
data;
1970 const ID *id_b = (
const ID *)idptr_b->
data;
2008 const BIFIconID icon = is_system_override ? ICON_LIBRARY_DATA_OVERRIDE_NONEDITABLE :
2009 ICON_LIBRARY_DATA_OVERRIDE;
2012 "ED_OT_lib_id_override_editable_toggle",
2029 View2D *v2d = ®ion->v2d;
2063 ptr = te_rna_prop->get_pointer_rna();
2064 prop = te_rna_prop->get_property_rna();
2109 ptr = te_rna_array_elem->get_pointer_rna();
2110 prop = te_rna_array_elem->get_property_rna();
2129 const float restrict_column_width,
2155 dx = region->v2d.cur.xmax - (spx + restrict_column_width + 0.2f *
UI_UNIT_X);
2177 tselem->
flag &= ~TSE_TEXTBUT;
2200 const bool object_data_shared = (ob->
data == tvc.
obact->
data);
2211 const bool lock_object_modes)
2244 TIP_(
"Another object has this shared data in edit mode"));
2249 bool draw_active_icon = ob->
mode == ob_active->
mode;
2255 if (!lock_object_modes && ob != ob_active && !(tvc->
ob_edit || tvc->
ob_pose)) {
2256 draw_active_icon =
false;
2259 const bool object_data_shared = (ob->
data == ob_active->
data);
2260 draw_active_icon = draw_active_icon || object_data_shared;
2264 if (draw_active_icon) {
2266 tip = object_data_shared ?
TIP_(
"Change the object in the current mode") :
2267 TIP_(
"Remove from the current mode");
2272 "Change the object in the current mode\n"
2273 " \u2022 Ctrl to add to the current mode");
2297 UI_but_disable(but,
"Can't edit library or non-editable override data");
2309 outliner_draw_mode_column_toggle(block, tvc, te, lock_object_modes);
2355 const bool use_mode_column,
2359 const short mode_column_offset = (use_mode_column && (space_outliner->
outlinevis ==
SO_SCENES)) ?
2375 warning_msg.
c_str());
2382 const bool use_mode_column)
2391 block, space_outliner, warning_msg, use_mode_column, te->
ys);
2408 return ICON_OUTLINER_OB_LIGHT;
2410 return ICON_OUTLINER_OB_MESH;
2412 return ICON_OUTLINER_OB_CAMERA;
2414 return ICON_OUTLINER_OB_CURVE;
2416 return ICON_OUTLINER_OB_META;
2418 return ICON_OUTLINER_OB_LATTICE;
2420 return ICON_OUTLINER_OB_ARMATURE;
2422 return ICON_OUTLINER_OB_FONT;
2424 return ICON_OUTLINER_OB_SURFACE;
2426 return ICON_OUTLINER_OB_SPEAKER;
2428 return ICON_OUTLINER_OB_LIGHTPROBE;
2430 return ICON_OUTLINER_OB_CURVES;
2432 return ICON_OUTLINER_OB_POINTCLOUD;
2434 return ICON_OUTLINER_OB_VOLUME;
2437 return ICON_OUTLINER_OB_GROUP_INSTANCE;
2440 return ICON_OUTLINER_OB_IMAGE;
2443 return ICON_OUTLINER_OB_FORCE_FIELD;
2446 return ICON_OUTLINER_OB_EMPTY;
2449 return ICON_OUTLINER_OB_GREASEPENCIL;
2451 return ICON_OUTLINER_OB_GREASEPENCIL;
2460 switch (
short(
GS(id->name))) {
2462 return ICON_SCENE_DATA;
2464 return ICON_OUTLINER_DATA_MESH;
2471 return ICON_OUTLINER_DATA_FONT;
2473 return ICON_OUTLINER_DATA_SURFACE;
2475 return ICON_OUTLINER_DATA_CURVE;
2480 return ICON_OUTLINER_DATA_META;
2482 return ICON_OUTLINER_DATA_LATTICE;
2487 return ICON_LIGHT_POINT;
2489 return ICON_LIGHT_SUN;
2491 return ICON_LIGHT_SPOT;
2493 return ICON_LIGHT_AREA;
2495 return ICON_OUTLINER_DATA_LIGHT;
2499 return ICON_MATERIAL_DATA;
2501 return ICON_TEXTURE_DATA;
2503 return ICON_IMAGE_DATA;
2506 return ICON_OUTLINER_DATA_SPEAKER;
2508 return ICON_OUTLINER_DATA_ARMATURE;
2510 return ICON_OUTLINER_DATA_CAMERA;
2512 return ICON_SHAPEKEY_DATA;
2514 return ICON_WORLD_DATA;
2521 if (text->filepath ==
nullptr || (text->flags &
TXT_ISMEM)) {
2522 return ICON_FILE_TEXT;
2528 return ICON_OUTLINER_COLLECTION;
2530 return ICON_OUTLINER_DATA_CURVES;
2532 return ICON_OUTLINER_DATA_POINTCLOUD;
2534 return ICON_OUTLINER_DATA_VOLUME;
2537 return ICON_LIBRARY_DATA_BROKEN;
2539 else if (((
Library *)
id)->runtime.parent) {
2540 return ICON_LIBRARY_DATA_INDIRECT;
2543 return ICON_LIBRARY_DATA_DIRECT;
2546 return ICON_LINE_DATA;
2549 return ICON_OUTLINER_DATA_GREASEPENCIL;
2554 return ICON_LIGHTPROBE_SPHERE;
2556 return ICON_LIGHTPROBE_PLANE;
2558 return ICON_LIGHTPROBE_VOLUME;
2560 return ICON_LIGHTPROBE_SPHERE;
2564 return ICON_BRUSH_DATA;
2567 return ICON_WORKSPACE;
2569 return ICON_MOD_MASK;
2576 return ICON_SEQUENCE;
2578 return ICON_CURVE_BEZCURVE;
2580 return ICON_PARTICLES;
2584 return ICON_FILE_FONT;
2595 switch (tselem->
type) {
2597 data.
icon = ICON_ANIM_DATA;
2600 data.icon = ICON_NLA;
2603 data.icon = ICON_NLA;
2606 data.icon = ICON_ACTION;
2609 data.icon = ICON_DRIVER;
2612 data.icon = ICON_GROUP_VERTEX;
2615 data.icon = ICON_GROUP_VERTEX;
2619 data.icon = ICON_BONE_DATA;
2622 data.icon = ICON_CONSTRAINT;
2623 data.drag_id = tselem->
id;
2627 data.drag_id = tselem->
id;
2630 data.icon = ICON_CON_CAMERASOLVER;
2633 data.icon = ICON_CON_FOLLOWTRACK;
2636 data.icon = ICON_CON_OBJECTSOLVER;
2639 data.icon = ICON_CON_LOCLIKE;
2642 data.icon = ICON_CON_ROTLIKE;
2645 data.icon = ICON_CON_SIZELIKE;
2648 data.icon = ICON_CON_TRANSLIKE;
2651 data.icon = ICON_CON_DISTLIMIT;
2654 data.icon = ICON_CON_LOCLIMIT;
2657 data.icon = ICON_CON_ROTLIMIT;
2660 data.icon = ICON_CON_SIZELIMIT;
2663 data.icon = ICON_CON_SAMEVOL;
2666 data.icon = ICON_CON_TRANSFORM;
2669 data.icon = ICON_CON_TRANSFORM_CACHE;
2672 data.icon = ICON_CON_CLAMPTO;
2675 data.icon = ICON_CON_TRACKTO;
2678 data.icon = ICON_CON_KINEMATIC;
2681 data.icon = ICON_CON_LOCKTRACK;
2684 data.icon = ICON_CON_SPLINEIK;
2687 data.icon = ICON_CON_STRETCHTO;
2690 data.icon = ICON_CON_TRACKTO;
2693 data.icon = ICON_CON_ACTION;
2696 data.icon = ICON_CON_ARMATURE;
2699 data.icon = ICON_CON_CHILDOF;
2702 data.icon = ICON_CON_FLOOR;
2705 data.icon = ICON_CON_FOLLOWPATH;
2708 data.icon = ICON_CON_PIVOT;
2711 data.icon = ICON_CON_SHRINKWRAP;
2715 data.icon = ICON_DOT;
2721 data.icon = ICON_MODIFIER_DATA;
2722 data.drag_id = tselem->
id;
2730 data.icon = ICON_LIBRARY_DATA_OVERRIDE;
2733 data.icon = ICON_OBJECT_DATA;
2736 data.icon = ICON_PARTICLES;
2740 data.drag_id = tselem->
id;
2746 if (modifier_type !=
nullptr) {
2750 data.icon = ICON_DOT;
2759 data.icon = ICON_MOD_NOISE;
2762 data.icon = ICON_MOD_SUBSURF;
2765 data.icon = ICON_MOD_THICKNESS;
2768 data.icon = ICON_MOD_TINT;
2771 data.icon = ICON_MOD_ARRAY;
2774 data.icon = ICON_MOD_BUILD;
2777 data.icon = ICON_MOD_MASK;
2780 data.icon = ICON_MOD_HUE_SATURATION;
2783 data.icon = ICON_MOD_LATTICE;
2786 data.icon = ICON_MOD_MIRROR;
2789 data.icon = ICON_MOD_SIMPLIFY;
2792 data.icon = ICON_MOD_SMOOTH;
2795 data.icon = ICON_HOOK;
2798 data.icon = ICON_MOD_OFFSET;
2801 data.icon = ICON_MOD_ARMATURE;
2804 data.icon = ICON_GP_MULTIFRAME_EDITING;
2807 data.icon = ICON_MOD_TIME;
2810 data.icon = ICON_TEXTURE;
2813 data.icon = ICON_MOD_VERTEX_WEIGHT;
2816 data.icon = ICON_MOD_VERTEX_WEIGHT;
2819 data.icon = ICON_MOD_SHRINKWRAP;
2824 data.icon = ICON_DOT;
2831 data.icon = ICON_NODETREE;
2834 data.icon = ICON_ARMATURE_DATA;
2837 data.icon = ICON_BONE_DATA;
2840 data.icon = ICON_RENDERLAYERS;
2843 data.icon = ICON_OUTLINER_OB_GROUP_INSTANCE;
2846 data.icon = ICON_RENDER_RESULT;
2850 data.icon = ICON_GROUP_BONE;
2856 data.icon = ICON_SCENE_DATA;
2859 data.icon = ICON_TRACKER;
2862 data.icon = ICON_MOD_MASK;
2865 data.icon = ICON_FILE_MOVIE;
2868 data.icon = ICON_SOUND;
2871 data.icon = ICON_FILE_IMAGE;
2875 data.icon = ICON_COLOR;
2878 data.icon = ICON_FONT_DATA;
2892 data.icon = ICON_SHADERFX;
2897 data.icon = ICON_ARROW_LEFTRIGHT;
2900 data.icon = ICON_SEQ_STRIP_META;
2903 data.icon = ICON_DOT;
2909 data.icon = ICON_LIBRARY_DATA_DIRECT;
2912 data.icon = ICON_SEQ_STRIP_DUPLICATE;
2919 data.drag_id =
static_cast<ID *
>(
ptr.
data);
2932 data.drag_id = tselem->
id;
2936 data.icon = ICON_OUTLINER_COLLECTION;
2940 data.icon = ICON_OUTLINER_DATA_GP_LAYER;
2946 if (node.is_layer()) {
2947 data.icon = ICON_OUTLINER_DATA_GP_LAYER;
2949 else if (node.is_group()) {
2952 data.icon = ICON_GREASEPENCIL_LAYER_GROUP;
2954 data.icon = ICON_LAYERGROUP_COLOR_01 + group.
color_tag;
2961 data.drag_id = tselem->
id;
2962 data.icon = ICON_SHADERFX;
2965 data.icon = ICON_DOT;
2969 else if (tselem->
id) {
2970 data.drag_id = tselem->
id;
2995 const bool is_clickable,
2996 const int num_elements)
2999 if (data.icon == 0) {
3008 if (!is_clickable || x >= xmax || is_collection) {
3015 if (is_collection) {
3049 x, y, data.icon,
UI_INV_SCALE_FAC, alpha, 0.0f,
nullptr,
false, &text_overlay);
3065 (data.drag_id &&
ID_IS_LINKED(data.drag_id)) ? data.drag_id->lib->filepath :
"");
3078 icon_color[3] = 0.4f;
3080 icon_border[3] = 0.2f;
3088 const float icon_color[4],
3089 const float icon_border[4])
3109 const int num_elements)
3114 float icon_color[4], icon_border[4];
3118 icon_border[3] = 0.3f;
3133 block, xmax,
float(*offsx),
float(ys), tselem, te, alpha_fac,
false, num_elements);
3138 if (num_elements > 1) {
3192 bool in_bone_hierarchy,
3193 const bool is_grease_pencil_node_hierarchy,
3212 (is_grease_pencil_node_hierarchy && is_grease_pencil_node) ||
3213 (in_bone_hierarchy && is_bone))
3217 if (te->idcode ==
ID_OB) {
3262 merged->
active[index] = std::max(active, merged->
active[index]);
3269 const bool is_root_level_bone = is_bone && (level == 0);
3270 in_bone_hierarchy |= is_root_level_bone;
3273 const bool in_grease_pencil_node_hierarchy = is_grease_pencil_node_hierarchy ||
3274 (is_grease_pencil_node && level == 0);
3276 in_bone_hierarchy || in_grease_pencil_node_hierarchy)
3290 in_grease_pencil_node_hierarchy,
3303 for (
int j = 0; j < num_subtypes; j++) {
3304 const int index = index_base + j;
3325 if ((te->flag & TE_ICONROW) == 0 && (te->flag & TE_ICONROW_MERGED) == 0) {
3346 const bool is_visible = (base !=
nullptr) &&
3358 switch (tselem->
type) {
3363 return !is_visible || is_excluded;
3367 tree_element_cast<TreeElementGreasePencilNode>(te)->node();
3368 return !node.is_visible();
3391 bool draw_grayed_out,
3394 const float restrict_column_width,
3401 uchar text_color[4];
3403 float icon_bgcolor[4], icon_border[4];
3406 if (*starty + 2 *
UI_UNIT_Y >= region->v2d.cur.ymin && *starty <= region->v2d.cur.ymax) {
3408 int xmax = region->v2d.cur.xmax;
3415 if (restrict_column_width > 0) {
3416 xmax -= restrict_column_width +
UI_UNIT_X;
3428 const bool is_selected = (base !=
nullptr) && ((base->
flag &
BASE_SELECTED) != 0);
3430 if (ob == tvc->
obact) {
3435 if (ob == tvc->
obact) {
3438 text_color[3] = 255;
3443 text_color[3] = 255;
3450 icon_border[3] = 0.3f;
3456 icon_bgcolor[3] = 0.2f;
3469 float(startx) + offsx + 2.0f *
UI_UNIT_X,
3482 int icon_x = startx;
3487 float(icon_x) + 2 * ufac,
float(*starty) + 1 * ufac, ICON_DOWNARROW_HLT, alpha_fac);
3491 float(icon_x) + 2 * ufac,
float(*starty) + 1 * ufac, ICON_RIGHTARROW, alpha_fac);
3500 float(startx) + offsx,
3519 if (lib_icon != ICON_NONE) {
3521 float(startx) + offsx + 2 * ufac,
float(*starty) + 2 * ufac, lib_icon, alpha_fac);
3529 float(startx) + offsx + 2 * ufac,
float(*starty) + 2 * ufac, ICON_EXPORT, alpha_fac);
3540 text_color[3] = 255;
3542 text_color[3] *= alpha_fac;
3556 int tempx = startx + offsx;
3584 te->
xend = startx + offsx;
3592 bool draw_children_grayed_out = draw_grayed_out || (ten->flag &
TE_DRAGGING);
3600 draw_children_grayed_out,
3603 restrict_column_width,
3625 const uint pos,
const int x,
const int y1,
const int y2,
const bool draw_dashed)
3628 const short line_padding =
UI_UNIT_Y / 4.0f;
3631 immUniform1f(
"udash_factor", draw_dashed ? 0.5f : 1.0f);
3647 bool draw_grayed_out,
3654 bool draw_hierarchy_line;
3655 bool is_object_line;
3658 draw_hierarchy_line =
false;
3659 is_object_line =
false;
3666 draw_hierarchy_line =
true;
3669 color_tag = collection->color_tag;
3675 draw_hierarchy_line =
true;
3676 is_object_line =
true;
3682 tree_element_cast<TreeElementGreasePencilNode>(te)->node();
3683 if (node.is_group() && node.as_group().num_direct_nodes() > 0) {
3684 draw_hierarchy_line =
true;
3699 if (draw_hierarchy_line) {
3701 uchar line_color[4];
3709 line_color[3] = alpha_fac;
3728 float viewport_size[4];
3739 pos, space_outliner, lb, tvc, startx,
col,
false, starty);
3788 const float col_selection[4],
3789 const float col_active[4],
3790 const float col_highlight[4],
3791 const float col_searchmatch[4],
3799 tree_iterator::all_open(*space_outliner, [&](
const TreeElement *te) {
3801 const int start_y = *io_start_y;
3815 const int end_x =
int(region->v2d.cur.xmax);
3832 immRecti(
pos, start_x, start_y -
U.pixelsize, end_x, start_y +
U.pixelsize);
3863 const float col_highlight[4] = {1.0f, 1.0f, 1.0f, 0.13f};
3864 float col_selection[4], col_active[4], col_searchmatch[4];
3867 col_selection[3] = 1.0f;
3869 col_active[3] = 1.0f;
3871 col_searchmatch[3] = 0.5f;
3895 const float right_column_width,
3896 const bool use_mode_column,
3897 const bool use_warning_column,
3911 if (use_warning_column) {
3929 int scissor[4] = {0};
3930 if (right_column_width > 0.0f) {
3940 startx = columns_offset +
UI_UNIT_X / 2 - (
U.pixelsize + 1) / 2;
3945 startx = columns_offset;
3961 if (right_column_width > 0.0f) {
3971 ystart =
int(region->v2d.tot.ymax);
3979 float col_alternating[4];
3983 const float x1 = 0.0f, x2 = region->v2d.cur.xmax;
3984 float y1 = ystart, y2;
4012 float right_column_width)
4018 return max_tree_width + right_column_width;
4025 float right_column_width)
4027 int sizex =
outliner_width(space_outliner, tree_width, right_column_width);
4028 int sizey = tree_height;
4048 View2D *v2d = ®ion->v2d;
4108 int tree_width, tree_height;
4128 const int x = region->v2d.cur.xmax - right_column_width;
4138 mainvar, block, region, space_outliner, &space_outliner->
tree, x);
4141 else if (right_column_width > 0.0f) {
4150 &space_outliner->
tree,
4155 if (use_mode_column) {
4160 if (use_warning_column) {
4176 region, space_outliner, tree_width, tree_height, right_column_width);
C++ functions to deal with Armature collections (i.e. the successor of bone layers).
void ANIM_armature_bonecoll_name_set(bArmature *armature, BoneCollection *bcoll, const char *name)
bool BKE_collection_has_collection(const Collection *parent, const Collection *collection)
ReportList * CTX_wm_reports(const bContext *C)
SpaceOutliner * CTX_wm_space_outliner(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
wmMsgBus * CTX_wm_message_bus(const bContext *C)
ViewLayer * CTX_data_view_layer(const bContext *C)
short BKE_curve_type_get(const Curve *cu)
void BKE_gpencil_layer_active_set(struct bGPdata *gpd, struct bGPDlayer *active)
Low-level operations for grease pencil.
int BKE_idtype_idcode_to_index(short idcode)
void BKE_view_layer_synced_ensure(const Scene *scene, ViewLayer *view_layer)
void BKE_main_collection_sync_remap(const Main *bmain)
void BKE_view_layer_rename(Main *bmain, Scene *scene, ViewLayer *view_layer, const char *newname)
bool BKE_layer_collection_has_layer_collection(LayerCollection *lc_parent, LayerCollection *lc_child)
void BKE_view_layer_need_resync_tag(ViewLayer *view_layer)
Base * BKE_view_layer_base_find(ViewLayer *view_layer, Object *ob)
bool BKE_lib_override_library_is_system_defined(const Main *bmain, const ID *id)
void BKE_library_filepath_set(Main *bmain, Library *lib, const char *filepath)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
const ModifierTypeInfo * BKE_modifier_get_info(ModifierType type)
General operations, lookup, etc. for blender objects.
bool BKE_object_is_in_editmode(const Object *ob)
bool BKE_object_data_is_in_editmode(const Object *ob, const ID *id)
bool BKE_object_is_child_recursive(const Object *ob_parent, const Object *ob_child)
struct ParticleSystem * psys_get_current(struct Object *ob)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
int BLI_exists(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
MINLINE int max_ii(int a, int b)
MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
MINLINE void copy_v3_v3(float r[3], const float a[3])
bool BLI_path_abs(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1
void BLI_rctf_init(struct rctf *rect, float xmin, float xmax, float ymin, float ymax)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
#define STRNCPY(dst, src)
void BLI_str_format_integer_unit(char dst[BLI_STR_FORMAT_INT32_INTEGER_UNIT_SIZE], int number_to_format) ATTR_NONNULL(1)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
#define ID_FAKE_USERS(id)
#define ID_IS_OVERRIDE_LIBRARY_REAL(_id)
#define ID_IS_LINKED(_id)
#define ID_IS_EDITABLE(_id)
@ LIBOVERRIDE_FLAG_SYSTEM_DEFINED
#define ID_IS_OVERRIDE_LIBRARY(_id)
Object groups, one object can be in many groups at once.
@ CONSTRAINT_TYPE_TRACKTO
@ CONSTRAINT_TYPE_CHILDOF
@ CONSTRAINT_TYPE_TRANSFORM
@ CONSTRAINT_TYPE_FOLLOWTRACK
@ CONSTRAINT_TYPE_OBJECTSOLVER
@ CONSTRAINT_TYPE_ARMATURE
@ CONSTRAINT_TYPE_LOCLIKE
@ CONSTRAINT_TYPE_SHRINKWRAP
@ CONSTRAINT_TYPE_ROTLIMIT
@ CONSTRAINT_TYPE_CAMERASOLVER
@ CONSTRAINT_TYPE_ROTLIKE
@ CONSTRAINT_TYPE_SPLINEIK
@ CONSTRAINT_TYPE_KINEMATIC
@ CONSTRAINT_TYPE_DISTLIMIT
@ CONSTRAINT_TYPE_TRANSLIKE
@ CONSTRAINT_TYPE_LOCLIMIT
@ CONSTRAINT_TYPE_CLAMPTO
@ CONSTRAINT_TYPE_LOCKTRACK
@ CONSTRAINT_TYPE_SIZELIMIT
@ CONSTRAINT_TYPE_FOLLOWPATH
@ CONSTRAINT_TYPE_STRETCHTO
@ CONSTRAINT_TYPE_SIZELIKE
@ CONSTRAINT_TYPE_SAMEVOL
@ CONSTRAINT_TYPE_DAMPTRACK
@ CONSTRAINT_TYPE_TRANSFORM_CACHE
#define GPENCIL_EDIT_MODE(gpd)
@ eGpencilModifierType_Array
@ eGpencilModifierType_Noise
@ eGpencilModifierType_Mirror
@ eGpencilModifierType_Color
@ eGpencilModifierType_Multiply
@ eGpencilModifierType_Texture
@ eGpencilModifierType_Subdiv
@ eGpencilModifierType_Lattice
@ eGpencilModifierType_Opacity
@ eGpencilModifierType_Hook
@ eGpencilModifierType_Simplify
@ eGpencilModifierType_Shrinkwrap
@ eGpencilModifierType_WeightProximity
@ eGpencilModifierType_Armature
@ eGpencilModifierType_WeightAngle
@ eGpencilModifierType_Smooth
@ eGpencilModifierType_Tint
@ eGpencilModifierType_Time
@ eGpencilModifierType_Thick
@ eGpencilModifierType_Build
@ eGpencilModifierType_Offset
@ LAYER_COLLECTION_VISIBLE_VIEW_LAYER
@ LAYER_COLLECTION_EXCLUDE
@ BASE_ENABLED_AND_VISIBLE_IN_DEFAULT_VIEWPORT
Object is a sort of wrapper for general info.
#define OB_DATA_SUPPORT_EDITMODE(_type)
@ TSE_LIBRARY_OVERRIDE_OPERATION
@ TSE_VIEW_COLLECTION_BASE
@ TSE_LIBRARY_OVERRIDE_BASE
@ TSE_SCENE_COLLECTION_BASE
@ TSE_GPENCIL_EFFECT_BASE
@ TSE_BONE_COLLECTION_BASE
#define BASE_SELECTED(v3d, base)
@ SO_LIB_OVERRIDE_VIEW_HIERARCHIES
@ SO_LIB_OVERRIDE_VIEW_PROPERTIES
@ SO_RESTRICT_INDIRECT_ONLY
int ED_file_extension_icon(const char *path)
bool ED_outliner_select_sync_is_dirty(const bContext *C)
void ED_outliner_select_sync_flag_outliners(const bContext *C)
void ED_undo_push(bContext *C, const char *str)
@ GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR
@ GPU_SHADER_3D_UNIFORM_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_width(float width)
void GPU_scissor(int x, int y, int width, int height)
void GPU_viewport_size_get_f(float coords[4])
void GPU_scissor_get(int coords[4])
void UI_but_func_set(uiBut *but, std::function< void(bContext &)> func)
void UI_but_flag_disable(uiBut *but, int flag)
void UI_but_disable(uiBut *but, const char *disabled_hint)
@ UI_EMBOSS_NONE_OR_STATUS
void UI_fontstyle_draw_simple(const uiFontStyle *fs, float x, float y, const char *str, const uchar col[4])
@ UI_BLOCK_NO_DRAW_OVERRIDDEN_STATE
uiBut * uiDefBut(uiBlock *block, int type, int retval, blender::StringRef str, int x, int y, short width, short height, void *poin, float min, float max, const char *tip)
uiBut * uiDefIconButR_prop(uiBlock *block, int type, int retval, int icon, int x, int y, short width, short height, PointerRNA *ptr, PropertyRNA *prop, int index, float min, float max, const char *tip)
void UI_but_drawflag_enable(uiBut *but, int flag)
uiBut * uiDefIconBut(uiBlock *block, int type, int retval, int icon, int x, int y, short width, short height, void *poin, float min, float max, const char *tip)
void uiDefAutoButsArrayR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, const int icon, const int x, const int y, const int tot_width, const int height)
uiBlock * UI_block_begin(const bContext *C, ARegion *region, std::string name, eUIEmbossType emboss)
void UI_draw_roundbox_corner_set(int type)
void UI_but_func_identity_compare_set(uiBut *but, uiButIdentityCompareFunc cmp_fn)
void UI_but_context_ptr_set(uiBlock *block, uiBut *but, const char *name, const PointerRNA *ptr)
uiBut * uiDefIconButO(uiBlock *block, int type, const char *opname, wmOperatorCallContext opcontext, int icon, int x, int y, short width, short height, const char *tip)
void UI_block_emboss_set(uiBlock *block, eUIEmbossType emboss)
void UI_but_func_rename_set(uiBut *but, uiButHandleRenameFunc func, void *arg1)
void UI_block_draw(const bContext *C, uiBlock *block)
uiBut * uiDefIconButBitS(uiBlock *block, int type, int bit, int retval, int icon, int x, int y, short width, short height, short *poin, float min, float max, const char *tip)
void UI_but_icon_indicator_set(uiBut *but, const char *string)
int UI_fontstyle_string_width(const uiFontStyle *fs, const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
bool UI_but_active_only(const bContext *C, ARegion *region, uiBlock *block, uiBut *but)
void UI_but_label_alpha_factor_set(uiBut *but, float alpha_factor)
void UI_but_icon_indicator_color_set(uiBut *but, const uchar color[4])
uiBut * uiDefIconButBitI(uiBlock *block, int type, int bit, int retval, int icon, int x, int y, short width, short height, int *poin, float min, float max, const char *tip)
void UI_block_flag_enable(uiBlock *block, int flag)
void UI_draw_roundbox_aa(const rctf *rect, bool filled, float rad, const float color[4])
void UI_block_end(const bContext *C, uiBlock *block)
void UI_but_flag_enable(uiBut *but, int flag)
uiBut * uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int index, const char *name, int icon, int x, int y, int width, int height)
const PointerRNA * UI_but_context_ptr_get(const uiBut *but, const char *name, const StructRNA *type=nullptr)
#define ICON_DEFAULT_HEIGHT
void UI_icon_text_overlay_init_from_count(IconTextOverlay *text_overlay, const int icon_indicator_number)
bool UI_icon_get_theme_color(int icon_id, unsigned char color[4])
void UI_icon_draw_alpha(float x, float y, int icon_id, float alpha)
int UI_icon_from_library(const ID *id)
int UI_icon_from_object_mode(int mode)
void UI_icon_draw_ex(float x, float y, int icon_id, float aspect, float alpha, float desaturate, const uchar mono_color[4], bool mono_border, const IconTextOverlay *text_overlay, const bool inverted=false)
void UI_GetThemeColor3fv(int colorid, float col[3])
void UI_GetThemeColorBlend3ubv(int colorid1, int colorid2, float fac, unsigned char col[3])
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3])
void UI_GetThemeColor4fv(int colorid, float col[4])
void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4])
void UI_GetThemeColor4ubv(int colorid, unsigned char col[4])
#define V2D_SCROLL_HEIGHT
void UI_view2d_totRect_set(View2D *v2d, int width, int height)
void UI_view2d_view_ortho(const View2D *v2d)
#define ND_RENDER_OPTIONS
#define ND_BONE_COLLECTION
#define ND_SPACE_OUTLINER
void ED_armature_bone_rename(Main *bmain, bArmature *arm, const char *oldnamep, const char *newnamep)
bool ED_armature_ebone_is_child_recursive(EditBone *ebone_parent, EditBone *ebone_child)
constexpr bool is_empty() const
constexpr const char * c_str() const
virtual StringRefNull get_warning() const
PointerRNA override_rna_ptr
PropertyRNA & override_rna_prop
const PointerRNA & get_pointer_rna() const
SequenceType get_sequence_type() const
local_group_size(16, 16) .push_constant(Type b
bool ED_id_rename(Main &bmain, ID &id, blender::StringRefNull name)
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
ccl_device_inline float2 floor(const float2 a)
ccl_device_inline float4 select(const int4 mask, const float4 a, const float4 b)
void all_open(const SpaceOutliner &space_outliner, const VisitorFn visitor)
void all(const SpaceOutliner &space_outliner, const VisitorFn visitor)
static void outliner_draw_warning_tree_element(uiBlock *block, const SpaceOutliner *space_outliner, StringRefNull warning_msg, const bool use_mode_column, const int te_ys)
static void outliner_collection_set_flag_recursive_fn(bContext *C, LayerCollection *layer_collection, Collection *collection, const char *propname)
static void outliner_tree_dimensions_impl(SpaceOutliner *space_outliner, ListBase *lb, int *width, int *height)
static void outliner_restrict_properties_enable_layer_collection_set(PointerRNA *layer_collection_ptr, PointerRNA *collection_ptr, RestrictProperties *props, RestrictPropertiesActive *props_active)
static void restrictbutton_gp_layer_flag_fn(bContext *C, void *poin, void *)
static void outliner_draw_hierarchy_lines(SpaceOutliner *space_outliner, ListBase *lb, const TreeViewContext *tvc, int startx, int *starty)
static void outliner_draw_mode_column_toggle(uiBlock *block, TreeViewContext *tvc, TreeElement *te, const bool lock_object_modes)
static void outliner_draw_warning_column(uiBlock *block, const SpaceOutliner *space_outliner, const bool use_mode_column)
static StringRefNull outliner_draw_get_warning_tree_element(const SpaceOutliner &space_outliner, const TreeElement *te)
static bool is_object_data_in_editmode(const ID *id, const Object *obact)
static void outliner_icon_background_colors(float icon_color[4], float icon_border[4])
bool outliner_is_collection_tree_element(const TreeElement *te)
static void outliner_update_viewable_area(ARegion *region, SpaceOutliner *space_outliner, int tree_width, int tree_height, float right_column_width)
static bool subtree_contains_object(ListBase *lb)
static void outliner_draw_active_indicator(const float minx, const float miny, const float maxx, const float maxy, const float icon_color[4], const float icon_border[4])
static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ViewLayer *view_layer, ARegion *region, SpaceOutliner *space_outliner, ListBase *lb, RestrictPropertiesActive props_active_parent)
float outliner_right_columns_width(const SpaceOutliner *space_outliner)
static void outliner_draw_iconrow(bContext *C, uiBlock *block, const uiFontStyle *fstyle, const TreeViewContext *tvc, SpaceOutliner *space_outliner, ListBase *lb, int level, int xmax, int *offsx, int ys, float alpha_fac, bool in_bone_hierarchy, const bool is_grease_pencil_node_hierarchy, MergedIconRow *merged)
static int outliner_data_api_buttons_start_x(int max_tree_width)
void outliner_collection_isolate_flag(Scene *scene, ViewLayer *view_layer, LayerCollection *layer_collection, Collection *collection, PropertyRNA *layer_or_collection_prop, const char *propname, const bool value)
static void namebutton_fn(bContext *C, void *tsep, char *oldname)
TreeElementIcon tree_element_get_icon(TreeStoreElem *tselem, TreeElement *te)
static void outliner__object_set_flag_recursive_fn(bContext *C, void *poin, void *poin2)
void outliner_item_mode_toggle(bContext *C, TreeViewContext *tvc, TreeElement *te, bool do_extend)
void outliner_build_tree(Main *mainvar, Scene *scene, ViewLayer *view_layer, SpaceOutliner *space_outliner, ARegion *region)
static void outliner_draw_tree(bContext *C, uiBlock *block, const TreeViewContext *tvc, ARegion *region, SpaceOutliner *space_outliner, const float right_column_width, const bool use_mode_column, const bool use_warning_column, TreeElement **te_edit)
static bool outliner_but_identity_cmp_context_id_fn(const uiBut *a, const uiBut *b)
eOLDrawState tree_element_type_active_state_get(const bContext *C, const TreeViewContext *tvc, const TreeElement *te, const TreeStoreElem *tselem)
static void outliner_draw_tree_element(bContext *C, uiBlock *block, const uiFontStyle *fstyle, const TreeViewContext *tvc, ARegion *region, SpaceOutliner *space_outliner, TreeElement *te, bool draw_grayed_out, int startx, int *starty, const float restrict_column_width, TreeElement **te_edit)
static void restrictbutton_recursive_bone(Bone *bone_parent, int flag, bool set_flag)
static void outliner_object_set_flag_recursive_fn(bContext *C, Base *base, Object *ob, const char *propname)
static void outliner_collection_set_flag_recursive(Scene *scene, ViewLayer *view_layer, LayerCollection *layer_collection, Collection *collection, PropertyRNA *layer_or_collection_prop, PropertyRNA *base_or_object_prop, const bool value)
void outliner_viewcontext_init(const bContext *C, TreeViewContext *tvc)
bool outliner_is_element_in_view(const TreeElement *te, const View2D *v2d)
static void restrictbutton_ebone_select_fn(bContext *C, void *poin, void *poin2)
Collection * outliner_collection_from_tree_element(const TreeElement *te)
@ TE_CHILD_NOT_IN_COLLECTION
@ TE_PRETEND_HAS_CHILDREN
int tree_element_id_type_to_index(TreeElement *te)
static void outliner_layer_or_collection_pointer_create(Scene *scene, LayerCollection *layer_collection, Collection *collection, PointerRNA *ptr)
static void view_layer__layer_collection_set_flag_recursive_fn(bContext *C, void *poin, void *poin2)
eOLDrawState tree_element_active_state_get(const TreeViewContext *tvc, const TreeElement *te, const TreeStoreElem *tselem)
static void outliner_draw_separator(ARegion *region, const int x)
static void outliner_set_subtree_coords(const TreeElement *te)
static int outliner_width(SpaceOutliner *space_outliner, int max_tree_width, float right_column_width)
static StringRefNull outliner_draw_get_warning_tree_element_subtree(const TreeElement *parent_te)
static void outliner_draw_highlights(uint pos, const ARegion *region, const SpaceOutliner *space_outliner, const float col_selection[4], const float col_active[4], const float col_highlight[4], const float col_searchmatch[4], int start_x, int *io_start_y)
static bool element_should_draw_faded(const TreeViewContext *tvc, const TreeElement *te, const TreeStoreElem *tselem)
void outliner_sync_selection(const bContext *C, SpaceOutliner *space_outliner)
TreeElementT * tree_element_cast(const TreeElement *te)
static void outliner_base_or_object_pointer_create(Scene *scene, ViewLayer *view_layer, Collection *collection, Object *ob, PointerRNA *ptr)
static void outliner_back(ARegion *region)
static bool tselem_draw_icon(uiBlock *block, int xmax, float x, float y, TreeStoreElem *tselem, TreeElement *te, float alpha, const bool is_clickable, const int num_elements)
TreeElement * outliner_find_tree_element(ListBase *lb, const TreeStoreElem *store_elem)
static void scenes__collection_set_flag_recursive_fn(bContext *C, void *poin, void *poin2)
static void outliner_mode_toggle_fn(bContext *C, void *tselem_poin, void *)
static void restrictbutton_bone_visibility_fn(bContext *C, void *poin, void *)
static void outliner_draw_mode_column(uiBlock *block, TreeViewContext *tvc, SpaceOutliner *space_outliner)
static void outliner_restrict_properties_enable_collection_set(PointerRNA *collection_ptr, RestrictProperties *props, RestrictPropertiesActive *props_active)
static void restrictbutton_bone_select_fn(bContext *C, void *poin, void *poin2)
static void outliner_draw_overrides_rna_buts(uiBlock *block, const ARegion *region, const SpaceOutliner *space_outliner, const ListBase *lb, const int x)
static void outliner_buttons(const bContext *C, uiBlock *block, ARegion *region, const float restrict_column_width, TreeElement *te)
static void restrictbutton_r_lay_fn(bContext *C, void *poin, void *)
static void outliner_draw_hierarchy_line(const uint pos, const int x, const int y1, const int y2, const bool draw_dashed)
void outliner_tree_dimensions(SpaceOutliner *space_outliner, int *r_width, int *r_height)
static void restrictbutton_ebone_visibility_fn(bContext *C, void *poin, void *poin2)
static void outliner_draw_userbuts(uiBlock *block, const ARegion *region, const SpaceOutliner *space_outliner)
bool outliner_has_element_warnings(const SpaceOutliner &space_outliner)
static void view_layer__collection_set_flag_recursive_fn(bContext *C, void *poin, void *poin2)
static void outliner__base_set_flag_recursive_fn(bContext *C, void *poin, void *poin2)
bool outliner_shows_mode_column(const SpaceOutliner &space_outliner)
static void outliner_draw_iconrow_doit(uiBlock *block, TreeElement *te, int xmax, int *offsx, int ys, float alpha_fac, const eOLDrawState active, const int num_elements)
static void outliner_draw_hierarchy_lines_recursive(uint pos, SpaceOutliner *space_outliner, ListBase *lb, const TreeViewContext *tvc, int startx, const uchar col[4], bool draw_grayed_out, int *starty)
static void outliner_draw_overrides_restrictbuts(Main *bmain, uiBlock *block, const ARegion *region, const SpaceOutliner *space_outliner, const ListBase *lb, const int x)
static void outliner_draw_struct_marks(ARegion *region, SpaceOutliner *space_outliner, ListBase *lb, int *starty)
static bool outliner_collection_is_isolated(Scene *scene, const LayerCollection *layer_collection_cmp, const Collection *collection_cmp, const bool value_cmp, const PropertyRNA *layer_or_collection_prop, LayerCollection *layer_collection, Collection *collection)
void draw_outliner(const bContext *C, bool do_rebuild)
static void restrictbutton_id_user_toggle(bContext *, void *poin, void *)
void tree_element_activate(bContext *C, const TreeViewContext *tvc, TreeElement *te, eOLSetState set, bool handle_all_types)
static void outliner_draw_rnabuts(uiBlock *block, ARegion *region, SpaceOutliner *space_outliner, int sizex)
static void restrictbutton_recursive_ebone(bArmature *arm, EditBone *ebone_parent, int flag, bool set_flag)
static bool outliner_restrict_properties_collection_set(Scene *scene, TreeElement *te, PointerRNA *collection_ptr, PointerRNA *layer_collection_ptr, RestrictProperties *props, RestrictPropertiesActive *props_active)
static BIFIconID tree_element_get_icon_from_id(const ID *id)
int ED_outliner_icon_from_id(const ID &id)
#define SEARCHING_OUTLINER(sov)
#define OL_RNA_COL_SPACEX
#define OL_TOG_USER_BUTS_USERS
#define TSELEM_OPEN(telm, sv)
PropertyRNA * RNA_struct_type_find_property(StructRNA *srna, const char *identifier)
bool RNA_struct_is_ID(const StructRNA *type)
PropertyType RNA_property_type(PropertyRNA *prop)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_struct_ui_icon(const StructRNA *type)
void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
bool RNA_property_editable(const PointerRNA *ptr, PropertyRNA *prop)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
bool RNA_property_boolean_get_default(PointerRNA *ptr, PropertyRNA *prop)
PointerRNA RNA_id_pointer_create(ID *id)
struct Collection * collection
Collection_Runtime runtime
IDOverrideLibrary * override_library
ListBase layer_collections
struct Collection * collection
struct Collection * instance_collection
ListBase greasepencil_modifiers
struct ToolSettings * toolsettings
short lib_override_view_mode
struct BLI_mempool * treestore
float icon_border_intensity
ListBase layer_collections
bNodeTreeTypeHandle * typeinfo
ThemeCollectionColor collection_color[8]
eOLDrawState active[INDEX_ID_MAX+OB_TYPE_MAX]
TreeElement * tree_element[INDEX_ID_MAX+OB_TYPE_MAX]
int num_elements[INDEX_ID_MAX+OB_TYPE_MAX]
bool modifier_show_viewport
bool collection_hide_render
bool collection_hide_select
bool layer_collection_holdout
bool collection_hide_viewport
bool modifier_show_render
bool layer_collection_indirect_only
bool layer_collection_hide_viewport
bool layer_collection_exclude
bool object_hide_viewport
PropertyRNA * layer_collection_hide_viewport
PropertyRNA * layer_collection_indirect_only
PropertyRNA * base_hide_viewport
PropertyRNA * object_hide_viewport
PropertyRNA * object_hide_render
PropertyRNA * constraint_enable
PropertyRNA * layer_collection_holdout
PropertyRNA * collection_hide_select
PropertyRNA * layer_collection_exclude
PropertyRNA * modifier_show_render
PropertyRNA * bone_hide_viewport
PropertyRNA * collection_hide_viewport
PropertyRNA * modifier_show_viewport
PropertyRNA * object_hide_select
PropertyRNA * collection_hide_render
TreeStoreElem * store_elem
std::unique_ptr< AbstractTreeElement > abstract_element
struct wmEvent * eventstate
static DynamicLibrary lib
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
#define WM_msg_publish_rna_prop(mbus, id_, data_, type_, prop_)