Blender V5.0
interface_intern.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#pragma once
10
11#include <functional>
12
13#include "BLI_compiler_attrs.h"
15#include "BLI_string_ref.hh"
16#include "BLI_vector.hh"
17
18#include "BKE_fcurve.hh"
19
20#include "DNA_listBase.h"
21
22#include "RNA_types.hh"
23
24#include "UI_interface.hh"
26#include "UI_resources.hh"
27
29struct ARegion;
30struct bContext;
31struct bContextStore;
32struct CurveMapping;
33struct CurveProfile;
34namespace blender::gpu {
35class Batch;
36}
37struct IconTextOverlay;
38struct ID;
39struct ImBuf;
41struct Main;
42struct Scene;
44struct uiLayout;
45struct uiListType;
46struct uiStyle;
47struct uiUndoStack_Text;
48struct uiWidgetColors;
49struct UnitSettings;
50struct wmEvent;
51struct wmKeyConfig;
52struct wmOperatorType;
53struct wmTimer;
54
55/* ****************** general defines ************** */
56
57#define RNA_NO_INDEX -1
58#define RNA_ENUM_VALUE -2
59
60#define UI_MENU_PADDING (int)(0.2f * UI_UNIT_Y)
61
62#define UI_MENU_WIDTH_MIN (UI_UNIT_Y * 9)
64#define UI_MENU_SUBMENU_PADDING (6 * UI_SCALE_FAC)
65
66/* menu scrolling */
67#define UI_MENU_SCROLL_ARROW (12 * UI_SCALE_FAC)
68#define UI_MENU_SCROLL_MOUSE (UI_MENU_SCROLL_ARROW + 2 * UI_SCALE_FAC)
69#define UI_MENU_SCROLL_PAD (4 * UI_SCALE_FAC)
70
72#define UI_POPOVER_WIDTH_UNITS 10
73
75enum {
77 UI_SELECT = (1 << 0),
79 UI_SCROLLED = (1 << 1),
87 UI_HOVER = (1 << 2),
88 UI_HAS_ICON = (1 << 3),
89 UI_HIDDEN = (1 << 4),
91 UI_SELECT_DRAW = (1 << 5),
94
99
100 /* WARNING: rest of #uiBut.flag in `UI_interface_c.hh`. */
101};
102
115
117#define UI_RADIAL_DIRECTION_NEXT(dir) RadialDirection((int(dir) + 1) % (int(UI_RADIAL_NW) + 1))
119#define UI_RADIAL_DIRECTION_PREV(dir) \
120 RadialDirection(((int(dir) + int(UI_RADIAL_NW))) % (int(UI_RADIAL_NW) + 1))
121
123#define UI_RADIAL_MASK_ALL_DIAGONAL \
124 ((1 << int(UI_RADIAL_NE)) | (1 << int(UI_RADIAL_SE)) | (1 << int(UI_RADIAL_SW)) | \
125 (1 << int(UI_RADIAL_NW)))
126#define UI_RADIAL_MASK_ALL_AXIS_ALIGNED \
127 ((1 << int(UI_RADIAL_N)) | (1 << int(UI_RADIAL_S)) | (1 << int(UI_RADIAL_E)) | \
128 (1 << int(UI_RADIAL_W)))
129
130extern const char ui_radial_dir_order[8];
131extern const char ui_radial_dir_to_numpad[8];
132extern const short ui_radial_dir_to_angle[8];
133
134/* internal panel drawing defines */
135#define PNL_HEADER (UI_UNIT_Y * 1.25) /* 24 default */
136
137/* bit button defines */
138/* Bit operations */
139#define UI_BITBUT_TEST(a, b) (((a) & (1 << (b))) != 0)
140#define UI_BITBUT_VALUE_TOGGLED(a, b) ((a) ^ (1 << (b)))
141#define UI_BITBUT_VALUE_ENABLED(a, b) ((a) | (1 << (b)))
142#define UI_BITBUT_VALUE_DISABLED(a, b) ((a) & ~(1 << (b)))
143
144/* bit-row */
145#define UI_BITBUT_ROW(min, max) \
146 (((max) >= 31 ? 0xFFFFFFFF : (1 << ((max) + 1)) - 1) - ((min) ? ((1 << (min)) - 1) : 0))
147
149#define USE_NUMBUTS_LR_ALIGN
150
152enum {
165};
166
167#define PIE_CLICK_THRESHOLD_SQ 50.0f
168
170#define PIE_MAX_ITEMS 8
171
172struct uiBut {
173
175 uiLayout *layout = nullptr;
176 int flag = 0;
177 int drawflag = 0;
178 char flag2 = 0;
179
182 bool bit = 0;
183 /* 0-31 bit index. */
184 char bitnr = 0;
185
188
189 short retval = 0, strwidth = 0, alignnr = 0;
190 short ofs = 0, pos = 0, selsta = 0, selend = 0;
191
196 uchar col[4] = {0};
197
198 std::string str;
199
200 std::string drawstr;
201
202 char *placeholder = nullptr;
203
205 rctf rect = {};
206
207 char *poin = nullptr;
208 float hardmin = 0, hardmax = 0, softmin = 0, softmax = 0;
209
212
214 void *func_arg1 = nullptr;
215 void *func_arg2 = nullptr;
220 std::function<void(bContext &)> apply_func;
221
223 void *func_argN = nullptr;
226
227 const bContextStore *context = nullptr;
228
230 void *autofunc_arg = nullptr;
231
233 void *rename_arg1 = nullptr;
234 void *rename_orig = nullptr;
235
240 std::function<void(std::string &new_name)> rename_full_func = nullptr;
241 std::string rename_full_new;
242
245 void *hold_argN = nullptr;
246
249 void *tip_arg = nullptr;
252 std::function<std::string(const uiBut *)> tip_quick_func;
253
255
257 const char *disabled_info = nullptr;
258
261
267 bool changed = false;
268
269 BIFIconID icon = ICON_NONE;
270
272 float search_weight = 0.0f;
273
274 short iconadd = 0;
277
279 bool menu_no_hover_open = false;
280
283
286
288
289 /* RNA data */
292 int rnaindex = 0;
293
295 void *dragpoin = nullptr;
296 const ImBuf *imb = nullptr;
297 float imb_scale = 0;
299 int8_t dragflag = 0;
300
306 /* Operator data */
309 PointerRNA *opptr = nullptr;
310
311 ListBase extra_op_icons = {nullptr, nullptr};
312
330
332 void *custom_data = nullptr;
333
334 char *editstr = nullptr;
335 double *editval = nullptr;
336 float *editvec = nullptr;
337
338 std::function<bool(const uiBut &)> pushed_state_func;
339
340 /* pointer back */
341 uiBlock *block = nullptr;
342
343 uiBut() = default;
345 uiBut(const uiBut &other) = default;
347 uiBut &operator=(const uiBut &other) = default;
348
349 virtual ~uiBut() = default;
350};
351
353struct uiButNumber : public uiBut {
354 float step_size = 0.0f;
355 float precision = 0.0f;
356};
357
359struct uiButNumberSlider : public uiBut {
360 float step_size = 0.0f;
361 float precision = 0.0f;
362};
363
365struct uiButColor : public uiBut {
366 bool is_pallete_color = false;
368};
369
371struct uiButTab : public uiBut {
372 MenuType *menu = nullptr;
373};
374
404
409struct uiButDecorator : public uiBut {
413 /* The only action allowed to decorators currently is to set or clear animation keyframes.
414 * However, they should be able to do it only under some circumstances (typically, when they do
415 * display animation-related status). */
417};
418
426
428struct uiButSeparatorLine : public uiBut {
430};
431
433struct uiButLabel : public uiBut {
434 float alpha_factor = 1.0f;
435};
436
438struct uiButScrollBar : public uiBut {
440 float visual_height = -1.0f;
441};
442
453
458
460struct uiButColorBand : public uiBut {
462};
463
465struct uiButCurveProfile : public uiBut {
467};
468
474
479
492
495
505
511
512 /*
513 * RGB in color picker used for number sliders, when the space is not scene linear.
514 * When it is linear, the RNA property is used directly so that keyframing works.
515 */
517
518 /* Hex Color string */
519 char hexcol[128];
520
526
529};
530
534
537 const char *title;
538 int icon;
539
542 float pie_dir[2];
545 float last_pos[2];
547 int flags;
550 float alphafac;
551};
552
559
560/* #uiButtonGroup.flag. */
568
579
585
586enum class uiBlockAlertLevel : int8_t { None, Info, Success, Warning, Error };
587
588struct uiBlock {
590
594
597
599
602
604
609
610 ListBase dynamic_listeners; /* #uiBlockDynamicListener */
611
612 std::string name;
613
614 float winmat[4][4];
615
617 float aspect;
618
620
623
627
632
635
638
640 int (*block_event_func)(const bContext *C, uiBlock *, const wmEvent *);
641
643 std::function<void(const bContext *, rcti *)> drawextra;
644
645 int flag;
646 short alignnr;
650 short content_hints; /* #eBlockContentHints */
651
658 char _pad[5];
660
661 const char *lockstr;
662
663 bool lock;
665 bool active;
670
677
682
684
689
691 void *evil_C;
692
698
701
707
709
710 void remove_but(const uiBut *but);
711 [[nodiscard]] uiBut *first_but() const;
712 [[nodiscard]] uiBut *last_but() const;
713 int but_index(const uiBut *but) const;
714 [[nodiscard]] uiBut *next_but(const uiBut *but) const;
715 [[nodiscard]] uiBut *prev_but(const uiBut *but) const;
716};
717
723/* `interface.cc` */
724
725void ui_fontscale(float *points, float aspect);
726
728void ui_but_to_pixelrect(rcti *rect,
729 const ARegion *region,
730 const uiBlock *block,
731 const uiBut *but);
732rcti ui_to_pixelrect(const ARegion *region, const uiBlock *block, const rctf *src_rect);
733
734void ui_block_to_region_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
735void ui_block_to_window_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
736void ui_block_to_window(const ARegion *region, const uiBlock *block, int *x, int *y);
737void ui_block_to_region_rctf(const ARegion *region,
738 const uiBlock *block,
739 rctf *rct_dst,
740 const rctf *rct_src);
741void ui_block_to_window_rctf(const ARegion *region,
742 const uiBlock *block,
743 rctf *rct_dst,
744 const rctf *rct_src);
745float ui_block_to_window_scale(const ARegion *region, const uiBlock *block);
749void ui_window_to_block_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
750void ui_window_to_block(const ARegion *region, const uiBlock *block, int *x, int *y);
751void ui_window_to_block_rctf(const ARegion *region,
752 const uiBlock *block,
753 rctf *rct_dst,
754 const rctf *rct_src);
755void ui_window_to_region(const ARegion *region, int *x, int *y);
756void ui_window_to_region_rcti(const ARegion *region, rcti *rect_dst, const rcti *rct_src);
757void ui_window_to_region_rctf(const ARegion *region, rctf *rect_dst, const rctf *rct_src);
758void ui_region_to_window(const ARegion *region, int *x, int *y);
760 const ARegion *region, int region_x, int region_y, int *r_window_x, int *r_window_y);
765void ui_region_winrct_get_no_margin(const ARegion *region, rcti *r_rect);
766
769 void (*listener_func)(const wmRegionListenerParams *params));
770
778uiBut *ui_but_change_type(uiBut *but, ButType new_type);
779
780double ui_but_value_get(uiBut *but);
781void ui_but_value_set(uiBut *but, double value);
785void ui_but_hsv_set(uiBut *but);
789void ui_but_v3_get(uiBut *but, float vec[3]);
790void ui_but_v3_set(uiBut *but, const float vec[3]);
791void ui_but_v4_get(uiBut *but, float vec[4]);
792void ui_but_v4_set(uiBut *but, const float vec[4]);
793
795 const rcti *rect, float mx, float my, float *r_val_rad, float *r_val_dist);
800 const ColorPicker *cpicker, const rcti *rect, const float *hsv, float *r_xpos, float *r_ypos);
802 const uiButHSVCube *hsv_but, const rcti *rect, const float *hsv, float *r_xp, float *r_yp);
803
811 char *str,
812 size_t str_maxncpy,
813 int float_precision,
814 bool use_exp_float,
815 bool *r_use_exp_float) ATTR_NONNULL(1, 2);
816void ui_but_string_get(uiBut *but, char *str, size_t str_maxncpy) ATTR_NONNULL();
823char *ui_but_string_get_dynamic(uiBut *but, int *r_str_size);
827void ui_but_convert_to_unit_alt_name(uiBut *but, char *str, size_t str_maxncpy) ATTR_NONNULL();
828bool ui_but_string_set(bContext *C, uiBut *but, const char *str) ATTR_NONNULL();
829bool ui_but_string_eval_number(bContext *C, const uiBut *but, const char *str, double *r_value)
830 ATTR_NONNULL();
841void ui_but_set_string_interactive(bContext *C, uiBut *but, const char *value);
843
847const char *ui_but_placeholder_get(uiBut *but);
848
849void ui_def_but_icon(uiBut *but, int icon, int flag);
854
856
857void ui_but_rna_menu_convert_to_panel_type(uiBut *but, const char *panel_type);
858void ui_but_rna_menu_convert_to_menu_type(uiBut *but, const char *menu_type);
859bool ui_but_menu_draw_as_popover(const uiBut *but);
860
863
871 const uiBut *but,
872 const wmOperatorCallParams *optype_params);
873
874void ui_but_update(uiBut *but);
875void ui_but_update_edited(uiBut *but);
883bool ui_but_is_compatible(const uiBut *but_a, const uiBut *but_b) ATTR_WARN_UNUSED_RESULT;
889
895int ui_but_is_pushed_ex(uiBut *but, double *value) ATTR_WARN_UNUSED_RESULT;
897
898void ui_but_override_flag(Main *bmain, uiBut *but);
899
900void ui_block_bounds_calc(uiBlock *block);
901
903void ui_block_cm_to_display_space_v3(uiBlock *block, float pixel[3]);
904
905/* `interface_regions.cc` */
906
913
914using uiBlockHandleCreateFunc = uiBlock *(*)(bContext * C, uiPopupBlockHandle *handle, void *arg1);
915
928
930 /* internal */
931 ARegion *region = nullptr;
932
934 float towards_xy[2];
935 double towardstime = 0.0;
936 bool dotowards = false;
937
938 bool popup = false;
939 void (*popup_func)(bContext *C, void *arg, int event) = nullptr;
940 void (*cancel_func)(bContext *C, void *arg) = nullptr;
941 void *popup_arg = nullptr;
942
951 bool can_refresh = false;
952 bool refresh = false;
953
955 float scrolloffset = 0.0f;
956
958
959 /* for operator popups */
961 ScrArea *ctx_area = nullptr;
962 ARegion *ctx_region = nullptr;
963
964 /* return values */
965 int butretval = 0;
966 int menuretval = 0;
967 int retvalue = 0;
968 float retvec[4] = {0.0f, 0.0f, 0.0f, 0.0f};
969
971 int direction = 0;
972
973 /* Previous values so we don't resize or reposition on refresh. */
976 short prev_dir1 = 0;
977 short prev_dir2 = 0;
978 int prev_bounds_offset[2] = {0, 0};
979
980 /* Maximum estimated size to avoid having to reposition on refresh. */
981 float max_size_x = 0.0f;
982 float max_size_y = 0.0f;
983
984 /* #ifdef USE_DRAG_POPUP */
985 bool is_grab = false;
986 int grab_xy_prev[2] = {0, 0};
987 /* #endif */
988
989 char menu_idname[64] = "";
990};
991
992/* -------------------------------------------------------------------- */
997
998/* `interface_region_tooltip.cc` */
999
1000/* exposed as public API in UI_interface.hh */
1001
1002/* `interface_region_color_picker.cc` */
1003
1004void ui_color_picker_rgb_to_hsv_compat(const float rgb[3], float r_cp[3]);
1005void ui_color_picker_rgb_to_hsv(const float rgb[3], float r_cp[3]);
1006void ui_color_picker_hsv_to_rgb(const float r_cp[3], float rgb[3]);
1007
1012bool ui_but_is_color_gamma(uiBut *but);
1013
1017bool ui_but_color_has_alpha(uiBut *but);
1018
1019void ui_scene_linear_to_perceptual_space(uiBut *but, float rgb[3]);
1020void ui_perceptual_to_scene_linear_space(uiBut *but, float rgb[3]);
1021
1022uiBlock *ui_block_func_COLOR(bContext *C, uiPopupBlockHandle *handle, void *arg_but);
1024
1025/* `interface_region_search.cc` */
1026
1032ARegion *ui_searchbox_create_menu(bContext *C, ARegion *butregion, uiButSearch *search_but);
1033
1037bool ui_searchbox_inside(ARegion *region, const int xy[2]) ATTR_NONNULL(1, 2);
1038int ui_searchbox_find_index(ARegion *region, const char *name);
1042void ui_searchbox_update(bContext *C, ARegion *region, uiBut *but, bool reset);
1043int ui_searchbox_autocomplete(bContext *C, ARegion *region, uiBut *but, char *str);
1045 bContext *C, ARegion *region, uiBut *but, ARegion *butregion, const wmEvent *event);
1049bool ui_searchbox_apply(uiBut *but, ARegion *region);
1050void ui_searchbox_free(bContext *C, ARegion *region);
1055
1056/* `interface_region_menu_popup.cc` */
1057
1058int ui_but_menu_step(uiBut *but, int direction);
1059bool ui_but_menu_step_poll(const uiBut *but);
1061void ui_popup_menu_memory_set(uiBlock *block, uiBut *but);
1062
1067 uiPopupBlockHandle *handle,
1068 ARegion *butregion,
1069 uiBut *but);
1070
1072 ARegion *butregion,
1073 uiBut *but,
1075 uiBlockHandleCreateFunc handle_create_func,
1076 void *arg,
1077 uiFreeArgFunc arg_free,
1078 bool can_refresh);
1080 bContext *C, ARegion *butregion, uiBut *but, uiMenuCreateFunc menu_func, void *arg);
1081
1082/* `interface_region_popover.cc` */
1083
1084using uiPopoverCreateFunc = std::function<void(bContext *, uiLayout *, PanelType *)>;
1085
1087 ARegion *butregion,
1088 uiBut *but,
1089 uiPopoverCreateFunc popover_func,
1090 const PanelType *panel_type);
1091
1092/* `interface_region_menu_pie.cc` */
1093
1099 blender::StringRefNull propname,
1100 IDProperty *properties,
1101 const EnumPropertyItem *items,
1102 int totitem,
1105
1106/* `interface_region_popup.cc` */
1107
1111void ui_popup_translate(ARegion *region, const int mdiff[2]);
1114
1116
1117/* `interface_panel.cc` */
1118
1125 const wmEvent *event,
1126 ARegion *region,
1127 const uiBut *active_but);
1131void ui_draw_aligned_panel(const ARegion *region,
1132 const uiStyle *style,
1133 const uiBlock *block,
1134 const rcti *rect,
1135 bool show_pin,
1136 bool show_background,
1137 bool region_search_filter_active);
1138void ui_draw_layout_panels_backdrop(const ARegion *region,
1139 const Panel *panel,
1140 const float radius,
1141 float subpanel_backcolor[4]);
1142void ui_panel_drag_collapse_handler_add(const bContext *C, const bool was_open);
1148void ui_layout_panel_popup_scroll_apply(Panel *panel, const float dy);
1149
1153void ui_draw_gradient(const rcti *rect,
1154 const float hsv[3],
1155 eButGradientType type,
1156 float alpha,
1157 const ColorManagedDisplay *display);
1158
1165void ui_draw_rounded_corners_inverted(const rcti &rect,
1166 const float rad,
1167 const blender::float4 color);
1168
1169void ui_draw_but_TAB_outline(const rcti *rect,
1170 float rad,
1171 uchar highlight[3],
1172 uchar highlight_fade[3]);
1173void ui_draw_but_HISTOGRAM(ARegion *region,
1174 uiBut *but,
1175 const uiWidgetColors *wcol,
1176 const rcti *recti);
1177void ui_draw_but_WAVEFORM(ARegion *region,
1178 uiBut *but,
1179 const uiWidgetColors *wcol,
1180 const rcti *recti);
1181void ui_draw_but_VECTORSCOPE(ARegion *region,
1182 uiBut *but,
1183 const uiWidgetColors *wcol,
1184 const rcti *recti);
1185void ui_draw_but_COLORBAND(uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1186void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rect, float radius);
1187void ui_draw_but_CURVE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1192 uiBut *but,
1193 const uiWidgetColors *wcol,
1194 const rcti *rect);
1195void ui_draw_but_IMAGE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1197 uiBut *but,
1198 const uiWidgetColors *wcol,
1199 const rcti *recti);
1200
1201/* `interface_undo.cc` */
1202
1215void ui_textedit_undo_push(uiUndoStack_Text *stack, const char *text, int cursor_index);
1216const char *ui_textedit_undo(uiUndoStack_Text *stack, int direction, int *r_cursor_index);
1217
1218/* `interface_handlers.cc` */
1219
1221
1226void ui_pan_to_scroll(const wmEvent *event, int *type, int *val);
1232void ui_but_activate_event(bContext *C, ARegion *region, uiBut *but);
1239void ui_but_activate_over(bContext *C, ARegion *region, uiBut *but);
1240void ui_but_execute_begin(bContext *C, ARegion *region, uiBut *but, void **active_back);
1241void ui_but_execute_end(bContext *C, ARegion *region, uiBut *but, void *active_back);
1242void ui_but_active_free(const bContext *C, uiBut *but);
1243void ui_but_semi_modal_state_free(const bContext *C, uiBut *but);
1248void ui_but_update_view_for_active(const bContext *C, const uiBlock *block);
1250void ui_but_text_password_hide(char password_str[128], uiBut *but, bool restore);
1256uiBut *ui_but_find_select_in_enum(uiBut *but, int direction);
1257bool ui_but_is_editing(const uiBut *but);
1258float ui_block_calc_pie_segment(uiBlock *block, const float event_xy[2]);
1259
1260/* XXX, this code will shorten any allocated string to 'UI_MAX_NAME_STR'
1261 * since this is really long its unlikely to be an issue,
1262 * but this could be supported */
1263void ui_but_add_shortcut(uiBut *but, const char *shortcut_str, bool do_strip);
1265bool ui_but_rna_equals(const uiBut *a, const uiBut *b);
1266bool ui_but_rna_equals_ex(const uiBut *but,
1267 const PointerRNA *ptr,
1268 const PropertyRNA *prop,
1269 int index);
1270uiBut *ui_but_find_old(uiBlock *block_old, const uiBut *but_new);
1271uiBut *ui_but_find_new(uiBlock *block_new, const uiBut *but_old);
1272
1273#ifdef WITH_INPUT_IME
1274void ui_but_ime_reposition(uiBut *but, int x, int y, bool complete);
1275const wmIMEData *ui_but_ime_data_get(uiBut *but);
1276#endif
1277
1278/* `interface_widgets.cc` */
1279
1283 float radi, rad;
1284 float facxi, facyi;
1288 float color_tria[4];
1292 /* We pack alpha check and discard factor in alpha_discard.
1293 * If the value is negative then we do alpha check.
1294 * The absolute value itself is the discard factor.
1295 * Initialize value to 1.0f if you don't want discard. */
1298 float _pad[3];
1299};
1300
1301enum {
1309
1310 ROUNDBOX_TRIA_MAX, /* don't use */
1311};
1312
1313blender::gpu::Batch *ui_batch_roundbox_widget_get();
1314blender::gpu::Batch *ui_batch_roundbox_shadow_get();
1315
1316void ui_draw_menu_back(uiStyle *style, uiBlock *block, const rcti *rect);
1317void ui_draw_popover_back(ARegion *region, uiStyle *style, uiBlock *block, const rcti *rect);
1318void ui_draw_pie_center(uiBlock *block);
1320
1321void ui_draw_widget_menu_back_color(const rcti *rect, bool use_shadow, const float color[4]);
1322void ui_draw_widget_menu_back(const rcti *rect, bool use_shadow);
1323void ui_draw_tooltip_background(const uiStyle *style, uiBlock *block, const rcti *rect);
1324
1328void ui_draw_but(const bContext *C, ARegion *region, uiStyle *style, uiBut *but, rcti *rect);
1329
1344
1355void ui_draw_menu_item(const uiFontStyle *fstyle,
1356 rcti *rect,
1357 rcti *back_rect,
1358 float zoom,
1359 bool use_unpadded,
1360 const char *name,
1361 int iconid,
1362 int but_flag,
1363 uiMenuItemSeparatorType separator_type,
1364 int *r_xmax);
1365void ui_draw_preview_item(const uiFontStyle *fstyle,
1366 rcti *rect,
1367 float zoom,
1368 const char *name,
1369 int iconid,
1370 int but_flag,
1371 eFontStyle_Align text_align);
1381 rcti *rect,
1383 int iconid,
1384 const uchar text_col[4],
1385 eFontStyle_Align text_align,
1386 const bool add_padding);
1387
1388#define UI_TEXT_MARGIN_X 0.4f
1389#define UI_POPUP_MARGIN (UI_SCALE_FAC * 12)
1394#define UI_POPUP_MENU_TOP (int)(10 * UI_SCALE_FAC)
1395
1396#define UI_PIXEL_AA_JITTER 8
1397extern const float ui_pixel_jitter[UI_PIXEL_AA_JITTER][2];
1398
1399/* `interface_style.cc` */
1400
1405void uiStyleInit();
1406
1407/* `interface_icons.cc` */
1408
1409void ui_icon_ensure_deferred(const bContext *C, int icon_id, bool big);
1411bool ui_icon_is_preview_deferred_loading(int icon_id, bool big);
1412int ui_id_icon_get(const bContext *C, ID *id, bool big);
1413
1414/* `interface_icons_event.cc` */
1415
1416float ui_event_icon_offset(int icon_id);
1417
1419 float x, float y, int w, int h, int icon_id, float aspect, float alpha, bool inverted);
1420
1421/* `resources.cc` */
1422
1423void ui_resources_init();
1424void ui_resources_free();
1425
1426/* `interface_layout.cc` */
1427
1428void ui_layout_add_but(uiLayout *layout, uiBut *but);
1429void ui_layout_remove_but(uiLayout *layout, const uiBut *but);
1433bool ui_layout_replace_but_ptr(uiLayout *layout, const void *old_but_ptr, uiBut *new_but);
1439 PointerRNA *ptr,
1440 PropertyRNA *prop,
1441 PointerRNA *searchptr,
1442 PropertyRNA *searchprop,
1443 PropertyRNA *item_searchprop,
1444 bool results_are_suggestions);
1451/* menu callback */
1452void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt);
1453void ui_item_paneltype_func(bContext *C, uiLayout *layout, void *arg_pt);
1454
1455/* `interface_button_group.cc` */
1456
1462void ui_button_group_add_but(uiBlock *block, uiBut *but);
1463void ui_button_group_replace_but_ptr(uiBlock *block, const uiBut *old_but_ptr, uiBut *new_but);
1464
1465/* `interface_drag.cc` */
1466
1467void ui_but_drag_free(uiBut *but);
1468bool ui_but_drag_is_draggable(const uiBut *but);
1469void ui_but_drag_start(bContext *C, uiBut *but);
1470
1471/* `interface_align.cc` */
1472
1482void ui_block_align_calc(uiBlock *block, const ARegion *region);
1483
1484/* `interface_anim.cc` */
1485
1486void ui_but_anim_flag(uiBut *but, const AnimationEvalContext *anim_eval_context);
1493bool ui_but_anim_expression_get(uiBut *but, char *str, size_t str_maxncpy);
1494bool ui_but_anim_expression_set(uiBut *but, const char *str);
1498bool ui_but_anim_expression_create(uiBut *but, const char *str);
1499void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra);
1500
1501void ui_but_anim_decorate_cb(bContext *C, void *arg_but, void *arg_dummy);
1503
1504/* `interface_query.cc` */
1505
1514bool ui_but_is_interactive_ex(const uiBut *but, const bool labeledit, const bool for_tooltip);
1515bool ui_but_is_interactive(const uiBut *but, bool labeledit) ATTR_WARN_UNUSED_RESULT;
1518int ui_but_icon(const uiBut *but);
1519void ui_but_pie_dir(RadialDirection dir, float vec[2]);
1520
1522
1523bool ui_but_contains_pt(const uiBut *but, float mx, float my) ATTR_WARN_UNUSED_RESULT;
1524bool ui_but_contains_rect(const uiBut *but, const rctf *rect);
1525bool ui_but_contains_point_px_icon(const uiBut *but,
1526 ARegion *region,
1527 const wmEvent *event) ATTR_WARN_UNUSED_RESULT;
1528bool ui_but_contains_point_px(const uiBut *but, const ARegion *region, const int xy[2])
1530
1532 const wmEvent *event) ATTR_WARN_UNUSED_RESULT;
1533uiBut *ui_list_row_find_mouse_over(const ARegion *region, const int xy[2])
1535uiBut *ui_list_row_find_index(const ARegion *region,
1536 int index,
1538uiBut *ui_view_item_find_mouse_over(const ARegion *region, const int xy[2]) ATTR_NONNULL(1, 2);
1539uiBut *ui_view_item_find_active(const ARegion *region);
1541
1542using uiButFindPollFn = bool (*)(const uiBut *but, const void *customdata);
1547 const int xy[2],
1548 bool labeledit,
1549 bool for_tooltip,
1550 const uiButFindPollFn find_poll,
1551 const void *find_custom_data)
1553uiBut *ui_but_find_rect_over(const ARegion *region, const rcti *rect_px) ATTR_WARN_UNUSED_RESULT;
1554
1555uiBut *ui_list_find_mouse_over_ex(const ARegion *region, const int xy[2])
1557
1559
1562size_t ui_but_tip_len_only_first_line(const uiBut *but);
1563
1568
1574
1575uiBlock *ui_block_find_mouse_over_ex(const ARegion *region, const int xy[2], bool only_clip)
1576 ATTR_NONNULL(1, 2);
1577uiBlock *ui_block_find_mouse_over(const ARegion *region, const wmEvent *event, bool only_clip);
1578
1579uiBut *ui_region_find_first_but_test_flag(ARegion *region, int flag_include, int flag_exclude);
1581bool ui_region_contains_point_px(const ARegion *region, const int xy[2])
1583bool ui_region_contains_rect_px(const ARegion *region, const rcti *rect_px);
1584
1590
1591/* `interface_context_menu.cc` */
1592
1593bool ui_popup_context_menu_for_button(bContext *C, uiBut *but, const wmEvent *event);
1598
1599/* `eyedroppers/interface_eyedropper.cc` */
1600
1603
1604/* `eyedroppers/eyedropper_color.cc` */
1605
1607
1608/* `interface_eyedropper_colorband.cc` */
1609
1610namespace blender::ui {
1611void UI_OT_eyedropper_colorramp(wmOperatorType *ot);
1612void UI_OT_eyedropper_colorramp_point(wmOperatorType *ot);
1613
1614void UI_OT_eyedropper_bone(wmOperatorType *ot);
1615
1616} // namespace blender::ui
1617
1618/* `eyedroppers/eyedropper_datablock.cc` */
1619
1621
1622/* `eyedroppers/eyedropper_depth.cc` */
1623
1625
1626/* `eyedroppers/eyedropper_driver.cc` */
1627
1629
1630/* `eyedroppers/eyedropper_grease_pencil_colorr.cc` */
1631
1633
1634/* `templates/interface_template_asset_shelf_popover.cc` */
1635std::optional<blender::StringRefNull> UI_asset_shelf_idname_from_button_context(const uiBut *but);
1636
1655 const bContext *C, void *arg, const char *str, uiSearchItems *items, bool is_first);
1656
1657/* `interface_ops.cc` */
1658
1660
1661/* `interface_query.cc` */
1662
1664
1665/* `views/interface_view.cc` */
1666
1667void ui_block_free_views(uiBlock *block);
1668void ui_block_views_end(ARegion *region, const uiBlock *block);
1670 const uiBlock &block,
1672void ui_block_views_listen(const uiBlock *block, const wmRegionListenerParams *listener_params);
1673void ui_block_views_draw_overlays(const ARegion *region, const uiBlock *block);
1675 const uiBlock &new_block, const blender::ui::AbstractView &new_view);
1676
1678 const uiBlock &new_block, const blender::ui::AbstractViewItem &new_item);
1679
1680/* `views/abstract_view_item.cc` */
1681
1684
1685/* `views/interface_templates.cc` */
1686
1688
1690 bContext *C, Main *bmain, ID *owner_id, ID *id, const char **r_undo_push_label);
1691
1697
1719 PointerRNA *ptr, PropertyRNA *prop, bool get_all, int index, bool *r_is_array_prop);
1720
1744 bool is_array_prop,
1745 PointerRNA *dst_ptr,
1746 PropertyRNA *dst_prop);
1747
1748} // namespace blender::interface::internal
#define ATTR_WARN_UNUSED_RESULT
#define ATTR_NONNULL(...)
unsigned char uchar
unsigned int uint
#define ENUM_OPERATORS(_type, _max)
These structs are the foundation for all linked lists in the library system.
int BIFIconID
Definition ED_asset.hh:28
static AppView * view
PropertyScaleType
Definition RNA_types.hh:203
#define C
Definition RandGen.cpp:29
ButPointerType
bool(*)(const uiBut *a, const uiBut *b) uiButIdentityCompareFunc
void(*)(bContext *C, void *arg, char *origstr) uiButHandleRenameFunc
void *(*)(const void *argN) uiButArgNCopy
void(*)(void *argN) uiButArgNFree
eFontStyle_Align
void(*)(bContext *C, void *arg, int event) uiBlockHandleFunc
ARegion *(*)(bContext *C, ARegion *butregion, uiButSearch *search_but) uiButSearchCreateFn
eBlockBoundsCalc
uiBlock *(*)(bContext *C, ARegion *region, void *arg1) uiBlockCreateFunc
ARegion *(*)(bContext *C, ARegion *region, const rcti *item_rect, void *arg, void *active) uiButSearchTooltipFn
int(*)(bContext *C, char *str, void *arg) uiButCompleteFunc
bool(*)(bContext *C, void *arg, void *active, const wmEvent *event) uiButSearchContextMenuFn
void(*)(bContext *C, ARegion *butregion, uiBut *but) uiButHandleHoldFunc
eButGradientType
@ UI_GRAD_SV
void(*)(const bContext *C, void *arg, const char *str, uiSearchItems *items, bool is_first) uiButSearchUpdateFn
void(*)(bContext *C, void *argN, void *arg2) uiButHandleNFunc
void(*)(bContext *C, void *arg1, void *arg2) uiButHandleFunc
void(*)(const wmRegionListenerParams *params, void *arg) uiButSearchListenFn
void(*)(void *arg) uiFreeArgFunc
void(*)(bContext *C, uiLayout *layout, void *arg1) uiMenuCreateFunc
std::string(*)(bContext *C, void *argN, blender::StringRef tip) uiButToolTipFunc
void(*)(bContext &C, uiTooltipData &data, uiBut *but, void *argN) uiButToolTipCustomFunc
blender::ocio::Display ColorManagedDisplay
bool(*)(bContext *C, int direction, void *arg1) uiMenuStepFunc
wmEventModifierFlag
Definition WM_types.hh:277
eWM_DragDataType
Definition WM_types.hh:1200
@ WM_DRAG_ID
Definition WM_types.hh:1201
BMesh const char void * data
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
Definition btQuadWord.h:119
void reset()
clear internal cached data and reset random seed
void UI_OT_eyedropper_color(wmOperatorType *ot)
#define str(s)
const short ui_radial_dir_to_angle[8]
const char ui_radial_dir_to_numpad[8]
const char ui_radial_dir_order[8]
void ui_popup_context_menu_for_panel(bContext *C, ARegion *region, Panel *panel)
bool ui_popup_context_menu_for_button(bContext *C, uiBut *but, const wmEvent *event)
wmKeyMap * eyedropper_colorband_modal_keymap(wmKeyConfig *keyconf)
wmKeyMap * eyedropper_modal_keymap(wmKeyConfig *keyconf)
void ui_but_v4_get(uiBut *but, float vec[4])
void ui_but_convert_to_unit_alt_name(uiBut *but, char *str, size_t str_maxncpy) ATTR_NONNULL()
uiBut uiBut * ui_view_item_find_active(const ARegion *region)
const ColorManagedDisplay * ui_block_cm_display_get(uiBlock *block)
const float ui_pixel_jitter[UI_PIXEL_AA_JITTER][2]
uiBut * ui_but_drag_multi_edit_get(uiBut *but)
void ui_but_v4_set(uiBut *but, const float vec[4])
void ui_view_item_swap_button_pointers(blender::ui::AbstractViewItem &a, blender::ui::AbstractViewItem &b)
void ui_but_range_set_hard(uiBut *but)
bool ui_but_contains_point_px(const uiBut *but, const ARegion *region, const int xy[2]) ATTR_NONNULL(1
ARegion ARegion * ui_screen_region_find_mouse_over(bScreen *screen, const wmEvent *event)
void ui_but_extra_operator_icons_free(uiBut *but)
void void ui_but_string_get(uiBut *but, char *str, size_t str_maxncpy) ATTR_NONNULL()
int ui_but_is_pushed_ex(uiBut *but, double *value) ATTR_WARN_UNUSED_RESULT
uiBut * ui_but_find_new(uiBlock *block_new, const uiBut *but_old)
Definition interface.cc:893
void ui_hsvcircle_vals_from_pos(const rcti *rect, float mx, float my, float *r_val_rad, float *r_val_dist)
bool ui_but_is_cursor_warp(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_block_views_end(ARegion *region, const uiBlock *block)
ID * ui_template_id_liboverride_hierarchy_make(bContext *C, Main *bmain, ID *owner_id, ID *id, const char **r_undo_push_label)
size_t ui_but_drawstr_len_without_sep_char(const uiBut *but)
bool ui_but_is_rna_valid(uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_draw_tooltip_background(const uiStyle *style, uiBlock *block, const rcti *rect)
void ui_window_to_block(const ARegion *region, const uiBlock *block, int *x, int *y)
Definition interface.cc:228
uiBlock * ui_block_find_mouse_over_ex(const ARegion *region, const int xy[2], bool only_clip) ATTR_NONNULL(1
uiBut * ui_popup_menu_memory_get(uiBlock *block)
bool ui_but_is_editing(const uiBut *but)
uiBut * ui_block_active_but_get(const uiBlock *block)
void ui_def_but_icon(uiBut *but, int icon, int flag)
int ui_but_menu_direction(uiBut *but)
void ui_searchbox_update(bContext *C, ARegion *region, uiBut *but, bool reset)
bool ui_icon_is_preview_deferred_loading(int icon_id, bool big)
uiBlock uiBlock * ui_block_find_mouse_over(const ARegion *region, const wmEvent *event, bool only_clip)
bool ui_but_menu_step_poll(const uiBut *but)
@ UI_PIE_DRAG_STYLE
@ UI_PIE_INVALID_DIR
@ UI_PIE_ANIMATION_FINISHED
@ UI_PIE_CLICK_STYLE
@ UI_PIE_INITIAL_DIRECTION
@ UI_PIE_GESTURE_END_WAIT
void ui_block_views_draw_overlays(const ARegion *region, const uiBlock *block)
void ui_draw_but_HISTOGRAM(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *recti)
ColorPicker * ui_block_colorpicker_create(uiBlock *block)
void ui_perceptual_to_scene_linear_space(uiBut *but, float rgb[3])
void ui_block_view_persistent_state_restore(const ARegion &region, const uiBlock &block, blender::ui::AbstractView &view)
void ui_but_range_set_soft(uiBut *but)
void ui_but_update(uiBut *but)
uiButtonGroupFlag
@ UI_BUTTON_GROUP_LOCK
@ UI_BUTTON_GROUP_PANEL_HEADER
void ui_draw_but_WAVEFORM(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *recti)
void ui_draw_preview_item(const uiFontStyle *fstyle, rcti *rect, float zoom, const char *name, int iconid, int but_flag, eFontStyle_Align text_align)
void ui_but_drag_free(uiBut *but)
void ui_draw_widget_menu_back_color(const rcti *rect, bool use_shadow, const float color[4])
bool ui_but_string_set(bContext *C, uiBut *but, const char *str) ATTR_NONNULL()
void ui_resources_free()
Definition resources.cc:54
uiBlock *(*)(bContext *C, uiPopupBlockHandle *handle, void *arg1) uiBlockHandleCreateFunc
void ui_color_picker_hsv_to_rgb(const float r_cp[3], float rgb[3])
bool ui_block_is_popover(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
uiBut * ui_list_row_find_index(const ARegion *region, int index, uiBut *listbox) ATTR_WARN_UNUSED_RESULT
bool ui_block_is_pie_menu(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt)
float ui_block_calc_pie_segment(uiBlock *block, const float event_xy[2])
const uiWidgetColors * ui_tooltip_get_theme()
void ui_but_add_shortcut(uiBut *but, const char *shortcut_str, bool do_strip)
bool ui_but_string_eval_number(bContext *C, const uiBut *but, const char *str, double *r_value) ATTR_NONNULL()
void ui_popup_block_scrolltest(uiBlock *block)
bool ui_but_has_array_value(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_def_but_icon_clear(uiBut *but)
bool ui_but_contains_rect(const uiBut *but, const rctf *rect)
void ui_but_search_refresh(uiButSearch *but)
void ui_but_activate_over(bContext *C, ARegion *region, uiBut *but)
void ui_button_group_replace_but_ptr(uiBlock *block, const uiBut *old_but_ptr, uiBut *new_but)
float ui_event_icon_offset(int icon_id)
bool ui_but_context_poll_operator_ex(bContext *C, const uiBut *but, const wmOperatorCallParams *optype_params)
bool int ui_searchbox_find_index(ARegion *region, const char *name)
void ui_but_string_get_ex(uiBut *but, char *str, size_t str_maxncpy, int float_precision, bool use_exp_float, bool *r_use_exp_float) ATTR_NONNULL(1
void ui_block_add_dynamic_listener(uiBlock *block, void(*listener_func)(const wmRegionListenerParams *params))
uiButViewItem * ui_block_view_find_matching_view_item_but_in_old_block(const uiBlock &new_block, const blender::ui::AbstractViewItem &new_item)
size_t ui_but_tip_len_only_first_line(const uiBut *but)
void ui_but_active_string_clear_and_exit(bContext *C, uiBut *but) ATTR_NONNULL()
uiBut * ui_view_item_find_mouse_over(const ARegion *region, const int xy[2]) ATTR_NONNULL(1
void ui_block_to_region_rctf(const ARegion *region, const uiBlock *block, rctf *rct_dst, const rctf *rct_src)
Definition interface.cc:160
void ui_draw_layout_panels_backdrop(const ARegion *region, const Panel *panel, const float radius, float subpanel_backcolor[4])
bool ui_jump_to_target_button_poll(bContext *C)
void ui_hsvcircle_pos_from_vals(const ColorPicker *cpicker, const rcti *rect, const float *hsv, float *r_xpos, float *r_ypos)
bool ui_but_contains_point_px_icon(const uiBut *but, ARegion *region, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
const char * ui_but_placeholder_get(uiBut *but)
bool ui_layout_replace_but_ptr(uiLayout *layout, const void *old_but_ptr, uiBut *new_but)
void ui_block_bounds_calc(uiBlock *block)
Definition interface.cc:490
void ui_interface_tag_script_reload_queries()
bool ui_block_is_popup_any(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
bool ui_layout_panel_toggle_open(const bContext *C, LayoutPanelHeader *header)
void ui_but_override_flag(Main *bmain, uiBut *but)
ARegion * ui_searchbox_create_operator(bContext *C, ARegion *butregion, uiButSearch *search_but)
uiPopupBlockHandle * ui_popup_block_create(bContext *C, ARegion *butregion, uiBut *but, uiBlockCreateFunc create_func, uiBlockHandleCreateFunc handle_create_func, void *arg, uiFreeArgFunc arg_free, bool can_refresh)
void ui_draw_widget_menu_back(const rcti *rect, bool use_shadow)
ARegion * ui_searchbox_create_generic(bContext *C, ARegion *butregion, uiButSearch *search_but)
bool ui_but_is_bool(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void uiStyleInit()
bool ui_but_anim_expression_create(uiBut *but, const char *str)
double ui_but_value_get(uiBut *but)
rcti ui_to_pixelrect(const ARegion *region, const uiBlock *block, const rctf *src_rect)
float ui_block_to_window_scale(const ARegion *region, const uiBlock *block)
Definition interface.cc:180
uiPopupBlockHandle * ui_popup_menu_create(bContext *C, ARegion *butregion, uiBut *but, uiMenuCreateFunc menu_func, void *arg)
void ui_draw_menu_back(uiStyle *style, uiBlock *block, const rcti *rect)
void ui_window_to_region_rcti(const ARegion *region, rcti *rect_dst, const rcti *rct_src)
Definition interface.cc:245
void UI_OT_eyedropper_depth(wmOperatorType *ot)
void ui_but_text_password_hide(char password_str[128], uiBut *but, bool restore)
void UI_OT_eyedropper_driver(wmOperatorType *ot)
int ui_handler_panel_region(bContext *C, const wmEvent *event, ARegion *region, const uiBut *active_but)
void ui_color_picker_rgb_to_hsv(const float rgb[3], float r_cp[3])
void ui_hsvcube_pos_from_vals(const uiButHSVCube *hsv_but, const rcti *rect, const float *hsv, float *r_xp, float *r_yp)
ARegion * ui_searchbox_create_menu(bContext *C, ARegion *butregion, uiButSearch *search_but)
void ui_scene_linear_to_perceptual_space(uiBut *but, float rgb[3])
void ui_draw_rounded_corners_inverted(const rcti &rect, const float rad, const blender::float4 color)
void ui_popup_block_free(bContext *C, uiPopupBlockHandle *handle)
void ui_searchbox_free(bContext *C, ARegion *region)
void UI_OT_eyedropper_grease_pencil_color(wmOperatorType *ot)
void ui_but_active_free(const bContext *C, uiBut *but)
int ui_but_menu_step(uiBut *but, int direction)
void ui_block_free_views(uiBlock *block)
void ui_region_to_window(const ARegion *region, int *x, int *y)
Definition interface.cc:261
uiBut * ui_but_change_type(uiBut *but, ButType new_type)
blender::ui::AbstractView * ui_block_view_find_matching_in_old_block(const uiBlock &new_block, const blender::ui::AbstractView &new_view)
void ui_but_anim_decorate_cb(bContext *C, void *arg_but, void *arg_dummy)
uiBut * ui_but_find_rect_over(const ARegion *region, const rcti *rect_px) ATTR_WARN_UNUSED_RESULT
void ui_window_to_region(const ARegion *region, int *x, int *y)
Definition interface.cc:239
void ui_window_to_block_fl(const ARegion *region, const uiBlock *block, float *x, float *y)
Definition interface.cc:191
bool ui_region_contains_point_px(const ARegion *region, const int xy[2]) ATTR_NONNULL(1
void ui_item_paneltype_func(bContext *C, uiLayout *layout, void *arg_pt)
bool ui_searchbox_apply(uiBut *but, ARegion *region)
void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rect, float radius)
void ui_panel_tag_search_filter_match(Panel *panel)
void ui_but_anim_decorate_update_from_flag(uiButDecorator *but)
bool ui_but_rna_equals(const uiBut *a, const uiBut *b)
Definition interface.cc:766
void ui_popup_translate(ARegion *region, const int mdiff[2])
void ui_block_cm_to_display_space_v3(uiBlock *block, float pixel[3])
bool ui_but_is_toggle(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_pan_to_scroll(const wmEvent *event, int *type, int *val)
bool(*)(const uiBut *but, const void *customdata) uiButFindPollFn
void ui_draw_aligned_panel(const ARegion *region, const uiStyle *style, const uiBlock *block, const rcti *rect, bool show_pin, bool show_background, bool region_search_filter_active)
bool ui_block_is_menu(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
void ui_but_anim_flag(uiBut *but, const AnimationEvalContext *anim_eval_context)
void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra)
uiBut * ui_view_item_find_search_highlight(const ARegion *region)
bool ui_but_menu_draw_as_popover(const uiBut *but)
void ui_but_value_set(uiBut *but, double value)
void ui_block_new_button_group(uiBlock *block, uiButtonGroupFlag flag)
uiBut * ui_region_find_first_but_test_flag(ARegion *region, int flag_include, int flag_exclude)
void ui_draw_preview_item_stateless(const uiFontStyle *fstyle, rcti *rect, blender::StringRef name, int iconid, const uchar text_col[4], eFontStyle_Align text_align, const bool add_padding)
bool ui_but_rna_equals_ex(const uiBut *but, const PointerRNA *ptr, const PropertyRNA *prop, int index)
Definition interface.cc:771
const char * ui_textedit_undo(uiUndoStack_Text *stack, int direction, int *r_cursor_index)
void ui_layout_list_set_labels_active(uiLayout *layout)
uiBut * ui_list_find_mouse_over_ex(const ARegion *region, const int xy[2]) ATTR_NONNULL(1
void ui_but_hsv_set(uiBut *but)
bool ui_but_is_interactive_ex(const uiBut *but, const bool labeledit, const bool for_tooltip)
void ui_draw_but_CURVE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect)
void ui_draw_but(const bContext *C, ARegion *region, uiStyle *style, uiBut *but, rcti *rect)
bool ui_but_anim_expression_get(uiBut *but, char *str, size_t str_maxncpy)
LayoutPanelHeader * ui_layout_panel_header_under_mouse(const Panel &panel, const int my)
RadialDirection
@ UI_RADIAL_W
@ UI_RADIAL_E
@ UI_RADIAL_NONE
@ UI_RADIAL_N
@ UI_RADIAL_SE
@ UI_RADIAL_SW
@ UI_RADIAL_S
@ UI_RADIAL_NE
@ UI_RADIAL_NW
void ui_but_handle_data_free(uiHandleButtonData **data)
bool ui_searchbox_inside(ARegion *region, const int xy[2]) ATTR_NONNULL(1
void ui_block_views_listen(const uiBlock *block, const wmRegionListenerParams *listener_params)
uiBut * ui_but_find_select_in_enum(uiBut *but, int direction)
std::optional< blender::StringRefNull > UI_asset_shelf_idname_from_button_context(const uiBut *but)
void ui_block_to_region_fl(const ARegion *region, const uiBlock *block, float *x, float *y)
Definition interface.cc:123
uiBut * ui_but_first(uiBlock *block) ATTR_WARN_UNUSED_RESULT
bool ui_but_is_float(const uiBut *but) ATTR_WARN_UNUSED_RESULT
bool ui_but_can_align(const uiBut *but) ATTR_WARN_UNUSED_RESULT
ARegion * ui_screen_region_find_mouse_over_ex(bScreen *screen, const int xy[2]) ATTR_NONNULL(1
void UI_OT_eyedropper_id(wmOperatorType *ot)
void ui_but_to_pixelrect(rcti *rect, const ARegion *region, const uiBlock *block, const uiBut *but)
void ui_but_rna_menu_convert_to_panel_type(uiBut *but, const char *panel_type)
uiBut * ui_but_find_old(uiBlock *block_old, const uiBut *but_new)
Definition interface.cc:873
bool ui_but_contains_pt(const uiBut *but, float mx, float my) ATTR_WARN_UNUSED_RESULT
uiBut * ui_list_find_mouse_over(const ARegion *region, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
blender::StringRef ui_but_drawstr_without_sep_char(const uiBut *but) ATTR_NONNULL()
char * ui_but_string_get_dynamic(uiBut *but, int *r_str_size)
bool ui_searchbox_event(bContext *C, ARegion *region, uiBut *but, ARegion *butregion, const wmEvent *event)
void ui_window_to_region_rctf(const ARegion *region, rctf *rect_dst, const rctf *rct_src)
Definition interface.cc:253
void ui_draw_but_VECTORSCOPE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *recti)
void ui_window_to_block_rctf(const ARegion *region, const uiBlock *block, rctf *rct_dst, const rctf *rct_src)
Definition interface.cc:218
void ui_block_to_window_rctf(const ARegion *region, const uiBlock *block, rctf *rct_dst, const rctf *rct_src)
Definition interface.cc:170
bool ui_but_contains_password(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_but_update_edited(uiBut *but)
void ui_but_anim_copy_driver(bContext *C)
void ui_but_anim_paste_driver(bContext *C)
int ui_but_is_pushed(uiBut *but) ATTR_WARN_UNUSED_RESULT
uiBut * ui_but_find_mouse_over_ex(const ARegion *region, const int xy[2], bool labeledit, bool for_tooltip, const uiButFindPollFn find_poll, const void *find_custom_data) ATTR_NONNULL(1
bool ui_but_is_compatible(const uiBut *but_a, const uiBut *but_b) ATTR_WARN_UNUSED_RESULT
void ui_but_v3_set(uiBut *but, const float vec[3])
int ui_id_icon_get(const bContext *C, ID *id, bool big)
bool ui_but_is_editable(const uiBut *but) ATTR_WARN_UNUSED_RESULT
uiBut * ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, PropertyRNA *searchprop, PropertyRNA *item_searchprop, bool results_are_suggestions)
@ ROUNDBOX_TRIA_CHECK
@ ROUNDBOX_TRIA_DASH
@ ROUNDBOX_TRIA_SCROLL
@ ROUNDBOX_TRIA_MENU
@ ROUNDBOX_TRIA_ARROWS
@ ROUNDBOX_TRIA_NONE
@ ROUNDBOX_TRIA_MAX
@ ROUNDBOX_TRIA_HOLD_ACTION_ARROW
void ui_but_v3_get(uiBut *but, float vec[3])
bool ui_but_supports_cycling(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_handle_afterfunc_add_operator(wmOperatorType *ot, blender::wm::OpCallContext opcontext)
uiBut * ui_list_row_find_mouse_over(const ARegion *region, const int xy[2]) ATTR_NONNULL(1
uiBlock * ui_popup_block_refresh(bContext *C, uiPopupBlockHandle *handle, ARegion *butregion, uiBut *but)
void ui_draw_popover_back(ARegion *region, uiStyle *style, uiBlock *block, const rcti *rect)
int ui_but_string_get_maxncpy(uiBut *but)
void ui_draw_gradient(const rcti *rect, const float hsv[3], eButGradientType type, float alpha, const ColorManagedDisplay *display)
void ui_but_clipboard_free()
uiBlock * ui_block_func_COLOR(bContext *C, uiPopupBlockHandle *handle, void *arg_but)
bool ui_but_is_interactive(const uiBut *but, bool labeledit) ATTR_WARN_UNUSED_RESULT
void ui_but_activate_event(bContext *C, ARegion *region, uiBut *but)
void ui_icon_ensure_deferred(const bContext *C, int icon_id, bool big)
void ui_color_picker_rgb_to_hsv_compat(const float rgb[3], float r_cp[3])
void ui_popup_menu_memory_set(uiBlock *block, uiBut *but)
eBlockContentHints
@ UI_BLOCK_CONTAINS_SUBMENU_BUT
void ui_fontscale(float *points, float aspect)
void ui_button_group_add_but(uiBlock *block, uiBut *but)
uiBut * ui_but_last(uiBlock *block) ATTR_WARN_UNUSED_RESULT
bool ui_region_contains_rect_px(const ARegion *region, const rcti *rect_px)
void ui_block_to_window(const ARegion *region, const uiBlock *block, int *x, int *y)
Definition interface.cc:149
uiPopupBlockHandle * ui_popover_panel_create(bContext *C, ARegion *butregion, uiBut *but, uiPopoverCreateFunc popover_func, const PanelType *panel_type)
void ui_block_to_window_fl(const ARegion *region, const uiBlock *block, float *x, float *y)
Definition interface.cc:142
uiBut * ui_region_find_active_but(ARegion *region) ATTR_WARN_UNUSED_RESULT
void ui_but_pie_dir(RadialDirection dir, float vec[2])
uiBlockAlertLevel
uiBut * ui_but_next(uiBut *but) ATTR_WARN_UNUSED_RESULT
uiListType * UI_UL_cache_file_layers()
void ui_pie_menu_level_create(uiBlock *block, wmOperatorType *ot, blender::StringRefNull propname, IDProperty *properties, const EnumPropertyItem *items, int totitem, blender::wm::OpCallContext context, eUI_Item_Flag flag)
void ui_draw_but_CURVEPROFILE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect)
@ UI_SELECT_DRAW
@ UI_HIDDEN
@ UI_HOVER
@ UI_SCROLLED
@ UI_HAS_ICON
@ UI_SELECT
@ UI_SEARCH_FILTER_NO_MATCH
@ UI_BUT_ACTIVE_OVERRIDE
void ui_textedit_undo_stack_destroy(uiUndoStack_Text *stack)
int ui_but_align_opposite_to_area_align_get(const ARegion *region) ATTR_WARN_UNUSED_RESULT
PropertyScaleType ui_but_scale_type(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_draw_menu_item(const uiFontStyle *fstyle, rcti *rect, rcti *back_rect, float zoom, bool use_unpadded, const char *name, int iconid, int but_flag, uiMenuItemSeparatorType separator_type, int *r_xmax)
void ui_rna_collection_search_update_fn(const bContext *C, void *arg, const char *str, uiSearchItems *items, bool is_first)
int ui_but_icon(const uiBut *but)
blender::gpu::Batch * ui_batch_roundbox_shadow_get()
void ui_but_update_view_for_active(const bContext *C, const uiBlock *block)
bool ui_but_is_popover_once_compat(const uiBut *but) ATTR_WARN_UNUSED_RESULT
bool ui_but_is_editable_as_text(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_but_set_string_interactive(bContext *C, uiBut *but, const char *value)
uiUndoStack_Text * ui_textedit_undo_stack_create()
bool ui_but_drag_is_draggable(const uiBut *but)
bool ui_but_color_has_alpha(uiBut *but)
void ui_textedit_undo_push(uiUndoStack_Text *stack, const char *text, int cursor_index)
bool ui_but_anim_expression_set(uiBut *but, const char *str)
blender::gpu::Batch * ui_batch_roundbox_widget_get()
void ui_but_rna_menu_convert_to_menu_type(uiBut *but, const char *menu_type)
bool ui_but_is_color_gamma(uiBut *but)
void ui_layout_remove_but(uiLayout *layout, const uiBut *but)
std::function< void(bContext *, uiLayout *, PanelType *)> uiPopoverCreateFunc
void ui_block_align_calc(uiBlock *block, const ARegion *region)
void icon_draw_rect_input(float x, float y, int w, int h, int icon_id, float aspect, float alpha, bool inverted)
void ui_panel_drag_collapse_handler_add(const bContext *C, const bool was_open)
void ui_layout_add_but(uiLayout *layout, uiBut *but)
bool ui_but_is_unit(const uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_but_semi_modal_state_free(const bContext *C, uiBut *but)
uiBut * ui_but_prev(uiBut *but) ATTR_WARN_UNUSED_RESULT
void ui_but_drag_start(bContext *C, uiBut *but)
void ui_but_execute_begin(bContext *C, ARegion *region, uiBut *but, void **active_back)
void ui_but_execute_end(bContext *C, ARegion *region, uiBut *but, void *active_back)
void ui_draw_but_TRACKPREVIEW(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *recti)
int ui_searchbox_autocomplete(bContext *C, ARegion *region, uiBut *but, char *str)
void ui_draw_but_IMAGE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect)
void ui_draw_but_TAB_outline(const rcti *rect, float rad, uchar highlight[3], uchar highlight_fade[3])
#define UI_PIXEL_AA_JITTER
void ui_layout_panel_popup_scroll_apply(Panel *panel, const float dy)
void ui_region_winrct_get_no_margin(const ARegion *region, rcti *r_rect)
Definition interface.cc:388
bool ui_but_context_poll_operator(bContext *C, wmOperatorType *ot, const uiBut *but)
void ui_draw_but_COLORBAND(uiBut *but, const uiWidgetColors *wcol, const rcti *rect)
void ui_resources_init()
Definition resources.cc:49
uiMenuItemSeparatorType
@ UI_MENU_ITEM_SEPARATOR_NONE
@ UI_MENU_ITEM_SEPARATOR_HINT
@ UI_MENU_ITEM_SEPARATOR_SHORTCUT
void ui_draw_pie_center(uiBlock *block)
uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH]
blender::Vector< FCurve * > get_property_drivers(PointerRNA *ptr, PropertyRNA *prop, bool get_all, int index, bool *r_is_array_prop)
int paste_property_drivers(blender::Span< FCurve * > src_drivers, bool is_array_prop, PointerRNA *dst_ptr, PropertyRNA *dst_prop)
VecBase< float, 4 > float4
VecBase< int32_t, 2 > int2
static PyObject * create_func(PyObject *, PyObject *args)
Definition python.cpp:157
const char * name
float hsv_linear_slider[3]
float hsv_perceptual_init[3]
float rgb_perceptual_slider[3]
ColorPicker * next
float hsv_perceptual[3]
float luminosity_lock_value
float hsv_perceptual_slider[3]
ColorPicker * prev
Definition DNA_ID.h:414
float pie_center_spawned[2]
const char * title
float pie_center_init[2]
void(* listener_func)(const wmRegionListenerParams *params)
uiBlockDynamicListener * next
uiBlockDynamicListener * prev
float winmat[4][4]
blender::Vector< std::unique_ptr< uiBut > > buttons
char display_device[64]
uiBlock * next
ListBase layouts
PieMenuData pie_data
ListBase dynamic_listeners
uiButHandleNFunc funcN
bool is_color_gamma_picker
void remove_but(const uiBut *but)
Definition interface.cc:298
ColorPickerData color_pickers
ListBase saferct
uiLayout * curlayout
uiBlock * oldblock
uiBlock * prev
uiPopupBlockHandle * handle
uiButArgNFree func_argN_free_fn
uiButArgNCopy func_argN_copy_fn
uiBlockHandleFunc handle_func
double auto_open_last
uiBut * first_but() const
Definition interface.cc:304
blender::Vector< std::unique_ptr< bContextStore > > contexts
int bounds_offset[2]
int but_index(const uiBut *but) const
Definition interface.cc:274
blender::ui::EmbossType emboss
const char * lockstr
std::function< void(const bContext *, rcti *)> drawextra
eBlockBoundsCalc bounds_type
uiBlockInteraction_CallbackData custom_interaction_callbacks
bool ui_operator_free
uiBlockAlertLevel alert_level
wmOperator * ui_operator
uiButHandleFunc func
void * handle_func_arg
short content_hints
const UnitSettings * unit
ListBase butstore
blender::Vector< uiButtonGroup > button_groups
std::string name
uiBut * next_but(const uiBut *but) const
Definition interface.cc:286
int(* block_event_func)(const bContext *C, uiBlock *, const wmEvent *)
uiBut * prev_but(const uiBut *but) const
Definition interface.cc:292
uiBut * last_but() const
Definition interface.cc:309
ListBase views
ColorBand * edit_coba
CurveMapping * edit_cumap
eButGradientType gradient_type
CurveProfile * edit_profile
PointerRNA decorated_rnapoin
PropertyRNA * decorated_rnaprop
uiButExtraOpIcon * prev
wmOperatorCallParams * optype_params
uiButExtraOpIcon * next
eButGradientType gradient_type
wmEventModifierFlag modifier_key
blender::ui::ButProgressType progress_type
uiButSearchUpdateFn items_update_fn
PropertyRNA * rnasearchprop
uiButSearchListenFn listen_fn
PointerRNA rnasearchpoin
const char * item_sep_string
uiButSearchCreateFn popup_create_fn
uiFreeArgFunc arg_free_fn
uiButSearchTooltipFn item_tooltip_fn
uiButSearchContextMenuFn item_context_menu_fn
MenuType * menu
blender::ui::AbstractViewItem * view_item
uiBut()=default
uiButCompleteFunc autocomplete_func
int8_t dragflag
ListBase extra_op_icons
void * custom_data
ButPointerType pointype
uiBut & operator=(const uiBut &other)=default
uiButIdentityCompareFunc identity_cmp_func
uiButHandleNFunc funcN
void * func_arg2
std::function< void(bContext &)> apply_func
RadialDirection pie_dir
IconTextOverlay icon_overlay_text
blender::ui::EmbossType emboss
void * rename_orig
float * editvec
void * dragpoin
PropertyRNA * rnaprop
wmOperatorType * optype
const ImBuf * imb
bool menu_no_hover_open
char * editstr
std::function< std::string(const uiBut *)> tip_quick_func
double * editval
bool operator_never_call
uiHandleButtonData * active
uiButHandleFunc func
BIFIconID drag_preview_icon_id
const char * disabled_info
ButType type
uchar unit_type
float search_weight
void * tip_arg
uiBlock * block
PointerRNA * opptr
uiMenuCreateFunc menu_create_func
std::function< void(std::string &new_name)> rename_full_func
blender::wm::OpCallContext opcontext
std::string rename_full_new
const bContextStore * context
uiButToolTipFunc tip_func
std::string drawstr
uiButArgNFree func_argN_free_fn
virtual ~uiBut()=default
void * func_arg1
std::function< bool(const uiBut &)> pushed_state_func
std::string str
uiButHandleHoldFunc hold_func
void * hold_argN
char * placeholder
BIFIconID icon
uiButHandleRenameFunc rename_func
uiBlockCreateFunc block_create_func
uiButArgNCopy func_argN_copy_fn
uiFreeArgFunc tip_arg_free
uiBut(const uiBut &other)=default
void * autofunc_arg
eWM_DragDataType dragtype
void * rename_arg1
PointerRNA rnapoin
uiMenuStepFunc menu_step_func
uiHandleButtonData * semi_modal_state
uiLayout * layout
float imb_scale
blender::StringRef tip
uiButToolTipCustomFunc tip_custom_func
void * func_argN
uchar col[4]
uiButtonGroupFlag flag
blender::Vector< uiBut * > buttons
blender::int2 event_xy
uiBlockHandleCreateFunc handle_create_func
uiBlockCreateFunc create_func
void(* popup_func)(bContext *C, void *arg, int event)
void(* cancel_func)(bContext *C, void *arg)
uiPopupBlockCreate popup_create_vars
uiSafetyRct * prev
uiSafetyRct * next
int xy[2]
Definition wm_draw.cc:178
PointerRNA * ptr
Definition wm_files.cc:4238
wmOperatorType * ot
Definition wm_files.cc:4237
uint8_t flag
Definition wm_window.cc:145