26#include <fmt/format.h>
64#include "RNA_prototypes.hh"
80#define UI_TIP_SPACER 0.3f
81#define UI_TIP_PADDING int(1.3f * UI_UNIT_Y)
82#define UI_TIP_MAXWIDTH 600
83#define UI_TIP_MAXIMAGEWIDTH 500
84#define UI_TIP_MAXIMAGEHEIGHT 300
85#define UI_TIP_STR_MAX 1024
102 std::optional<uiTooltipImage>
image;
129 field.format.color_id = color_id;
130 field.text = std::move(text);
131 field.text_suffix = std::move(suffix);
132 data.fields.append(std::move(field));
139 field.image = image_data;
141 data.fields.append(std::move(field));
148static void rgb_tint(
float col[3],
float h,
float h_strength,
float v,
float v_strength)
150 float col_hsv_from[3];
156 col_hsv_to[1] = h_strength;
157 col_hsv_to[2] = (col_hsv_from[2] * (1.0f - v_strength)) + (
v * v_strength);
167 rcti bbox = data->bbox;
169 uchar drawcol[4] = {0, 0, 0, 255};
179 float background_color[3];
203 rgb_tint(value_color, 0.0f, 0.0f, tone_bg, 0.2f);
204 rgb_tint(active_color, 0.6f, 0.2f, tone_bg, 0.2f);
205 rgb_tint(normal_color, 0.0f, 0.0f, tone_bg, 0.4f);
206 rgb_tint(python_color, 0.0f, 0.0f, tone_bg, 0.5f);
207 rgb_tint(alert_color, 0.0f, 0.8f, tone_bg, 0.1f);
213 bbox.
xmin += 0.5f * pad_px;
214 bbox.
ymax -= 0.25f * pad_px;
216 for (
int i = 0; i < data->fields.size(); i++) {
219 bbox.
ymin = bbox.
ymax - (data->lineh * field->geom.lines);
223 fs_params.word_wrap =
true;
229 &data->fstyle, &bbox, field->text.c_str(), field->text.size(), drawcol, &fs_params);
232 if (!field->text_suffix.empty()) {
233 const float xofs = field->geom.x_pos;
234 const float yofs = data->lineh * (field->geom.lines - 1);
241 field->text_suffix.c_str(),
242 field->text_suffix.size(),
254 fs_params.word_wrap =
true;
263 &fstyle_mono, &bbox, field->text.c_str(), field->text.size(), drawcol, &fs_params);
267 bbox.
ymax -= field->image->height;
272 float(bbox.
xmin + field->image->width),
273 float(bbox.
ymax + field->image->height));
278 const float color1[4] = {checker_dark, checker_dark, checker_dark, 1.0f};
279 const float color2[4] = {checker_light, checker_light, checker_light, 1.0f};
281 float(bbox.
ymax +
U.pixelsize),
282 float(bbox.
xmin + field->image->width),
283 float(bbox.
ymax + field->image->height),
295 field->image->ibuf->x,
296 field->image->ibuf->y,
299 field->image->ibuf->byte_buffer.data,
302 float(field->image->width) /
float(field->image->ibuf->x),
303 float(field->image->height) /
float(field->image->ibuf->y),
304 (field->image->text_color) ? main_color :
nullptr);
306 if (field->image->border) {
311 float border_color[4] = {1.0f, 1.0f, 1.0f, 0.15f};
315 border_color[0] = 0.0f;
316 border_color[1] = 0.0f;
317 border_color[2] = 0.0f;
323 float(bbox.
xmin + field->image->width),
324 float(bbox.
ymax + field->image->height));
336 fs_params.word_wrap =
true;
342 &data->fstyle, &bbox, field->text.c_str(), field->text.size(), drawcol, &fs_params);
345 bbox.
ymax -= data->lineh * field->geom.lines;
355 std::unique_ptr<uiTooltipData> data{
static_cast<uiTooltipData *
>(region->regiondata)};
357 if (field.image && field.image->ibuf) {
361 region->regiondata =
nullptr;
390 const int fields_len_init = data.fields.size();
408 fmt::format(
TIP_(
"Shortcut: {}"), kmi_str),
421 return (fields_len_init != data.fields.size());
433 if (
ELEM(tip.
back(),
'.',
'!',
'?')) {
452 if (but->
optype ==
nullptr) {
457 if (but->
opptr ==
nullptr) {
478 bool has_valid_context =
true;
479 const char *has_valid_context_error =
IFACE_(
"Unsupported context");
482 if (area ==
nullptr) {
483 has_valid_context =
false;
489 if (space_type_prop != area->spacetype) {
490 has_valid_context =
false;
497 std::unique_ptr<uiTooltipData> data = std::make_unique<uiTooltipData>();
505 const char *expr_imports[] = {
"bpy",
"bl_ui",
nullptr};
508 "bl_ui.space_toolsystem_common.item_from_id("
510 "bpy.context.space_data.type, "
513 char *expr_result =
nullptr;
514 bool is_error =
false;
516 if (has_valid_context ==
false) {
517 expr_result =
BLI_strdup(has_valid_context_error);
520 if (
STREQ(expr_result,
"")) {
522 expr_result =
nullptr;
532 if (expr_result !=
nullptr) {
536 if (label_str == expr_result) {
537 label_str =
IFACE_(expr_result);
540 if (label_str != expr_result) {
556 if (is_label ==
false) {
557 const char *expr_imports[] = {
"bpy",
"bl_ui",
nullptr};
560 "bl_ui.space_toolsystem_common.description_from_id("
562 "bpy.context.space_data.type, "
566 char *expr_result =
nullptr;
567 bool is_error =
false;
569 if (has_valid_context ==
false) {
570 expr_result =
BLI_strdup(has_valid_context_error);
573 if (
STREQ(expr_result,
"")) {
575 expr_result =
nullptr;
585 if (expr_result !=
nullptr) {
588 fmt::format(
"{}{}", expr_result, add_period ?
"." :
""),
598 const bool show_shortcut = is_label ==
false &&
612 if (shortcut.empty()) {
619 const char *expr_imports[] = {
620 "bpy",
"bl_keymap_utils",
"bl_keymap_utils.keymap_from_toolbar",
nullptr};
623 "bl_keymap_utils.keymap_from_toolbar.generate("
625 "bpy.context.space_data.type), "
626 "'as_pointer', lambda: 0)()");
630 if (has_valid_context ==
false) {
631 shortcut = has_valid_context_error;
634 if (expr_result != 0) {
640 if (
STREQ(tool_id, tool_id_test)) {
642 shortcut = fmt::format(
"{}, {}", *shortcut_toolbar, kmi_str);
655 if (!shortcut.empty()) {
657 fmt::format(
TIP_(
"Shortcut: {}"), shortcut),
677 char *expr_result =
nullptr;
678 size_t expr_result_len;
681 const char *expr_imports[] = {
"bpy",
"bl_ui",
nullptr};
685 "item.idname for item in bl_ui.space_toolsystem_common.item_group_from_id("
687 "bpy.context.space_data.type, '%s', coerce=True) "
688 "if item is not None)",
691 if (has_valid_context ==
false) {
695 C, expr_imports, expr,
nullptr, &expr_result, &expr_result_len))
701 if (expr_result !=
nullptr) {
706 std::optional<std::string> shortcut;
708 const char *item_end = expr_result + expr_result_len;
709 const char *item_step = expr_result;
711 while (item_step < item_end) {
721 item_step += strlen(item_step) + 1;
729 fmt::format(
TIP_(
"Shortcut Cycle: {}"), *shortcut),
742 fmt::format(
TIP_(
"Python: {}"),
str),
753 const char *expr_imports[] = {
"bpy",
"bl_ui",
nullptr};
757 "bl_ui.space_toolsystem_common.keymap_from_id("
759 "bpy.context.space_data.type, "
761 "'as_pointer', lambda: 0)()",
766 if (has_valid_context ==
false) {
770 if (expr_result != 0) {
774 ui_tooltip_data_append_from_keymap(C, *data, keymap);
782 UNUSED_VARS(is_label, has_valid_context, has_valid_context_error);
785 return data->fields.is_empty() ? nullptr : std::move(data);
797 std::unique_ptr<uiTooltipData> data = std::make_unique<uiTooltipData>();
802 std::string but_label;
804 std::string but_tip_label;
805 std::string op_keymap;
806 std::string prop_keymap;
807 std::string rna_struct;
808 std::string rna_prop;
809 std::string enum_label;
810 std::string enum_tip;
829 enum_label = enum_item ? enum_item->name :
"";
835 enum_label = enum_item ? enum_item->name :
"";
836 const char *description_c = enum_item ? enum_item->description :
nullptr;
837 enum_tip = description_c ? description_c :
"";
849 if (!but_tip_label.empty()) {
863 if (!but_tip.empty()) {
864 if (!enum_label.empty()) {
871 fmt::format(
"{}{}", but_tip, add_period ?
"." :
""),
880 TIP_(
"(Shift-Click/Drag to select multiple)"),
887 else if (!enum_label.empty() && but_label.empty()) {
894 return data->fields.is_empty() ? nullptr : std::move(data);
898 if (!enum_tip.empty()) {
904 if (!op_keymap.empty()) {
906 fmt::format(
TIP_(
"Shortcut: {}"), op_keymap),
914 if (!prop_keymap.empty()) {
916 fmt::format(
TIP_(
"Shortcut: {}"), prop_keymap),
930 fmt::format(
TIP_(
"Value: {}"), buf),
948 fmt::format(
TIP_(
"Radians: {}"), value),
958 fmt::format(
TIP_(
"Expression: {}"), buf),
969 fmt::format(
TIP_(
"Library: {}"), id->lib->filepath),
989 fmt::format(
TIP_(
"Python: {}"),
str),
999 const char *disabled_msg_orig =
nullptr;
1000 const char *disabled_msg =
nullptr;
1001 bool disabled_msg_free =
false;
1008 call_params.
optype = optype;
1009 call_params.opcontext = opcontext;
1013 disabled_msg =
TIP_(disabled_msg_orig);
1020 if (disabled_msg && disabled_msg[0]) {
1022 fmt::format(
TIP_(
"Disabled: {}"), disabled_msg),
1027 if (disabled_msg_free) {
1036 fmt::format(
TIP_(
"Python: {}"), rna_struct) :
1037 fmt::format(
TIP_(
"Python: {}.{}"), rna_struct, rna_prop),
1041 (data->fields.size() > 0));
1069 uchar rgb_hex_uchar[4];
1071 const std::string hex_st = fmt::format(
"Hex: #{:02X}{:02X}{:02X}{:02X}",
1072 int(rgb_hex_uchar[0]),
1073 int(rgb_hex_uchar[1]),
1074 int(rgb_hex_uchar[2]),
1075 int(rgb_hex_uchar[3]));
1077 const std::string rgba_st = fmt::format(
"{}: {:.3f} {:.3f} {:.3f} {:.3f}",
1086 const std::string hsva_st = fmt::format(
1087 "{}: {:.3f} {:.3f} {:.3f} {:.3f}",
TIP_(
"HSVA"), hsva[0], hsva[1], hsva[2], hsva[3]);
1097 image_data.
border =
true;
1101 if (color[3] == 1.0f) {
1105 image_data.
ibuf, color, 1, 1, image_data.
width, image_data.
height, display);
1112 image_data.
width / 2,
1120 image_data.
ibuf, color, 1, 1, image_data.
width / 2, image_data.
height, display);
1136 return data->fields.is_empty() ? nullptr : std::move(data);
1141 std::unique_ptr<uiTooltipData> data = std::make_unique<uiTooltipData>();
1148 struct GizmoOpActions {
1152 GizmoOpActions gzop_actions[] = {
1163 for (
int i = 0; i <
ARRAY_SIZE(gzop_actions); i++) {
1167 if (gzop !=
nullptr) {
1171 if (!info.empty()) {
1174 gzop_actions[i].prefix ? fmt::format(
"{}: {}", gzop_actions[i].prefix, info) : info,
1188 fmt::format(
TIP_(
"Shortcut: {}"), *shortcut_str),
1205 if (gz_prop->
prop !=
nullptr) {
1207 if (info && info[0]) {
1214 return data->fields.is_empty() ? nullptr : std::move(data);
1220 std::unique_ptr<uiTooltipData> data = std::make_unique<uiTooltipData>();
1225 return data->fields.is_empty() ? nullptr : std::move(data);
1229 std::unique_ptr<uiTooltipData> data_uptr,
1230 const float init_position[2],
1231 const rcti *init_rect_overlap)
1248 region->type = &type;
1251 region->regiondata = data_uptr.release();
1263 BLF_enable(data->fstyle.uifont_id, font_flag);
1265 BLF_wordwrap(data->fstyle.uifont_id, data->wrap_width);
1269#define TIP_BORDER_X (16.0f)
1270#define TIP_BORDER_Y (6.0f)
1274 int i, fonth, fontw;
1275 for (i = 0, fontw = 0, fonth = 0; i < data->fields.size(); i++) {
1287 font_id = data->fstyle.uifont_id;
1290 if (!field->text.empty()) {
1291 w =
BLF_width(font_id, field->text.c_str(), field->text.size(), &info);
1295 if (!field->text_suffix.empty()) {
1298 w, x_pos +
BLF_width(font_id, field->text_suffix.c_str(), field->text_suffix.size()));
1301 fonth += h * info.
lines;
1308 fonth += field->image->height;
1309 w =
max_ii(
w, field->image->width);
1314 field->geom.lines = info.
lines;
1315 field->geom.x_pos = x_pos;
1328 rect_fl.
xmax = rect_fl.
xmin + fontw + pad_px;
1343 if (init_rect_overlap !=
nullptr) {
1344 const int pad =
max_ff(1.0f,
U.pixelsize) * 5;
1351 rect_clamp.
xmin = 0;
1352 rect_clamp.
xmax = win_size[0];
1353 rect_clamp.
ymin = 0;
1354 rect_clamp.
ymax = win_size[1];
1359#ifdef USE_ALIGN_Y_CENTER
1373#ifdef USE_ALIGN_Y_CENTER
1374 r.
ymin = cent_overlap_y - (size_y / 2);
1388#ifdef USE_ALIGN_Y_CENTER
1389 r.
ymin = cent_overlap_y - (size_y / 2);
1401 r.
xmin = cent_overlap_x - (size_x / 2);
1409 r.
xmin = cent_overlap_x - (size_x / 2);
1417 for (
int j = 0; j < 4; j++) {
1418 const rcti *r = (&rect.xpos) + j;
1427 int offset_dummy[2];
1433 const int pad =
max_ff(1.0f,
U.pixelsize) * 5;
1436 rect_clamp.
xmax = win_size[0] -
pad;
1438 rect_clamp.
ymax = win_size[1] -
pad;
1439 int offset_dummy[2];
1444#undef USE_ALIGN_Y_CENTER
1453 if (init_rect_overlap !=
nullptr) {
1457 data->bbox.xmin = margin;
1459 data->bbox.ymin = margin;
1463 region->winrct.xmin = rect_i.
xmin - margin;
1464 region->winrct.xmax = rect_i.
xmax + margin;
1465 region->winrct.ymin = rect_i.
ymin - margin;
1466 region->winrct.ymax = rect_i.
ymax + margin;
1488 float init_position[2];
1493 std::unique_ptr<uiTooltipData> data =
nullptr;
1499 if (data ==
nullptr) {
1503 if (data ==
nullptr) {
1507 if (data ==
nullptr) {
1511 if (data ==
nullptr) {
1517 if (is_no_overlap) {
1518 rctf overlap_rect_fl;
1526 overlap_rect_fl = but->
rect;
1545 C, std::move(data), init_position, is_no_overlap ? &init_rect :
nullptr);
1561 if (data ==
nullptr) {
1570 init_position[0] =
bounds.xmin;
1571 init_position[1] =
bounds.ymin;
1586 std::string image_type;
1589 image_type =
TIP_(
"Single Image");
1592 image_type =
TIP_(
"Image Sequence");
1595 image_type =
TIP_(
"Movie");
1598 image_type =
TIP_(
"Generated");
1601 image_type =
TIP_(
"Viewer");
1604 image_type =
TIP_(
"UDIM Tiles");
1637 image_data.
ibuf = ibuf;
1638 image_data.
border =
true;
1650 if (clip.filepath[0]) {
1656 std::string image_type;
1657 switch (clip.source) {
1659 image_type =
TIP_(
"Image Sequence");
1662 image_type =
TIP_(
"Movie");
1671 fmt::format(
"{} \u00D7 {}",
1696 image_data.
ibuf = ibuf;
1697 image_data.
border =
true;
1710 if (!font.filepath[0]) {
1727 image_data.
width = ibuf->
x;
1729 image_data.
ibuf = ibuf;
1730 image_data.
border =
false;
1741 std::unique_ptr<uiTooltipData> data = std::make_unique<uiTooltipData>();
1746 if (type_id ==
ID_IM) {
1749 else if (type_id ==
ID_MC) {
1752 else if (type_id ==
ID_VF) {
1757 fmt::format(
TIP_(
"Choose {} data-block to be assigned to this user"),
1768 fmt::format(
TIP_(
"Source library: {}\n{}"), id->lib->id.name + 2, id->lib->filepath),
1774 return data->fields.is_empty() ? nullptr : std::move(data);
1778 const ARegion *searchbox_region,
1779 const rcti *item_rect,
1783 if (data ==
nullptr) {
1788 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)
void BLF_size(int fontid, float size)
void BLF_disable(int fontid, int option)
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
void BLF_wordwrap(int fontid, int wrap_width)
#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 hsv_to_rgb_v(const float hsv[3], float r_rgb[3])
void rgb_to_hsv_v(const float rgb[3], float r_hsv[3])
MINLINE float rgb_to_grayscale(const float rgb[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 void copy_v3_v3(float r[3], const float a[3])
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,...)
#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)
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)
int IMB_anim_get_image_height(ImBufAnim *anim)
ImBuf * IMB_dupImBuf(const ImBuf *ibuf1)
void IMB_rect_from_float(ImBuf *ibuf)
void IMB_rectfill_area(ImBuf *ibuf, const float col[4], int x1, int y1, int x2, int y2, ColorManagedDisplay *display)
int IMB_anim_get_image_width(ImBufAnim *anim)
ImBuf * IMB_anim_previewframe(ImBufAnim *anim)
int IMB_anim_get_duration(ImBufAnim *anim, IMB_Timecode_Type tc)
bool IMB_scale(ImBuf *ibuf, unsigned int newx, unsigned int newy, IMBScaleFilter filter, bool threaded=true)
Contains defines and structs used throughout the imbuf module.
ImBuf * IMB_font_preview(const char *filepath, unsigned int width, const float color[4])
Read Guarded memory(de)allocation.
#define UI_ALPHA_CHECKER_LIGHT
std::string UI_but_string_get_property_keymap(bContext &C, uiBut &but)
@ UI_BLOCK_SHOW_SHORTCUT_ALWAYS
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)
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)
bool UI_but_has_tooltip_label(const uiBut *but)
void UI_GetThemeColor4fv(int colorid, float col[4])
@ WM_OP_INVOKE_REGION_WIN
int pad[32 - sizeof(int)]
ATTR_WARN_UNUSED_RESULT const BMVert * v
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 bool startswith(StringRef prefix) const
constexpr const char & back() const
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
RAYTRACE_GROUP_SIZE additional_info("eevee_shared", "eevee_gbuffer_data", "eevee_global_ubo", "eevee_sampling_data", "eevee_utility_texture", "eevee_hiz_data", "draw_view") .specialization_constant(Type RAYTRACE_GROUP_SIZE in_sh_0_tx in_sh_2_tx screen_normal_tx GPU_RGBA8
struct ImBuf * IMB_allocImBuf(unsigned int, unsigned int, unsigned char, unsigned int)
void IMB_freeImBuf(ImBuf *)
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])
ColorManagedDisplay * ui_block_cm_display_get(uiBlock *block)
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)
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)
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)
ColorManagedColorspaceSettings colorspace_settings
wmOperatorCallContext opcontext
const char * disabled_info
uiButToolTipFunc tip_func
uiButToolTipCustomFunc tip_custom_func
wmGizmoFnScreenBoundsGet screen_bounds_get
int target_property_defs_len
wmOperatorCallContext opcontext
struct wmEvent * eventstate
wmGizmoOpElem * WM_gizmo_operator_get(wmGizmo *gz, int part_index)
wmGizmoProperty * WM_gizmo_target_property_array(wmGizmo *gz)
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)