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;
130 field.
text = std::move(text);
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);
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++) {
229 &
data->fstyle, &bbox, field->
text.c_str(), field->
text.size(), drawcol, &fs_params);
263 &fstyle_mono, &bbox, field->
text.c_str(), field->
text.size(), drawcol, &fs_params);
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),
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;
324 float(bbox.
ymax + field->
image->height));
342 &
data->fstyle, &bbox, field->
text.c_str(), field->
text.size(), drawcol, &fs_params);
390 const int fields_len_init =
data.fields.size();
399 ot->description ?
ot->description :
ot->name,
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),
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;
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) {
1112 image_data.
width / 2,
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;
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()) {
1301 fonth += h * info.
lines;
1308 fonth += field->
image->height;
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;
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;
1656 std::string image_type;
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;
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"),
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.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
#define UI_ALPHA_CHECKER_LIGHT
std::string UI_but_string_get_property_keymap(bContext &C, 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)
@ UI_BLOCK_SHOW_SHORTCUT_ALWAYS
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)
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)
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)
struct ARegionType * type
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)