26#include <fmt/format.h>
73#include "RNA_prototypes.hh"
88#define UI_TIP_SPACER 0.3f
89#define UI_TIP_PADDING_X 1.95f
90#define UI_TIP_PADDING_Y 1.28f
92#define UI_TIP_MAXWIDTH 600
109 std::optional<uiTooltipImage>
image;
137 field.
text = std::move(text);
139 data.fields.append(std::move(field));
146 field.
image = image_data;
148 data.fields.append(std::move(field));
158 dest[0] = (1.0f - fac) * dest[0] + (fac * source[0]);
159 dest[1] = (1.0f - fac) * dest[1] + (fac * source[1]);
160 dest[2] = (1.0f - fac) * dest[2] + (fac * source[2]);
172 uchar drawcol[4] = {0, 0, 0, 255};
182 float background_color[3];
205 active_color[0] = 0.4f;
206 active_color[1] = 0.55f;
207 active_color[2] = 0.75f;
226 bbox.
xmin += 0.5f * pad_x;
227 bbox.
ymax -= 0.5f * pad_y;
230 for (
int i = 0;
i <
data->fields.size();
i++) {
243 &
data->fstyle, &bbox, field->
text.c_str(), field->
text.size(), drawcol, &fs_params);
277 &fstyle_mono, &bbox, field->
text.c_str(), field->
text.size(), drawcol, &fs_params);
287 float(bbox.
ymax + field->
image->height));
292 const float color1[4] = {checker_dark, checker_dark, checker_dark, 1.0f};
293 const float color2[4] = {checker_light, checker_light, checker_light, 1.0f};
295 float(bbox.
ymax +
U.pixelsize),
309 field->
image->ibuf->x,
310 field->
image->ibuf->y,
311 blender::gpu::TextureFormat::UNORM_8_8_8_8,
313 field->
image->ibuf->byte_buffer.data,
316 float(field->
image->width) /
float(field->
image->ibuf->x),
317 float(field->
image->height) /
float(field->
image->ibuf->y),
318 (field->
image->text_color) ? main_color :
nullptr);
320 if (field->
image->border) {
324 format,
"pos", blender::gpu::VertAttrType::SFLOAT_32_32);
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()) {
634 if (shortcut_toolbar) {
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_quick_tip, has_valid_context, has_valid_context_error);
808 const int max_title_len,
809 const bool show_alpha,
810 const bool show_hex =
false)
812 const int align = max_title_len - title.
size();
818 return fmt::format(
"{}:{: <{}} #{:02X}{:02X}{:02X}{:02X}",
828 "{}:{: <{}} #{:02X}{:02X}{:02X}", title,
"", align,
int(
hex[0]),
int(
hex[1]),
int(
hex[2]));
832 return fmt::format(
"{}:{: <{}} {:.3f}", title,
"", align, color[3]);
836 "{}:{: <{}} {:.3f} {:.3f} {:.3f}", title,
"", align, color[0], color[1], color[2]);
841 const bool has_alpha,
861 hsv[3] = srgb_color[3];
867 const int max_title_len = std::max(
868 {hex_title.
size(), rgb_title.
size(), hsv_title.
size(), alpha_title.
size()});
871 srgb_color, hex_title, max_title_len, has_alpha,
true);
873 display_color, rgb_title, max_title_len,
false);
876 scene_linear_color, alpha_title, max_title_len,
true);
884 image_data.
width = int(
w);
885 image_data.
height = int(
w / (has_alpha ? 4.0f : 3.0f));
890 if (scene_linear_color[3] == 1.0f) {
894 image_data.
ibuf, scene_linear_color, 1, 1, image_data.
width, image_data.
height);
901 image_data.
width / 2,
906 scene_linear_color[3] = 1.0f;
908 image_data.
ibuf, scene_linear_color, 1, 1, image_data.
width / 2, image_data.
height);
938 if (optype && !rnaprop) {
950 fmt::format(fmt::runtime(
TIP_(
"Python: {}")),
str),
957 if (!optype && !rna_struct.empty()) {
962 fmt::format(fmt::runtime(
TIP_(
"Python: {}")), rna_struct) :
963 fmt::format(fmt::runtime(
TIP_(
"Python: {}.{}")), rna_struct, rna_prop),
967 (
data.fields.size() > 0));
988 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
993 std::string but_label;
995 std::string but_tip_label;
996 std::string op_keymap;
997 std::string prop_keymap;
998 std::string rna_struct;
999 std::string rna_prop;
1000 std::string enum_label;
1001 std::string enum_tip;
1020 enum_label = enum_item ? enum_item->name :
"";
1026 enum_label = enum_item ? enum_item->name :
"";
1027 const char *description_c = enum_item ? enum_item->description :
nullptr;
1028 enum_tip = description_c ? description_c :
"";
1040 if (!but_tip_label.empty()) {
1042 if (!is_quick_tip) {
1053 if (!enum_label.empty()) {
1055 fmt::format(
"{}: ", but_label),
1067 if (!but_tip.empty()) {
1068 if (!enum_label.empty() && enum_label == but_label) {
1076 fmt::format(
"{}{}", but_tip, add_period ?
"." :
""),
1080 if (but_label.empty()) {
1088 TIP_(
"(Shift-Click/Drag to select multiple)"),
1095 else if (!enum_label.empty() && but_label.empty()) {
1106 if (!enum_tip.empty()) {
1112 if (!op_keymap.empty()) {
1114 fmt::format(fmt::runtime(
TIP_(
"Shortcut: {}")), op_keymap),
1118 !
data->fields.is_empty());
1122 if (!prop_keymap.empty()) {
1124 fmt::format(fmt::runtime(
TIP_(
"Shortcut: {}")), prop_keymap),
1138 fmt::format(fmt::runtime(
TIP_(
"Value: {}")), buf),
1156 fmt::format(fmt::runtime(
TIP_(
"Radians: {}")), value),
1166 fmt::format(fmt::runtime(
TIP_(
"Expression: {}")), buf),
1201 "Warning: the blend-file relative path prefix \"//\" "
1202 "is not supported for this property.",
1218 const std::optional<blender::bke::path_templates::VariableMap> variables =
1226 std::string error_message(
"Path template error(s):");
1241 const char *disabled_msg_orig =
nullptr;
1242 const char *disabled_msg =
nullptr;
1243 bool disabled_msg_free =
false;
1251 call_params.
optype = optype;
1256 disabled_msg =
TIP_(disabled_msg_orig);
1263 if (disabled_msg && disabled_msg[0]) {
1265 fmt::format(fmt::runtime(
TIP_(
"Disabled: {}")), disabled_msg),
1270 if (disabled_msg_free) {
1285 bool has_alpha =
false;
1301 data->fields.pop_last();
1309 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
1316 struct GizmoOpActions {
1320 GizmoOpActions gzop_actions[] = {
1335 if (gzop !=
nullptr) {
1339 if (!info.empty()) {
1342 gzop_actions[
i].prefix ? fmt::format(
"{}: {}", gzop_actions[
i].prefix, info) : info,
1357 fmt::format(fmt::runtime(
TIP_(
"Shortcut: {}")), *shortcut_str),
1370 if (gz_prop.
prop !=
nullptr) {
1372 if (info && info[0]) {
1384 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
1393 std::unique_ptr<uiTooltipData> data_uptr,
1394 const float init_position[2],
1395 const rcti *init_rect_overlap)
1410 region->
runtime->type = &type;
1439 int i, fonth, fontw;
1440 for (
i = 0, fontw = 0, fonth = 0;
i <
data->fields.size();
i++) {
1452 font_id =
data->fstyle.uifont_id;
1455 if (!field->
text.empty()) {
1467 fonth += h * info.
lines;
1474 fonth += field->
image->height;
1493 rect_fl.
xmin = init_position[0] - (h * 0.2f) - (pad_x * 0.5f);
1494 rect_fl.
xmax = rect_fl.
xmin + fontw;
1495 rect_fl.
ymax = init_position[1] - (h * 0.2f) - (pad_y * 0.5f);
1496 rect_fl.
ymin = rect_fl.
ymax - fonth;
1506 if (init_rect_overlap !=
nullptr) {
1507 const int pad =
max_ff(1.0f,
U.pixelsize) * 5;
1514 rect_clamp.
xmin = pad_x +
pad;
1515 rect_clamp.
xmax = win_size[0] - pad_x -
pad;
1516 rect_clamp.
ymin = pad_y +
pad;
1517 rect_clamp.
ymax = win_size[1] - pad_y -
pad;
1522#ifdef USE_ALIGN_Y_CENTER
1536#ifdef USE_ALIGN_Y_CENTER
1537 r.
ymin = cent_overlap_y - (size_y / 2);
1551#ifdef USE_ALIGN_Y_CENTER
1552 r.
ymin = cent_overlap_y - (size_y / 2);
1564 r.
xmin = cent_overlap_x - (size_x / 2);
1572 r.
xmin = cent_overlap_x - (size_x / 2);
1580 for (
int j = 0; j < 4; j++) {
1581 const rcti *r = (&rect.xpos) + j;
1590 int offset_dummy[2];
1596 const int clamp_pad_x = int((5.0f *
UI_SCALE_FAC) + (pad_x * 0.5f));
1597 const int clamp_pad_y = int((7.0f *
UI_SCALE_FAC) + (pad_y * 0.5f));
1599 rect_clamp.
xmin = clamp_pad_x;
1600 rect_clamp.
xmax = win_size[0] - clamp_pad_x;
1601 rect_clamp.
ymin = clamp_pad_y;
1602 rect_clamp.
ymax = win_size[1] - clamp_pad_y;
1603 int offset_dummy[2];
1608#undef USE_ALIGN_Y_CENTER
1617 if (init_rect_overlap !=
nullptr) {
1621 data->bbox.xmin = margin;
1623 data->bbox.ymin = margin;
1652 float init_position[2];
1657 std::unique_ptr<uiTooltipData>
data =
nullptr;
1663 if (
data ==
nullptr) {
1667 if (
data ==
nullptr) {
1671 if (
data ==
nullptr) {
1675 if (
data ==
nullptr) {
1681 if (is_no_overlap) {
1682 rctf overlap_rect_fl;
1690 overlap_rect_fl = but->
rect;
1709 C, std::move(
data), init_position, is_no_overlap ? &init_rect :
nullptr);
1728 if (
data ==
nullptr) {
1737 init_position[0] =
bounds.xmin;
1738 init_position[1] =
bounds.ymin;
1753 std::string image_type;
1756 image_type =
TIP_(
"Single Image");
1759 image_type =
TIP_(
"Image Sequence");
1762 image_type =
TIP_(
"Movie");
1765 image_type =
TIP_(
"Generated");
1768 image_type =
TIP_(
"Viewer");
1771 image_type =
TIP_(
"UDIM Tiles");
1798 fmt::format(fmt::runtime(
TIP_(
"Users: {}")), ima.
id.
us),
1805 image_data.
width = ibuf->
x;
1807 image_data.
ibuf = ibuf;
1808 image_data.
border =
true;
1826 std::string image_type;
1829 image_type =
TIP_(
"Image Sequence");
1832 image_type =
TIP_(
"Movie");
1858 float scale = (200.0f *
UI_SCALE_FAC) /
float(std::max(ibuf->x, ibuf->y));
1863 image_data.
width = ibuf->x;
1864 image_data.
height = ibuf->y;
1865 image_data.
ibuf = ibuf;
1866 image_data.
border =
true;
1905 image_data.
width = ibuf->
x;
1907 image_data.
ibuf = ibuf;
1908 image_data.
border =
false;
1919 std::unique_ptr<uiTooltipData>
data = std::make_unique<uiTooltipData>();
1924 if (type_id ==
ID_IM) {
1927 else if (type_id ==
ID_MC) {
1930 else if (type_id ==
ID_VF) {
1936 fmt::format(fmt::runtime(
TIP_(
"Choose {} data-block to be assigned to this user")),
1946 fmt::format(fmt::runtime(
TIP_(
"Source library: {}\n{}")),
1958 const ARegion *searchbox_region,
1959 const rcti *item_rect,
1963 if (
data ==
nullptr) {
1968 float init_position[2];
void immDrawPixelsTexScaledFullSize(const IMMDrawPixelsTexState *state, float x, float y, int img_w, int img_h, blender::gpu::TextureFormat 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 evaluating template expressions in 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
void BLF_enable(int fontid, FontFlags flag)
#define BLF_DRAW_STR_DUMMY_MAX
void BLF_wordwrap(int fontid, int wrap_width, BLFWrapMode mode=BLFWrapMode::Minimal)
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_disable(int fontid, FontFlags flag)
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])
MINLINE void rgb_uchar_to_float(float r_col[3], const unsigned char col_ub[3])
MINLINE void rgba_float_to_uchar(unsigned char r_col[4], const float col_f[4])
MINLINE void rgb_float_to_uchar(unsigned char r_col[3], const float col_f[3])
MINLINE void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4])
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_pad(struct rcti *rect, int pad_x, int pad_y)
void BLI_rcti_translate(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
char * STRNCPY(char(&dst)[N], const char *src)
#define SNPRINTF_UTF8(dst, format,...)
#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
#define ID_IS_LINKED(_id)
#define ID_BLEND_PATH_FROM_GLOBAL(_id)
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(GPUBlend blend)
BLI_INLINE void IMB_colormanagement_srgb_to_scene_linear_v3(float scene_linear[3], const float srgb[3])
@ DISPLAY_SPACE_COLOR_INSPECTION
void IMB_colormanagement_scene_linear_to_display_v3(float pixel[3], const ColorManagedDisplay *display, const ColorManagedDisplaySpace display_space=DISPLAY_SPACE_DRAW)
BLI_INLINE void IMB_colormanagement_scene_linear_to_srgb_v3(float srgb[3], const float scene_linear[3])
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)
void IMB_rectfill_area(ImBuf *ibuf, const float scene_linear_color[4], int x1, int y1, int x2, int y2)
bool IMB_scale(ImBuf *ibuf, unsigned int newx, unsigned int newy, IMBScaleFilter filter, bool threaded=true)
ImBuf * IMB_font_preview(const char *filepath, unsigned int width, const float color[4], const char *sample_text=nullptr)
Read Guarded memory(de)allocation.
@ PROP_PATH_SUPPORTS_BLEND_RELATIVE
@ PROP_PATH_SUPPORTS_TEMPLATES
#define UI_ALPHA_CHECKER_LIGHT
@ UI_BLOCK_SHOW_SHORTCUT_ALWAYS
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)
const ColorManagedDisplay * UI_but_cm_display_get(uiBut &but)
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)
blender::ocio::Display ColorManagedDisplay
void UI_GetThemeColor3fv(int colorid, float col[3])
void UI_GetThemeColor4fv(int colorid, float col[4])
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
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_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)
int RNA_property_flag(PropertyRNA *prop)
std::string RNA_string_get(PointerRNA *ptr, const char *name)
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
const char * disabled_info
blender::wm::OpCallContext opcontext
uiButToolTipFunc tip_func
uiButToolTipCustomFunc tip_custom_func
wmGizmoFnScreenBoundsGet screen_bounds_get
blender::Vector< wmGizmoProperty, 0 > target_properties
blender::wm::OpCallContext 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, blender::wm::OpCallContext 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)