21#include <fmt/format.h>
96#include "RNA_prototypes.hh"
117#define UNDOCUMENTED_OPERATOR_TIP N_("(undocumented operator)")
123#define OP_BL_SEP_STRING "_OT_"
124#define OP_BL_SEP_LEN 4
126#define OP_PY_SEP_CHAR '.'
127#define OP_PY_SEP_LEN 1
131#define OP_MAX_PY_IDNAME (OP_MAX_TYPENAME - OP_BL_SEP_LEN + OP_PY_SEP_LEN - 1)
137 const size_t sep_offset = size_t(sep - src);
141 memcpy(dst, src, sep_offset);
156 const size_t from_len = strlen(src);
160 const size_t sep_offset = size_t(sep - src);
161 memcpy(dst, src, sep_offset);
178 if ((sep ==
nullptr) || (sep == idname) || (sep[
OP_BL_SEP_LEN] ==
'\0')) {
182 for (
const char *ch = idname; ch < sep; ch++) {
183 if ((*ch >=
'A' && *ch <=
'Z') || (*ch >=
'0' && *ch <=
'9') || *ch ==
'_') {
190 if ((*ch >=
'a' && *ch <=
'z') || (*ch >=
'0' && *ch <=
'9') || *ch ==
'_') {
199 const char *classname,
202 const char *ch = idname;
205 for (
i = 0; *ch;
i++, ch++) {
206 if ((*ch >=
'a' && *ch <=
'z') || (*ch >=
'0' && *ch <=
'9') || *ch ==
'_') {
209 else if (*ch ==
'.') {
210 if (ch == idname || (*(ch + 1) ==
'\0')) {
213 "Registering operator class: '%s', invalid bl_idname '%s', at position %d",
224 "Registering operator class: '%s', invalid bl_idname '%s', at position %d",
235 "Registering operator class: '%s', invalid bl_idname '%s', "
236 "is too long, maximum length is %d",
247 "Registering operator class: '%s', invalid bl_idname '%s', must contain 1 '.' character",
258 const bool macro_args,
265 std::stringstream ss;
268 int max_prop_length = 10;
271 ss <<
"bpy.ops." << idname_py <<
"(";
276 bool first_op =
true;
280 for (; opm; opm = opm->
next) {
283 if (opmptr ==
nullptr) {
285 opmptr = &opmptr_default;
290 ss << opm->
type->
idname <<
'=' << string_args;
294 ss <<
", " << opm->
type->
idname <<
'=' << string_args;
297 if (opmptr == &opmptr_default) {
305 const bool macro_args_test =
ot->macro.first ? macro_args :
true;
307 if (opptr ==
nullptr) {
309 opptr = &opptr_default;
313 C, opptr,
false, all_args, macro_args_test, max_prop_length);
315 if (opptr == &opptr_default) {
328 const bool macro_args)
335 const int str_len =
str.size();
336 const size_t parens_start =
str.find(
'(');
337 if (parens_start == std::string::npos) {
341 const size_t parens_end =
str.find(parens_start + 1,
')');
342 if (parens_end == std::string::npos) {
346 const int parens_len = parens_end - parens_start;
347 if (parens_len <= str_len_max) {
352 const size_t comma_first =
str.find(parens_start,
',');
353 if (comma_first == std::string::npos) {
356 const char end_str[] =
" ... )";
357 const int end_str_len =
sizeof(end_str) - 1;
360 const int new_str_len = (comma_first - parens_start) + 1;
362 if (str_len < new_str_len + parens_start + end_str_len + 1) {
366 return str.substr(0, comma_first) + end_str;
384 const char *member_found =
nullptr;
385 const char *member_id =
nullptr;
386 bool member_found_is_id =
false;
388 for (link = lb.
first; link; link = link->
next) {
389 const char *identifier = link->
data;
393 if (ctx_item_ptr.
type ==
nullptr) {
399 if ((
ptr->data == ctx_item_ptr.
data) && (
ptr->type == ctx_item_ptr.
type)) {
401 member_found = identifier;
402 member_found_is_id = is_id;
407 member_id = identifier;
414 *r_is_id = member_found_is_id;
417 else if (member_id) {
448 const char *member_id =
nullptr;
451# define CTX_TEST_PTR_ID(C, member, idptr) \
453 const char *ctx_member = member; \
454 PointerRNA ctx_item_ptr = CTX_data_pointer_get(C, ctx_member); \
455 if (ctx_item_ptr.owner_id == idptr) { \
456 member_id = ctx_member; \
463# define CTX_TEST_PTR_ID_CAST(C, member, member_full, cast, idptr) \
465 const char *ctx_member = member; \
466 const char *ctx_member_full = member_full; \
467 PointerRNA ctx_item_ptr = CTX_data_pointer_get(C, ctx_member); \
468 if (ctx_item_ptr.owner_id && (ID *)cast(ctx_item_ptr.owner_id) == idptr) { \
469 member_id = ctx_member_full; \
476# define TEST_PTR_DATA_TYPE(member, rna_type, rna_ptr, dataptr_cmp) \
478 const char *ctx_member = member; \
479 if (RNA_struct_is_a((rna_ptr)->type, &(rna_type)) && (rna_ptr)->data == (dataptr_cmp)) { \
480 member_id = ctx_member; \
487# define TEST_PTR_DATA_TYPE_FROM_CONTEXT(member, rna_type, rna_ptr) \
489 const char *ctx_member = member; \
490 if (RNA_struct_is_a((rna_ptr)->type, &(rna_type)) && \
491 (rna_ptr)->data == (CTX_data_pointer_get_type(C, ctx_member, &(rna_type)).data)) \
493 member_id = ctx_member; \
514 if (
ptr->owner_id && (member_id ==
nullptr)) {
517 switch (ptr_id_type) {
533 if (ptr_id_type ==
ID_AR) {
535 if (arm->
edbo !=
nullptr) {
543# define ID_CAST_OBDATA(id_pt) (((Object *)(id_pt))->data)
546# undef ID_CAST_OBDATA
549# define ID_CAST_OBMATACT(id_pt) \
550 BKE_object_material_get(((Object *)id_pt), ((Object *)id_pt)->actcol)
554# undef ID_CAST_OBMATACT
557# define ID_CAST_SCENEWORLD(id_pt) (((Scene *)(id_pt))->world)
560# undef ID_CAST_SCENEWORLD
569 if (space_data !=
nullptr) {
624 "space_data.preview_overlay", RNA_SequencerPreviewOverlay,
ptr, sseq);
626 "space_data.timeline_overlay", RNA_SequencerTimelineOverlay,
ptr, sseq);
638# undef CTX_TEST_PTR_ID
639# undef CTX_TEST_PTR_ID_CAST
640# undef TEST_PTR_DATA_TYPE
659 std::string member_id_data_path;
663 if (prop !=
nullptr) {
665 if (prop_str[0] ==
'[') {
666 member_id_data_path = fmt::format(
"{}.{}{}", member_id, *data_path, prop_str);
669 member_id_data_path = fmt::format(
"{}.{}.{}", member_id, *data_path, prop_str);
673 member_id_data_path = fmt::format(
"{}.{}", member_id, *data_path);
678 if (prop !=
nullptr) {
680 if (prop_str[0] ==
'[') {
681 member_id_data_path = fmt::format(
"{}{}", member_id, prop_str);
684 member_id_data_path = fmt::format(
"{}.{}", member_id, prop_str);
688 member_id_data_path = member_id;
692 return member_id_data_path;
706 C,
ptr, prop, index);
707 if (!member_id_data_path.has_value()) {
710 return "bpy.context." + member_id_data_path.value();
721 if (!lhs.has_value()) {
733 std::string
ret = fmt::format(
"{} = {}", lhs.value(),
rhs);
753 static_cast<ID *
>(
G_MAIN->wm.first), &RNA_OperatorProperties,
nullptr);
761 if (properties ==
nullptr) {
762 properties = &tmp_properties;
765 if (*properties ==
nullptr) {
769 if (*
ptr ==
nullptr) {
770 *
ptr = MEM_new<PointerRNA>(
"wmOpItemPtr");
774 (*ptr)->
data = *properties;
808 bool changed =
false;
813 if (ptype != &RNA_Struct) {
879 bool changed =
false;
917 bool changed =
false;
946 if (opm->properties) {
984 "wait_to_deselect_others");
991 if (init_event_type == 0) {
994 if (use_select_on_click) {
1030 const int drag_delta[2] = {
1031 mval[0] -
event->mval[0],
1032 mval[1] -
event->mval[1],
1105 if (prop ==
nullptr) {
1110 "'%s', '%s' is not an enum property",
1156 static char search[256] =
"";
1191 uiDefBut(block,
ButType::Label, 0,
"", 0, -height, width, height,
nullptr, 0, 0, std::nullopt);
1204 search_menu.
op = op;
1206 const bool can_refresh =
false;
1215 const char *message,
1319 if (
ot->last_properties ==
nullptr) {
1322 return ot->last_properties;
1340 bool exists =
false;
1346 if (idcode ==
ID_IM) {
1356 "Cannot read %s '%s': %s",
1359 errno ? strerror(errno) :
RPT_(
"unsupported format"));
1363 if (is_relative_path) {
1364 if (exists ==
false) {
1365 if (idcode ==
ID_IM) {
1539 const short icon_size = (small ? 32 : 40) *
UI_SCALE_FAC;
1546 if (
data->mouse_move_quit) {
1557 int text_width = std::max(
1564 std::istringstream message_stream(messaged_trimmed);
1566 while (std::getline(message_stream, line)) {
1567 message_lines.
append(line);
1568 text_width = std::max(
1572 int dialog_width = std::max(text_width +
int(style->
columnspace * 2.5),
data->width);
1575 const int longest_button_text = std::max(
1578 dialog_width = std::max(dialog_width, 3 * longest_button_text);
1583 block, style, dialog_width + icon_size,
eAlertIcon(
data->icon), icon_size);
1598 if (!
data->title.empty()) {
1602 if (
data->include_properties && message_lines.
size() == 0) {
1608 if (message_lines.
size() > 0) {
1612 for (
auto &st : message_lines) {
1613 lines->
label(st, ICON_NONE);
1617 if (
data->include_properties) {
1628 const bool windows_layout =
true;
1630 const bool windows_layout =
false;
1642 col = &
col->split(0.0f,
true);
1643 col->scale_y_set(small ? 1.0f : 1.2f);
1645 if (windows_layout) {
1649 data->confirm_text.c_str(),
1662 col_block,
ButType::But, 0,
IFACE_(
"Cancel"), 0, 0, 0,
UI_UNIT_Y,
nullptr, 0, 0,
"");
1664 if (!windows_layout) {
1669 data->confirm_text.c_str(),
1688 const float button_center_x = windows_layout ? -0.4f : -0.90f;
1689 const float button_center_y = small ? 2.0f : 3.1f;
1690 const int bounds_offset[2] = {int(button_center_x * layout->
width()),
1744 if (
data->free_op) {
1757 if (op && retval > 0) {
1767 const char *message,
1768 const char *confirm_text,
1770 bool cancel_default)
1776 const float min_width = (message ==
nullptr) ? 180.0f : 230.0f;
1780 data->free_op =
true;
1782 data->message = (message ==
nullptr) ? std::string() : message;
1783 data->confirm_text = (confirm_text ==
nullptr) ?
IFACE_(
"OK") : confirm_text;
1787 data->cancel_default = cancel_default;
1788 data->mouse_move_quit = (message ==
nullptr) ?
true :
false;
1789 data->include_properties =
false;
1802 data->free_op =
true;
1817 std::optional<std::string> title = std::nullopt,
1818 std::optional<std::string> confirm_text = std::nullopt,
1819 const bool cancel_default =
false,
1820 std::optional<std::string> message = std::nullopt)
1825 "Operator '%s' does not have register enabled, incorrect invoke function",
1834 "Operator '%s' does not have undo enabled, incorrect invoke function",
1844 C, op, 300, title, confirm_text, cancel_default, message);
1859 std::optional<std::string> title,
1860 std::optional<std::string> confirm_text,
1861 const bool cancel_default,
1862 std::optional<std::string> message)
1865 C, op,
false,
false, title, confirm_text, cancel_default, message);
1890 std::optional<std::string> title,
1891 std::optional<std::string> confirm_text,
1892 const bool cancel_default,
1893 std::optional<std::string> message)
1899 data->free_op =
true;
1901 data->confirm_text = confirm_text ? std::move(*confirm_text) :
IFACE_(
"OK");
1902 data->message = message ? std::move(*message) : std::string();
1906 data->cancel_default = cancel_default;
1907 data->mouse_move_quit =
false;
1908 data->include_properties =
true;
1923 "Operator redo '%s' does not have register enabled, incorrect invoke function",
1967 ot->name =
"Debug Menu";
1968 ot->idname =
"WM_OT_debug_menu";
1969 ot->description =
"Open a popup to set the debug level";
1976 ot->srna,
"debug_value", 0, SHRT_MIN, SHRT_MAX,
"Debug Value",
"", -10000, 10000);
2001 ot->name =
"Restore Operator Defaults";
2002 ot->idname =
"WM_OT_operator_defaults";
2003 ot->description =
"Set the active operator to its default values";
2142 data.search_type = search_type;
2153 ot->name =
"Search Menu";
2154 ot->idname =
"WM_OT_search_menu";
2155 ot->description =
"Pop-up a search over all menus in the current context";
2164 ot->name =
"Search Operator";
2165 ot->idname =
"WM_OT_search_operator";
2166 ot->description =
"Pop-up a search over all available operators in current context";
2175 ot->name =
"Search Single Menu";
2176 ot->idname =
"WM_OT_search_single_menu";
2177 ot->description =
"Pop-up a search for a menu in current context";
2183 RNA_def_string(
ot->srna,
"menu_idname",
nullptr, 0,
"Menu Name",
"Menu to search in");
2189 "Query to insert into the search box");
2211 ot->name =
"Call Menu";
2212 ot->idname =
"WM_OT_call_menu";
2213 ot->description =
"Open a predefined menu";
2249 ot->name =
"Call Pie Menu";
2250 ot->idname =
"WM_OT_call_menu_pie";
2251 ot->description =
"Open a predefined pie menu";
2290 ot->name =
"Call Panel";
2291 ot->idname =
"WM_OT_call_panel";
2292 ot->description =
"Open a predefined panel";
2330 ot->name =
"Call Asset Shelf Popover";
2331 ot->idname =
"WM_OT_call_asset_shelf_popover";
2332 ot->description =
"Open a predefined asset shelf in a popup";
2344 "Identifier of the asset shelf to display");
2362 if (win ==
nullptr) {
2380 if (win ==
nullptr) {
2396 ot->name =
"Close Window";
2397 ot->idname =
"WM_OT_window_close";
2398 ot->description =
"Close the current window";
2406 ot->name =
"New Window";
2407 ot->idname =
"WM_OT_window_new";
2408 ot->description =
"Create a new window";
2416 ot->name =
"New Main Window";
2417 ot->idname =
"WM_OT_window_new_main";
2418 ot->description =
"Create a new main window with its own workspace and scene selection";
2426 ot->name =
"Toggle Window Fullscreen";
2427 ot->idname =
"WM_OT_window_fullscreen_toggle";
2428 ot->description =
"Toggle the current window full-screen";
2455 ot->name =
"Quit Blender";
2456 ot->idname =
"WM_OT_quit_blender";
2457 ot->description =
"Quit Blender";
2481 ot->idname =
"WM_OT_console_toggle";
2482 ot->description =
N_(
"Toggle System Console");
2484 ot->exec = wm_console_toggle_exec;
2539 if (pc->draw == draw_fn) {
2541 free(pc->customdata);
2555#define WM_RADIAL_CONTROL_DISPLAY_SIZE (200 * UI_SCALE_FAC)
2556#define WM_RADIAL_CONTROL_DISPLAY_MIN_SIZE (35 * UI_SCALE_FAC)
2557#define WM_RADIAL_CONTROL_DISPLAY_WIDTH \
2558 (WM_RADIAL_CONTROL_DISPLAY_SIZE - WM_RADIAL_CONTROL_DISPLAY_MIN_SIZE)
2559#define WM_RADIAL_MAX_STR 10
2637 float d[2] = {0, 0};
2638 float zoom[2] = {1, 1};
2697 blender::gpu::TextureFormat::UNORM_8,
2717 float col[3] = {0, 0, 0};
2741 format,
"texCoord", blender::gpu::VertAttrType::SFLOAT_32_32);
2793 float step = (radius * 2.0f) /
float(line_segments);
2796 for (
int i = 0;
i < line_segments;
i++) {
2814 short fstyle_points = fstyle->
points;
2816 short strdrawlen = 0;
2817 float strwidth, strheight;
2818 float r1 = 0.0f, r2 = 0.0f, rmin = 0.0, tex_radius, alpha;
2819 float zoom[2],
col[4] = {1.0f, 1.0f, 1.0f, 1.0f};
2820 float text_color[4];
2936 const float black[3] = {0.0f};
2960 BLF_position(fontid, -0.5f * strwidth, -0.5f * strheight, 0.0f);
3004 r_prop = &unused_prop;
3033 "Property from path '%s' has length %d instead of %d",
3058 &use_secondary_prop,
3065 const char *data_path;
3067 data_path =
"data_path_secondary";
3070 data_path =
"data_path_primary";
3107 "fill_color_override_path",
3117 "fill_color_override_test_path",
3159 op->
customdata = MEM_new<RadialControl>(__func__);
3221 "Property must be a none, distance, factor, percentage, angle, or pixel");
3293 float new_value, dist = 0.0f, zoom[2];
3296 float angle_precision = 0.0f;
3298 bool handled =
false;
3310 numValue =
fmod(numValue, 2.0f *
float(
M_PI));
3311 if (numValue < 0.0f) {
3317 new_value = numValue;
3326 switch (event->
type) {
3347 if (!has_numInput) {
3357 float(event->xy[1])});
3365 delta[0] /= zoom[0];
3373 delta[0] /= zoom[0];
3376 dist = dist + 0.1f * (delta[0]);
3384 delta[0] /= zoom[0];
3385 delta[1] /= zoom[1];
3404 new_value = (int(new_value) + 5) / 10 * 10;
3412 new_value = int(new_value + 2.5f) / 5 * 5;
3418 new_value = (int(
ceil(new_value * 10.0f)) * 10.0f) / 100.0f;
3421 new_value = 1 - new_value;
3424 new_value =
atan2f(delta[1], delta[0]) +
float(
M_PI) + angle_precision;
3425 new_value =
fmod(new_value, 2.0f *
float(
M_PI));
3426 if (new_value < 0.0f) {
3483 numValue =
fmod(numValue, 2.0f *
float(
M_PI));
3484 if (numValue < 0.0f) {
3490 new_value = numValue;
3530 ot->name =
"Radial Control";
3531 ot->idname =
"WM_OT_radial_control";
3532 ot->description =
"Set some size property (e.g. brush size) with mouse wheel";
3543 "data_path_primary",
3546 "Primary Data Path",
3547 "Primary path of property to be set by the radial control");
3551 "data_path_secondary",
3554 "Secondary Data Path",
3555 "Secondary path of property to be set by the radial control");
3563 "Path of property to select between the primary and secondary data paths");
3571 "Path of property used to rotate the texture display");
3579 "Path of property used to set the color of the control");
3587 "Path of property used to set the fill color of the control");
3591 ot->srna,
"fill_color_override_path",
nullptr, 0,
"Fill Color Override Path",
"");
3594 ot->srna,
"fill_color_override_test_path",
nullptr, 0,
"Fill Color Override Test",
"");
3602 "Path of property used to set the zoom level for the control");
3610 "Path of ID that is used to generate an image for the control");
3614 ot->srna,
"secondary_tex",
false,
"Secondary Texture",
"Tweak brush secondary/mask texture");
3618 ot->srna,
"release_confirm",
false,
"Confirm On Release",
"Finish operation on key release");
3659 {
eRTDrawRegionSwap,
"DRAW_SWAP", 0,
"Draw Region & Swap",
"Draw region and swap"},
3660 {
eRTDrawWindow,
"DRAW_WIN", 0,
"Draw Window",
"Draw window"},
3661 {
eRTDrawWindowSwap,
"DRAW_WIN_SWAP", 0,
"Draw Window & Swap",
"Draw window and swap"},
3663 {
eRTAnimationPlay,
"ANIM_PLAY", 0,
"Animation Play",
"Animation playback"},
3664 {
eRTUndo,
"UNDO", 0,
"Undo/Redo",
"Undo and redo"},
3665 {0,
nullptr, 0,
nullptr,
nullptr},
3676 const int steps_done,
3677 const int steps_total)
3700 if (!region_iter->runtime->visible) {
3717 scene->
r.
cfra += (cfra == scene->
r.
cfra) ? 1 : -1;
3722 int tot = (scene->
r.
efra - scene->
r.
sfra) + 1;
3723 const int frames_total = tot * steps_total;
3724 int frames_done = tot * steps_done;
3768 const int cfra = scene->
r.
cfra;
3769 const char *infostr =
"";
3785 for (
int a = 0; a < iter; a++) {
3789 status.item(fmt::format(
"{} / {} {}", a + 1, iter, infostr), ICON_INFO);
3795 if (time_limit != 0.0) {
3814 "%d \u00D7 %s: %.4f ms, average: %.8f ms",
3818 time_delta / iter_steps);
3825 ot->name =
"Redraw Timer";
3826 ot->idname =
"WM_OT_redraw_timer";
3827 ot->description =
"Simple redraw timer to test the speed of updating the interface";
3835 ot->srna,
"iterations", 10, 1, INT_MAX,
"Iterations",
"Number of times to redraw", 1, 1000);
3842 "Seconds to run the test for (override iterations)",
3863 ot->name =
"Memory Statistics";
3864 ot->idname =
"WM_OT_memory_statistics";
3865 ot->description =
"Print memory statistics to the console";
3928 for (
int i = 0; lb[
i];
i++) {
3932 preview_id_data.
C =
C;
3934 preview_id_data.
scene = scene;
3935 ID *
id = (
ID *)scene;
3943 for (
int i = 0; lb[
i];
i++) {
3957 ot->name =
"Refresh Data-Block Previews";
3958 ot->idname =
"WM_OT_previews_ensure";
3960 "Ensure data-block previews are available and up-to-date "
3961 "(to be saved in .blend file, only for some types like materials, textures, etc.)";
3992 "All Geometry Types",
3993 "Clear previews for scenes, collections and objects"},
3997 "All Shading Types",
3998 "Clear previews for materials, lights, worlds, textures and images"},
4008 {PREVIEW_FILTER_BRUSH,
"BRUSH", 0,
"Brushes",
""},
4010 {0,
nullptr, 0,
nullptr,
nullptr},
4061 for (
int i = 0; lb[
i];
i++) {
4068 printf(
"%s: %d, %d, %d -> %d\n",
4080 for (; id;
id =
static_cast<ID *
>(
id->next)) {
4092 ot->name =
"Clear Data-Block Previews";
4093 ot->idname =
"WM_OT_previews_clear";
4095 "Clear data-block previews (only for some types like objects, materials, textures, etc.)";
4105 "Which data-block previews to clear");
4138 ot->name =
"View Online Manual";
4139 ot->idname =
"WM_OT_doc_view_manual_ui_context";
4140 ot->description =
"View a context based online manual in a web browser";
4159 ot->name =
"Set Stereo 3D";
4160 ot->idname =
"WM_OT_set_stereo_3d";
4161 ot->description =
"Toggle 3D stereo support for current window (or change the display mode)";
4192 "use_interlace_swap",
4195 "Swap left and right stereo channels");
4198 "use_sidebyside_crosseyed",
4201 "Right eye should see left image and vice versa");
4260#ifdef WITH_XR_OPENXR
4283 {0,
nullptr, 0,
nullptr,
nullptr},
4317 {0,
nullptr, 0,
nullptr,
nullptr},
4349 {0,
nullptr, 0,
nullptr,
nullptr},
4403 {0,
nullptr, 0,
nullptr,
nullptr},
4439 {0,
nullptr, 0,
nullptr,
nullptr},
4466 {0,
nullptr, 0,
nullptr,
nullptr},
4511 return (
id != user_data);
4529 bool (*filter_ids)(
const ID *
id,
void *user_data),
4536 if (
id !=
nullptr) {
4537 const short id_type =
GS(id->
name);
4538 for (; id;
id =
static_cast<ID *
>(
id->next)) {
4539 if ((filter_ids !=
nullptr) && filter_ids(
id, user_data) ==
false) {
4548 if (id_type ==
ID_GR) {
4572 r_free,
C ? (
ID *)
CTX_data_main(
C)->actions.first :
nullptr,
false,
nullptr,
nullptr);
4590 r_free,
C ? (
ID *)
CTX_data_main(
C)->collections.first :
nullptr,
false,
nullptr,
nullptr);
4598 r_free,
C ? (
ID *)
CTX_data_main(
C)->collections.first :
nullptr,
true,
nullptr,
nullptr);
4607 r_free,
C ? (
ID *)
CTX_data_main(
C)->images.first :
nullptr,
false,
nullptr,
nullptr);
4615 r_free,
C ? (
ID *)
CTX_data_main(
C)->images.first :
nullptr,
true,
nullptr,
nullptr);
4624 r_free,
C ? (
ID *)
CTX_data_main(
C)->scenes.first :
nullptr,
false,
nullptr,
nullptr);
4632 r_free,
C ? (
ID *)
CTX_data_main(
C)->scenes.first :
nullptr,
true,
nullptr,
nullptr);
4652 r_free,
C ? (
ID *)
CTX_data_main(
C)->movieclips.first :
nullptr,
false,
nullptr,
nullptr);
4660 r_free,
C ? (
ID *)
CTX_data_main(
C)->movieclips.first :
nullptr,
true,
nullptr,
nullptr);
4669 r_free,
C ? (
ID *)
CTX_data_main(
C)->masks.first :
nullptr,
false,
nullptr,
nullptr);
4677 r_free,
C ? (
ID *)
CTX_data_main(
C)->masks.first :
nullptr,
true,
nullptr,
nullptr);
bool id_type_can_have_animdata(short id_type)
ImBuf * BKE_brush_gen_radial_control_imbuf(Brush *br, bool secondary, bool display_gradient)
float BKE_brush_curve_strength_clamped(const Brush *br, float p, float len)
ReportList * CTX_wm_reports(const bContext *C)
bScreen * CTX_wm_screen(const bContext *C)
PointerRNA CTX_data_pointer_get_type(const bContext *C, const char *member, StructRNA *type)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Depsgraph * CTX_data_depsgraph_pointer(const bContext *C)
ListBase CTX_data_dir_get_ex(const bContext *C, bool use_store, bool use_rna, bool use_all)
SpaceLink * CTX_wm_space_data(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
Object * CTX_data_edit_object(const bContext *C)
void CTX_wm_window_set(bContext *C, wmWindow *win)
Main * CTX_data_main(const bContext *C)
void CTX_wm_area_set(bContext *C, ScrArea *area)
void CTX_wm_region_set(bContext *C, ARegion *region)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
Scene * CTX_data_sequencer_scene(const bContext *C)
void CTX_wm_region_popup_set(bContext *C, ARegion *region_popup)
View3D * CTX_wm_view3d(const bContext *C)
IDProperty * IDP_GetPropertyFromGroup(const IDProperty *prop, blender::StringRef name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_FreeProperty(IDProperty *prop)
void IDP_ClearProperty(IDProperty *prop)
bool IDP_AddToGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
IDProperty * IDP_CopyProperty(const IDProperty *prop) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_MergeGroup(IDProperty *dest, const IDProperty *src, bool do_overwrite) ATTR_NONNULL()
void IDP_ReplaceInGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
uint64_t BKE_idtype_idcode_to_idfilter(short idcode)
const char * BKE_idtype_idcode_to_name(short idcode)
Image * BKE_image_load_exists(Main *bmain, const char *filepath, bool *r_exists=nullptr)
void BKE_main_id_tag_listbase(ListBase *lb, int tag, bool value)
void BKE_main_id_tag_all(Main *mainvar, int tag, bool value)
LibraryForeachIDCallbackFlag
@ IDWALK_CB_EMBEDDED_NOT_OWNING
void BKE_library_foreach_ID_link(Main *bmain, ID *id, blender::FunctionRef< LibraryIDLinkCallback > callback, void *user_data, LibraryForeachIDFlag flag)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
General operations, lookup, etc. for materials.
PreviewImage * BKE_previewimg_id_ensure(ID *id)
void BKE_previewimg_clear(PreviewImage *prv)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_scene_graph_update_for_newframe(Depsgraph *depsgraph)
void BLF_size(int fontid, float size)
void BLF_width_and_height(int fontid, const char *str, size_t str_len, float *r_width, float *r_height) ATTR_NONNULL()
void BLF_color4fv(int fontid, const float rgba[4])
#define BLF_DRAW_STR_DUMMY_MAX
void BLF_draw(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_NONNULL(2)
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
void BLF_position(int fontid, float x, float y, float z)
#define BLI_assert_unreachable()
void BLI_dial_free(Dial *dial)
Dial * BLI_dial_init(const float start_position[2], float threshold)
float BLI_dial_angle(Dial *dial, const float current_position[2])
void BLI_kdtree_nd_ free(KDTree *tree)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE void BLI_listbase_clear(ListBase *lb)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
void void BLI_freelistN(ListBase *listbase) ATTR_NONNULL(1)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE float clamp_f(float value, float min, float max)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
MINLINE float len_v2(const float v[2]) ATTR_WARN_UNUSED_RESULT
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
bool void BLI_path_rel(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1)
void BLI_str_toupper_ascii(char *str, size_t len) ATTR_NONNULL(1)
#define SNPRINTF(dst, format,...)
char * STRNCPY(char(&dst)[N], const char *src)
void BLI_str_tolower_ascii(char *str, size_t len) ATTR_NONNULL(1)
char char size_t BLI_strncpy_rlen(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
size_t BLI_strlen_utf8(const char *strc) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
Platform independent time functions.
double BLI_time_now_seconds(void)
#define POINTER_FROM_INT(i)
#define POINTER_AS_INT(i)
#define CTX_N_(context, msgid)
#define CTX_IFACE_(context, msgid)
#define BLT_I18NCONTEXT_OPERATOR_DEFAULT
#define CLOG_ERROR(clg_ref,...)
#define CLOG_DEBUG(clg_ref,...)
ID and Library types, which are fundamental for SDNA.
#define ID_IS_LINKED(_id)
#define ID_IS_EDITABLE(_id)
Object is a sort of wrapper for general info.
#define OB_DATA_SUPPORT_ID_CASE
#define OPERATOR_RETVAL_CHECK(ret)
FileSelectParams * ED_fileselect_get_active_params(const SpaceFile *sfile)
void ED_area_tag_redraw(ScrArea *area)
void ED_area_status_text(ScrArea *area, const char *str)
void ED_screen_refresh(bContext *C, wmWindowManager *wm, wmWindow *win)
bool ED_operator_regionactive(bContext *C)
void ED_workspace_status_text(bContext *C, const char *str)
void ED_region_tag_redraw(ARegion *region)
void ED_undo_push(bContext *C, const char *str)
bool ED_undo_is_legacy_compatible_for_property(bContext *C, ID *id, PointerRNA &ptr)
void ED_undo_push_op(bContext *C, wmOperator *op)
bool ED_undo_is_valid(const bContext *C, const char *undoname)
void ED_undo_redo(bContext *C)
bool ED_undo_operator_repeat(bContext *C, wmOperator *op)
void ED_undo_pop(bContext *C)
float ED_view3d_grid_scale(const Scene *scene, const View3D *v3d, const char **r_grid_unit)
float ED_scene_grid_scale(const Scene *scene, const char **r_grid_unit)
GHOST C-API function and type declarations.
bool GHOST_setConsoleWindowState(GHOST_TConsoleWindowState action)
@ GHOST_kConsoleWindowStateToggle
void GPU_matrix_scale_2fv(const float vec[2])
void GPU_matrix_rotate_2d(float deg)
void GPU_matrix_rotate_3f(float deg, float x, float y, float z)
void GPU_matrix_translate_2f(float x, float y)
@ GPU_SHADER_3D_UNIFORM_COLOR
@ GPU_SHADER_3D_IMAGE_COLOR
void GPU_line_width(float width)
void GPU_line_smooth(bool enable)
void GPU_blend(GPUBlend blend)
void GPU_texture_swizzle_set(blender::gpu::Texture *texture, const char swizzle[4])
void GPU_texture_unbind(blender::gpu::Texture *texture)
@ GPU_TEXTURE_USAGE_SHADER_READ
blender::gpu::Texture * GPU_texture_create_2d(const char *name, int width, int height, int mip_len, blender::gpu::TextureFormat format, eGPUTextureUsage usage, const float *data)
void GPU_texture_filter_mode(blender::gpu::Texture *texture, bool use_filter)
void GPU_texture_free(blender::gpu::Texture *texture)
Read Guarded memory(de)allocation.
static void init_data(ModifierData *md)
#define RNA_STRUCT_BEGIN(sptr, prop)
short RNA_type_to_ID_code(const StructRNA *type)
#define RNA_PROP_BEGIN(sptr, itemptr, prop)
#define RNA_SUBTYPE_UNIT_VALUE(subtype)
@ PROP_STRING_SEARCH_SUGGESTION
@ PROP_STRING_SEARCH_SORT
void UI_but_func_set(uiBut *but, std::function< void(bContext &)> func)
void UI_popup_menu_retval_set(const uiBlock *block, int retval, bool enable)
@ UI_BLOCK_MOVEMOUSE_QUIT
void UI_block_theme_style_set(uiBlock *block, char theme_style)
void UI_but_focus_on_enter_event(wmWindow *win, uiBut *but)
uiBlock * UI_block_begin(const bContext *C, ARegion *region, std::string name, blender::ui::EmbossType emboss)
wmOperatorStatus UI_pie_menu_invoke(bContext *C, const char *idname, const wmEvent *event)
@ UI_BUT_ACTIVATE_ON_INIT
void UI_block_bounds_set_popup(uiBlock *block, int addval, const int bounds_offset[2])
void UI_popup_dummy_panel_set(ARegion *region, uiBlock *block)
uiBut * uiDefSearchButO_ptr(uiBlock *block, wmOperatorType *ot, IDProperty *properties, void *arg, int retval, int icon, int maxncpy, int x, int y, short width, short height, std::optional< blender::StringRef > tip)
void UI_popup_block_invoke(bContext *C, uiBlockCreateFunc func, void *arg, uiFreeArgFunc arg_free)
const uiStyle * UI_style_get_dpi()
std::optional< std::string > UI_but_online_manual_id_from_active(const bContext *C) ATTR_WARN_UNUSED_RESULT
void UI_popup_block_ex(bContext *C, uiBlockCreateFunc func, uiBlockHandleFunc popup_func, uiBlockCancelFunc cancel_func, void *arg, wmOperator *op)
void UI_popup_menu_end(bContext *C, uiPopupMenu *pup)
void UI_popup_block_invoke_ex(bContext *C, uiBlockCreateFunc func, void *arg, uiFreeArgFunc arg_free, bool can_refresh)
void UI_block_flag_disable(uiBlock *block, int flag)
@ UI_BUT2_ACTIVATE_ON_INIT_NO_SELECT
uiBut * uiDefSearchBut(uiBlock *block, void *arg, int retval, int icon, int maxncpy, int x, int y, short width, short height, std::optional< blender::StringRef > tip)
void UI_but_flag2_enable(uiBut *but, int flag)
void UI_block_func_handle_set(uiBlock *block, uiBlockHandleFunc func, void *arg)
@ UI_BUT_LABEL_ALIGN_SPLIT_COLUMN
@ UI_BUT_LABEL_ALIGN_NONE
@ UI_BUT_LABEL_ALIGN_COLUMN
wmOperatorStatus UI_popover_panel_invoke(bContext *C, const char *idname, bool keep_open, ReportList *reports)
void UI_popup_block_close(bContext *C, wmWindow *win, uiBlock *block)
int UI_searchbox_size_x()
bool UI_block_has_active_default_button(const uiBlock *block)
void UI_but_func_operator_search(uiBut *but)
const uiStyle * UI_style_get()
uiPopupMenu * UI_popup_menu_begin(bContext *C, const char *title, int icon) ATTR_NONNULL()
void uiTemplateOperatorPropertyButs(const bContext *C, uiLayout *layout, wmOperator *op, eButLabelAlign label_align, short flag)
void UI_fontstyle_set(const uiFontStyle *fs)
void UI_block_func_set(uiBlock *block, uiButHandleFunc func, void *arg1, void *arg2)
#define UI_SEARCHBOX_BOUNDS
uiLayout * UI_popup_menu_layout(uiPopupMenu *pup)
int UI_searchbox_size_y()
wmOperatorStatus UI_popup_menu_invoke(bContext *C, const char *idname, ReportList *reports) ATTR_NONNULL(1
void UI_block_bounds_set_centered(uiBlock *block, int addval)
void UI_but_func_menu_search(uiBut *but, const char *single_menu_idname=nullptr)
@ UI_BLOCK_THEME_STYLE_REGULAR
@ UI_BLOCK_THEME_STYLE_POPUP
#define UI_DEFAULT_TEXT_POINTS
void UI_block_flag_enable(uiBlock *block, int flag)
uiBut * uiDefBut(uiBlock *block, uiButTypeWithPointerType but_and_ptr_type, int retval, blender::StringRef str, int x, int y, short width, short height, void *poin, float min, float max, std::optional< blender::StringRef > tip)
void UI_but_flag_enable(uiBut *but, int flag)
void UI_icon_render_id(const bContext *C, Scene *scene, ID *id, enum eIconSizes size, bool use_job)
int UI_icon_color_from_collection(const Collection *collection)
uiLayout * uiItemsAlertBox(uiBlock *block, const uiStyle *style, const int dialog_width, const eAlertIcon icon, const int icon_size)
uiBut * uiItemL_ex(uiLayout *layout, blender::StringRef name, int icon, bool highlight, bool redalert)
void UI_GetThemeColor4fv(int colorid, float col[4])
CLG_LogRef * WM_LOG_OPERATORS
void(*)(bContext *C, const blender::int2 &xy, const blender::float2 &tilt, void *customdata) wmPaintCursorDraw
@ WM_POPUP_POSITION_MOUSE
@ WM_POPUP_POSITION_CENTER
BMesh const char void * data
BPy_StructRNA * depsgraph
constexpr StringRef trim() const
void append(const T &value)
dot(value.rgb, luminance_coefficients)") DEFINE_VALUE("REDUCE(lhs
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
void(* MEM_printmemlist_stats)(void)
void * MEM_callocN(size_t len, const char *str)
void MEM_freeN(void *vmemh)
ccl_device_inline float2 fmod(const float2 a, const float b)
std::unique_ptr< IDProperty, IDPropertyDeleter > create_group(StringRef prop_name, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_GROUP.
bool asset_shelf_popover_invoke(bContext &C, blender::StringRef asset_shelf_idname, ReportList &reports)
uiLayout & block_layout(uiBlock *block, LayoutDirection direction, LayoutType type, int x, int y, int size, int em, int padding, const uiStyle *style)
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
vector snap(vector a, vector b)
float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
void RNA_property_int_ui_range(PointerRNA *ptr, PropertyRNA *prop, int *softmin, int *softmax, int *step)
bool RNA_property_array_check(PropertyRNA *prop)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
std::string RNA_pointer_as_string_id(bContext *C, PointerRNA *ptr)
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
bool RNA_struct_system_idprops_unset(PointerRNA *ptr, const char *identifier)
bool RNA_struct_is_ID(const StructRNA *type)
void RNA_property_float_ui_range(PointerRNA *ptr, PropertyRNA *prop, float *softmin, float *softmax, float *step, float *precision)
PropertyUnit RNA_property_unit(PropertyRNA *prop)
bool RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index)
StructRNA * RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_property_is_set_ex(PointerRNA *ptr, PropertyRNA *prop, bool use_ghost)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
PropertyType RNA_property_type(PropertyRNA *prop)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
std::string RNA_pointer_as_string_keywords(bContext *C, PointerRNA *ptr, const bool as_function, const bool all_args, const bool nested_args, const int max_prop_length)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_property_ui_name(const PropertyRNA *prop, const PointerRNA *ptr)
int RNA_int_get(PointerRNA *ptr, const char *name)
float RNA_property_float_get_default(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_flag(PropertyRNA *prop)
void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
float RNA_float_get(PointerRNA *ptr, const char *name)
std::string RNA_string_get(PointerRNA *ptr, const char *name)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_enum_description(const EnumPropertyItem *item, const int value, const char **r_description)
void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
std::string RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
std::string RNA_property_as_string(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index, int max_prop_length)
PropertyRNA * RNA_struct_iterator_property(StructRNA *type)
const char * RNA_property_identifier(const PropertyRNA *prop)
void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_property_string_search_func_runtime(PropertyRNA *prop, StringPropertySearchFunc search_fn, const eStringPropertySearchFlag search_flag)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_enum_flag(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
std::optional< std::string > RNA_path_from_ID_to_struct(const PointerRNA *ptr)
std::optional< std::string > RNA_path_full_property_py(const PointerRNA *ptr, PropertyRNA *prop, int index)
std::string RNA_path_property_py(const PointerRNA *ptr, PropertyRNA *prop, int index)
bool RNA_path_resolve(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
const EnumPropertyItem rna_enum_stereo3d_display_items[]
const EnumPropertyItem rna_enum_stereo3d_anaglyph_type_items[]
const EnumPropertyItem rna_enum_stereo3d_interlace_type_items[]
struct CurveMapping * curve_distance_falloff
struct AssetMetaData * asset_data
ImBufFloatBuffer float_buffer
LibraryForeachIDCallbackFlag cb_flag
char translation_context[BKE_ST_MAXNAME]
char label[BKE_ST_MAXNAME]
PointerRNA fill_col_override_test_ptr
ListBase orig_paintcursors
blender::gpu::Texture * texture
int initial_radial_center[2]
PropertyRNA * fill_col_override_prop
PointerRNA fill_col_override_ptr
PropertyRNA * fill_col_prop
StructRNA * image_id_srna
PropertyRNA * fill_col_override_test_prop
struct EditBone * act_edbone
void scale_y_set(float scale)
void op_enum(blender::StringRefNull opname, blender::StringRefNull propname, IDProperty *properties, blender::wm::OpCallContext context, eUI_Item_Flag flag, const int active=-1)
void operator_context_set(blender::wm::OpCallContext opcontext)
void label(blender::StringRef name, int icon)
uiLayout & column(bool align)
void separator(float factor=1.0f, LayoutSeparatorType type=LayoutSeparatorType::Auto)
void enabled_set(bool enabled)
wmOperatorStatus(* exec)(bContext *C, wmOperator *op) ATTR_WARN_UNUSED_RESULT
bool(* poll)(bContext *C) ATTR_WARN_UNUSED_RESULT
IDProperty * last_properties
wmOperatorStatus(* modal)(bContext *C, wmOperator *op, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
void(* cancel)(bContext *C, wmOperator *op)
struct ReportList * reports
struct wmOperatorType * type
void(* draw)(bContext *C, const blender::int2 &xy, const blender::float2 &tilt, void *customdata)
bool(* poll)(bContext *C)
WindowManagerRuntimeHandle * runtime
void wm_operator_register(bContext *C, wmOperator *op)
void WM_operator_free(wmOperator *op)
void WM_cursor_wait(bool val)
void wm_draw_region_test(bContext *C, ScrArea *area, ARegion *region)
void wm_draw_update(bContext *C)
bool WM_event_drag_test_with_delta(const wmEvent *event, const int drag_delta[2])
void WM_event_drag_start_mval(const wmEvent *event, const ARegion *region, int r_mval[2])
int WM_userdef_event_type_from_keymap_type(int kmitype)
wmOperatorStatus WM_operator_call_notest(bContext *C, wmOperator *op)
wmOperatorStatus WM_operator_name_call_ptr(bContext *C, wmOperatorType *ot, blender::wm::OpCallContext context, PointerRNA *properties, const wmEvent *event)
void WM_event_add_fileselect(bContext *C, wmOperator *op)
void wm_event_do_refresh_wm_and_depsgraph(bContext *C)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
wmOperatorStatus WM_operator_call_ex(bContext *C, wmOperator *op, const bool store)
wmOperatorStatus WM_operator_repeat(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
#define ISMOUSE_MOTION(event_type)
@ GESTURE_MODAL_CIRCLE_SIZE
@ GESTURE_MODAL_CIRCLE_ADD
@ GESTURE_MODAL_CIRCLE_SUB
void WM_OT_read_history(wmOperatorType *ot)
void WM_OT_save_as_mainfile(wmOperatorType *ot)
void WM_OT_open_mainfile(wmOperatorType *ot)
void WM_OT_recover_last_session(wmOperatorType *ot)
void WM_OT_read_userpref(wmOperatorType *ot)
void WM_OT_save_homefile(wmOperatorType *ot)
void WM_OT_read_factory_userpref(wmOperatorType *ot)
void WM_OT_save_mainfile(wmOperatorType *ot)
void WM_OT_recover_auto_save(wmOperatorType *ot)
void WM_OT_read_factory_settings(wmOperatorType *ot)
void WM_OT_read_homefile(wmOperatorType *ot)
void WM_OT_save_userpref(wmOperatorType *ot)
void WM_OT_clear_recent_files(wmOperatorType *ot)
void WM_OT_revert_mainfile(wmOperatorType *ot)
void WM_OT_set_working_color_space(wmOperatorType *ot)
void WM_OT_id_linked_relocate(wmOperatorType *ot)
void WM_OT_lib_relocate(wmOperatorType *ot)
void WM_OT_append(wmOperatorType *ot)
void WM_OT_lib_reload(wmOperatorType *ot)
void WM_OT_link(wmOperatorType *ot)
void GIZMOGROUP_OT_gizmo_select(wmOperatorType *ot)
void GIZMOGROUP_OT_gizmo_tweak(wmOperatorType *ot)
void wm_gizmos_keymap(wmKeyConfig *keyconf)
void wm_exit_schedule_delayed(const bContext *C)
bool WM_jobs_test(const wmWindowManager *wm, const void *owner, int job_type)
wmKeyMap * WM_modalkeymap_ensure(wmKeyConfig *keyconf, const char *idname, const EnumPropertyItem *items)
void WM_modalkeymap_assign(wmKeyMap *km, const char *opname)
wmKeyMap * WM_modalkeymap_find(wmKeyConfig *keyconf, const char *idname)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
void WM_keymap_fix_linking()
bool WM_operator_properties_id_lookup_is_set(PointerRNA *ptr)
ID * WM_operator_properties_id_lookup_from_name_or_session_uid(Main *bmain, PointerRNA *ptr, const ID_Type type)
std::string WM_operatortype_name(wmOperatorType *ot, PointerRNA *properties)
void WM_operatortype_append(void(*opfunc)(wmOperatorType *))
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
static uiBlock * wm_block_dialog_create(bContext *C, ARegion *region, void *user_data)
static uiBlock * wm_block_search_menu(bContext *C, ARegion *region, void *userdata)
static void WM_OT_call_menu_pie(wmOperatorType *ot)
static void gesture_box_modal_keymap(wmKeyConfig *keyconf)
#define CTX_TEST_PTR_ID_CAST(C, member, member_full, cast, idptr)
static void radial_control_paint_cursor(bContext *, const blender::int2 &, const blender::float2 &, void *customdata)
static wmOperatorStatus wm_call_pie_menu_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void WM_OT_search_menu(wmOperatorType *ot)
static wmOperatorStatus previews_clear_exec(bContext *C, wmOperator *op)
#define ID_CAST_SCENEWORLD(id_pt)
const EnumPropertyItem * RNA_movieclip_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static void WM_OT_doc_view_manual_ui_context(wmOperatorType *ot)
std::optional< std::string > WM_context_path_resolve_property_full(const bContext *C, const PointerRNA *ptr, PropertyRNA *prop, int index)
@ SEARCH_TYPE_SINGLE_MENU
static bool wm_operator_winactive_not_full(bContext *C)
static void radial_control_paint_tex(RadialControl *rc, float radius, float alpha)
size_t WM_operator_py_idname(char *dst, const char *src)
static wmOperatorStatus wm_exit_blender_exec(bContext *C, wmOperator *)
static wmOperatorStatus wm_debug_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
static void wm_block_redo_cancel_cb(bContext *C, void *arg_op)
static wmOperatorStatus memory_statistics_exec(bContext *, wmOperator *)
wmOperatorStatus WM_operator_redo_popup(bContext *C, wmOperator *op)
static wmOperatorStatus radial_control_modal(bContext *C, wmOperator *op, const wmEvent *event)
static void gesture_straightline_modal_keymap(wmKeyConfig *keyconf)
static void radial_control_set_tex(RadialControl *rc)
static wmOperatorStatus wm_call_panel_exec(bContext *C, wmOperator *op)
static void gesture_zoom_border_modal_keymap(wmKeyConfig *keyconf)
static void radial_control_cancel(bContext *C, wmOperator *op)
static void previews_id_ensure(bContext *C, Scene *scene, ID *id)
static void dialog_cancel_cb(bContext *C, void *arg1, void *arg2)
wmOperatorStatus WM_operator_confirm_message(bContext *C, wmOperator *op, const char *message)
wmOperatorStatus WM_operator_props_popup_call(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus wm_debug_menu_exec(bContext *C, wmOperator *op)
void wm_window_keymap(wmKeyConfig *keyconf)
static uiBlock * wm_enum_search_menu(bContext *C, ARegion *region, void *arg)
wmOperatorStatus WM_operator_props_popup_confirm(bContext *C, wmOperator *op, const wmEvent *)
wmOperatorStatus WM_operator_confirm(bContext *C, wmOperator *op, const wmEvent *)
wmOperatorStatus WM_menu_invoke_ex(bContext *C, wmOperator *op, blender::wm::OpCallContext opcontext)
void WM_operator_last_properties_ensure(wmOperatorType *ot, PointerRNA *ptr)
static void WM_OT_search_single_menu(wmOperatorType *ot)
static int radial_control_get_path(PointerRNA *ctx_ptr, wmOperator *op, const char *name, PointerRNA *r_ptr, PropertyRNA **r_prop, int req_length, RCPropFlags flags)
static void WM_OT_memory_statistics(wmOperatorType *ot)
static const EnumPropertyItem * rna_id_itemf(bool *r_free, ID *id, bool local, bool(*filter_ids)(const ID *id, void *user_data), void *user_data)
static wmOperatorStatus previews_ensure_exec(bContext *C, wmOperator *)
#define CTX_TEST_PTR_ID(C, member, idptr)
wmOperatorStatus WM_operator_props_dialog_popup(bContext *C, wmOperator *op, int width, std::optional< std::string > title, std::optional< std::string > confirm_text, const bool cancel_default, std::optional< std::string > message)
static wmOperatorStatus wm_call_pie_menu_exec(bContext *C, wmOperator *op)
#define ID_CAST_OBDATA(id_pt)
static void radial_control_update_header(wmOperator *op, bContext *C)
const EnumPropertyItem * RNA_mask_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
const EnumPropertyItem * RNA_collection_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
#define TEST_PTR_DATA_TYPE_FROM_CONTEXT(member, rna_type, rna_ptr)
size_t WM_operator_bl_idname(char *dst, const char *src)
static wmOperatorStatus wm_search_menu_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void WM_operator_properties_reset(wmOperator *op)
static void WM_OT_debug_menu(wmOperatorType *ot)
#define ID_CAST_OBMATACT(id_pt)
wmOperatorStatus WM_menu_invoke(bContext *C, wmOperator *op, const wmEvent *)
static void gesture_lasso_modal_keymap(wmKeyConfig *keyconf)
static void WM_OT_radial_control(wmOperatorType *ot)
static bool rna_id_enum_filter_single(const ID *id, void *user_data)
static void WM_OT_call_asset_shelf_popover(wmOperatorType *ot)
bool WM_operator_last_properties_store(wmOperator *op)
void WM_operator_properties_alloc(PointerRNA **ptr, IDProperty **properties, const char *opstring)
static void redraw_timer_step(bContext *C, Scene *scene, Depsgraph *depsgraph, wmWindow *win, ScrArea *area, ARegion *region, const int type, const int cfra, const int steps_done, const int steps_total)
#define WM_RADIAL_CONTROL_DISPLAY_WIDTH
static wmOperatorStatus redraw_timer_exec(bContext *C, wmOperator *op)
static int radial_control_get_properties(bContext *C, wmOperator *op)
const EnumPropertyItem * RNA_action_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
void WM_operator_view3d_unit_defaults(bContext *C, wmOperator *op)
static bool redraw_timer_poll(bContext *C)
static void WM_OT_call_menu(wmOperatorType *ot)
wmOperatorStatus WM_generic_select_modal(bContext *C, wmOperator *op, const wmEvent *event)
bool WM_operator_winactive(bContext *C)
static void wm_block_redo_cb(bContext *C, void *arg_op, int)
int WM_operator_smooth_viewtx_get(const wmOperator *op)
bool WM_operator_check_ui_enabled(const bContext *C, const char *idname)
bool WM_paint_cursor_end(wmPaintCursor *handle)
static int previews_id_ensure_callback(LibraryIDLinkCallbackData *cb_data)
void WM_paint_cursor_remove_by_type(wmWindowManager *wm, void *draw_fn, void(*free)(void *))
static wmOperatorStatus radial_control_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static bool rna_id_enum_filter_single_and_assets(const ID *id, void *user_data)
static std::optional< std::string > wm_prop_pystring_from_context(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index)
const EnumPropertyItem * RNA_scene_local_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static void WM_OT_redraw_timer(wmOperatorType *ot)
const EnumPropertyItem * RNA_movieclip_local_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static void WM_OT_search_operator(wmOperatorType *ot)
static void radial_control_set_initial_mouse(RadialControl *rc, const wmEvent *event)
wmOperatorStatus WM_operator_confirm_or_exec(bContext *C, wmOperator *op, const wmEvent *)
std::string WM_operator_pystring_ex(bContext *C, wmOperator *op, const bool all_args, const bool macro_args, wmOperatorType *ot, PointerRNA *opptr)
wmOperatorStatus WM_operator_confirm_message_ex(bContext *C, wmOperator *op, const char *title, const int icon, const char *message, const blender::wm::OpCallContext)
std::optional< std::string > WM_context_path_resolve_full(bContext *C, const PointerRNA *ptr)
static uiBlock * wm_block_create_redo(bContext *C, ARegion *region, void *arg_op)
static wmOperatorStatus doc_view_manual_ui_context_exec(bContext *C, wmOperator *)
wmOperatorStatus WM_generic_select_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static void WM_OT_previews_clear(wmOperatorType *ot)
wmOperator * WM_operator_last_redo(const bContext *C)
static wmOperatorStatus wm_operator_props_popup_ex(bContext *C, wmOperator *op, const bool do_call, const bool do_redo, std::optional< std::string > title=std::nullopt, std::optional< std::string > confirm_text=std::nullopt, const bool cancel_default=false, std::optional< std::string > message=std::nullopt)
static bool wm_operator_winactive_normal(bContext *C)
void wm_operatortypes_register()
bool WM_operator_last_properties_init(wmOperator *op)
static void WM_OT_stereo3d_set(wmOperatorType *ot)
const EnumPropertyItem * RNA_mask_local_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static void redraw_timer_window_swap(bContext *C)
bool WM_operator_filesel_ensure_ext_imtype(wmOperator *op, const ImageFormatData *im_format)
static std::string wm_call_panel_get_name(wmOperatorType *ot, PointerRNA *ptr)
bool WM_operator_bl_idname_is_valid(const char *idname)
static void WM_OT_call_panel(wmOperatorType *ot)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
const EnumPropertyItem * RNA_collection_local_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static void WM_OT_quit_blender(wmOperatorType *ot)
IDProperty * WM_operator_last_properties_ensure_idprops(wmOperatorType *ot)
wmOperatorStatus WM_operator_confirm_ex(bContext *C, wmOperator *op, const char *title, const char *message, const char *confirm_text, int icon, bool cancel_default)
static char g_search_text[256]
static std::string wm_call_menu_get_name(wmOperatorType *ot, PointerRNA *ptr)
wmOperatorStatus WM_enum_search_invoke(bContext *C, wmOperator *op, const wmEvent *)
static void wm_operator_ui_popup_ok(bContext *C, void *arg, int retval)
bool WM_operator_properties_default(PointerRNA *ptr, const bool do_update)
static const EnumPropertyItem preview_id_type_items[]
static void WM_OT_window_new_main(wmOperatorType *ot)
static bool operator_last_properties_init_impl(wmOperator *op, IDProperty *last_properties)
std::optional< std::string > WM_prop_pystring_assign(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index)
static void gesture_polyline_modal_keymap(wmKeyConfig *keyconf)
static void WM_OT_window_new(wmOperatorType *ot)
void WM_operator_properties_clear(PointerRNA *ptr)
wmOperatorStatus WM_operator_ui_popup(bContext *C, wmOperator *op, int width)
#define TEST_PTR_DATA_TYPE(member, rna_type, rna_ptr, dataptr_cmp)
static void WM_OT_previews_ensure(wmOperatorType *ot)
static wmOperatorStatus wm_search_menu_exec(bContext *, wmOperator *)
const EnumPropertyItem * RNA_scene_without_sequencer_scene_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static uint preview_filter_to_idfilter(enum PreviewFilterID filter)
static const EnumPropertyItem redraw_timer_type_items[]
static void gesture_circle_modal_keymap(wmKeyConfig *keyconf)
std::string WM_operator_pystring(bContext *C, wmOperator *op, const bool all_args, const bool macro_args)
static void radial_control_set_value(RadialControl *rc, float val)
void WM_operator_properties_create(PointerRNA *ptr, const char *opstring)
static void WM_OT_window_fullscreen_toggle(wmOperatorType *ot)
static void dialog_exec_cb(bContext *C, void *arg1, void *arg2)
#define WM_RADIAL_CONTROL_DISPLAY_MIN_SIZE
static void radial_control_paint_curve(uint pos, Brush *br, float radius, int line_segments)
static void WM_OT_window_close(wmOperatorType *ot)
static wmOperatorStatus wm_operator_defaults_exec(bContext *C, wmOperator *op)
static const char * wm_context_member_from_ptr(const bContext *C, const PointerRNA *ptr, bool *r_is_id)
void WM_operator_properties_free(PointerRNA *ptr)
ID * WM_operator_drop_load_path(bContext *C, wmOperator *op, const short idcode)
wmPaintCursor * WM_paint_cursor_activate(short space_type, short region_type, bool(*poll)(bContext *C), wmPaintCursorDraw draw, void *customdata)
wmOperatorStatus WM_operator_props_popup_confirm_ex(bContext *C, wmOperator *op, const wmEvent *, std::optional< std::string > title, std::optional< std::string > confirm_text, const bool cancel_default, std::optional< std::string > message)
static void wm_operator_ui_popup_cancel(bContext *C, void *user_data)
@ PREVIEW_FILTER_GEOMETRY
@ PREVIEW_FILTER_MATERIAL
@ PREVIEW_FILTER_COLLECTION
void WM_operator_properties_sanitize(PointerRNA *ptr, const bool no_context)
bool WM_operator_py_idname_ok_or_report(ReportList *reports, const char *classname, const char *idname)
#define WM_RADIAL_MAX_STR
std::string WM_operator_pystring_abbreviate(std::string str, int str_len_max)
wmOperatorStatus WM_operator_props_popup(bContext *C, wmOperator *op, const wmEvent *)
static wmOperatorStatus wm_call_menu_exec(bContext *C, wmOperator *op)
#define WM_RADIAL_CONTROL_DISPLAY_SIZE
const EnumPropertyItem * RNA_image_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static wmOperatorStatus wm_exit_blender_invoke(bContext *C, wmOperator *, const wmEvent *)
wmOperatorStatus WM_operator_filesel(bContext *C, wmOperator *op, const wmEvent *)
static uiBlock * wm_operator_ui_create(bContext *C, ARegion *region, void *user_data)
const EnumPropertyItem * RNA_scene_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
static void WM_OT_operator_defaults(wmOperatorType *ot)
static wmOperatorStatus asset_shelf_popover_invoke(bContext *C, wmOperator *op, const wmEvent *)
const EnumPropertyItem * RNA_image_local_itemf(bContext *C, PointerRNA *, PropertyRNA *, bool *r_free)
void WM_paneltype_idname_visit_for_search(const bContext *, PointerRNA *, PropertyRNA *, const char *, blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn)
PanelType * WM_paneltype_find(const StringRef idname, bool quiet)
void WM_OT_splash_about(wmOperatorType *ot)
void WM_OT_splash(wmOperatorType *ot)
void wm_stereo3d_set_cancel(bContext *, wmOperator *op)
wmOperatorStatus wm_stereo3d_set_invoke(bContext *C, wmOperator *op, const wmEvent *)
wmOperatorStatus wm_stereo3d_set_exec(bContext *C, wmOperator *op)
bool wm_stereo3d_set_check(bContext *, wmOperator *)
void wm_stereo3d_set_draw(bContext *, wmOperator *op)
wmOperatorStatus wm_window_new_exec(bContext *C, wmOperator *op)
void wm_quit_with_optional_confirmation_prompt(bContext *C, wmWindow *win)
wmOperatorStatus wm_window_close_exec(bContext *C, wmOperator *)
wmOperatorStatus wm_window_new_main_exec(bContext *C, wmOperator *op)
void WM_progress_clear(wmWindow *win)
void WM_progress_set(wmWindow *win, float progress)
void wm_window_make_drawable(wmWindowManager *wm, wmWindow *win)
wmOperatorStatus wm_window_fullscreen_toggle_exec(bContext *C, wmOperator *)
bScreen * WM_window_get_active_screen(const wmWindow *win)
void wm_xr_operatortypes_register()