57#define ANIMATION_TIME 0.30
58#define ANIMATION_INTERVAL 0.02
122 const char *context);
131 Panel **r_panel_animation,
132 bool *r_no_animation)
136 if (!(panel->type && panel->type->parent)) {
147 *r_panel_animation = panel;
158 if (panel->activedata) {
161 *r_panel_animation = panel;
165 *r_no_animation =
true;
169 *r_panel_animation = panel;
194 *r_panel_animation =
nullptr;
201 Panel *panel_animation =
nullptr;
202 bool no_animation =
false;
208 if (panel_animation) {
210 *r_panel_animation = panel_animation;
243 int max_sortorder = 0;
245 if (existing_panel->sortorder > max_sortorder) {
246 max_sortorder = existing_panel->sortorder;
259 const char *panel_idname,
267 if (panel_type ==
nullptr) {
268 printf(
"Panel type '%s' not found.\n", panel_idname);
312 if (
C !=
nullptr && panel->activedata !=
nullptr) {
317 if (panel->runtime->custom_data_ptr !=
nullptr) {
318 MEM_delete(panel->runtime->custom_data_ptr);
333 Link *data_link =
nullptr;
334 if (
data ==
nullptr) {
340 data_link =
static_cast<Link *
>(
data->first);
352 if (data_link ==
nullptr) {
358 panel_idname_func(data_link, panel_idname);
359 if (!
STREQ(panel_idname, panel->type->idname)) {
363 data_link = data_link->
next;
379 if (drag_panel->
type ==
nullptr) {
387 char *context =
nullptr;
393 int list_panels_len = 0;
394 int start_index = -1;
399 if (panel == drag_panel) {
401 start_index = list_panels_len;
412 MEM_callocN(list_panels_len *
sizeof(*panel_sort), __func__));
418 sort_index->
panel = panel;
424 qsort(panel_sort, list_panels_len,
sizeof(*panel_sort),
compare_panel);
427 int move_to_index = 0;
428 for (; move_to_index < list_panels_len; move_to_index++) {
429 if (panel_sort[move_to_index].panel == drag_panel) {
436 if (move_to_index == start_index) {
447 drag_panel->
type->
reorder(
C, drag_panel, move_to_index);
459 const bool open = (
flag & (1 << *flag_index));
465 *flag_index = *flag_index + 1;
485 short flag_index = 0;
517 *flag_index = *flag_index + 1;
534 if (panel_type ==
nullptr) {
541 short flag_index = 0;
543 if (panel->type->set_list_data_expand_flag) {
544 panel->type->set_list_data_expand_flag(
C, panel, expand_flag);
674 const char *idname = pt->
idname;
677 if (
STREQLEN(panel->panelname, idname,
sizeof(panel->panelname))) {
689 const bool newpanel = (panel ==
nullptr);
720 for (panel_last =
static_cast<Panel *
>(lb->
first); panel_last; panel_last = panel_last->
next) {
733 panel_next->sortorder++;
743 block->
panel = panel;
808 width =
max_ii(width, child_panel->sizex);
816 panel->
sizex = width;
817 panel->
sizey = height;
820 const int old_sizex = panel->
sizex, old_sizey = panel->
sizey;
825 panel->
sizex = width;
828 panel->
sizey = height;
832 if (panel->
sizex != old_sizex || panel->
sizey != old_sizey) {
868 but->rect.ymin += ofsy;
869 but->rect.ymax += ofsy;
887 if (!*filter_matches) {
896 bool search_filter_matches =
false;
898 return search_filter_matches;
906 const bool use_search_closed)
926 const bool use_search_closed)
968 BLI_assert(child_panel->runtime->block !=
nullptr);
1030#define PNL_ICON UI_UNIT_X
1046 const bool show_background,
1047 const bool region_search_filter_active,
1050 if (!show_background) {
1061 if (region_search_filter_active && !search_match) {
1070 const rcti *header_rect)
1072 const bool is_subpanel = panel->
type->
parent !=
nullptr;
1095 const rcti *header_rect,
1097 const bool show_pin,
1098 const bool show_background,
1099 const bool region_search_filter_active)
1101 const bool is_subpanel = panel->
type->
parent !=
nullptr;
1109 widget_rect.
xmin = header_rect->
xmin + (is_subpanel ? scaled_unit * 0.7f : 0);
1110 widget_rect.
xmax = header_rect->
xmax;
1111 widget_rect.
ymin = header_rect->
ymin;
1112 widget_rect.
ymax = header_rect->
ymax;
1114 uchar title_color[4];
1116 title_color[3] = 255;
1137 title_rect.
xmin = widget_rect.
xmin + (panel->
labelofs / aspect) + scaled_unit * 1.1f;
1138 title_rect.
xmax = widget_rect.
xmax;
1139 title_rect.
ymin = widget_rect.
ymin - 2.0f / aspect;
1140 title_rect.
ymax = widget_rect.
ymax;
1152 widget_rect.
ymin + 5.0f / aspect,
1164 if (!is_subpanel && show_background) {
1165 const int drag_widget_size = header_height * 0.7f;
1166 const int col_tint = 84;
1167 float color_high[4], color_dark[4];
1173 widget_rect.
ymin + (header_height - drag_widget_size) * 0.5f,
1188 widget_rect.
ymin + (header_height - drag_widget_size) * 0.5f);
1190 U.pixelsize, color_high, color_dark, drag_widget_size);
1201 float subpanel_backcolor[4])
1225 if (is_main_panel_end) {
1235 rctf panel_pixelspacef;
1244 const rcti *header_rect)
1247 const bool is_subpanel = panel->
type->
parent !=
nullptr;
1250 if (is_subpanel && !is_open) {
1262 if (is_open || !has_header) {
1263 float panel_backcolor[4];
1279 float subpanel_backcolor[4];
1285 if (!is_subpanel && has_header) {
1286 float panel_headercolor[4];
1308 const bool show_pin,
1309 const bool show_background,
1310 const bool region_search_filter_active)
1315 const rcti header_rect = {
1334 region_search_filter_active);
1366#define TABS_PADDING_BETWEEN_FACTOR 4.0f
1367#define TABS_PADDING_TEXT_FACTOR 6.0f
1377 float fstyle_points = fstyle->
points;
1381 const float zoom = 1.0f / aspect;
1382 const int px =
U.pixelsize;
1394#ifdef USE_FLAT_INACTIVE
1395 bool is_active_prev =
false;
1401 int y_ofs = tab_v_pad;
1404 uchar theme_col_back[4];
1405 uchar theme_col_text[3];
1406 uchar theme_col_text_hi[3];
1409 uchar theme_col_tab_bg[4];
1410 float theme_col_tab_active[4];
1411 float theme_col_tab_inactive[4];
1412 float theme_col_tab_outline[4];
1423 is_alpha = (region->
overlap && (theme_col_back[3] != 255));
1438 rcti *rct = &pc_dyn->rect;
1439 const char *category_id = pc_dyn->idname;
1440 const char *category_id_draw =
IFACE_(category_id);
1443 rct->
xmin = rct_xmin;
1444 rct->
xmax = rct_xmax;
1446 rct->
ymin = v2d->
mask.
ymax - (y_ofs + category_width + (tab_v_pad_text * 2));
1449 y_ofs += category_width + tab_v_pad + (tab_v_pad_text * 2);
1456 rcti *rct = &pc_dyn->rect;
1457 rct->
ymin += scroll;
1458 rct->
ymax += scroll;
1493 const rcti *rct = &pc_dyn->rect;
1502 const char *category_id = pc_dyn->idname;
1503 const char *category_id_draw =
IFACE_(category_id);
1505 const bool is_active =
STREQ(category_id, category_id_active);
1509#ifdef USE_FLAT_INACTIVE
1511 if (is_active ==
false && is_active_prev ==
false && pc_dyn->prev) {
1518 v2d->
mask.
xmax - (category_tabs_width / 5),
1520 is_left ? (v2d->
mask.
xmin + category_tabs_width) - (category_tabs_width / 5) :
1521 (v2d->
mask.
xmax - category_tabs_width) + (category_tabs_width / 5),
1522 rct->
ymax + (px * 3));
1526 is_active_prev = is_active;
1542 is_active ? theme_col_tab_active : theme_col_tab_inactive);
1562 const int text_v_ofs = (rct_xmax - rct_xmin) * 0.5f;
1564 const int text_size_offset =
int(fstyle_points *
UI_SCALE_FAC * 0.35f);
1567 is_left ? rct->
xmax - text_v_ofs + text_size_offset :
1568 rct->
xmin + text_v_ofs - text_size_offset,
1571 BLF_color3ubv(fontid, is_active ? theme_col_text_hi : theme_col_text);
1572 BLF_draw(fontid, category_id_draw, category_draw_len);
1578 pc_dyn->rect.xmin = v2d->
mask.
xmin;
1581 pc_dyn->rect.xmax = v2d->
mask.
xmax;
1590#undef TABS_PADDING_BETWEEN_FACTOR
1591#undef TABS_PADDING_TEXT_FACTOR
1602 return panel->
sizey;
1668 if (pin_last_a && !pin_last_b) {
1671 if (!pin_last_a && pin_last_b) {
1713 pachild->ofsx = panel->
ofsx;
1717 if (pachild->children.first) {
1730 int active_panels_len = 0;
1735 active_panels_len++;
1738 if (active_panels_len == 0) {
1758 for (
int i = 0; i < active_panels_len; i++) {
1769 for (
int i = 0; i < active_panels_len; i++) {
1777 for (
int i = 0,
y = 0; i < active_panels_len; i++) {
1784 if (show_background) {
1795 bool changed =
false;
1796 for (
int i = 0; i < active_panels_len; i++) {
1817 if (panel->children.first) {
1832 bool has_panel_with_background =
false;
1837 const int pa_sizex = panel->ofsx + panel->sizex;
1840 sizex =
max_ii(sizex, pa_sizex);
1841 sizey =
min_ii(sizey, pa_sizey);
1843 has_panel_with_background =
true;
1856 if (has_panel_with_background) {
1892 const bool was_active = panel->runtime_flag &
PANEL_ACTIVE;
1894 panel->runtime_flag &= flag_copy;
1931 BLI_assert(panel->runtime->block !=
nullptr);
1938 if (block->active && block->panel) {
1968#define DRAG_REGION_PAD (PNL_HEADER * 0.5)
1991#undef DRAG_REGION_PAD
2047 const int xy_dst[2])
2055 float xy_b_block[2] = {
float(xy_dst[0]),
float(xy_dst[1])};
2056 Panel *panel = block->panel;
2058 if (panel ==
nullptr) {
2063 xy_b_block[0] = dragcol_data->
xy_init[0];
2070 rctf rect = block->rect;
2072 rect.
ymax = block->rect.ymax + header.
end_y;
2089 const int oldflag = panel->
flag;
2092 rctf rect = block->rect;
2103 if (panel->
flag != oldflag) {
2124 switch (event->
type) {
2177 bContext *
C,
const uiBlock *block,
const int ,
const int my,
const int event_type)
2183 if (header ==
nullptr) {
2204 const int event_type,
2214 const bool is_subpanel = (panel->
type->
parent !=
nullptr);
2216 const bool show_pin = use_pin && (panel->
flag &
PNL_PIN);
2217 const bool show_drag = !is_subpanel;
2226 float expansion_area_xmax = block->
rect.
xmax;
2228 expansion_area_xmax -= (
PNL_ICON * 1.5f);
2236 if (ctrl && !is_subpanel) {
2274 const float drag_area_xmax = block->
rect.
xmax;
2275 if (
IN_RANGE(mx, drag_area_xmin, drag_area_xmax)) {
2289 const float pin_area_xmin = expansion_area_xmax;
2290 const float pin_area_xmax = pin_area_xmin +
PNL_ICON;
2291 if (
IN_RANGE(mx, pin_area_xmin, pin_area_xmax)) {
2332 pc_act = MEM_cnew<PanelCategoryStack>(__func__);
2350 pc_act_next = pc_act->
next;
2351 while ((pc_act = pc_act_next)) {
2352 pc_act_next = pc_act->
next;
2390 return pc_act->idname;
2433 const uiBut *active_but)
2436 const bool inside_tabregion =
2442 if (is_mousewheel && (event->
modifier &
KM_CTRL) == 0 && !inside_tabregion) {
2456 if (is_mousewheel) {
2461 const bool backwards =
event->modifier &
KM_SHIFT;
2462 pc_dyn = backwards ? pc_dyn->
prev : pc_dyn->
next;
2487 const uiBut *active_but)
2533 const bool region_has_active_button = region_active_but &&
2537 Panel *panel = block->panel;
2538 if (panel ==
nullptr || panel->
type ==
nullptr) {
2545 int mx =
event->xy[0];
2546 int my =
event->xy[1];
2570 if (region_has_active_button) {
2635 Panel *panel = block->panel;
2636 if (panel ==
nullptr) {
2640 int mx =
event->xy[0];
2641 int my =
event->xy[1];
2667 Panel *panel =
static_cast<Panel *
>(userdata);
2698 Panel *panel =
static_cast<Panel *
>(userdata);
2725 if (!
data->animtimer) {
2776 if (
data->animtimer) {
2778 data->animtimer =
nullptr;
ARegion * CTX_wm_region_popup(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
void CTX_store_set(bContext *C, const bContextStore *store)
ARegion * CTX_wm_region(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
@ PANEL_TYPE_DEFAULT_CLOSED
void BKE_panel_free(Panel *panel)
Panel * BKE_panel_new(PanelType *panel_type)
void BLF_size(int fontid, float size)
void BLF_color3ubv(int fontid, const unsigned char rgb[3])
#define BLF_DRAW_STR_DUMMY_MAX
void BLF_disable(int fontid, int option)
void BLF_rotation(int fontid, float angle)
void BLF_draw(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_NONNULL(2)
void BLF_enable(int fontid, int option)
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
void BLF_position(int fontid, float x, float y, float z)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void * BLI_findstring(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
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 * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void BLI_freelistN(struct ListBase *listbase) 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_findstringindex(const struct ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT 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 target, float origin, float t)
MINLINE int clamp_i(int value, int min, int max)
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, int x, int y)
bool BLI_rctf_isect_segment(const struct rctf *rect, const float s1[2], const float s2[2])
void BLI_rctf_rcti_copy(struct rctf *dst, const struct rcti *src)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
#define STRNCPY(dst, src)
char * BLI_strdupn(const char *str, size_t len) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
size_t BLI_snprintf(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
Platform independent time functions.
double BLI_time_now_seconds(void)
#define STREQLEN(a, b, n)
#define IN_RANGE(a, b, c)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define CTX_IFACE_(context, msgid)
#define RGN_ALIGN_ENUM_FROM_MASK(align)
@ PNL_INSTANCED_LIST_ORDER_CHANGED
@ RGN_FLAG_SEARCH_FILTER_UPDATE
@ RGN_FLAG_SEARCH_FILTER_ACTIVE
#define RGN_TYPE_HAS_CATEGORY_MASK
void(*)(void *data_link, char *r_idname) uiListPanelIDFromDataFunc
void ED_region_tag_refresh_ui(ARegion *region)
void ED_region_tag_redraw(ARegion *region)
void GPU_batch_program_set_builtin(blender::gpu::Batch *batch, eGPUBuiltinShader shader_id)
void GPU_batch_draw(blender::gpu::Batch *batch)
blender::gpu::Batch * GPU_batch_preset_panel_drag_widget(float pixelsize, const float col_high[4], const float col_dark[4], float width) ATTR_WARN_UNUSED_RESULT
void GPU_matrix_translate_2f(float x, float y)
@ GPU_SHADER_3D_UNIFORM_COLOR
@ GPU_SHADER_3D_FLAT_COLOR
void GPU_blend(eGPUBlend blend)
void GPU_line_smooth(bool enable)
Read Guarded memory(de)allocation.
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a color
@ UI_BLOCK_THEME_STYLE_POPUP
bool UI_panel_is_closed(const Panel *panel)
void UI_draw_roundbox_4fv(const rctf *rect, bool filled, float rad, const float col[4])
void UI_block_theme_style_set(uiBlock *block, char theme_style)
#define INSTANCED_PANEL_UNIQUE_STR_SIZE
const uiStyle * UI_style_get_dpi()
void UI_draw_roundbox_corner_set(int type)
#define UI_PANEL_MARGIN_X
const uiStyle * UI_style_get()
bool UI_block_is_search_only(const uiBlock *block)
void UI_block_draw(const bContext *C, uiBlock *block)
#define UI_PANEL_CATEGORY_MARGIN_WIDTH
void UI_fontstyle_draw(const uiFontStyle *fs, const rcti *rect, const char *str, size_t str_len, const uchar col[4], const uiFontStyleDraw_Params *fs_params)
#define UI_PANEL_MARGIN_Y
bool UI_panel_is_dragging(const Panel *panel)
bContextStore * uiLayoutGetContextStore(uiLayout *layout)
void UI_block_set_search_only(uiBlock *block, bool search_only)
const char * UI_panel_category_active_get(ARegion *region, bool set_fallback)
void uiLayoutSetContextPointer(uiLayout *layout, const char *name, PointerRNA *ptr)
#define UI_NO_ICON_OVERLAY_TEXT
void UI_icon_draw_ex(float x, float y, int icon_id, float aspect, float alpha, float desaturate, const uchar mono_color[4], bool mono_border, const IconTextOverlay *text_overlay, const bool inverted=false)
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3])
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 char UI_view2d_mouse_in_scrollers(const ARegion *region, const View2D *v2d, const int xy[2]) ATTR_NONNULL(1
void UI_view2d_offset(View2D *v2d, float xfac, float yfac)
#define WM_UI_HANDLER_CONTINUE
#define WM_UI_HANDLER_BREAK
const T & last(const int64_t n=0) const
constexpr int64_t size() const
constexpr const char * data() const
local_group_size(16, 16) .push_constant(Type b
static float is_left(const float p0[2], const float p1[2], const float p2[2])
draw_view in_light_buf[] float
draw_view push_constant(Type::INT, "radiance_src") .push_constant(Type capture_info_buf storage_buf(1, Qualifier::READ, "ObjectBounds", "bounds_buf[]") .push_constant(Type draw_view int
struct @157336070235062372277311340362362342103123126032::@262166344314164341202215145112231240022370055142 batch
void ui_window_to_block(const ARegion *region, const uiBlock *block, int *x, int *y)
void ui_block_bounds_calc(uiBlock *block)
rcti ui_to_pixelrect(const ARegion *region, const uiBlock *block, const rctf *src_rect)
void ui_window_to_block_fl(const ARegion *region, const uiBlock *block, float *x, float *y)
void ui_fontscale(float *points, float aspect)
bool ui_but_supports_cycling(const uiBut *but)
void ui_handle_afterfunc_add_operator(wmOperatorType *ot, wmOperatorCallContext opcontext)
@ UI_BUTTON_GROUP_PANEL_HEADER
bool ui_block_is_popup_any(const uiBlock *block) ATTR_WARN_UNUSED_RESULT
uiBut * ui_region_find_active_but(ARegion *region) ATTR_WARN_UNUSED_RESULT
void ui_block_views_bounds_calc(const uiBlock *block)
bool UI_panel_is_closed(const Panel *panel)
static void panel_activate_state(const bContext *C, Panel *panel, const uiHandlePanelState state)
static int get_panel_real_ofsy(Panel *panel)
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)
PanelCategoryDyn * UI_panel_category_find(const ARegion *region, const char *idname)
bool UI_panel_can_be_pinned(const Panel *panel)
static void ui_panel_drag_collapse_handler_remove(bContext *, void *userdata)
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)
void UI_panel_drawname_set(Panel *panel, blender::StringRef name)
Panel * UI_panel_find_by_type(ListBase *lb, const PanelType *pt)
@ 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)
static void panel_delete(ARegion *region, ListBase *panels, Panel *panel)
void ui_draw_layout_panels_backdrop(const ARegion *region, const Panel *panel, const float radius, float subpanel_backcolor[4])
bool UI_panel_category_is_visible(const ARegion *region)
static void ui_panel_custom_data_set_recursive(Panel *panel, PointerRNA *custom_data)
bool ui_layout_panel_toggle_open(const bContext *C, LayoutPanelHeader *header)
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)
Panel * UI_panel_begin(ARegion *region, ListBase *lb, uiBlock *block, PanelType *pt, Panel *panel, bool *r_open)
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)
void UI_panels_begin(const bContext *, ARegion *region)
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)
static bool panel_custom_pin_to_last_get(const Panel *panel)
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)
bool UI_panel_should_show_background(const ARegion *region, const PanelType *panel_type)
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)
static PanelCategoryDyn * panel_categories_find_mouse_over(ARegion *region, const wmEvent *event)
void UI_panel_category_clear_all(ARegion *region)
PanelCategoryStack * UI_panel_category_active_find(ARegion *region, const char *idname)
static bool panels_need_realign(const ScrArea *area, ARegion *region, Panel **r_panel_animation)
LayoutPanelHeader * ui_layout_panel_header_under_mouse(const Panel &panel, const int my)
static float panel_region_offset_x_get(const ARegion *region)
static void align_sub_panels(Panel *panel)
@ PANEL_MOUSE_INSIDE_HEADER
@ PANEL_MOUSE_INSIDE_LAYOUT_PANEL_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
int UI_panel_category_index_find(ARegion *region, const char *idname)
static Panel * panel_add_instanced(ListBase *panels, PanelType *panel_type, PointerRNA *custom_data)
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)
#define ANIMATION_INTERVAL
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)
void UI_panel_category_index_active_set(ARegion *region, const int index)
bool UI_panel_list_matches_data(ARegion *region, ListBase *data, uiListPanelIDFromDataFunc panel_idname_func)
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)
PointerRNA * UI_panel_custom_data_get(const Panel *panel)
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_context_pointer_set(Panel *panel, const char *name, PointerRNA *ptr)
void ui_panel_drag_collapse_handler_add(const bContext *C, const bool was_open)
Panel * UI_panel_add_instanced(const bContext *C, ARegion *region, ListBase *panels, const char *panel_idname, PointerRNA *custom_data)
void UI_panel_category_add(ARegion *region, const char *name)
static void panel_draw_aligned_backdrop(const ARegion *region, const Panel *panel, const rcti *rect, const rcti *header_rect)
static int find_highest_panel(const void *a, const void *b)
static void ui_handle_panel_header(const bContext *C, const uiBlock *block, const int mx, const int event_type, const bool ctrl, const bool shift)
static void ui_handle_layout_panel_header(bContext *C, const uiBlock *block, const int, const int my, const int event_type)
static void panel_calculate_size_recursive(ARegion *region, Panel *panel)
PointerRNA * UI_region_panel_custom_data_under_cursor(const bContext *C, const wmEvent *event)
const char * UI_panel_category_active_get(ARegion *region, bool set_fallback)
static void ui_panel_category_active_set(ARegion *region, const char *idname, bool fallback)
void ui_draw_aligned_panel(const ARegion *region, const uiStyle *style, const uiBlock *block, const rcti *rect, const bool show_pin, const bool show_background, const bool region_search_filter_active)
static void panel_draw_highlight_border(const Panel *panel, const rcti *rect, const rcti *header_rect)
static void panel_custom_pin_to_last_set(const bContext *C, const Panel *panel, const bool value)
static uiPanelMouseState ui_panel_mouse_state_get(const uiBlock *block, const Panel *panel, const int mx, const int my)
static bool properties_space_needs_realign(const ScrArea *area, const ARegion *region)
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
ccl_device_inline float2 floor(const float2 a)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
bool RNA_pointer_is_null(const PointerRNA *ptr)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
ListBase panels_category_active
struct ARegionType * type
blender::Vector< LayoutPanelBody > bodies
blender::Vector< LayoutPanelHeader > headers
struct PanelCategoryDyn * next
struct PanelCategoryDyn * prev
struct PanelCategoryStack * next
void(* reorder)(bContext *C, Panel *pa, int new_index)
char idname[BKE_ST_MAXNAME]
char pin_to_last_property[BKE_ST_MAXNAME]
char context[BKE_ST_MAXNAME]
char translation_context[BKE_ST_MAXNAME]
char active_property[BKE_ST_MAXNAME]
char category[BKE_ST_MAXNAME]
char label[BKE_ST_MAXNAME]
short(* get_list_data_expand_flag)(const bContext *C, Panel *pa)
PointerRNA * custom_data_ptr
LayoutPanels layout_panels
struct Panel_Runtime * runtime
uiWidgetColors wcol_menu_back
blender::Vector< uiButtonGroup > button_groups
struct wmEvent * eventstate
wmEventHandler_UI * WM_event_add_ui_handler(const bContext *C, ListBase *handlers, wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn, void *user_data, const eWM_EventHandlerFlag flag)
void WM_event_remove_ui_handler(ListBase *handlers, wmUIHandlerFunc handle_fn, wmUIHandlerRemoveFunc remove_fn, void *user_data, const bool postpone)
#define ISMOUSE_MOTION(event_type)
wmOperatorType * WM_operatortype_find(const char *idname, bool quiet)
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)
wmTimer * WM_event_timer_add(wmWindowManager *wm, wmWindow *win, const int event_type, const double time_step)