Blender V4.5
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#include "RNA_types.hh"
22#include "UI_interface.hh"
23#include "UI_resources.hh"
24
26struct ARegion;
27struct bContext;
28struct bContextStore;
29struct CurveMapping;
30struct CurveProfile;
31namespace blender::gpu {
32class Batch;
33}
34struct IconTextOverlay;
35struct ID;
36struct ImBuf;
38struct Main;
39struct Scene;
41struct uiLayout;
42struct uiListType;
43struct uiStyle;
44struct uiUndoStack_Text;
45struct uiWidgetColors;
46struct UnitSettings;
47struct wmEvent;
48struct wmKeyConfig;
49struct wmOperatorType;
50struct wmTimer;
51
52namespace blender::ocio {
53class Display;
54} // namespace blender::ocio
56
57/* ****************** general defines ************** */
58
59#define RNA_NO_INDEX -1
60#define RNA_ENUM_VALUE -2
61
62#define UI_MENU_PADDING (int)(0.2f * UI_UNIT_Y)
63
64#define UI_MENU_WIDTH_MIN (UI_UNIT_Y * 9)
66#define UI_MENU_SUBMENU_PADDING (6 * UI_SCALE_FAC)
67
68/* menu scrolling */
69#define UI_MENU_SCROLL_ARROW (12 * UI_SCALE_FAC)
70#define UI_MENU_SCROLL_MOUSE (UI_MENU_SCROLL_ARROW + 2 * UI_SCALE_FAC)
71#define UI_MENU_SCROLL_PAD (4 * UI_SCALE_FAC)
72
74#define UI_POPOVER_WIDTH_UNITS 10
75
77enum {
79 UI_SELECT = (1 << 0),
81 UI_SCROLLED = (1 << 1),
89 UI_HOVER = (1 << 2),
90 UI_HAS_ICON = (1 << 3),
91 UI_HIDDEN = (1 << 4),
93 UI_SELECT_DRAW = (1 << 5),
96
101
102 /* WARNING: rest of #uiBut.flag in `UI_interface_c.hh`. */
103};
104
117
119#define UI_RADIAL_DIRECTION_NEXT(dir) RadialDirection((int(dir) + 1) % (int(UI_RADIAL_NW) + 1))
121#define UI_RADIAL_DIRECTION_PREV(dir) \
122 RadialDirection(((int(dir) + int(UI_RADIAL_NW))) % (int(UI_RADIAL_NW) + 1))
123
125#define UI_RADIAL_MASK_ALL_DIAGONAL \
126 ((1 << int(UI_RADIAL_NE)) | (1 << int(UI_RADIAL_SE)) | (1 << int(UI_RADIAL_SW)) | \
127 (1 << int(UI_RADIAL_NW)))
128#define UI_RADIAL_MASK_ALL_AXIS_ALIGNED \
129 ((1 << int(UI_RADIAL_N)) | (1 << int(UI_RADIAL_S)) | (1 << int(UI_RADIAL_E)) | \
130 (1 << int(UI_RADIAL_W)))
131
132extern const char ui_radial_dir_order[8];
133extern const char ui_radial_dir_to_numpad[8];
134extern const short ui_radial_dir_to_angle[8];
135
136/* internal panel drawing defines */
137#define PNL_HEADER (UI_UNIT_Y * 1.25) /* 24 default */
138
139/* bit button defines */
140/* Bit operations */
141#define UI_BITBUT_TEST(a, b) (((a) & (1 << (b))) != 0)
142#define UI_BITBUT_VALUE_TOGGLED(a, b) ((a) ^ (1 << (b)))
143#define UI_BITBUT_VALUE_ENABLED(a, b) ((a) | (1 << (b)))
144#define UI_BITBUT_VALUE_DISABLED(a, b) ((a) & ~(1 << (b)))
145
146/* bit-row */
147#define UI_BITBUT_ROW(min, max) \
148 (((max) >= 31 ? 0xFFFFFFFF : (1 << ((max) + 1)) - 1) - ((min) ? ((1 << (min)) - 1) : 0))
149
151#define USE_NUMBUTS_LR_ALIGN
152
154#define USE_UIBUT_SPATIAL_ALIGN
155
157enum {
170};
171
172#define PIE_CLICK_THRESHOLD_SQ 50.0f
173
175#define PIE_MAX_ITEMS 8
176
177struct uiBut {
178
180 uiLayout *layout = nullptr;
181 int flag = 0;
182 int flag2 = 0;
183 int drawflag = 0;
186 short bit = 0, bitnr = 0, retval = 0, strwidth = 0, alignnr = 0;
187 short ofs = 0, pos = 0, selsta = 0, selend = 0;
188
189 std::string str;
190
191 std::string drawstr;
192
193 char *placeholder = nullptr;
194
196 rctf rect = {};
197
198 char *poin = nullptr;
199 float hardmin = 0, hardmax = 0, softmin = 0, softmax = 0;
200
205 uchar col[4] = {0};
206
209
211 void *func_arg1 = nullptr;
212 void *func_arg2 = nullptr;
217 std::function<void(bContext &)> apply_func;
218
220 void *func_argN = nullptr;
223
224 const bContextStore *context = nullptr;
225
227 void *autofunc_arg = nullptr;
228
230 void *rename_arg1 = nullptr;
231 void *rename_orig = nullptr;
232
237 std::function<void(std::string &new_name)> rename_full_func = nullptr;
238 std::string rename_full_new;
239
242 void *hold_argN = nullptr;
243
246 void *tip_arg = nullptr;
249 std::function<std::string(const uiBut *)> tip_quick_func;
250
252
254 const char *disabled_info = nullptr;
255
256 BIFIconID icon = ICON_NONE;
262 bool changed = false;
265 short iconadd = 0;
266
268 float search_weight = 0.0f;
269
272
275
278 bool menu_no_hover_open = false;
279
280 /* RNA data */
283 int rnaindex = 0;
284
285 /* Operator data */
287 PointerRNA *opptr = nullptr;
294
297
298 ListBase extra_op_icons = {nullptr, nullptr};
299
301 short dragflag = 0;
302 void *dragpoin = nullptr;
304 const ImBuf *imb = nullptr;
305 float imb_scale = 0;
306
324
326 void *custom_data = nullptr;
327
328 char *editstr = nullptr;
329 double *editval = nullptr;
330 float *editvec = nullptr;
331
332 std::function<bool(const uiBut &)> pushed_state_func;
333
336
337 /* pointer back */
338 uiBlock *block = nullptr;
339
340 uiBut() = default;
342 uiBut(const uiBut &other) = default;
344 uiBut &operator=(const uiBut &other) = default;
345
346 virtual ~uiBut() = default;
347};
348
350struct uiButNumber : public uiBut {
351 float step_size = 0.0f;
352 float precision = 0.0f;
353};
354
356struct uiButNumberSlider : public uiBut {
357 float step_size = 0.0f;
358 float precision = 0.0f;
359};
360
362struct uiButColor : public uiBut {
363 bool is_pallete_color = false;
365};
366
368struct uiButTab : public uiBut {
369 MenuType *menu = nullptr;
370};
371
401
411
419
421struct uiButSeparatorLine : public uiBut {
423};
424
426struct uiButLabel : public uiBut {
427 float alpha_factor = 1.0f;
428};
429
431struct uiButScrollBar : public uiBut {
433 float visual_height = -1.0f;
434};
435
446
451
453struct uiButColorBand : public uiBut {
455};
456
458struct uiButCurveProfile : public uiBut {
460};
461
467
472
485
515
519
522 const char *title;
523 int icon;
524
527 float pie_dir[2];
530 float last_pos[2];
532 int flags;
535 float alphafac;
536};
537
544
545/* #uiButtonGroup.flag. */
553
564
570
571struct uiBlock {
573
577
580
582
585
587
592
593 ListBase dynamic_listeners; /* #uiBlockDynamicListener */
594
595 std::string name;
596
597 float winmat[4][4];
598
600 float aspect;
601
604
608
613
616
619
621 int (*block_event_func)(const bContext *C, uiBlock *, const wmEvent *);
622
624 std::function<void(const bContext *, rcti *)> drawextra;
625
626 int flag;
627 short alignnr;
631 short content_hints; /* #eBlockContentHints */
632
639 char _pad[5];
641
642 const char *lockstr;
643
644 bool lock;
646 bool active;
651
658
663
665
670
672 void *evil_C;
673
679
682
688
690
691 void remove_but(const uiBut *but);
692 [[nodiscard]] uiBut *first_but() const;
693 [[nodiscard]] uiBut *last_but() const;
694 int but_index(const uiBut *but) const;
695 [[nodiscard]] uiBut *next_but(const uiBut *but) const;
696 [[nodiscard]] uiBut *prev_but(const uiBut *but) const;
697};
698
704/* `interface.cc` */
705
706void ui_fontscale(float *points, float aspect);
707
709void ui_but_to_pixelrect(rcti *rect,
710 const ARegion *region,
711 const uiBlock *block,
712 const uiBut *but);
713rcti ui_to_pixelrect(const ARegion *region, const uiBlock *block, const rctf *src_rect);
714
715void ui_block_to_region_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
716void ui_block_to_window_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
717void ui_block_to_window(const ARegion *region, const uiBlock *block, int *x, int *y);
718void ui_block_to_region_rctf(const ARegion *region,
719 const uiBlock *block,
720 rctf *rct_dst,
721 const rctf *rct_src);
722void ui_block_to_window_rctf(const ARegion *region,
723 const uiBlock *block,
724 rctf *rct_dst,
725 const rctf *rct_src);
726float ui_block_to_window_scale(const ARegion *region, const uiBlock *block);
730void ui_window_to_block_fl(const ARegion *region, const uiBlock *block, float *x, float *y);
731void ui_window_to_block(const ARegion *region, const uiBlock *block, int *x, int *y);
732void ui_window_to_block_rctf(const ARegion *region,
733 const uiBlock *block,
734 rctf *rct_dst,
735 const rctf *rct_src);
736void ui_window_to_region(const ARegion *region, int *x, int *y);
737void ui_window_to_region_rcti(const ARegion *region, rcti *rect_dst, const rcti *rct_src);
738void ui_window_to_region_rctf(const ARegion *region, rctf *rect_dst, const rctf *rct_src);
739void ui_region_to_window(const ARegion *region, int *x, int *y);
744void ui_region_winrct_get_no_margin(const ARegion *region, rcti *r_rect);
745
748 void (*listener_func)(const wmRegionListenerParams *params));
749
757uiBut *ui_but_change_type(uiBut *but, eButType new_type);
758
759double ui_but_value_get(uiBut *but);
760void ui_but_value_set(uiBut *but, double value);
764void ui_but_hsv_set(uiBut *but);
768void ui_but_v3_get(uiBut *but, float vec[3]);
769void ui_but_v3_set(uiBut *but, const float vec[3]);
770void ui_but_v4_get(uiBut *but, float vec[4]);
771void ui_but_v4_set(uiBut *but, const float vec[4]);
772
774 const rcti *rect, float mx, float my, float *r_val_rad, float *r_val_dist);
779 const ColorPicker *cpicker, const rcti *rect, const float *hsv, float *r_xpos, float *r_ypos);
781 const uiButHSVCube *hsv_but, const rcti *rect, const float *hsv, float *r_xp, float *r_yp);
782
790 char *str,
791 size_t str_maxncpy,
792 int float_precision,
793 bool use_exp_float,
794 bool *r_use_exp_float) ATTR_NONNULL(1, 2);
795void ui_but_string_get(uiBut *but, char *str, size_t str_maxncpy) ATTR_NONNULL();
802char *ui_but_string_get_dynamic(uiBut *but, int *r_str_size);
806void ui_but_convert_to_unit_alt_name(uiBut *but, char *str, size_t str_maxncpy) ATTR_NONNULL();
807bool ui_but_string_set(bContext *C, uiBut *but, const char *str) ATTR_NONNULL();
808bool ui_but_string_eval_number(bContext *C, const uiBut *but, const char *str, double *r_value)
809 ATTR_NONNULL();
820void ui_but_set_string_interactive(bContext *C, uiBut *but, const char *value);
822
826const char *ui_but_placeholder_get(uiBut *but);
827
828void ui_def_but_icon(uiBut *but, int icon, int flag);
833
835
836void ui_but_rna_menu_convert_to_panel_type(uiBut *but, const char *panel_type);
837void ui_but_rna_menu_convert_to_menu_type(uiBut *but, const char *menu_type);
838bool ui_but_menu_draw_as_popover(const uiBut *but);
839
842
850 const uiBut *but,
851 const wmOperatorCallParams *optype_params);
852
853void ui_but_update(uiBut *but);
854void ui_but_update_edited(uiBut *but);
862bool ui_but_is_compatible(const uiBut *but_a, const uiBut *but_b) ATTR_WARN_UNUSED_RESULT;
868
874int ui_but_is_pushed_ex(uiBut *but, double *value) ATTR_WARN_UNUSED_RESULT;
876
877void ui_but_override_flag(Main *bmain, uiBut *but);
878
879void ui_block_bounds_calc(uiBlock *block);
880
882void ui_block_cm_to_display_space_v3(uiBlock *block, float pixel[3]);
883
884/* `interface_regions.cc` */
885
892
893using uiBlockHandleCreateFunc = uiBlock *(*)(bContext *C, uiPopupBlockHandle *handle, void *arg1);
894
907
909 /* internal */
910 ARegion *region = nullptr;
911
913 float towards_xy[2];
914 double towardstime = 0.0;
915 bool dotowards = false;
916
917 bool popup = false;
918 void (*popup_func)(bContext *C, void *arg, int event) = nullptr;
919 void (*cancel_func)(bContext *C, void *arg) = nullptr;
920 void *popup_arg = nullptr;
921
930 bool can_refresh = false;
931 bool refresh = false;
932
934 float scrolloffset = 0.0f;
935
937
938 /* for operator popups */
940 ScrArea *ctx_area = nullptr;
941 ARegion *ctx_region = nullptr;
942
943 /* return values */
944 int butretval = 0;
945 int menuretval = 0;
946 int retvalue = 0;
947 float retvec[4] = {0.0f, 0.0f, 0.0f, 0.0f};
948
950 int direction = 0;
951
952 /* Previous values so we don't resize or reposition on refresh. */
955 short prev_dir1 = 0;
956 short prev_dir2 = 0;
957 int prev_bounds_offset[2] = {0, 0};
958
959 /* Maximum estimated size to avoid having to reposition on refresh. */
960 float max_size_x = 0.0f;
961 float max_size_y = 0.0f;
962
963 /* #ifdef USE_DRAG_POPUP */
964 bool is_grab = false;
965 int grab_xy_prev[2] = {0, 0};
966 /* #endif */
967
968 char menu_idname[64] = "";
969};
970
971/* -------------------------------------------------------------------- */
976
977/* `interface_region_tooltip.cc` */
978
979/* exposed as public API in UI_interface.hh */
980
981/* `interface_region_color_picker.cc` */
982
983void ui_color_picker_rgb_to_hsv_compat(const float rgb[3], float r_cp[3]);
984void ui_color_picker_rgb_to_hsv(const float rgb[3], float r_cp[3]);
985void ui_color_picker_hsv_to_rgb(const float r_cp[3], float rgb[3]);
986
992
997
998void ui_scene_linear_to_perceptual_space(uiBut *but, float rgb[3]);
999void ui_perceptual_to_scene_linear_space(uiBut *but, float rgb[3]);
1000
1001uiBlock *ui_block_func_COLOR(bContext *C, uiPopupBlockHandle *handle, void *arg_but);
1003
1004/* `interface_region_search.cc` */
1005
1011ARegion *ui_searchbox_create_menu(bContext *C, ARegion *butregion, uiButSearch *search_but);
1012
1016bool ui_searchbox_inside(ARegion *region, const int xy[2]) ATTR_NONNULL(1, 2);
1017int ui_searchbox_find_index(ARegion *region, const char *name);
1021void ui_searchbox_update(bContext *C, ARegion *region, uiBut *but, bool reset);
1022int ui_searchbox_autocomplete(bContext *C, ARegion *region, uiBut *but, char *str);
1024 bContext *C, ARegion *region, uiBut *but, ARegion *butregion, const wmEvent *event);
1028bool ui_searchbox_apply(uiBut *but, ARegion *region);
1029void ui_searchbox_free(bContext *C, ARegion *region);
1034
1035/* `interface_region_menu_popup.cc` */
1036
1037int ui_but_menu_step(uiBut *but, int direction);
1038bool ui_but_menu_step_poll(const uiBut *but);
1040void ui_popup_menu_memory_set(uiBlock *block, uiBut *but);
1041
1046 uiPopupBlockHandle *handle,
1047 ARegion *butregion,
1048 uiBut *but);
1049
1051 ARegion *butregion,
1052 uiBut *but,
1054 uiBlockHandleCreateFunc handle_create_func,
1055 void *arg,
1056 uiFreeArgFunc arg_free,
1057 bool can_refresh);
1059 bContext *C, ARegion *butregion, uiBut *but, uiMenuCreateFunc menu_func, void *arg);
1060
1061/* `interface_region_popover.cc` */
1062
1063using uiPopoverCreateFunc = std::function<void(bContext *, uiLayout *, PanelType *)>;
1064
1066 ARegion *butregion,
1067 uiBut *but,
1068 uiPopoverCreateFunc popover_func,
1069 const PanelType *panel_type);
1070
1071/* `interface_region_menu_pie.cc` */
1072
1078 blender::StringRefNull propname,
1079 IDProperty *properties,
1080 const EnumPropertyItem *items,
1081 int totitem,
1082 wmOperatorCallContext context,
1084
1085/* `interface_region_popup.cc` */
1086
1090void ui_popup_translate(ARegion *region, const int mdiff[2]);
1093
1095
1096/* `interface_panel.cc` */
1097
1104 const wmEvent *event,
1105 ARegion *region,
1106 const uiBut *active_but);
1110void ui_draw_aligned_panel(const ARegion *region,
1111 const uiStyle *style,
1112 const uiBlock *block,
1113 const rcti *rect,
1114 bool show_pin,
1115 bool show_background,
1116 bool region_search_filter_active);
1117void ui_draw_layout_panels_backdrop(const ARegion *region,
1118 const Panel *panel,
1119 const float radius,
1120 float subpanel_backcolor[4]);
1121void ui_panel_drag_collapse_handler_add(const bContext *C, const bool was_open);
1127void ui_layout_panel_popup_scroll_apply(Panel *panel, const float dy);
1128
1132void ui_draw_gradient(const rcti *rect, const float hsv[3], eButGradientType type, float alpha);
1133
1140void ui_draw_rounded_corners_inverted(const rcti &rect,
1141 const float rad,
1142 const blender::float4 color);
1143
1144void ui_draw_but_TAB_outline(const rcti *rect,
1145 float rad,
1146 uchar highlight[3],
1147 uchar highlight_fade[3]);
1148void ui_draw_but_HISTOGRAM(ARegion *region,
1149 uiBut *but,
1150 const uiWidgetColors *wcol,
1151 const rcti *recti);
1152void ui_draw_but_WAVEFORM(ARegion *region,
1153 uiBut *but,
1154 const uiWidgetColors *wcol,
1155 const rcti *recti);
1156void ui_draw_but_VECTORSCOPE(ARegion *region,
1157 uiBut *but,
1158 const uiWidgetColors *wcol,
1159 const rcti *recti);
1160void ui_draw_but_COLORBAND(uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1161void ui_draw_but_UNITVEC(uiBut *but, const uiWidgetColors *wcol, const rcti *rect, float radius);
1162void ui_draw_but_CURVE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1167 uiBut *but,
1168 const uiWidgetColors *wcol,
1169 const rcti *rect);
1170void ui_draw_but_IMAGE(ARegion *region, uiBut *but, const uiWidgetColors *wcol, const rcti *rect);
1172 uiBut *but,
1173 const uiWidgetColors *wcol,
1174 const rcti *recti);
1175
1176/* `interface_undo.cc` */
1177
1190void ui_textedit_undo_push(uiUndoStack_Text *stack, const char *text, int cursor_index);
1191const char *ui_textedit_undo(uiUndoStack_Text *stack, int direction, int *r_cursor_index);
1192
1193/* `interface_handlers.cc` */
1194
1196
1201void ui_pan_to_scroll(const wmEvent *event, int *type, int *val);
1207void ui_but_activate_event(bContext *C, ARegion *region, uiBut *but);
1214void ui_but_activate_over(bContext *C, ARegion *region, uiBut *but);
1215void ui_but_execute_begin(bContext *C, ARegion *region, uiBut *but, void **active_back);
1216void ui_but_execute_end(bContext *C, ARegion *region, uiBut *but, void *active_back);
1217void ui_but_active_free(const bContext *C, uiBut *but);
1218void ui_but_semi_modal_state_free(const bContext *C, uiBut *but);
1223void ui_but_update_view_for_active(const bContext *C, const uiBlock *block);
1225void ui_but_text_password_hide(char password_str[128], uiBut *but, bool restore);
1231uiBut *ui_but_find_select_in_enum(uiBut *but, int direction);
1232bool ui_but_is_editing(const uiBut *but);
1233float ui_block_calc_pie_segment(uiBlock *block, const float event_xy[2]);
1234
1235/* XXX, this code will shorten any allocated string to 'UI_MAX_NAME_STR'
1236 * since this is really long its unlikely to be an issue,
1237 * but this could be supported */
1238void ui_but_add_shortcut(uiBut *but, const char *shortcut_str, bool do_strip);
1240bool ui_but_rna_equals(const uiBut *a, const uiBut *b);
1241bool ui_but_rna_equals_ex(const uiBut *but,
1242 const PointerRNA *ptr,
1243 const PropertyRNA *prop,
1244 int index);
1245uiBut *ui_but_find_old(uiBlock *block_old, const uiBut *but_new);
1246uiBut *ui_but_find_new(uiBlock *block_new, const uiBut *but_old);
1247
1248#ifdef WITH_INPUT_IME
1249void ui_but_ime_reposition(uiBut *but, int x, int y, bool complete);
1250const wmIMEData *ui_but_ime_data_get(uiBut *but);
1251#endif
1252
1253/* `interface_widgets.cc` */
1254
1258 float radi, rad;
1259 float facxi, facyi;
1263 float color_tria[4];
1267 /* We pack alpha check and discard factor in alpha_discard.
1268 * If the value is negative then we do alpha check.
1269 * The absolute value itself is the discard factor.
1270 * Initialize value to 1.0f if you don't want discard. */
1273 float _pad[3];
1274};
1275
1276enum {
1284
1285 ROUNDBOX_TRIA_MAX, /* don't use */
1286};
1287
1288blender::gpu::Batch *ui_batch_roundbox_widget_get();
1289blender::gpu::Batch *ui_batch_roundbox_shadow_get();
1290
1291void ui_draw_menu_back(uiStyle *style, uiBlock *block, const rcti *rect);
1292void ui_draw_popover_back(ARegion *region, uiStyle *style, uiBlock *block, const rcti *rect);
1293void ui_draw_pie_center(uiBlock *block);
1295
1296void ui_draw_widget_menu_back_color(const rcti *rect, bool use_shadow, const float color[4]);
1297void ui_draw_widget_menu_back(const rcti *rect, bool use_shadow);
1298void ui_draw_tooltip_background(const uiStyle *style, uiBlock *block, const rcti *rect);
1299
1303void ui_draw_but(const bContext *C, ARegion *region, uiStyle *style, uiBut *but, rcti *rect);
1304
1319
1330void ui_draw_menu_item(const uiFontStyle *fstyle,
1331 rcti *rect,
1332 rcti *back_rect,
1333 float zoom,
1334 bool use_unpadded,
1335 const char *name,
1336 int iconid,
1337 int but_flag,
1338 uiMenuItemSeparatorType separator_type,
1339 int *r_xmax);
1340void ui_draw_preview_item(const uiFontStyle *fstyle,
1341 rcti *rect,
1342 float zoom,
1343 const char *name,
1344 int iconid,
1345 int but_flag,
1346 eFontStyle_Align text_align);
1356 rcti *rect,
1357 blender::StringRef name,
1358 int iconid,
1359 const uchar text_col[4],
1360 eFontStyle_Align text_align,
1361 const bool add_padding);
1362
1363#define UI_TEXT_MARGIN_X 0.4f
1364#define UI_POPUP_MARGIN (UI_SCALE_FAC * 12)
1369#define UI_POPUP_MENU_TOP (int)(10 * UI_SCALE_FAC)
1370
1371#define UI_PIXEL_AA_JITTER 8
1372extern const float ui_pixel_jitter[UI_PIXEL_AA_JITTER][2];
1373
1374/* `interface_style.cc` */
1375
1380void uiStyleInit();
1381
1382/* `interface_icons.cc` */
1383
1384void ui_icon_ensure_deferred(const bContext *C, int icon_id, bool big);
1386bool ui_icon_is_preview_deferred_loading(int icon_id, bool big);
1387int ui_id_icon_get(const bContext *C, ID *id, bool big);
1388
1389/* `interface_icons_event.cc` */
1390
1391float ui_event_icon_offset(int icon_id);
1392
1394 float x, float y, int w, int h, int icon_id, float aspect, float alpha, bool inverted);
1395
1396/* `resources.cc` */
1397
1398void ui_resources_init();
1399void ui_resources_free();
1400
1401/* `interface_layout.cc` */
1402
1403void ui_layout_add_but(uiLayout *layout, uiBut *but);
1404void ui_layout_remove_but(uiLayout *layout, const uiBut *but);
1408bool ui_layout_replace_but_ptr(uiLayout *layout, const void *old_but_ptr, uiBut *new_but);
1414 PointerRNA *ptr,
1415 PropertyRNA *prop,
1416 PointerRNA *searchptr,
1417 PropertyRNA *searchprop,
1418 bool results_are_suggestions);
1425/* menu callback */
1426void ui_item_menutype_func(bContext *C, uiLayout *layout, void *arg_mt);
1427void ui_item_paneltype_func(bContext *C, uiLayout *layout, void *arg_pt);
1428
1429/* `interface_button_group.cc` */
1430
1436void ui_button_group_add_but(uiBlock *block, uiBut *but);
1437void ui_button_group_replace_but_ptr(uiBlock *block, const uiBut *old_but_ptr, uiBut *new_but);
1438
1439/* `interface_drag.cc` */
1440
1441void ui_but_drag_free(uiBut *but);
1442bool ui_but_drag_is_draggable(const uiBut *but);
1443void ui_but_drag_start(bContext *C, uiBut *but);
1444
1445/* `interface_align.cc` */
1446
1456void ui_block_align_calc(uiBlock *block, const ARegion *region);
1457
1458/* `interface_anim.cc` */
1459
1460void ui_but_anim_flag(uiBut *but, const AnimationEvalContext *anim_eval_context);
1467bool ui_but_anim_expression_get(uiBut *but, char *str, size_t str_maxncpy);
1468bool ui_but_anim_expression_set(uiBut *but, const char *str);
1472bool ui_but_anim_expression_create(uiBut *but, const char *str);
1473void ui_but_anim_autokey(bContext *C, uiBut *but, Scene *scene, float cfra);
1474
1475void ui_but_anim_decorate_cb(bContext *C, void *arg_but, void *arg_dummy);
1477
1478/* `interface_query.cc` */
1479
1488bool ui_but_is_interactive_ex(const uiBut *but, const bool labeledit, const bool for_tooltip);
1489bool ui_but_is_interactive(const uiBut *but, bool labeledit) ATTR_WARN_UNUSED_RESULT;
1492int ui_but_icon(const uiBut *but);
1493void ui_but_pie_dir(RadialDirection dir, float vec[2]);
1494
1496
1497bool ui_but_contains_pt(const uiBut *but, float mx, float my) ATTR_WARN_UNUSED_RESULT;
1498bool ui_but_contains_rect(const uiBut *but, const rctf *rect);
1499bool ui_but_contains_point_px_icon(const uiBut *but,
1500 ARegion *region,
1501 const wmEvent *event) ATTR_WARN_UNUSED_RESULT;
1502bool ui_but_contains_point_px(const uiBut *but, const ARegion *region, const int xy[2])
1504
1506 const wmEvent *event) ATTR_WARN_UNUSED_RESULT;
1507uiBut *ui_list_find_from_row(const ARegion *region, const uiBut *row_but) ATTR_WARN_UNUSED_RESULT;
1508uiBut *ui_list_row_find_mouse_over(const ARegion *region, const int xy[2])
1510uiBut *ui_list_row_find_index(const ARegion *region,
1511 int index,
1513uiBut *ui_view_item_find_mouse_over(const ARegion *region, const int xy[2]) ATTR_NONNULL(1, 2);
1514uiBut *ui_view_item_find_active(const ARegion *region);
1516
1517using uiButFindPollFn = bool (*)(const uiBut *but, const void *customdata);
1522 const int xy[2],
1523 bool labeledit,
1524 bool for_tooltip,
1525 const uiButFindPollFn find_poll,
1526 const void *find_custom_data)
1529uiBut *ui_but_find_rect_over(const ARegion *region, const rcti *rect_px) ATTR_WARN_UNUSED_RESULT;
1530
1531uiBut *ui_list_find_mouse_over_ex(const ARegion *region, const int xy[2])
1533
1535
1538size_t ui_but_tip_len_only_first_line(const uiBut *but);
1539
1544
1550
1551uiBlock *ui_block_find_mouse_over_ex(const ARegion *region, const int xy[2], bool only_clip)
1552 ATTR_NONNULL(1, 2);
1553uiBlock *ui_block_find_mouse_over(const ARegion *region, const wmEvent *event, bool only_clip);
1554
1555uiBut *ui_region_find_first_but_test_flag(ARegion *region, int flag_include, int flag_exclude);
1557bool ui_region_contains_point_px(const ARegion *region, const int xy[2])
1559bool ui_region_contains_rect_px(const ARegion *region, const rcti *rect_px);
1560
1566
1567/* `interface_context_menu.cc` */
1568
1569bool ui_popup_context_menu_for_button(bContext *C, uiBut *but, const wmEvent *event);
1574
1575/* `eyedroppers/interface_eyedropper.cc` */
1576
1579
1580/* `eyedroppers/eyedropper_color.cc` */
1581
1583
1584/* `interface_eyedropper_colorband.cc` */
1585
1586namespace blender::ui {
1587void UI_OT_eyedropper_colorramp(wmOperatorType *ot);
1588void UI_OT_eyedropper_colorramp_point(wmOperatorType *ot);
1589
1590void UI_OT_eyedropper_bone(wmOperatorType *ot);
1591
1592} // namespace blender::ui
1593
1594/* `eyedroppers/eyedropper_datablock.cc` */
1595
1597
1598/* `eyedroppers/eyedropper_depth.cc` */
1599
1601
1602/* `eyedroppers/eyedropper_driver.cc` */
1603
1605
1606/* `eyedroppers/eyedropper_grease_pencil_colorr.cc` */
1607
1609
1610/* `templates/interface_template_asset_shelf_popover.cc` */
1611std::optional<blender::StringRefNull> UI_asset_shelf_idname_from_button_context(const uiBut *but);
1612
1613/* `templates/interface_template_asset_view.cc` */
1614
1616
1634 const bContext *C, void *arg, const char *str, uiSearchItems *items, bool is_first);
1635
1636/* `interface_ops.cc` */
1637
1639
1640/* `interface_query.cc` */
1641
1643
1644/* `views/interface_view.cc` */
1645
1646void ui_block_free_views(uiBlock *block);
1647void ui_block_views_end(ARegion *region, const uiBlock *block);
1649 const uiBlock &block,
1651void ui_block_views_listen(const uiBlock *block, const wmRegionListenerParams *listener_params);
1652void ui_block_views_draw_overlays(const ARegion *region, const uiBlock *block);
1654 const uiBlock &new_block, const blender::ui::AbstractView &new_view);
1655
1657 const uiBlock &new_block, const blender::ui::AbstractViewItem &new_item);
1658
1659/* `views/abstract_view_item.cc` */
1660
1663
1664/* `views/interface_templates.cc` */
1665
1667
1669 bContext *C, Main *bmain, ID *owner_id, ID *id, const char **r_undo_push_label);
1670
1676
1698 PointerRNA *ptr, PropertyRNA *prop, bool get_all, int index, bool *r_is_array_prop);
1699
1723 bool is_array_prop,
1724 PointerRNA *dst_ptr,
1725 PropertyRNA *dst_prop);
1726
1727} // namespace blender::interface::internal
blender::ocio::Display ColorManagedDisplay
Definition BLF_api.hh:35
#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:29
static AppView * view
PropertyScaleType
Definition RNA_types.hh:191
#define C
Definition RandGen.cpp:29
bool(*)(const uiBut *a, const uiBut *b) uiButIdentityCompareFunc
void(*)(const bContext *C, void *arg, const char *str, uiSearchItems *items, bool is_first) uiButSearchUpdateFn
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
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
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
@ UI_BUT_PROGRESS_TYPE_BAR
void(*)(void *arg) uiFreeArgFunc
void(*)(bContext *C, uiLayout *layout, void *arg1) uiMenuCreateFunc
std::string(*)(bContext *C, void *argN, blender::StringRef tip) uiButToolTipFunc
bool(*)(bContext *C, int direction, void *arg1) uiMenuStepFunc
wmEventModifierFlag
Definition WM_types.hh:274
wmOperatorCallContext
Definition WM_types.hh:236
@ WM_OP_INVOKE_DEFAULT
Definition WM_types.hh:238
eWM_DragDataType
Definition WM_types.hh:1197
@ WM_DRAG_ID
Definition WM_types.hh:1198
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)
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:881
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
@ 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_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:223
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 *(*)(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_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:51
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
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)
void ui_pie_menu_level_create(uiBlock *block, wmOperatorType *ot, blender::StringRefNull propname, IDProperty *properties, const EnumPropertyItem *items, int totitem, wmOperatorCallContext context, eUI_Item_Flag flag)
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:155
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:478
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:175
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:240
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:256
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:234
void ui_window_to_block_fl(const ARegion *region, const uiBlock *block, float *x, float *y)
Definition interface.cc:186
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:754
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:759
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)
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:118
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:861
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:248
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:213
void ui_block_to_window_rctf(const ARegion *region, const uiBlock *block, rctf *rct_dst, const rctf *rct_src)
Definition interface.cc:165
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)
void ui_block_to_window(const ARegion *region, const uiBlock *block, int *x, int *y)
Definition interface.cc:144
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:137
uiBut * ui_region_find_active_but(ARegion *region) 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 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)
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:376
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)
@ 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_resources_init()
Definition resources.cc:46
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
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:404
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:286
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:292
blender::Vector< std::unique_ptr< bContextStore > > contexts
int bounds_offset[2]
int but_index(const uiBut *but) const
Definition interface.cc:262
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
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:274
int(* block_event_func)(const bContext *C, uiBlock *, const wmEvent *)
uiBut * prev_but(const uiBut *but) const
Definition interface.cc:280
uiBut * last_but() const
Definition interface.cc:297
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
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
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
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
eButType type
std::function< std::string(const uiBut *)> tip_quick_func
double * editval
bool operator_never_call
uiHandleButtonData * active
uiButHandleFunc func
BIFIconID drag_preview_icon_id
eButPointerType pointype
const char * disabled_info
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
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:174
PointerRNA * ptr
Definition wm_files.cc:4226
wmOperatorType * ot
Definition wm_files.cc:4225
uint8_t flag
Definition wm_window.cc:139