Blender V4.3
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
9#pragma once
10
11#include <functional>
12
13#include "BLI_compiler_attrs.h"
15#include "BLI_rect.h"
16#include "BLI_string_ref.hh"
17#include "BLI_vector.hh"
18
19#include "BKE_fcurve.hh"
20
21#include "DNA_listBase.h"
22#include "RNA_types.hh"
23#include "UI_interface.hh"
24#include "UI_resources.hh"
25
27struct ARegion;
28struct bContext;
29struct bContextStore;
31struct CurveMapping;
32struct CurveProfile;
33namespace blender::gpu {
34class Batch;
35}
36struct IconTextOverlay;
37struct ID;
38struct ImBuf;
40struct Main;
41struct Scene;
43struct uiLayout;
44struct uiListType;
45struct uiStyle;
46struct uiUndoStack_Text;
47struct uiWidgetColors;
48struct UnitSettings;
49struct wmEvent;
50struct wmKeyConfig;
51struct wmOperatorType;
52struct wmTimer;
53
54/* ****************** general defines ************** */
55
56#define RNA_NO_INDEX -1
57#define RNA_ENUM_VALUE -2
58
59#define UI_MENU_PADDING (int)(0.2f * UI_UNIT_Y)
60
61#define UI_MENU_WIDTH_MIN (UI_UNIT_Y * 9)
63#define UI_MENU_SUBMENU_PADDING (6 * UI_SCALE_FAC)
64
65/* menu scrolling */
66#define UI_MENU_SCROLL_ARROW (12 * UI_SCALE_FAC)
67#define UI_MENU_SCROLL_MOUSE (UI_MENU_SCROLL_ARROW + 2 * UI_SCALE_FAC)
68#define UI_MENU_SCROLL_PAD (4 * UI_SCALE_FAC)
69
71#define UI_POPOVER_WIDTH_UNITS 10
72
74enum {
76 UI_SELECT = (1 << 0),
78 UI_SCROLLED = (1 << 1),
86 UI_HOVER = (1 << 2),
87 UI_HAS_ICON = (1 << 3),
88 UI_HIDDEN = (1 << 4),
90 UI_SELECT_DRAW = (1 << 5),
93
98
99 /* WARNING: rest of #uiBut.flag in UI_interface.hh */
100};
101
114
116#define UI_RADIAL_DIRECTION_NEXT(dir) RadialDirection((int(dir) + 1) % (int(UI_RADIAL_NW) + 1))
118#define UI_RADIAL_DIRECTION_PREV(dir) \
119 RadialDirection(((int(dir) + int(UI_RADIAL_NW))) % (int(UI_RADIAL_NW) + 1))
120
122#define UI_RADIAL_MASK_ALL_DIAGONAL \
123 ((1 << int(UI_RADIAL_NE)) | (1 << int(UI_RADIAL_SE)) | (1 << int(UI_RADIAL_SW)) | \
124 (1 << int(UI_RADIAL_NW)))
125#define UI_RADIAL_MASK_ALL_AXIS_ALIGNED \
126 ((1 << int(UI_RADIAL_N)) | (1 << int(UI_RADIAL_S)) | (1 << int(UI_RADIAL_E)) | \
127 (1 << int(UI_RADIAL_W)))
128
129extern const char ui_radial_dir_order[8];
130extern const char ui_radial_dir_to_numpad[8];
131extern const short ui_radial_dir_to_angle[8];
132
133/* internal panel drawing defines */
134#define PNL_HEADER (UI_UNIT_Y * 1.25) /* 24 default */
135
136/* bit button defines */
137/* Bit operations */
138#define UI_BITBUT_TEST(a, b) (((a) & (1 << (b))) != 0)
139#define UI_BITBUT_VALUE_TOGGLED(a, b) ((a) ^ (1 << (b)))
140#define UI_BITBUT_VALUE_ENABLED(a, b) ((a) | (1 << (b)))
141#define UI_BITBUT_VALUE_DISABLED(a, b) ((a) & ~(1 << (b)))
142
143/* bit-row */
144#define UI_BITBUT_ROW(min, max) \
145 (((max) >= 31 ? 0xFFFFFFFF : (1 << ((max) + 1)) - 1) - ((min) ? ((1 << (min)) - 1) : 0))
146
148#define USE_NUMBUTS_LR_ALIGN
149
151#define USE_UIBUT_SPATIAL_ALIGN
152
154enum {
167};
168
169#define PIE_CLICK_THRESHOLD_SQ 50.0f
170
172#define PIE_MAX_ITEMS 8
173
174struct uiBut {
175 uiBut *next = nullptr, *prev = nullptr;
176
178 uiLayout *layout = nullptr;
179 int flag = 0;
180 int flag2 = 0;
181 int drawflag = 0;
184 short bit = 0, bitnr = 0, retval = 0, strwidth = 0, alignnr = 0;
185 short ofs = 0, pos = 0, selsta = 0, selend = 0;
186
187 std::string str;
188
189 std::string drawstr;
190
191 char *placeholder = nullptr;
192
193 rctf rect = {}; /* block relative coords */
194
195 char *poin = nullptr;
196 float hardmin = 0, hardmax = 0, softmin = 0, softmax = 0;
197
202 uchar col[4] = {0};
203
206
208 void *func_arg1 = nullptr;
209 void *func_arg2 = nullptr;
214 std::function<void(bContext &)> apply_func;
215
217 void *func_argN = nullptr;
220
221 const bContextStore *context = nullptr;
222
224 void *autofunc_arg = nullptr;
225
227 void *rename_arg1 = nullptr;
228 void *rename_orig = nullptr;
229
230 /* When defined, and the button edits a string RNA property, the new name is _not_ set at all,
231 * instead this function is called with the new name. */
232 std::function<void(std::string &new_name)> rename_full_func = nullptr;
233 std::string rename_full_new = "";
234
237 void *hold_argN = nullptr;
238
239 const char *tip = nullptr;
241 void *tip_arg = nullptr;
244 std::function<std::string(const uiBut *)> tip_label_func;
245
247
249 const char *disabled_info = nullptr;
250
251 BIFIconID icon = ICON_NONE;
257 bool changed = false;
260 short iconadd = 0;
261
263 float search_weight = 0.0f;
264
267
270
272
273 /* RNA data */
276 int rnaindex = 0;
277
278 /* Operator data */
280 PointerRNA *opptr = nullptr;
287
290
291 ListBase extra_op_icons = {nullptr, nullptr};
294 short dragflag = 0;
295 void *dragpoin = nullptr;
296 const ImBuf *imb = nullptr;
297 float imb_scale = 0;
298
303 uiHandleButtonData *active = nullptr;
316
318 void *custom_data = nullptr;
319
320 char *editstr = nullptr;
321 double *editval = nullptr;
322 float *editvec = nullptr;
323
324 std::function<bool(const uiBut &)> pushed_state_func;
325
328
329 /* pointer back */
330 uiBlock *block = nullptr;
331
332 uiBut() = default;
334 uiBut(const uiBut &other) = default;
336 uiBut &operator=(const uiBut &other) = default;
337};
338
340struct uiButNumber : public uiBut {
341 float step_size = 0.0f;
342 float precision = 0.0f;
343};
344
346struct uiButNumberSlider : public uiBut {
347 float step_size = 0.0f;
348 float precision = 0.0f;
349};
350
352struct uiButColor : public uiBut {
353 bool is_pallete_color = false;
355};
356
358struct uiButTab : public uiBut {
359 MenuType *menu = nullptr;
360};
361
391
401
409
411struct uiButSeparatorLine : public uiBut {
413};
414
416struct uiButLabel : public uiBut {
417 float alpha_factor = 1.0f;
418};
419
421struct uiButScrollBar : public uiBut {
423 float visual_height = -1.0f;
424};
425
426struct uiButViewItem : public uiBut {
427 /* The view item this button was created for. */
429 /* Some items want to have a fixed size for drawing, differing from the interaction rectangle
430 * (e.g. so highlights are drawn smaller). */
431 int draw_width = 0;
432 int draw_height = 0;
433};
434
439
441struct uiButColorBand : public uiBut {
443};
444
446struct uiButCurveProfile : public uiBut {
448};
449
455
457struct uiButHotkeyEvent : public uiBut {
458 short modifier_key = 0;
459};
460
473
476
484
489
495
496 /* Alpha component. */
498};
499
503
506 const char *title;
507 int icon;
508
511 float pie_dir[2];
514 float last_pos[2];
516 int flags;
519 float alphafac;
520};
521
528
529/* #uiButtonGroup.flag. */
537
548
554
555struct uiBlock {
557
561
564
566
569
571
576
577 ListBase dynamic_listeners; /* #uiBlockDynamicListener */
578
579 std::string name;
580
581 float winmat[4][4];
582
584 float aspect;
585
588
592
597
600
603
606
608 std::function<void(const bContext *, rcti *)> drawextra;
609
610 int flag;
611 short alignnr;
615 short content_hints; /* #eBlockContentHints */
616
623 char _pad[5];
625
626 const char *lockstr;
627
628 bool lock;
630 bool active;
635
642
647
649
654
656 void *evil_C;
657
663
666
672
674};
675
681
682/* `interface.cc` */
683
684void ui_fontscale(float *points, float aspect);
685
687void ui_but_to_pixelrect(rcti *rect,
688 const ARegion *region,
689 const uiBlock *block,
690 const uiBut *but);
691rcti ui_to_pixelrect(const ARegion *region, const uiBlock *block, const rctf *src_rect);
692
693void ui_block_to_region_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
694void ui_block_to_window_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
695void ui_block_to_window(const ARegion *region, const uiBlock *block, int *x, int *y);
696void ui_block_to_region_rctf(const ARegion *region,
697 const uiBlock *block,
698 rctf *rct_dst,
699 const rctf *rct_src);
700void ui_block_to_window_rctf(const ARegion *region,
701 const uiBlock *block,
702 rctf *rct_dst,
703 const rctf *rct_src);
704float ui_block_to_window_scale(const ARegion *region, const uiBlock *block);
708void ui_window_to_block_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
709void ui_window_to_block(const ARegion *region, const uiBlock *block, int *x, int *y);
710void ui_window_to_block_rctf(const ARegion *region,
711 const uiBlock *block,
712 rctf *rct_dst,
713 const rctf *rct_src);
714void ui_window_to_region(const ARegion *region, int *x, int *y);
715void ui_window_to_region_rcti(const ARegion *region, rcti *rect_dst, const rcti *rct_src);
716void ui_window_to_region_rctf(const ARegion *region, rctf *rect_dst, const rctf *rct_src);
717void ui_region_to_window(const ARegion *region, int *x, int *y);
722void ui_region_winrct_get_no_margin(const ARegion *region, rcti *r_rect);
723
726 void (*listener_func)(const wmRegionListenerParams *params));
727
735uiBut *ui_but_change_type(uiBut *but, eButType new_type);
736
737double ui_but_value_get(uiBut *but);
738void ui_but_value_set(uiBut *but, double value);
742void ui_but_hsv_set(uiBut *but);
746void ui_but_v3_get(uiBut *but, float vec[3]);
747void ui_but_v3_set(uiBut *but, const float vec[3]);
748void ui_but_v4_get(uiBut *but, float vec[4]);
749void ui_but_v4_set(uiBut *but, const float vec[4]);
750
752 const rcti *rect, float mx, float my, float *r_val_rad, float *r_val_dist);
757 const ColorPicker *cpicker, const rcti *rect, const float *hsv, float *r_xpos, float *r_ypos);
759 const uiButHSVCube *hsv_but, const rcti *rect, const float *hsv, float *r_xp, float *r_yp);
760
768 char *str,
769 size_t str_maxncpy,
770 int float_precision,
771 bool use_exp_float,
772 bool *r_use_exp_float) ATTR_NONNULL(1, 2);
773void ui_but_string_get(uiBut *but, char *str, size_t str_maxncpy) ATTR_NONNULL();
780char *ui_but_string_get_dynamic(uiBut *but, int *r_str_size);
784void ui_but_convert_to_unit_alt_name(uiBut *but, char *str, size_t str_maxncpy) ATTR_NONNULL();
785bool ui_but_string_set(bContext *C, uiBut *but, const char *str) ATTR_NONNULL();
786bool ui_but_string_eval_number(bContext *C, const uiBut *but, const char *str, double *r_value)
787 ATTR_NONNULL();
798void ui_but_set_string_interactive(bContext *C, uiBut *but, const char *value);
800
804const char *ui_but_placeholder_get(uiBut *but);
805
806void ui_def_but_icon(uiBut *but, int icon, int flag);
811
813
814void ui_but_rna_menu_convert_to_panel_type(uiBut *but, const char *panel_type);
815void ui_but_rna_menu_convert_to_menu_type(uiBut *but, const char *menu_type);
816bool ui_but_menu_draw_as_popover(const uiBut *but);
817
820
828 const uiBut *but,
829 const wmOperatorCallParams *optype_params);
830
831void ui_but_update(uiBut *but);
832void ui_but_update_edited(uiBut *but);
840bool ui_but_is_compatible(const uiBut *but_a, const uiBut *but_b) ATTR_WARN_UNUSED_RESULT;
846
852int ui_but_is_pushed_ex(uiBut *but, double *value) ATTR_WARN_UNUSED_RESULT;
854
855void ui_but_override_flag(Main *bmain, uiBut *but);
856
857void ui_block_bounds_calc(uiBlock *block);
858
860void ui_block_cm_to_display_space_v3(uiBlock *block, float pixel[3]);
861
862/* `interface_regions.cc` */
863
868 int event_xy[2];
869};
870
871using uiBlockHandleCreateFunc = uiBlock *(*)(bContext *C, uiPopupBlockHandle *handle, void *arg1);
872
885
887 /* internal */
889
891 float towards_xy[2];
894
895 bool popup;
896 void (*popup_func)(bContext *C, void *arg, int event);
897 void (*cancel_func)(bContext *C, void *arg);
899
910
913
915
916 /* for operator popups */
920
921 /* return values */
925 float retvec[4];
926
929
930 /* Previous values so we don't resize or reposition on refresh. */
935
936 /* Maximum estimated size to avoid having to reposition on refresh. */
938
939 /* #ifdef USE_DRAG_POPUP */
942 /* #endif */
943
944 char menu_idname[64];
945};
946
947/* -------------------------------------------------------------------- */
948/* interface_region_*.c */
949
950/* `interface_region_tooltip.cc` */
951
952/* exposed as public API in UI_interface.hh */
953
954/* `interface_region_color_picker.cc` */
955
956void ui_color_picker_rgb_to_hsv_compat(const float rgb[3], float r_cp[3]);
957void ui_color_picker_rgb_to_hsv(const float rgb[3], float r_cp[3]);
958void ui_color_picker_hsv_to_rgb(const float r_cp[3], float rgb[3]);
959
965
970
971void ui_scene_linear_to_perceptual_space(uiBut *but, float rgb[3]);
972void ui_perceptual_to_scene_linear_space(uiBut *but, float rgb[3]);
973
974uiBlock *ui_block_func_COLOR(bContext *C, uiPopupBlockHandle *handle, void *arg_but);
976
977/* `interface_region_search.cc` */
978
984ARegion *ui_searchbox_create_menu(bContext *C, ARegion *butregion, uiButSearch *search_but);
985
989bool ui_searchbox_inside(ARegion *region, const int xy[2]) ATTR_NONNULL(1, 2);
990int ui_searchbox_find_index(ARegion *region, const char *name);
994void ui_searchbox_update(bContext *C, ARegion *region, uiBut *but, bool reset);
995int ui_searchbox_autocomplete(bContext *C, ARegion *region, uiBut *but, char *str);
997 bContext *C, ARegion *region, uiBut *but, ARegion *butregion, const wmEvent *event);
1001bool ui_searchbox_apply(uiBut *but, ARegion *region);
1002void ui_searchbox_free(bContext *C, ARegion *region);
1007
1008/* `interface_region_menu_popup.cc` */
1009
1010int ui_but_menu_step(uiBut *but, int direction);
1011bool ui_but_menu_step_poll(const uiBut *but);
1013void ui_popup_menu_memory_set(uiBlock *block, uiBut *but);
1014
1019 uiPopupBlockHandle *handle,
1020 ARegion *butregion,
1021 uiBut *but);
1022
1024 ARegion *butregion,
1025 uiBut *but,
1027 uiBlockHandleCreateFunc handle_create_func,
1028 void *arg,
1029 uiFreeArgFunc arg_free,
1030 bool can_refresh);
1032 bContext *C, ARegion *butregion, uiBut *but, uiMenuCreateFunc menu_func, void *arg);
1033
1034/* `interface_region_popover.cc` */
1035
1036using uiPopoverCreateFunc = std::function<void(bContext *, uiLayout *, PanelType *)>;
1037
1039 ARegion *butregion,
1040 uiBut *but,
1041 uiPopoverCreateFunc popover_func,
1042 const PanelType *panel_type);
1043
1044/* `interface_region_menu_pie.cc` */
1045
1051 const char *propname,
1052 IDProperty *properties,
1053 const EnumPropertyItem *items,
1054 int totitem,
1055 wmOperatorCallContext context,
1057
1058/* `interface_region_popup.cc` */
1059
1063void ui_popup_translate(ARegion *region, const int mdiff[2]);
1066
1067/* end interface_region_*.c */
1068
1069/* `interface_panel.cc` */
1070
1077 const wmEvent *event,
1078 ARegion *region,
1079 const uiBut *active_but);
1083void ui_draw_aligned_panel(const ARegion *region,
1084 const uiStyle *style,
1085 const uiBlock *block,
1086 const rcti *rect,
1087 bool show_pin,
1088 bool show_background,
1089 bool region_search_filter_active);
1090void ui_draw_layout_panels_backdrop(const ARegion *region,
1091 const Panel *panel,
1092 const float radius,
1093 float subpanel_backcolor[4]);
1094void ui_panel_drag_collapse_handler_add(const bContext *C, const bool was_open);
1100void ui_layout_panel_popup_scroll_apply(Panel *panel, const float dy);
1101
1105void ui_draw_gradient(const rcti *rect, const float hsv[3], eButGradientType type, float alpha);
1106
1113void ui_draw_rounded_corners_inverted(const rcti &rect,
1114 const float rad,
1115 const blender::float4 color);
1116
1117/* based on UI_draw_roundbox_gl_mode,
1118 * check on making a version which allows us to skip some sides */
1119void ui_draw_but_TAB_outline(const rcti *rect,
1120 float rad,
1121 uchar highlight[3],
1122 uchar highlight_fade[3]);
1123void ui_draw_but_HISTOGRAM(ARegion *region,
1124 uiBut *but,
1125 const uiWidgetColors *wcol,
1126 const rcti *recti);
1127void ui_draw_but_WAVEFORM(ARegion *region,
1128 uiBut *but,
1129 const uiWidgetColors *wcol,
1130 const rcti *recti);
1131void ui_draw_but_VECTORSCOPE(ARegion *region,
1132 uiBut *but,
1133 const uiWidgetColors *wcol,
1134 const rcti *recti);
1135void ui_draw_but_COLORBAND(uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1136void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rect, float radius);
1137void ui_draw_but_CURVE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1142 uiBut *but,
1143 const uiWidgetColors *wcol,
1144 const rcti *rect);
1145void ui_draw_but_IMAGE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1147 uiBut *but,
1148 const uiWidgetColors *wcol,
1149 const rcti *recti);
1150
1151/* `interface_undo.cc` */
1152
1165void ui_textedit_undo_push(uiUndoStack_Text *stack, const char *text, int cursor_index);
1166const char *ui_textedit_undo(uiUndoStack_Text *stack, int direction, int *r_cursor_index);
1167
1168/* interface_handlers.cc */
1169
1174void ui_pan_to_scroll(const wmEvent *event, int *type, int *val);
1180void ui_but_activate_event(bContext *C, ARegion *region, uiBut *but);
1187void ui_but_activate_over(bContext *C, ARegion *region, uiBut *but);
1188void ui_but_execute_begin(bContext *C, ARegion *region, uiBut *but, void **active_back);
1189void ui_but_execute_end(bContext *C, ARegion *region, uiBut *but, void *active_back);
1190void ui_but_active_free(const bContext *C, uiBut *but);
1191void ui_but_semi_modal_state_free(const bContext *C, uiBut *but);
1196void ui_but_update_view_for_active(const bContext *C, const uiBlock *block);
1198void ui_but_text_password_hide(char password_str[128], uiBut *but, bool restore);
1204uiBut *ui_but_find_select_in_enum(uiBut *but, int direction);
1205bool ui_but_is_editing(const uiBut *but);
1206float ui_block_calc_pie_segment(uiBlock *block, const float event_xy[2]);
1207
1208/* XXX, this code will shorten any allocated string to 'UI_MAX_NAME_STR'
1209 * since this is really long its unlikely to be an issue,
1210 * but this could be supported */
1211void ui_but_add_shortcut(uiBut *but, const char *shortcut_str, bool do_strip);
1213bool ui_but_rna_equals(const uiBut *a, const uiBut *b);
1214bool ui_but_rna_equals_ex(const uiBut *but,
1215 const PointerRNA *ptr,
1216 const PropertyRNA *prop,
1217 int index);
1218uiBut *ui_but_find_old(uiBlock *block_old, const uiBut *but_new);
1219uiBut *ui_but_find_new(uiBlock *block_new, const uiBut *but_old);
1220
1221#ifdef WITH_INPUT_IME
1222void ui_but_ime_reposition(uiBut *but, int x, int y, bool complete);
1223const wmIMEData *ui_but_ime_data_get(uiBut *but);
1224#endif
1225
1226/* interface_widgets.cc */
1227
1228/* Widget shader parameters, must match the shader layout. */
1231 float radi, rad;
1232 float facxi, facyi;
1236 float color_tria[4];
1240 /* We pack alpha check and discard factor in alpha_discard.
1241 * If the value is negative then we do alpha check.
1242 * The absolute value itself is the discard factor.
1243 * Initialize value to 1.0f if you don't want discard. */
1246 float _pad[3];
1247};
1248
1249enum {
1257
1258 ROUNDBOX_TRIA_MAX, /* don't use */
1259};
1260
1261blender::gpu::Batch *ui_batch_roundbox_widget_get();
1262blender::gpu::Batch *ui_batch_roundbox_shadow_get();
1263
1264void ui_draw_menu_back(uiStyle *style, uiBlock *block, const rcti *rect);
1265void ui_draw_popover_back(ARegion *region, uiStyle *style, uiBlock *block, const rcti *rect);
1266void ui_draw_pie_center(uiBlock *block);
1268
1269void ui_draw_widget_menu_back_color(const rcti *rect, bool use_shadow, const float color[4]);
1270void ui_draw_widget_menu_back(const rcti *rect, bool use_shadow);
1271void ui_draw_tooltip_background(const uiStyle *style, uiBlock *block, const rcti *rect);
1272
1276void ui_draw_but(const bContext *C, ARegion *region, uiStyle *style, uiBut *but, rcti *rect);
1277
1301void ui_draw_menu_item(const uiFontStyle *fstyle,
1302 rcti *rect,
1303 const char *name,
1304 int iconid,
1305 int but_flag,
1306 uiMenuItemSeparatorType separator_type,
1307 int *r_xmax);
1308void ui_draw_preview_item(const uiFontStyle *fstyle,
1309 rcti *rect,
1310 const char *name,
1311 int iconid,
1312 int but_flag,
1313 eFontStyle_Align text_align);
1323 rcti *rect,
1324 blender::StringRef name,
1325 int iconid,
1326 const uchar text_col[4],
1327 eFontStyle_Align text_align,
1328 bool draw_as_icon = false);
1329
1330#define UI_TEXT_MARGIN_X 0.4f
1331#define UI_POPUP_MARGIN (UI_SCALE_FAC * 12)
1336#define UI_POPUP_MENU_TOP (int)(10 * UI_SCALE_FAC)
1337
1338#define UI_PIXEL_AA_JITTER 8
1339extern const float ui_pixel_jitter[UI_PIXEL_AA_JITTER][2];
1340
1341/* `interface_style.cc` */
1342
1347void uiStyleInit();
1348
1349/* interface_icons.cc */
1350
1351void ui_icon_ensure_deferred(const bContext *C, int icon_id, bool big);
1352int ui_id_icon_get(const bContext *C, ID *id, bool big);
1353
1354/* interface_icons_event.cc */
1355
1356float ui_event_icon_offset(int icon_id);
1357
1359 float x, float y, int w, int h, int icon_id, float aspect, float alpha, bool inverted);
1360
1361/* resources.cc */
1362
1363void ui_resources_init();
1364void ui_resources_free();
1365
1366/* interface_layout.cc */
1367
1368void ui_layout_add_but(uiLayout *layout, uiBut *but);
1369void ui_layout_remove_but(uiLayout *layout, const uiBut *but);
1373bool ui_layout_replace_but_ptr(uiLayout *layout, const void *old_but_ptr, uiBut *new_but);
1379 PointerRNA *ptr,
1380 PropertyRNA *prop,
1381 PointerRNA *searchptr,
1382 PropertyRNA *searchprop,
1383 bool results_are_suggestions);
1390/* menu callback */
1391void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt);
1392void ui_item_paneltype_func(bContext *C, uiLayout *layout, void *arg_pt);
1393
1394/* interface_button_group.cc */
1395
1401void ui_button_group_add_but(uiBlock *block, uiBut *but);
1402void ui_button_group_replace_but_ptr(uiBlock *block, const uiBut *old_but_ptr, uiBut *new_but);
1403
1404/* interface_drag.cc */
1405
1406void ui_but_drag_free(uiBut *but);
1407bool ui_but_drag_is_draggable(const uiBut *but);
1408void ui_but_drag_start(bContext *C, uiBut *but);
1409
1410/* interface_align.cc */
1411
1421void ui_block_align_calc(uiBlock *block, const ARegion *region);
1422
1423/* `interface_anim.cc` */
1424
1425void ui_but_anim_flag(uiBut *but, const AnimationEvalContext *anim_eval_context);
1432bool ui_but_anim_expression_get(uiBut *but, char *str, size_t str_maxncpy);
1433bool ui_but_anim_expression_set(uiBut *but, const char *str);
1437bool ui_but_anim_expression_create(uiBut *but, const char *str);
1438void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra);
1439
1440void ui_but_anim_decorate_cb(bContext *C, void *arg_but, void *arg_dummy);
1442
1443/* `interface_query.cc` */
1444
1453bool ui_but_is_interactive_ex(const uiBut *but, const bool labeledit, const bool for_tooltip);
1454bool ui_but_is_interactive(const uiBut *but, bool labeledit) ATTR_WARN_UNUSED_RESULT;
1457int ui_but_icon(const uiBut *but);
1458void ui_but_pie_dir(RadialDirection dir, float vec[2]);
1459
1461
1462bool ui_but_contains_pt(const uiBut *but, float mx, float my) ATTR_WARN_UNUSED_RESULT;
1463bool ui_but_contains_rect(const uiBut *but, const rctf *rect);
1464bool ui_but_contains_point_px_icon(const uiBut *but,
1465 ARegion *region,
1466 const wmEvent *event) ATTR_WARN_UNUSED_RESULT;
1467bool ui_but_contains_point_px(const uiBut *but, const ARegion *region, const int xy[2])
1469
1471 const wmEvent *event) ATTR_WARN_UNUSED_RESULT;
1472uiBut *ui_list_find_from_row(const ARegion *region, const uiBut *row_but) ATTR_WARN_UNUSED_RESULT;
1473uiBut *ui_list_row_find_mouse_over(const ARegion *region, const int xy[2])
1475uiBut *ui_list_row_find_index(const ARegion *region,
1476 int index,
1478uiBut *ui_view_item_find_mouse_over(const ARegion *region, const int xy[2]) ATTR_NONNULL(1, 2);
1479uiBut *ui_view_item_find_active(const ARegion *region);
1481
1482using uiButFindPollFn = bool (*)(const uiBut *but, const void *customdata);
1487 const int xy[2],
1488 bool labeledit,
1489 bool for_tooltip,
1490 const uiButFindPollFn find_poll,
1491 const void *find_custom_data)
1494uiBut *ui_but_find_rect_over(const ARegion *region, const rcti *rect_px) ATTR_WARN_UNUSED_RESULT;
1495
1496uiBut *ui_list_find_mouse_over_ex(const ARegion *region, const int xy[2])
1498
1500
1503size_t ui_but_tip_len_only_first_line(const uiBut *but);
1504
1509
1515
1516uiBlock *ui_block_find_mouse_over_ex(const ARegion *region, const int xy[2], bool only_clip)
1517 ATTR_NONNULL(1, 2);
1518uiBlock *ui_block_find_mouse_over(const ARegion *region, const wmEvent *event, bool only_clip);
1519
1520uiBut *ui_region_find_first_but_test_flag(ARegion *region, int flag_include, int flag_exclude);
1522bool ui_region_contains_point_px(const ARegion *region, const int xy[2])
1524bool ui_region_contains_rect_px(const ARegion *region, const rcti *rect_px);
1525
1531
1532/* interface_context_menu.cc */
1533
1534bool ui_popup_context_menu_for_button(bContext *C, uiBut *but, const wmEvent *event);
1538void ui_popup_context_menu_for_panel(bContext *C, ARegion *region, Panel *panel);
1539
1540/* `interface_eyedropper.cc` */
1541
1544
1545/* interface_eyedropper_color.c */
1546
1548
1549/* interface_eyedropper_colorband.c */
1550
1551namespace blender::ui {
1552void UI_OT_eyedropper_colorramp(wmOperatorType *ot);
1553void UI_OT_eyedropper_colorramp_point(wmOperatorType *ot);
1554
1555void UI_OT_eyedropper_bone(wmOperatorType *ot);
1556
1557} // namespace blender::ui
1558
1559/* interface_eyedropper_datablock.c */
1560
1562
1563/* interface_eyedropper_depth.c */
1564
1566
1567/* interface_eyedropper_driver.c */
1568
1570
1571/* eyedropper_grease_pencil_color.cc */
1572
1574
1575/* interface_template_asset_shelf_popover.cc */
1576std::optional<blender::StringRefNull> UI_asset_shelf_idname_from_button_context(const uiBut *but);
1577
1578/* interface_template_asset_view.cc */
1579
1581
1588
1591
1593 /* Let UI_butstore_ API update search_but pointer above over redraws. */
1595 /* Block has to be stored for freeing butstore (uiBut.block doesn't work with undo). */
1597};
1599 const bContext *C, void *arg, const char *str, uiSearchItems *items, bool is_first);
1600
1601/* `interface_ops.cc` */
1602
1604
1605/* interface_queries.c */
1606
1608
1609/* interface_view.cc */
1610
1611void ui_block_free_views(uiBlock *block);
1612void ui_block_views_bounds_calc(const uiBlock *block);
1613void ui_block_views_listen(const uiBlock *block, const wmRegionListenerParams *listener_params);
1614void ui_block_views_draw_overlays(const ARegion *region, const uiBlock *block);
1616 const uiBlock &new_block, const blender::ui::AbstractView &new_view);
1617
1619 const uiBlock &new_block, const blender::ui::AbstractViewItem &new_item);
1620
1621/* abstract_view_item.cc */
1622
1625
1626/* interface_templates.cc */
1627
1629
1631 bContext *C, Main *bmain, ID *owner_id, ID *id, const char **r_undo_push_label);
1632
1633/* Functions in this namespace are only exposed for unit testing purposes, and
1634 * should not be used outside of the files where they are defined. */
1636
1658 PointerRNA *ptr, PropertyRNA *prop, bool get_all, int index, bool *r_is_array_prop);
1659
1683 bool is_array_prop,
1684 PointerRNA *dst_ptr,
1685 PropertyRNA *dst_prop);
1686
1687} // namespace blender::interface::internal
#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.
PropertyScaleType
Definition RNA_types.hh:106
#define C
Definition RandGen.cpp:29
void(*)(void *arg) uiFreeArgFunc
eUIEmbossType
@ UI_EMBOSS
std::string(*)(bContext *C, void *argN, const char *tip) uiButToolTipFunc
bool(*)(const uiBut *a, const uiBut *b) uiButIdentityCompareFunc
void(*)(bContext *C, uiLayout *layout, void *arg1) uiMenuCreateFunc
void(*)(const bContext *C, void *arg, const char *str, uiSearchItems *items, bool is_first) uiButSearchUpdateFn
void(*)(bContext *C, void *arg, char *origstr) uiButHandleRenameFunc
eButProgressType
@ UI_BUT_PROGRESS_TYPE_BAR
void *(*)(const void *argN) uiButArgNCopy
void(*)(void *argN) uiButArgNFree
eFontStyle_Align
void(*)(bContext *C, void *arg, int event) uiBlockHandleFunc
eBlockBoundsCalc
bool(*)(bContext *C, void *arg, void *active, const wmEvent *event) uiButSearchContextMenuFn
int(*)(bContext *C, char *str, void *arg) uiButCompleteFunc
ARegion *(*)(bContext *C, ARegion *region, const rcti *item_rect, void *arg, void *active) uiButSearchTooltipFn
void(*)(bContext *C, ARegion *butregion, uiBut *but) uiButHandleHoldFunc
eButGradientType
@ UI_GRAD_SV
void(*)(bContext *C, void *argN, void *arg2) uiButHandleNFunc
void(*)(bContext *C, void *arg1, void *arg2) uiButHandleFunc
ARegion *(*)(bContext *C, ARegion *butregion, uiButSearch *search_but) uiButSearchCreateFn
bool(*)(bContext *C, int direction, void *arg1) uiMenuStepFunc
eButPointerType
@ UI_BUT_POIN_NONE
uiBlock *(*)(bContext *C, ARegion *region, void *arg1) uiBlockCreateFunc
void(*)(bContext &C, uiTooltipData &data, void *argN) uiButToolTipCustomFunc
void(*)(const wmRegionListenerParams *params, void *arg) uiButSearchListenFn
eUI_Item_Flag
int BIFIconID
wmOperatorCallContext
Definition WM_types.hh:216
@ WM_OP_INVOKE_DEFAULT
Definition WM_types.hh:218
eWM_DragDataType
Definition WM_types.hh:1152
@ WM_DRAG_ID
Definition WM_types.hh:1153
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
local_group_size(16, 16) .push_constant(Type b
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
#define str(s)
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 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)
uiBut * ui_but_find_mouse_over(const ARegion *region, const wmEvent *event) ATTR_WARN_UNUSED_RESULT
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:804
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
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:221
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)
const short ui_radial_dir_to_angle[8]
uiBlock *(*)(bContext *C, uiPopupBlockHandle *handle, void *arg1) uiBlockHandleCreateFunc
uiBlock uiBlock * ui_block_find_mouse_over(const ARegion *region, const wmEvent *event, bool only_clip)
void ui_handle_afterfunc_add_operator(wmOperatorType *ot, wmOperatorCallContext opcontext)
bool ui_but_menu_step_poll(const uiBut *but)
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_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_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:52
uiBut * ui_list_find_from_row(const ARegion *region, const uiBut *row_but) ATTR_WARN_UNUSED_RESULT
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_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
wmKeyMap * eyedropper_colorband_modal_keymap(wmKeyConfig *keyconf)
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_draw_preview_item_stateless(const uiFontStyle *fstyle, rcti *rect, blender::StringRef name, int iconid, const uchar text_col[4], eFontStyle_Align text_align, bool draw_as_icon=false)
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)
bool ATTR_WARN_UNUSED_RESULT
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()
void ui_popup_context_menu_for_panel(bContext *C, ARegion *region, Panel *panel)
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:153
void ui_draw_layout_panels_backdrop(const ARegion *region, const Panel *panel, const float radius, float subpanel_backcolor[4])
uiBut * ui_but_add_search(uiBut *but, PointerRNA *ptr, PropertyRNA *prop, PointerRNA *searchptr, PropertyRNA *searchprop, bool results_are_suggestions)
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:436
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
@ 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 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:173
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:238
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_draw_preview_item(const uiFontStyle *fstyle, rcti *rect, const char *name, int iconid, int but_flag, eFontStyle_Align text_align)
wmKeyMap * eyedropper_modal_keymap(wmKeyConfig *keyconf)
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)
const char ui_radial_dir_to_numpad[8]
void ui_region_to_window(const ARegion *region, int *x, int *y)
Definition interface.cc:254
uiListType * UI_UL_asset_view()
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:232
void ui_window_to_block_fl(const ARegion *region, const uiBlock *block, float *x, float *y)
Definition interface.cc:184
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_gradient(const rcti *rect, const float hsv[3], eButGradientType type, float alpha)
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:703
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)
void ui_draw_menu_item(const uiFontStyle *fstyle, rcti *rect, const char *name, int iconid, int but_flag, uiMenuItemSeparatorType separator_type, int *r_xmax)
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)
bool ui_but_rna_equals_ex(const uiBut *but, const PointerRNA *ptr, const PropertyRNA *prop, int index)
Definition interface.cc:708
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_OT_eyedropper_color(wmOperatorType *ot)
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)
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:116
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_pie_menu_level_create(uiBlock *block, wmOperatorType *ot, const char *propname, IDProperty *properties, const EnumPropertyItem *items, int totitem, wmOperatorCallContext context, eUI_Item_Flag flag)
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:794
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:246
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:211
void ui_block_to_window_rctf(const ARegion *region, const uiBlock *block, rctf *rct_dst, const rctf *rct_src)
Definition interface.cc:163
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
void ui_but_v3_get(uiBut *but, float vec[3])
bool ui_but_supports_cycling(const uiBut *but) ATTR_WARN_UNUSED_RESULT
uiBut * ui_but_change_type(uiBut *but, eButType new_type)
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_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)
@ UI_SELECT_DRAW
@ UI_HIDDEN
@ UI_HOVER
@ UI_SCROLLED
@ UI_HAS_ICON
@ UI_SELECT
@ UI_SEARCH_FILTER_NO_MATCH
@ UI_BUT_ACTIVE_OVERRIDE
ColorManagedDisplay * ui_block_cm_display_get(uiBlock *block)
void ui_block_to_window(const ARegion *region, const uiBlock *block, int *x, int *y)
Definition interface.cc:142
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:135
uiBut * ui_region_find_active_but(ARegion *region) ATTR_WARN_UNUSED_RESULT
void ui_but_pie_dir(RadialDirection dir, float vec[2])
uiBut * ui_but_next(uiBut *but) ATTR_WARN_UNUSED_RESULT
uiListType * UI_UL_cache_file_layers()
void ui_draw_but_CURVEPROFILE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect)
void ui_textedit_undo_stack_destroy(uiUndoStack_Text *stack)
void ui_block_views_bounds_calc(const uiBlock *block)
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_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)
bool ui_popup_context_menu_for_button(bContext *C, uiBut *but, const wmEvent *event)
const char ui_radial_dir_order[8]
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:334
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:47
uiMenuItemSeparatorType
@ UI_MENU_ITEM_SEPARATOR_NONE
@ UI_MENU_ITEM_SEPARATOR_HINT
@ UI_MENU_ITEM_SEPARATOR_SHORTCUT
void ui_draw_pie_center(uiBlock *block)
@ 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
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)
static PyObject * create_func(PyObject *, PyObject *args)
Definition python.cpp:161
float hsv_perceptual_init[3]
float hsv_scene_linear[3]
ColorPicker * next
float hsv_perceptual[3]
float luminosity_lock_value
ColorPicker * prev
Definition DNA_ID.h:413
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]
eUIEmbossType emboss
char display_device[64]
uiBlock * next
ListBase layouts
PieMenuData pie_data
ListBase dynamic_listeners
uiButHandleNFunc funcN
bool is_color_gamma_picker
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
blender::Vector< std::unique_ptr< bContextStore > > contexts
int bounds_offset[2]
ListBase buttons
const char * lockstr
std::function< void(const bContext *, rcti *)> drawextra
eBlockBoundsCalc bounds_type
uiBlockInteraction_CallbackData custom_interaction_callbacks
bool ui_operator_free
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
int(* block_event_func)(const bContext *C, uiBlock *, const wmEvent *)
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
eButProgressType 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
wmOperatorCallContext opcontext
uiBut()=default
const char * tip
uiButCompleteFunc autocomplete_func
ListBase extra_op_icons
void * custom_data
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
void * rename_orig
float * editvec
void * dragpoin
PropertyRNA * rnaprop
wmOperatorType * optype
const ImBuf * imb
char * editstr
double * editval
bool operator_never_call
uiButHandleFunc func
eButPointerType pointype
const char * disabled_info
uchar unit_type
float search_weight
void * tip_arg
uiBlock * block
eUIEmbossType emboss
PointerRNA * opptr
uiMenuCreateFunc menu_create_func
std::function< void(std::string &new_name)> rename_full_func
std::string rename_full_new
uiButToolTipFunc tip_func
std::string drawstr
uiButArgNFree func_argN_free_fn
uiBut * next
std::function< std::string(const uiBut *)> tip_label_func
void * func_arg1
std::function< bool(const uiBut &)> pushed_state_func
std::string str
uiButHandleHoldFunc hold_func
void * hold_argN
char * placeholder
uiBut * prev
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
uiButToolTipCustomFunc tip_custom_func
void * func_argN
uchar col[4]
uiButtonGroupFlag flag
blender::Vector< uiBut * > buttons
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:170
PointerRNA * ptr
Definition wm_files.cc:4126
wmOperatorType * ot
Definition wm_files.cc:4125
uint8_t flag
Definition wm_window.cc:138