26#include <fmt/format.h>
72#include "RNA_prototypes.hh"
89#define UI_TIP_SPACER 0.3f
90#define UI_TIP_PADDING_X 1.95f
91#define UI_TIP_PADDING_Y 1.28f
93#define UI_TIP_MAXWIDTH 600
110 std::optional<uiTooltipImage>
image;
138 field.
text = std::move(text);
140 data.fields.append(std::move(field));
147 field.
image = image_data;
149 data.fields.append(std::move(field));
159 dest[0] = (1.0f - fac) * dest[0] + (fac * source[0]);
160 dest[1] = (1.0f - fac) * dest[1] + (fac * source[1]);
161 dest[2] = (1.0f - fac) * dest[2] + (fac * source[2]);
173 uchar drawcol[4] = {0, 0, 0, 255};
183 float background_color[3];
206 active_color[0] = 0.4f;
207 active_color[1] = 0.55f;
208 active_color[2] = 0.75f;
227 bbox.
xmin += 0.5f * pad_x;
228 bbox.
ymax -= 0.5f * pad_y;
231 for (
int i = 0;
i <
data->fields.size();
i++) {
244 &
data->fstyle, &bbox, field->
text.c_str(), field->
text.size(), drawcol, &fs_params);
278 &fstyle_mono, &bbox, field->
text.c_str(), field->
text.size(), drawcol, &fs_params);
288 float(bbox.
ymax + field->
image->height));
293 const float color1[4] = {checker_dark, checker_dark, checker_dark, 1.0f};
294 const float color2[4] = {checker_light, checker_light, checker_light, 1.0f};
296 float(bbox.
ymax +
U.pixelsize),
310 field->
image->ibuf->x,
311 field->
image->ibuf->y,
314 field->
image->ibuf->byte_buffer.data,
317 float(field->
image->width) /
float(field->
image->ibuf->x),
318 float(field->
image->height) /
float(field->
image->ibuf->y),
319 (field->
image->text_color) ? main_color :
nullptr);
321 if (field->
image->border) {
326 float border_color[4] = {1.0f, 1.0f, 1.0f, 0.15f};
330 border_color[0] = 0.0f;
331 border_color[1] = 0.0f;
332 border_color[2] = 0.0f;
339 float(bbox.
ymax + field->
image->height));
357 &
data->fstyle, &bbox, field->
text.c_str(), field->
text.size(), drawcol, &fs_params);
405 const int fields_len_init =
data.fields.size();
414 ot->description ?
ot->description :
ot->name,
423 fmt::format(fmt::runtime(
TIP_(
"Shortcut: {}")), kmi_str),
432 fmt::format(fmt::runtime(
TIP_(
"Python: {}")),
str),
439 return (fields_len_init !=
data.fields.size());
451 if (
ELEM(tip.
back(),
'.',
'!',
'?')) {
470 if (but->
optype ==
nullptr) {
475 if (but->
opptr ==
nullptr) {
496 bool has_valid_context =
true;
497 const char *has_valid_context_error =
IFACE_(
"Unsupported context");
500 if (area ==
nullptr) {
501 has_valid_context =
false;
507 if (space_type_prop != area->
spacetype) {
508 has_valid_context =
false;
515 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
523 const char *expr_imports[] = {
"bpy",
"bl_ui",
nullptr};
526 "bl_ui.space_toolsystem_common.item_from_id("
528 "bpy.context.space_data.type, "
531 char *expr_result =
nullptr;
532 bool is_error =
false;
534 if (has_valid_context ==
false) {
535 expr_result =
BLI_strdup(has_valid_context_error);
538 if (
STREQ(expr_result,
"")) {
540 expr_result =
nullptr;
550 if (expr_result !=
nullptr) {
554 if (label_str == expr_result) {
555 label_str =
IFACE_(expr_result);
558 if (label_str != expr_result) {
574 if (is_quick_tip ==
false) {
575 const char *expr_imports[] = {
"bpy",
"bl_ui",
nullptr};
578 "bl_ui.space_toolsystem_common.description_from_id("
580 "bpy.context.space_data.type, "
584 char *expr_result =
nullptr;
585 bool is_error =
false;
587 if (has_valid_context ==
false) {
588 expr_result =
BLI_strdup(has_valid_context_error);
591 if (
STREQ(expr_result,
"")) {
593 expr_result =
nullptr;
603 if (expr_result !=
nullptr) {
606 fmt::format(
"{}{}", expr_result, add_period ?
"." :
""),
616 const bool show_shortcut = is_quick_tip ==
false &&
630 if (shortcut.empty()) {
637 const char *expr_imports[] = {
638 "bpy",
"bl_keymap_utils",
"bl_keymap_utils.keymap_from_toolbar",
nullptr};
641 "bl_keymap_utils.keymap_from_toolbar.generate("
643 "bpy.context.space_data.type), "
644 "'as_pointer', lambda: 0)()");
646 intptr_t expr_result = 0;
648 if (has_valid_context ==
false) {
649 shortcut = has_valid_context_error;
652 if (expr_result != 0) {
658 if (
STREQ(tool_id, tool_id_test)) {
660 shortcut = fmt::format(
"{}, {}", *shortcut_toolbar, kmi_str);
673 if (!shortcut.empty()) {
675 fmt::format(fmt::runtime(
TIP_(
"Shortcut: {}")), shortcut),
695 char *expr_result =
nullptr;
696 size_t expr_result_len;
699 const char *expr_imports[] = {
"bpy",
"bl_ui",
nullptr};
703 "item.idname for item in bl_ui.space_toolsystem_common.item_group_from_id("
705 "bpy.context.space_data.type, '%s', coerce=True) "
706 "if item is not None)",
709 if (has_valid_context ==
false) {
713 C, expr_imports, expr,
nullptr, &expr_result, &expr_result_len))
719 if (expr_result !=
nullptr) {
724 std::optional<std::string> shortcut;
726 const char *item_end = expr_result + expr_result_len;
727 const char *item_step = expr_result;
729 while (item_step < item_end) {
739 item_step += strlen(item_step) + 1;
747 fmt::format(fmt::runtime(
TIP_(
"Shortcut Cycle: {}")), *shortcut),
760 fmt::format(fmt::runtime(
TIP_(
"Python: {}")),
str),
771 const char *expr_imports[] = {
"bpy",
"bl_ui",
nullptr};
775 "bl_ui.space_toolsystem_common.keymap_from_id("
777 "bpy.context.space_data.type, "
779 "'as_pointer', lambda: 0)()",
782 intptr_t expr_result = 0;
784 if (has_valid_context ==
false) {
788 if (expr_result != 0) {
792 ui_tooltip_data_append_from_keymap(
C, *
data, keymap);
800 UNUSED_VARS(is_label, has_valid_context, has_valid_context_error);
808 const bool show_alpha,
809 const bool show_hex =
false)
815 return fmt::format(
"{}: #{:02X}{:02X}{:02X}{:02X}",
823 "{}: #{:02X}{:02X}{:02X}",
TIP_(title),
int(
hex[0]),
int(
hex[1]),
int(
hex[2]));
827 return fmt::format(
"{}: {:.3f} {:.3f} {:.3f} {:.3f}",
835 return fmt::format(
"{}: {:.3f} {:.3f} {:.3f}",
TIP_(title), color[0], color[1], color[2]);
847 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
852 std::string but_label;
854 std::string but_tip_label;
855 std::string op_keymap;
856 std::string prop_keymap;
857 std::string rna_struct;
858 std::string rna_prop;
859 std::string enum_label;
860 std::string enum_tip;
879 enum_label = enum_item ? enum_item->name :
"";
885 enum_label = enum_item ? enum_item->name :
"";
886 const char *description_c = enum_item ? enum_item->description :
nullptr;
887 enum_tip = description_c ? description_c :
"";
899 if (!but_tip_label.empty()) {
910 if (!enum_label.empty()) {
912 fmt::format(
"{}: ", but_label),
924 if (!but_tip.empty()) {
925 if (!enum_label.empty() && enum_label == but_label) {
933 fmt::format(
"{}{}", but_tip, add_period ?
"." :
""),
937 if (but_label.empty()) {
945 TIP_(
"(Shift-Click/Drag to select multiple)"),
952 else if (!enum_label.empty() && but_label.empty()) {
963 if (!enum_tip.empty()) {
969 if (!op_keymap.empty()) {
971 fmt::format(fmt::runtime(
TIP_(
"Shortcut: {}")), op_keymap),
975 !
data->fields.is_empty());
979 if (!prop_keymap.empty()) {
981 fmt::format(fmt::runtime(
TIP_(
"Shortcut: {}")), prop_keymap),
995 fmt::format(fmt::runtime(
TIP_(
"Value: {}")), buf),
1013 fmt::format(fmt::runtime(
TIP_(
"Radians: {}")), value),
1023 fmt::format(fmt::runtime(
TIP_(
"Expression: {}")), buf),
1058 "Warning: the blend-file relative path prefix \"//\" "
1059 "is not supported for this property.",
1075 const std::optional<blender::bke::path_templates::VariableMap> variables =
1083 std::string error_message(
"Path template error(s):");
1098 const char *disabled_msg_orig =
nullptr;
1099 const char *disabled_msg =
nullptr;
1100 bool disabled_msg_free =
false;
1107 call_params.
optype = optype;
1112 disabled_msg =
TIP_(disabled_msg_orig);
1119 if (disabled_msg && disabled_msg[0]) {
1121 fmt::format(fmt::runtime(
TIP_(
"Disabled: {}")), disabled_msg),
1126 if (disabled_msg_free) {
1143 fmt::format(fmt::runtime(
TIP_(
"Python: {}")),
str),
1155 fmt::format(fmt::runtime(
TIP_(
"Python: {}")), rna_struct) :
1156 fmt::format(fmt::runtime(
TIP_(
"Python: {}.{}")), rna_struct, rna_prop),
1160 (
data->fields.size() > 0));
1176 bool has_alpha =
false;
1193 color, has_alpha ?
"RGBA" :
"RGB", has_alpha);
1199 hsva, has_alpha ?
"HSVA" :
"HSV", has_alpha);
1206 image_data.
width = int(
w);
1207 image_data.
height = int(
w / (has_alpha ? 4.0f : 3.0f));
1209 image_data.
border =
true;
1213 if (color[3] == 1.0f) {
1217 image_data.
ibuf, color, 1, 1, image_data.
width, image_data.
height, display);
1224 image_data.
width / 2,
1232 image_data.
ibuf, color, 1, 1, image_data.
width / 2, image_data.
height, display);
1250 data->fields.pop_last();
1258 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
1265 struct GizmoOpActions {
1269 GizmoOpActions gzop_actions[] = {
1284 if (gzop !=
nullptr) {
1288 if (!info.empty()) {
1291 gzop_actions[
i].prefix ? fmt::format(
"{}: {}", gzop_actions[
i].prefix, info) : info,
1306 fmt::format(fmt::runtime(
TIP_(
"Shortcut: {}")), *shortcut_str),
1319 if (gz_prop.
prop !=
nullptr) {
1321 if (info && info[0]) {
1333 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
1342 std::unique_ptr<uiTooltipData> data_uptr,
1343 const float init_position[2],
1344 const rcti *init_rect_overlap)
1359 region->
runtime->type = &type;
1388 int i, fonth, fontw;
1389 for (
i = 0, fontw = 0, fonth = 0;
i <
data->fields.size();
i++) {
1401 font_id =
data->fstyle.uifont_id;
1404 if (!field->
text.empty()) {
1416 fonth += h * info.
lines;
1423 fonth += field->
image->height;
1442 rect_fl.
xmin = init_position[0] - (h * 0.2f) - (pad_x * 0.5f);
1443 rect_fl.
xmax = rect_fl.
xmin + fontw;
1444 rect_fl.
ymax = init_position[1] - (h * 0.2f) - (pad_y * 0.5f);
1445 rect_fl.
ymin = rect_fl.
ymax - fonth;
1455 if (init_rect_overlap !=
nullptr) {
1456 const int pad =
max_ff(1.0f,
U.pixelsize) * 5;
1463 rect_clamp.
xmin = 0;
1464 rect_clamp.
xmax = win_size[0];
1465 rect_clamp.
ymin = 0;
1466 rect_clamp.
ymax = win_size[1];
1471#ifdef USE_ALIGN_Y_CENTER
1485#ifdef USE_ALIGN_Y_CENTER
1486 r.
ymin = cent_overlap_y - (size_y / 2);
1500#ifdef USE_ALIGN_Y_CENTER
1501 r.
ymin = cent_overlap_y - (size_y / 2);
1513 r.
xmin = cent_overlap_x - (size_x / 2);
1521 r.
xmin = cent_overlap_x - (size_x / 2);
1529 for (
int j = 0; j < 4; j++) {
1530 const rcti *r = (&rect.xpos) + j;
1539 int offset_dummy[2];
1545 const int clamp_pad_x = int((5.0f *
UI_SCALE_FAC) + (pad_x * 0.5f));
1546 const int clamp_pad_y = int((7.0f *
UI_SCALE_FAC) + (pad_y * 0.5f));
1548 rect_clamp.
xmin = clamp_pad_x;
1549 rect_clamp.
xmax = win_size[0] - clamp_pad_x;
1550 rect_clamp.
ymin = clamp_pad_y;
1551 rect_clamp.
ymax = win_size[1] - clamp_pad_y;
1552 int offset_dummy[2];
1557#undef USE_ALIGN_Y_CENTER
1566 if (init_rect_overlap !=
nullptr) {
1570 data->bbox.xmin = margin;
1572 data->bbox.ymin = margin;
1601 float init_position[2];
1606 std::unique_ptr<uiTooltipData>
data =
nullptr;
1612 if (
data ==
nullptr) {
1616 if (
data ==
nullptr) {
1620 if (
data ==
nullptr) {
1624 if (
data ==
nullptr) {
1630 if (is_no_overlap) {
1631 rctf overlap_rect_fl;
1639 overlap_rect_fl = but->
rect;
1658 C, std::move(
data), init_position, is_no_overlap ? &init_rect :
nullptr);
1677 if (
data ==
nullptr) {
1686 init_position[0] =
bounds.xmin;
1687 init_position[1] =
bounds.ymin;
1702 std::string image_type;
1705 image_type =
TIP_(
"Single Image");
1708 image_type =
TIP_(
"Image Sequence");
1711 image_type =
TIP_(
"Movie");
1714 image_type =
TIP_(
"Generated");
1717 image_type =
TIP_(
"Viewer");
1720 image_type =
TIP_(
"UDIM Tiles");
1747 fmt::format(fmt::runtime(
TIP_(
"Users: {}")), ima.
id.
us),
1754 image_data.
width = ibuf->
x;
1756 image_data.
ibuf = ibuf;
1757 image_data.
border =
true;
1775 std::string image_type;
1778 image_type =
TIP_(
"Image Sequence");
1781 image_type =
TIP_(
"Movie");
1807 float scale = (200.0f *
UI_SCALE_FAC) /
float(std::max(ibuf->x, ibuf->y));
1812 image_data.
width = ibuf->x;
1813 image_data.
height = ibuf->y;
1814 image_data.
ibuf = ibuf;
1815 image_data.
border =
true;
1854 image_data.
width = ibuf->
x;
1856 image_data.
ibuf = ibuf;
1857 image_data.
border =
false;
1868 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
1873 if (type_id ==
ID_IM) {
1876 else if (type_id ==
ID_MC) {
1879 else if (type_id ==
ID_VF) {
1885 fmt::format(fmt::runtime(
TIP_(
"Choose {} data-block to be assigned to this user")),
1895 fmt::format(fmt::runtime(
TIP_(
"Source library: {}\n{}")),
1907 const ARegion *searchbox_region,
1908 const rcti *item_rect,
1912 if (
data ==
nullptr) {
1917 float init_position[2];
void immDrawPixelsTexScaledFullSize(const IMMDrawPixelsTexState *state, float x, float y, int img_w, int img_h, eGPUTextureFormat gpu_format, bool use_filter, const void *rect, float scaleX, float scaleY, float xzoom, float yzoom, const float color[4])
IMMDrawPixelsTexState immDrawPixelsTexSetup(int builtin)
bScreen * CTX_wm_screen(const bContext *C)
void CTX_wm_operator_poll_msg_clear(bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
SpaceLink * CTX_wm_space_data(const bContext *C)
const char * CTX_wm_operator_poll_msg_get(bContext *C, bool *r_free)
const char * BKE_idtype_idcode_to_name(short idcode)
bool BKE_image_has_anim(Image *image)
ImBuf * BKE_image_preview(Image *ima, short max_size, short *r_width, short *r_height)
Functions and classes for applying templates with variable expressions to filepaths.
std::optional< blender::bke::path_templates::VariableMap > BKE_build_template_variables_for_prop(const bContext *C, PointerRNA *ptr, PropertyRNA *prop)
std::string BKE_path_template_error_to_string(const blender::bke::path_templates::Error &error, blender::StringRef path)
blender::Vector< blender::bke::path_templates::Error > BKE_path_validate_template(blender::StringRef path, const blender::bke::path_templates::VariableMap &template_variables)
bool BKE_path_contains_template_syntax(blender::StringRef path)
bool BKE_vfont_is_builtin(const VFont *vfont)
void BLF_size(int fontid, float size)
int BLF_descender(int fontid) ATTR_WARN_UNUSED_RESULT
#define BLF_DRAW_STR_DUMMY_MAX
void BLF_disable(int fontid, int option)
void BLF_wordwrap(int fontid, int wrap_width, BLFWrapMode mode=BLFWrapMode::Minimal)
blender::ocio::Display ColorManagedDisplay
void BLF_enable(int fontid, int option)
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
int BLF_height_max(int fontid) ATTR_WARN_UNUSED_RESULT
#define BLI_STATIC_ASSERT(a, msg)
File and directory operations.
int BLI_exists(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define LISTBASE_FOREACH(type, var, list)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
void rgb_to_hsv_v(const float rgb[3], float r_hsv[3])
void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4])
void rgba_float_to_uchar(unsigned char r_col[4], const float col_f[4])
void rgb_uchar_to_float(float r_col[3], const unsigned char col_ub[3])
void rgb_float_to_uchar(unsigned char r_col[3], const float col_f[3])
MINLINE float srgb_to_grayscale(const float rgb[3])
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
bool BLI_path_contains(const char *container_path, const char *containee_path) ATTR_NONNULL(1
bool BLI_path_is_rel(const char *path) ATTR_NONNULL(1) ATTR_WARN_UNUSED_RESULT
void void BLI_path_split_dir_part(const char *filepath, char *dir, size_t dir_maxncpy) ATTR_NONNULL(1
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE float BLI_rctf_cent_y(const struct rctf *rct)
BLI_INLINE float BLI_rctf_cent_x(const struct rctf *rct)
void BLI_rcti_rctf_copy_round(struct rcti *dst, const struct rctf *src)
void BLI_rcti_translate(struct rcti *rect, int x, int y)
void BLI_rcti_resize(struct rcti *rect, int x, int y)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE int BLI_rcti_cent_y(const struct rcti *rct)
void BLI_rcti_rctf_copy(struct rcti *dst, const struct rctf *src)
bool BLI_rcti_inside_rcti(const rcti *rct_a, const rcti *rct_b)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
bool BLI_rcti_clamp(struct rcti *rect, const struct rcti *rect_bounds, int r_xy[2])
BLI_INLINE int BLI_rcti_cent_x(const struct rcti *rct)
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
#define SNPRINTF(dst, format,...)
char * STRNCPY(char(&dst)[N], const char *src)
#define CTX_IFACE_(context, msgid)
#define BLT_I18NCONTEXT_OPERATOR_DEFAULT
#define CTX_TIP_(context, msgid)
bool bool BPY_run_string_as_intptr(bContext *C, const char *imports[], const char *expr, BPy_RunErrInfo *err_info, intptr_t *r_value) ATTR_NONNULL(1
bool bool bool BPY_run_string_as_string_and_len(bContext *C, const char *imports[], const char *expr, BPy_RunErrInfo *err_info, char **r_value, size_t *r_value_len) ATTR_NONNULL(1
bool bool bool bool BPY_run_string_as_string(bContext *C, const char *imports[], const char *expr, BPy_RunErrInfo *err_info, char **r_value) ATTR_NONNULL(1
void ED_region_floating_init(ARegion *region)
void ED_region_tag_redraw(ARegion *region)
@ GPU_SHADER_3D_UNIFORM_COLOR
@ GPU_SHADER_3D_IMAGE_COLOR
@ GPU_BLEND_ALPHA_PREMULT
void GPU_blend(eGPUBlend blend)
ImBuf * IMB_dupImBuf(const ImBuf *ibuf1)
void IMB_byte_from_float(ImBuf *ibuf)
void IMB_freeImBuf(ImBuf *ibuf)
ImBuf * IMB_allocImBuf(unsigned int x, unsigned int y, unsigned char planes, unsigned int flags)
bool IMB_scale(ImBuf *ibuf, unsigned int newx, unsigned int newy, IMBScaleFilter filter, bool threaded=true)
void IMB_rectfill_area(ImBuf *ibuf, const float col[4], int x1, int y1, int x2, int y2, const ColorManagedDisplay *display)
ImBuf * IMB_font_preview(const char *filepath, unsigned int width, const float color[4])
Read Guarded memory(de)allocation.
@ PROP_PATH_SUPPORTS_BLEND_RELATIVE
@ PROP_PATH_SUPPORTS_TEMPLATES
#define UI_ALPHA_CHECKER_LIGHT
std::string UI_but_string_get_property_keymap(bContext &C, uiBut &but)
bool UI_but_has_quick_tooltip(const uiBut *but)
int UI_but_unit_type_get(const uiBut *but)
#define UI_ALPHA_CHECKER_DARK
std::optional< EnumPropertyItem > UI_but_rna_enum_item_get(bContext &C, uiBut &but)
PointerRNA * UI_but_extra_operator_icon_opptr_get(const uiButExtraOpIcon *extra_icon)
std::string UI_but_string_get_operator_keymap(bContext &C, uiBut &but)
std::string UI_but_string_get_label(uiBut &but)
const uiStyle * UI_style_get()
void UI_fontstyle_set(const uiFontStyle *fs)
PointerRNA * UI_but_operator_ptr_ensure(uiBut *but)
std::string UI_but_string_get_rna_property_identifier(const uiBut &but)
std::string UI_but_extra_icon_string_get_tooltip(bContext &C, const uiButExtraOpIcon &extra_icon)
wmOperatorType * UI_but_extra_operator_icon_optype_get(const uiButExtraOpIcon *extra_icon)
void UI_fontstyle_draw(const uiFontStyle *fs, const rcti *rect, const char *str, size_t str_len, const uchar col[4], const uiFontStyleDraw_Params *fs_params)
std::string UI_but_extra_icon_string_get_label(const uiButExtraOpIcon &extra_icon)
std::string UI_but_string_get_tooltip_label(const uiBut &but)
std::string UI_but_string_get_tooltip(bContext &C, uiBut &but)
std::string UI_but_string_get_rna_struct_identifier(const uiBut &but)
@ UI_BLOCK_SHOW_SHORTCUT_ALWAYS
std::string UI_but_extra_icon_string_get_operator_keymap(const bContext &C, const uiButExtraOpIcon &extra_icon)
bool UI_but_is_tool(const uiBut *but)
void UI_GetThemeColor3fv(int colorid, float col[3])
void UI_GetThemeColor4fv(int colorid, float col[4])
@ WM_OP_INVOKE_REGION_WIN
int pad[32 - sizeof(int)]
BMesh const char void * data
static btDbvtVolume bounds(btDbvtNode **leaves, int count)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
static constexpr int64_t not_found
constexpr int64_t find(char c, int64_t pos=0) const
constexpr bool is_empty() const
constexpr StringRef substr(int64_t start, int64_t size) const
constexpr bool startswith(StringRef prefix) const
constexpr int64_t size() const
constexpr const char & back() const
constexpr const char * c_str() const
#define ID_IS_LINKED(_id)
#define ID_BLEND_PATH_FROM_GLOBAL(_id)
const ColorManagedDisplay * ui_block_cm_display_get(uiBlock *block)
bool ui_but_context_poll_operator_ex(bContext *C, const uiBut *but, const wmOperatorCallParams *optype_params)
void ui_but_string_get(uiBut *but, char *str, const size_t str_maxncpy)
void ui_block_cm_to_display_space_v3(uiBlock *block, float pixel[3])
void ui_block_to_window_rctf(const ARegion *region, const uiBlock *block, rctf *rct_dst, const rctf *rct_src)
void ui_but_v3_get(uiBut *but, float vec[3])
void ui_block_to_window_fl(const ARegion *region, const uiBlock *block, float *x, float *y)
bool ui_but_anim_expression_get(uiBut *but, char *str, size_t str_maxncpy)
void ui_draw_tooltip_background(const uiStyle *style, uiBlock *block, const rcti *rect)
bool ui_block_is_pie_menu(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
const uiWidgetColors * ui_tooltip_get_theme()
bool ui_block_is_menu(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
bool ui_but_is_color_gamma(uiBut *but)
ARegion * ui_region_temp_add(bScreen *screen)
void ui_region_temp_remove(bContext *C, bScreen *screen, ARegion *region)
void MEM_freeN(void *vmemh)
static void error(const char *str)
ImBuf * MOV_decode_preview_frame(MovieReader *anim)
int MOV_get_duration_frames(MovieReader *anim, IMB_Timecode_Type tc)
int MOV_get_image_width(const MovieReader *anim)
int MOV_get_image_height(const MovieReader *anim)
StringRefNull essentials_directory_path()
VecBase< float, 4 > float4
VecBase< int32_t, 2 > int2
float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_property_ui_description(const PropertyRNA *prop)
bool RNA_property_array_check(PropertyRNA *prop)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
float RNA_property_float_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
PropertyType RNA_property_type(PropertyRNA *prop)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
int RNA_property_flag(PropertyRNA *prop)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
std::string RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
std::optional< std::string > RNA_path_full_property_py_ex(const PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback)
std::optional< std::string > RNA_path_full_struct_py(const PointerRNA *ptr)
void(* draw)(const bContext *C, ARegion *region)
ARegionRuntimeHandle * runtime
ColorManagedColorspaceSettings colorspace_settings
struct MovieReader * anim
wmOperatorCallContext opcontext
const char * disabled_info
uiButToolTipFunc tip_func
uiButToolTipCustomFunc tip_custom_func
wmGizmoFnScreenBoundsGet screen_bounds_get
blender::Vector< wmGizmoProperty, 0 > target_properties
wmOperatorCallContext opcontext
struct wmEvent * eventstate
static const char hex[17]
wmGizmoOpElem * WM_gizmo_operator_get(wmGizmo *gz, int part_index)
std::optional< std::string > WM_key_event_operator_string(const bContext *C, const char *opname, wmOperatorCallContext opcontext, IDProperty *properties, const bool is_strict)
std::optional< std::string > WM_keymap_item_to_string(const wmKeyMapItem *kmi, const bool compact)
std::string WM_operatortype_description_or_name(bContext *C, wmOperatorType *ot, PointerRNA *properties)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
std::string WM_operator_pystring_ex(bContext *C, wmOperator *op, const bool all_args, const bool macro_args, wmOperatorType *ot, PointerRNA *opptr)
void WM_operator_properties_create_ptr(PointerRNA *ptr, wmOperatorType *ot)
void WM_operator_properties_free(PointerRNA *ptr)
void WM_operator_properties_sanitize(PointerRNA *ptr, const bool no_context)
std::string WM_operator_pystring_abbreviate(std::string str, int str_len_max)
void wmOrtho2_region_pixelspace(const ARegion *region)
blender::int2 WM_window_native_pixel_size(const wmWindow *win)