73 #define ANIMATION_TIME 0.30
74 #define ANIMATION_INTERVAL 0.02
146 Panel **r_panel_animation,
147 bool *r_no_animation)
151 if (!(panel->type && panel->type->parent)) {
162 *r_panel_animation = panel;
173 if (panel->activedata) {
176 *r_panel_animation = panel;
180 *r_no_animation =
true;
184 *r_panel_animation = panel;
209 *r_panel_animation =
NULL;
217 bool no_animation =
false;
223 if (panel_animation) {
225 *r_panel_animation = panel_animation;
245 panel->
type = panel_type;
263 int max_sortorder = 0;
265 if (existing_panel->sortorder > max_sortorder) {
266 max_sortorder = existing_panel->sortorder;
283 const char *panel_idname,
291 if (panel_type ==
NULL) {
292 printf(
"Panel type '%s' not found.\n", panel_idname);
349 if (
C !=
NULL && panel->activedata !=
NULL) {
354 if (panel->runtime.custom_data_ptr !=
NULL) {
355 MEM_freeN(panel->runtime.custom_data_ptr);
386 data_link =
data->first;
398 if (data_link ==
NULL) {
404 panel_idname_func(data_link, panel_idname);
405 if (!
STREQ(panel_idname, panel->type->idname)) {
409 data_link = data_link->
next;
439 int list_panels_len = 0;
440 int start_index = -1;
445 if (panel == drag_panel) {
447 start_index = list_panels_len;
463 sort_index->
panel = panel;
469 qsort(panel_sort, list_panels_len,
sizeof(*panel_sort),
compare_panel);
472 int move_to_index = 0;
473 for (; move_to_index < list_panels_len; move_to_index++) {
474 if (panel_sort[move_to_index].panel == drag_panel) {
481 if (move_to_index == start_index) {
490 drag_panel->
type->
reorder(
C, drag_panel, move_to_index);
500 const bool open = (flag & (1 << *flag_index));
506 *flag_index = *flag_index + 1;
526 short flag_index = 0;
558 *flag_index = *flag_index + 1;
575 if (panel_type ==
NULL) {
582 short flag_index = 0;
584 if (panel->type->set_list_data_expand_flag) {
585 panel->type->set_list_data_expand_flag(
C, panel, expand_flag);
690 const char *idname = pt->
idname;
693 if (
STREQLEN(panel->panelname, idname,
sizeof(panel->panelname))) {
708 const char *idname = pt->
idname;
709 const bool newpanel = (panel ==
NULL);
742 for (panel_last = lb->
first; panel_last; panel_last = panel_last->
next) {
755 panel_next->sortorder++;
765 block->
panel = panel;
858 const int old_sizex = panel->
sizex, old_sizey = panel->
sizey;
870 if (panel->
sizex != old_sizex || panel->
sizey != old_sizey) {
900 but->rect.ymin += ofsy;
901 but->rect.ymax += ofsy;
919 if (!*filter_matches) {
932 bool search_filter_matches =
false;
934 return search_filter_matches;
942 const bool use_search_closed)
962 const bool use_search_closed)
997 uiBut *but = link->data;
1072 #define PNL_ICON UI_UNIT_X
1089 const bool show_background,
1090 const bool region_search_filter_active,
1093 if (!show_background) {
1104 if (region_search_filter_active && !search_match) {
1113 const rcti *header_rect)
1122 if (draw_box_style) {
1126 radius = box_wcol->
roundness *
U.widget_unit;
1140 .ymax = header_rect->
ymax,
1149 const rcti *header_rect,
1151 const bool show_pin,
1152 const bool show_background,
1153 const bool region_search_filter_active)
1162 const rcti widget_rect = {
1163 .
xmin = header_rect->
xmin + (is_subpanel ? scaled_unit * 0.7f : 0),
1164 .xmax = header_rect->
xmax,
1165 .ymin = header_rect->
ymin,
1166 .ymax = header_rect->
ymax,
1169 uchar title_color[4];
1171 title_color[3] = 255;
1175 rctf collapse_rect = {
1177 .xmax = widget_rect.
xmin + header_height,
1178 .ymin = widget_rect.
ymin,
1179 .ymax = widget_rect.
ymax,
1183 float triangle_color[4];
1192 const rcti title_rect = {
1193 .
xmin = widget_rect.
xmin + (panel->
labelofs / aspect) + scaled_unit * 1.1f,
1194 .xmax = widget_rect.
xmax,
1195 .ymin = widget_rect.
ymin - 2.0f / aspect,
1196 .ymax = widget_rect.
ymax,
1203 .align = UI_STYLE_TEXT_LEFT,
1211 widget_rect.
ymin + 5.0f / aspect,
1213 aspect *
U.inv_dpi_fac,
1222 if (!is_subpanel && show_background) {
1223 const int drag_widget_size = header_height * 0.7f;
1228 widget_rect.
ymin + (header_height - drag_widget_size) * 0.5f);
1230 const int col_tint = 84;
1231 float color_high[4], color_dark[4];
1236 U.pixelsize, color_high, color_dark, drag_widget_size);
1245 const rcti *header_rect)
1251 if (is_subpanel && !is_open) {
1259 if (draw_box_style) {
1272 .xmin = rect->
xmin +
U.pixelsize,
1273 .xmax = rect->
xmax -
U.pixelsize,
1274 .ymin = rect->
ymin +
U.pixelsize,
1293 .ymin = is_open ? rect->
ymin : header_rect->
ymin,
1294 .ymax = header_rect->
ymax +
U.pixelsize,
1311 header_rect->
ymin -
U.pixelsize,
1313 header_rect->
ymin -
U.pixelsize - 1);
1347 const bool show_pin,
1348 const bool show_background,
1349 const bool region_search_filter_active)
1354 const rcti header_rect = {
1361 if (show_background) {
1373 region_search_filter_active);
1387 #define TABS_PADDING_BETWEEN_FACTOR 4.0f
1388 #define TABS_PADDING_TEXT_FACTOR 6.0f
1401 short fstyle_points = fstyle->
points;
1403 const float zoom = 1.0f / aspect;
1404 const int px =
U.pixelsize;
1416 bool do_scaletabs =
false;
1417 #ifdef USE_FLAT_INACTIVE
1418 bool is_active_prev =
false;
1420 float scaletabs = 1.0f;
1425 const int text_v_ofs = (rct_xmax - rct_xmin) * 0.3f;
1427 int y_ofs = tab_v_pad;
1430 uchar theme_col_back[4];
1431 uchar theme_col_text[3];
1432 uchar theme_col_text_hi[3];
1435 uchar theme_col_tab_bg[4];
1436 float theme_col_tab_active[4];
1437 float theme_col_tab_inactive[4];
1438 float theme_col_tab_outline[4];
1449 is_alpha = (region->
overlap && (theme_col_back[3] != 255));
1458 ui_fontscale(&fstyle_points, aspect / (
U.pixelsize * 1.1f));
1469 rcti *rct = &pc_dyn->rect;
1470 const char *category_id = pc_dyn->idname;
1471 const char *category_id_draw =
IFACE_(category_id);
1474 rct->
xmin = rct_xmin;
1475 rct->
xmax = rct_xmax;
1477 rct->
ymin = v2d->
mask.
ymax - (y_ofs + category_width + (tab_v_pad_text * 2));
1480 y_ofs += category_width + tab_v_pad + (tab_v_pad_text * 2);
1487 rcti *rct = &pc_dyn->rect;
1492 do_scaletabs =
true;
1527 const rcti *rct = &pc_dyn->rect;
1528 const char *category_id = pc_dyn->idname;
1529 const char *category_id_draw =
IFACE_(category_id);
1530 const int category_width =
BLI_rcti_size_y(rct) - (tab_v_pad_text * 2);
1536 const bool is_active =
STREQ(category_id, category_id_active);
1540 #ifdef USE_FLAT_INACTIVE
1542 if (is_active ==
false && is_active_prev ==
false && pc_dyn->prev) {
1549 v2d->
mask.
xmax - (category_tabs_width / 5),
1551 is_left ? (v2d->
mask.
xmin + category_tabs_width) - (category_tabs_width / 5) :
1552 (v2d->
mask.
xmax - category_tabs_width) + (category_tabs_width / 5),
1553 rct->
ymax + (px * 3));
1557 is_active_prev = is_active;
1573 is_active ? theme_col_tab_active : theme_col_tab_inactive);
1583 theme_col_tab_outline);
1603 fontid, category_id_draw, category_draw_len, category_width,
NULL);
1608 BLF_draw(fontid, category_id_draw, category_draw_len);
1614 pc_dyn->rect.xmin = v2d->
mask.
xmin;
1617 pc_dyn->rect.xmax = v2d->
mask.
xmax;
1630 #undef TABS_PADDING_BETWEEN_FACTOR
1631 #undef TABS_PADDING_TEXT_FACTOR
1642 return panel->
sizey;
1744 pachild->ofsx = panel->
ofsx;
1748 if (pachild->children.first) {
1761 int active_panels_len = 0;
1766 active_panels_len++;
1769 if (active_panels_len == 0) {
1788 for (
int i = 0; i < active_panels_len; i++) {
1799 for (
int i = 0; i < active_panels_len; i++) {
1807 for (
int i = 0,
y = 0; i < active_panels_len; i++) {
1823 bool changed =
false;
1824 for (
int i = 0; i < active_panels_len; i++) {
1845 if (panel->children.first) {
1864 const int pa_sizex = panel->ofsx + panel->sizex;
1867 sizex =
max_ii(sizex, pa_sizex);
1868 sizey =
min_ii(sizey, pa_sizey);
1911 const bool was_active = panel->runtime_flag &
PANEL_ACTIVE;
1913 panel->runtime_flag &= flag_copy;
1957 if (block->active && block->panel) {
1983 #define DRAG_REGION_PAD (PNL_HEADER * 0.5)
2006 #undef DRAG_REGION_PAD
2049 const int xy_dst[2])
2055 float xy_b_block[2] = {
UNPACK2(xy_dst)};
2056 Panel *panel = block->panel;
2061 const int oldflag = panel->
flag;
2064 xy_b_block[0] = dragcol_data->
xy_init[0];
2071 rctf rect = block->rect;
2082 if (panel->
flag != oldflag) {
2103 switch (event->
type) {
2153 const int event_type,
2165 const bool show_pin = use_pin && (panel->
flag &
PNL_PIN);
2166 const bool show_drag = !is_subpanel;
2175 float expansion_area_xmax = block->
rect.
xmax;
2177 expansion_area_xmax -= (
PNL_ICON * 1.5f);
2185 if (ctrl && !is_subpanel) {
2223 const float drag_area_xmax = block->
rect.
xmax;
2224 if (
IN_RANGE(mx, drag_area_xmin, drag_area_xmax)) {
2232 const float pin_area_xmin = expansion_area_xmax;
2233 const float pin_area_xmax = pin_area_xmin +
PNL_ICON;
2234 if (
IN_RANGE(mx, pin_area_xmin, pin_area_xmax)) {
2287 pc_act_next = pc_act->
next;
2288 while ((pc_act = pc_act_next)) {
2289 pc_act_next = pc_act->
next;
2315 return pc_act->idname;
2358 const uiBut *active_but)
2361 const bool inside_tabregion =
2367 if (is_mousewheel && !event->
ctrl && !inside_tabregion) {
2379 if (is_mousewheel) {
2384 const bool backwards =
event->shift;
2385 pc_dyn = backwards ? pc_dyn->
prev : pc_dyn->
next;
2414 const uiBut *active_but)
2461 Panel *panel = block->panel;
2492 if (region_has_active_button) {
2544 Panel *panel = block->panel;
2545 if (panel ==
NULL) {
2570 Panel *panel = userdata;
2601 Panel *panel = userdata;
2669 if (
data->animtimer) {
typedef float(TangentPoint)[2]
struct ScrArea * CTX_wm_area(const bContext *C)
struct wmWindowManager * CTX_wm_manager(const bContext *C)
struct ARegion * CTX_wm_region(const bContext *C)
struct wmWindow * CTX_wm_window(const bContext *C)
@ PANEL_TYPE_DEFAULT_CLOSED
void BLF_color3ubv(int fontid, const unsigned char rgb[3])
#define BLF_KERNING_DEFAULT
float BLF_width(int fontid, const char *str, size_t len) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void BLF_draw(int fontid, const char *str, size_t len) ATTR_NONNULL(2)
#define BLF_DRAW_STR_DUMMY_MAX
size_t BLF_width_to_strlen(int fontid, const char *str, size_t len, float width, float *r_width) ATTR_NONNULL(2)
void BLF_disable(int fontid, int option)
void BLF_rotation(int fontid, float angle)
void BLF_size(int fontid, int size, int dpi)
void BLF_enable(int fontid, int option)
void BLF_position(int fontid, float x, float y, float z)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
void BLI_insertlinkafter(struct ListBase *listbase, void *vprevlink, void *vnewlink) ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) ATTR_NONNULL(1)
void void BLI_INLINE bool BLI_listbase_is_single(const struct ListBase *lb)
void * BLI_findstring(const struct ListBase *listbase, const char *id, const int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE int round_fl_to_int(float a)
MINLINE int min_ii(int a, int b)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
MINLINE float interpf(float a, float b, float t)
MINLINE int clamp_i(int value, int min, int max)
void rgba_uchar_to_float(float r_col[4], const unsigned char col_ub[4])
MINLINE void copy_v4_v4_uchar(unsigned char r[4], const unsigned char a[4])
MINLINE void copy_v2_v2_int(int r[2], const int a[2])
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
bool BLI_rcti_isect_pt(const struct rcti *rect, const int x, const int y)
bool BLI_rctf_isect_segment(const struct rctf *rect, const float s1[2], const float s2[2])
void BLI_rctf_scale(rctf *rect, const float scale)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL()
#define STREQLEN(a, b, n)
#define IN_RANGE(a, b, c)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define CTX_IFACE_(context, msgid)
@ PNL_INSTANCED_LIST_ORDER_CHANGED
#define RGN_ALIGN_ENUM_FROM_MASK(align)
#define RGN_TYPE_HAS_CATEGORY_MASK
@ RGN_FLAG_SEARCH_FILTER_UPDATE
@ RGN_FLAG_SEARCH_FILTER_ACTIVE
void(* uiListPanelIDFromDataFunc)(void *data_link, char *r_idname)
void ED_region_tag_redraw(struct ARegion *region)
void GPU_batch_program_set_builtin(GPUBatch *batch, eGPUBuiltinShader shader_id)
void GPU_batch_draw(GPUBatch *batch)
struct GPUBatch * GPU_batch_preset_panel_drag_widget(const float pixelsize, const float col_high[4], const float col_dark[4], const float width) ATTR_WARN_UNUSED_RESULT
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei width
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei height
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint y
void GPU_matrix_pop(void)
void GPU_matrix_push(void)
void GPU_matrix_translate_2f(float x, float y)
@ GPU_SHADER_2D_UNIFORM_COLOR
@ GPU_SHADER_2D_FLAT_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_smooth(bool enable)
Read Guarded memory(de)allocation.
Platform independent time functions.
const struct uiStyle * UI_style_get_dpi(void)
void UI_block_theme_style_set(uiBlock *block, char theme_style)
void UI_draw_roundbox_4fv(const struct rctf *rect, bool filled, float rad, const float col[4])
const struct uiStyle * UI_style_get(void)
void UI_draw_roundbox_corner_set(int type)
bool UI_block_is_search_only(const uiBlock *block)
#define UI_PANEL_BOX_STYLE_MARGIN
void UI_block_draw(const struct bContext *C, struct uiBlock *block)
#define UI_PANEL_CATEGORY_MARGIN_WIDTH
void UI_draw_roundbox_aa(const struct rctf *rect, bool filled, float rad, const float color[4])
void UI_fontstyle_draw(const struct uiFontStyle *fs, const struct rcti *rect, const char *str, const uchar col[4], const struct uiFontStyleDraw_Params *fs_params)
@ UI_BLOCK_THEME_STYLE_POPUP
#define INSTANCED_PANEL_UNIQUE_STR_LEN
void UI_block_set_search_only(uiBlock *block, bool search_only)
void UI_icon_draw_ex(float x, float y, int icon_id, float aspect, float alpha, float desaturate, const uchar mono_color[4], const bool mono_border)
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3])
struct bTheme * UI_GetTheme(void)
void UI_GetThemeColor4fv(int colorid, float col[4])
void UI_GetThemeColorShade4fv(int colorid, int offset, float col[4])
void UI_GetThemeColor4ubv(int colorid, unsigned char col[4])
char UI_view2d_mouse_in_scrollers(const struct ARegion *region, const struct View2D *v2d, int x, int y)
void UI_view2d_offset(struct View2D *v2d, float xfac, float yfac)
#define WM_UI_HANDLER_CONTINUE
#define WM_UI_HANDLER_BREAK
static float is_left(const float p0[2], const float p1[2], const float p2[2])
void ui_block_bounds_calc(uiBlock *block)
void ui_window_to_block_fl(const ARegion *region, uiBlock *block, float *r_x, float *r_y)
void ui_window_to_block(const ARegion *region, uiBlock *block, int *r_x, int *r_y)
bool ui_but_supports_cycling(const uiBut *but)
void ui_fontscale(short *points, float aspect)
PointerRNA * ui_handle_afterfunc_add_operator(wmOperatorType *ot, int opcontext, bool create_props)
uiBut * ui_region_find_active_but(struct ARegion *region) ATTR_WARN_UNUSED_RESULT
@ UI_BUTTON_GROUP_PANEL_HEADER
void ui_draw_anti_tria_rect(const rctf *rect, char dir, const float color[4])
void ui_draw_box_opaque(rcti *rect, int roundboxalign)
static Panel * panel_add_instanced(ARegion *region, ListBase *panels, PanelType *panel_type, PointerRNA *custom_data)
bool UI_panel_is_closed(const Panel *panel)
static int get_panel_real_ofsy(Panel *panel)
static void ui_panel_drag_collapse_handler_remove(bContext *UNUSED(C), void *userdata)
struct uiHandlePanelData uiHandlePanelData
static void panel_title_color_get(const Panel *panel, const bool show_background, const bool region_search_filter_active, uchar r_color[4])
static void panel_set_expansion_from_search_filter_recursive(const bContext *C, Panel *panel, const bool use_search_closed)
static void panel_set_runtime_flag_recursive(Panel *panel, short flag, bool value)
static void region_panels_set_expansion_from_search_filter(const bContext *C, ARegion *region, const bool use_search_closed)
void UI_panel_category_draw_all(ARegion *region, const char *category_id_active)
static void ui_panels_size(ARegion *region, int *r_x, int *r_y)
PointerRNA * UI_region_panel_custom_data_under_cursor(const bContext *C, const wmEvent *event)
static void panel_delete(const bContext *C, ARegion *region, ListBase *panels, Panel *panel)
static void ui_do_animate(bContext *C, Panel *panel)
static int get_panel_real_size_y(const Panel *panel)
static void set_panels_list_data_expand_flag(const bContext *C, const ARegion *region)
PanelCategoryDyn * UI_panel_category_find(const ARegion *region, const char *idname)
struct uiPanelDragCollapseHandle uiPanelDragCollapseHandle
PanelCategoryStack * UI_panel_category_active_find(ARegion *region, const char *idname)
@ PANEL_SEARCH_FILTER_MATCH
@ PANEL_USE_CLOSED_FROM_SEARCH
static void region_panels_set_expansion_from_list_data(const bContext *C, ARegion *region)
static void ui_panel_drag_collapse(const bContext *C, const uiPanelDragCollapseHandle *dragcol_data, const int xy_dst[2])
bool UI_panel_matches_search_filter(const Panel *panel)
static void panel_set_flag_recursive(Panel *panel, short flag, bool value)
static void region_panels_remove_invisible_layouts(ARegion *region)
void UI_panel_header_buttons_begin(Panel *panel)
void UI_panels_free_instanced(const bContext *C, ARegion *region)
static int ui_handler_panel(bContext *C, const wmEvent *event, void *userdata)
bool UI_panel_category_is_visible(const ARegion *region)
static void ui_panel_custom_data_set_recursive(Panel *panel, PointerRNA *custom_data)
static void get_panel_expand_flag(const Panel *panel, short *flag, short *flag_index)
static bool panel_type_context_poll(ARegion *region, const PanelType *panel_type, const char *context)
static void panel_activate_state(const bContext *C, Panel *panel, uiHandlePanelState state)
static bool panel_custom_data_active_get(const Panel *panel)
int ui_handler_panel_region(bContext *C, const wmEvent *event, ARegion *region, const uiBut *active_but)
int UI_panel_size_y(const Panel *panel)
static void ui_handle_panel_header(const bContext *C, const uiBlock *block, const int mx, const int event_type, const short ctrl, const short shift)
static bool panel_set_expand_from_list_data_recursive(Panel *panel, short flag, short *flag_index)
void UI_panels_end(const bContext *C, ARegion *region, int *r_x, int *r_y)
void UI_panel_category_active_set(ARegion *region, const char *idname)
void UI_panel_custom_data_set(Panel *panel, PointerRNA *custom_data)
static void ui_handler_remove_panel(bContext *C, void *userdata)
void ui_panel_tag_search_filter_match(Panel *panel)
bool UI_panel_is_active(const Panel *panel)
static int get_panel_size_y(const Panel *panel)
static void panel_remove_invisible_layouts_recursive(Panel *panel, const Panel *parent_panel)
static void panel_draw_aligned_widgets(const uiStyle *style, const Panel *panel, const rcti *header_rect, const float aspect, const bool show_pin, const bool show_background, const bool region_search_filter_active)
void UI_panel_category_clear_all(ARegion *region)
static PanelCategoryDyn * panel_categories_find_mouse_over(ARegion *region, const wmEvent *event)
static bool panels_need_realign(const ScrArea *area, ARegion *region, Panel **r_panel_animation)
void UI_panels_begin(const bContext *UNUSED(C), ARegion *region)
struct PanelSort PanelSort
static float panel_region_offset_x_get(const ARegion *region)
static void align_sub_panels(Panel *panel)
@ PANEL_MOUSE_INSIDE_HEADER
@ PANEL_MOUSE_INSIDE_CONTENT
static void panel_matches_search_filter_recursive(const Panel *panel, bool *filter_matches)
static void reorder_instanced_panel_list(bContext *C, ARegion *region, Panel *drag_panel)
static void panel_set_expansion_from_list_data(const bContext *C, Panel *panel)
#define TABS_PADDING_BETWEEN_FACTOR
static void panel_handle_data_ensure(const bContext *C, wmWindow *win, const ARegion *region, Panel *panel, const uiHandlePanelState state)
void UI_panel_category_active_set_default(ARegion *region, const char *idname)
Panel * UI_panel_add_instanced(const bContext *C, ARegion *region, ListBase *panels, const char *panel_idname, PointerRNA *custom_data)
PointerRNA * UI_panel_custom_data_get(const Panel *panel)
#define ANIMATION_INTERVAL
void ui_draw_aligned_panel(const uiStyle *style, const uiBlock *block, const rcti *rect, const bool show_pin, const bool show_background, const bool region_search_filter_active)
void UI_panel_label_offset(const uiBlock *block, int *r_x, int *r_y)
#define TABS_PADDING_TEXT_FACTOR
static int compare_panel(const void *a, const void *b)
static int ui_panel_drag_collapse_handler(bContext *C, const wmEvent *event, void *userdata)
static void panels_collapse_all(ARegion *region, const Panel *from_panel)
static void panels_layout_begin_clear_flags(ListBase *lb)
static void ui_do_drag(const bContext *C, const wmEvent *event, Panel *panel)
void UI_panel_end(Panel *panel, int width, int height)
bool UI_panel_list_matches_data(ARegion *region, ListBase *data, uiListPanelIDFromDataFunc panel_idname_func)
static void ui_panel_drag_collapse_handler_add(const bContext *C, const bool was_open)
void UI_panel_header_buttons_end(Panel *panel)
bool UI_panel_is_dragging(const Panel *panel)
static void ui_offset_panel_block(uiBlock *block)
void UI_panels_draw(const bContext *C, ARegion *region)
static void panel_custom_data_active_set(Panel *panel)
static int ui_handle_panel_category_cycling(const wmEvent *event, ARegion *region, const uiBut *active_but)
const char * UI_panel_category_active_get(ARegion *region, bool set_fallback)
static bool panel_active_animation_changed(ListBase *lb, Panel **r_panel_animation, bool *r_no_animation)
static bool uiAlignPanelStep(ARegion *region, const float factor, const bool drag)
void UI_list_panel_unique_str(Panel *panel, char *r_name)
void UI_panel_category_add(ARegion *region, const char *name)
static int find_highest_panel(const void *a, const void *b)
Panel * UI_panel_find_by_type(ListBase *lb, const PanelType *pt)
static void panel_calculate_size_recursive(ARegion *region, Panel *panel)
static void ui_panel_category_active_set(ARegion *region, const char *idname, bool fallback)
static void panel_draw_highlight_border(const Panel *panel, const rcti *rect, const rcti *header_rect)
static void panel_draw_aligned_backdrop(const Panel *panel, const rcti *rect, const rcti *header_rect)
static uiPanelMouseState ui_panel_mouse_state_get(const uiBlock *block, const Panel *panel, const int mx, const int my)
Panel * UI_panel_begin(ARegion *region, ListBase *lb, uiBlock *block, PanelType *pt, Panel *panel, bool *r_open)
static bool properties_space_needs_realign(const ScrArea *area, const ARegion *region)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static void area(int d1, int d2, int e1, int e2, float weights[2])
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_pointer_is_null(const PointerRNA *ptr)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
struct SELECTID_Context context
ListBase panels_category_active
struct ARegionType * type
struct PanelCategoryDyn * next
struct PanelCategoryDyn * prev
struct PanelCategoryStack * next
short(* get_list_data_expand_flag)(const struct bContext *C, struct Panel *pa)
char idname[BKE_ST_MAXNAME]
char context[BKE_ST_MAXNAME]
void(* reorder)(struct bContext *C, struct Panel *pa, int new_index)
char translation_context[BKE_ST_MAXNAME]
char active_property[BKE_ST_MAXNAME]
char category[BKE_ST_MAXNAME]
struct PanelType * parent
char label[BKE_ST_MAXNAME]
struct PointerRNA * custom_data_ptr
uiWidgetColors wcol_menu_back
struct wmEvent * eventstate
double PIL_check_seconds_timer(void)
ccl_device_inline float2 floor(const float2 &a)
wmEventHandler_UI * WM_event_add_ui_handler(const bContext *C, ListBase *handlers, wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn, void *user_data, const char flag)
void WM_event_remove_ui_handler(ListBase *handlers, wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn, void *user_data, const bool postpone)
#define IS_EVENT_MOD(...)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_event_remove_timer(wmWindowManager *wm, wmWindow *UNUSED(win), wmTimer *timer)
wmTimer * WM_event_add_timer(wmWindowManager *wm, wmWindow *win, int event_type, double timestep)