73 rect.
xmin = scirct->
xmin - region->winrct.xmin;
74 rect.xmax = scirct->
xmax - region->winrct.xmin;
75 rect.ymin = scirct->
ymin - region->winrct.ymin;
76 rect.ymax = scirct->
ymax - region->winrct.ymin;
81 float color[4] = {0.0f, 0.0f, 0.0f, 0.25f};
144 if (region->type && region->type->listener) {
145 region->type->listener(
params);
153 if (list->type && list->type->listener) {
154 list->type->listener(list,
params);
162 if (
params->area->type &&
params->area->type->listener) {
170 if (area->type && area->type->refresh) {
171 area->type->refresh(C, area);
173 area->do_refresh =
false;
183 ICON_FULLSCREEN_EXIT,
205 const float size = 0.2f *
U.widget_unit;
206 const float l = 1.0f;
207 const float s = 0.25f;
208 const float hl =
l / 2.0f;
209 const float points[6][2] = {
210 {0, -hl}, {
l, hl}, {
l - s, hl + s}, {0, s + s - hl}, {s -
l, hl + s}, {-
l, hl}};
211 const float center[2] = {(x1 + x2) / 2, (y1 + y2) / 2};
245 for (
int i = 0; i < 6; i++) {
247 immVertex2f(
pos, center[0] + points[i][0] * size, center[1] + points[i][1] * sign * size);
250 immVertex2f(
pos, center[0] + points[i][1] * sign * size, center[1] + points[i][0] * size);
281 const float color[4] = {0.05f, 0.05f, 0.05f, alpha};
327 if (az->alpha > 0.0f) {
344 float header_color[4];
351 if (header_color[3] > 0.0f) {
352 const rctf rect = {0.0f,
float(region->winx), 0.0f,
float(region->winy)};
361 if (header_color[3] < 0.3f) {
365 const float x1 = x -
pad;
366 const float x2 = x + width +
pad;
369 float color[4] = {0.0f, 0.0f, 0.0f, 0.3f};
372 const rctf rect = {x1, x2, y1, y2};
393 while (region && region->prev) {
394 region = region->prev;
396 for (; region; region = region->next) {
422 msg_sub_value_region_tag_redraw.
owner = region;
423 msg_sub_value_region_tag_redraw.user_data = region;
426 mbus, &workspace->
id, workspace,
WorkSpace, tools, &msg_sub_value_region_tag_redraw);
436 const char *panel_category_tool =
"Tool";
439 bool update_region =
false;
440 if (category &&
STREQ(category, panel_category_tool)) {
441 update_region =
true;
447 STREQ(panel->type->category, panel_category_tool))
449 update_region =
true;
457 msg_sub_value_region_tag_redraw.
owner = region;
458 msg_sub_value_region_tag_redraw.user_data = region;
461 mbus, &workspace->
id, workspace,
WorkSpace, tools, &msg_sub_value_region_tag_redraw);
473 return (area->winx < 3) || (area->winy < 3);
492 UI_SetTheme(area ? area->spacetype : 0, at->regionid);
496 region->flag &= ~RGN_FLAG_SEARCH_FILTER_UPDATE;
517 UI_SetTheme(area ? area->spacetype : 0, at->regionid);
524 if (region->headerstr) {
544 if (
G.debug_value == 888) {
551 region->drawrct.xmin - region->winrct.xmin,
552 region->drawrct.ymin - region->winrct.ymin,
553 region->drawrct.xmax - region->winrct.xmin,
554 region->drawrct.ymax - region->winrct.ymin);
559 memset(®ion->drawrct, 0,
sizeof(region->drawrct));
574 float color[4] = {0.0f, 0.0f, 0.0f, 0.8f};
584 region->winrct.xmax - region->winrct.xmin + 1,
585 region->winrct.ymax - region->winrct.ymin + 1);
611 msg_sub_value_region_tag_redraw.
owner = region;
612 msg_sub_value_region_tag_redraw.user_data = region;
618 message_subscribe_params.
context =
C;
619 message_subscribe_params.message_bus = mbus;
620 message_subscribe_params.workspace = workspace;
621 message_subscribe_params.scene =
scene;
622 message_subscribe_params.screen = screen;
623 message_subscribe_params.area = area;
624 message_subscribe_params.region = region;
642 memset(®ion->drawrct, 0,
sizeof(region->drawrct));
649 region->do_draw_paintcursor =
RGN_DRAW;
658 memset(®ion->drawrct, 0,
sizeof(region->drawrct));
688 region->do_draw &= ~RGN_DRAW_NO_REBUILD;
694 region->do_draw &= ~RGN_DRAW_NO_REBUILD;
699 region->drawrct = *rct;
730 if (region->regiontype == regiontype) {
740 area->do_refresh =
true;
759 for (
ARegion *following_region = changed_region->
next; following_region;
760 following_region = following_region->next)
764 if (changed_region->
overlap != following_region->overlap) {
797 search_filter[0] !=
'\0',
806 if (area ==
nullptr) {
843 const float space_factor = 0.0f,
844 const bool inverted =
false)
847 if (workspace ==
nullptr) {
852 item.
text = std::move(text);
856 workspace->
runtime->status.append(std::move(item));
891 const bool inverted =
false)
895 if (icon >= ICON_MOUSE_LMB && icon <= ICON_MOUSE_MMB_SCROLL) {
997 const float coords[4][4] = {
999 {area->totrct.xmin -
U.pixelsize,
1000 area->totrct.ymin -
U.pixelsize,
1005 area->totrct.ymin -
U.pixelsize,
1006 area->totrct.xmax +
U.pixelsize,
1009 {area->totrct.xmin -
U.pixelsize,
1012 area->totrct.ymax +
U.pixelsize},
1016 area->totrct.xmax +
U.pixelsize,
1017 area->totrct.ymax +
U.pixelsize},
1020 for (
int i = 0; i < 4; i++) {
1024 ((coords[i][0] == 0 && coords[i][1] == 0) ||
1037 az->
x1 = coords[i][0];
1038 az->
y1 = coords[i][1];
1039 az->
x2 = coords[i][2];
1040 az->
y2 = coords[i][3];
1059 az->
x2 = region->winrct.xmin + rect_visible->
xmax;
1060 az->
y2 = region->winrct.ymin + rect_visible->
ymax;
1063 az->
x2 = region->winrct.xmax;
1064 az->
y2 = region->winrct.ymax;
1089 return back[3] < 50;
1094 const int azonepad_edge = (0.1f *
U.widget_unit);
1098 const int overlap_padding =
1105 int(0.4f *
U.widget_unit) :
1110 az->
x1 = region->winrct.xmin;
1111 az->
y1 = region->winrct.ymax - azonepad_edge - overlap_padding;
1112 az->
x2 = region->winrct.xmax;
1113 az->
y2 = region->winrct.ymax + azonepad_edge - overlap_padding;
1116 az->
x1 = region->winrct.xmin;
1117 az->
y1 = region->winrct.ymin + azonepad_edge + overlap_padding;
1118 az->
x2 = region->winrct.xmax;
1119 az->
y2 = region->winrct.ymin - azonepad_edge + overlap_padding;
1122 az->
x1 = region->winrct.xmin - azonepad_edge + overlap_padding;
1123 az->
y1 = region->winrct.ymin;
1124 az->
x2 = region->winrct.xmin + azonepad_edge + overlap_padding;
1125 az->
y2 = region->winrct.ymax;
1128 az->
x1 = region->winrct.xmax + azonepad_edge - overlap_padding;
1129 az->
y1 = region->winrct.ymin;
1130 az->
x2 = region->winrct.xmax - azonepad_edge - overlap_padding;
1131 az->
y2 = region->winrct.ymax;
1140 float edge_offset = 1.0f;
1141 const float tab_size_x = 0.7f *
U.widget_unit;
1142 const float tab_size_y = 0.4f *
U.widget_unit;
1146 int add = (region->winrct.ymax == area->totrct.ymin) ? 1 : 0;
1147 az->
x1 = region->winrct.xmax - ((edge_offset + 1.0f) * tab_size_x);
1148 az->
y1 = region->winrct.ymax -
add;
1149 az->
x2 = region->winrct.xmax - (edge_offset * tab_size_x);
1150 az->
y2 = region->winrct.ymax - add + tab_size_y;
1154 az->
x1 = region->winrct.xmax - ((edge_offset + 1.0f) * tab_size_x);
1155 az->
y1 = region->winrct.ymin - tab_size_y;
1156 az->
x2 = region->winrct.xmax - (edge_offset * tab_size_x);
1157 az->
y2 = region->winrct.ymin;
1160 az->
x1 = region->winrct.xmin - tab_size_y;
1161 az->
y1 = region->winrct.ymax - ((edge_offset + 1.0f) * tab_size_x);
1162 az->
x2 = region->winrct.xmin;
1163 az->
y2 = region->winrct.ymax - (edge_offset * tab_size_x);
1166 az->
x1 = region->winrct.xmax;
1167 az->
y1 = region->winrct.ymax - ((edge_offset + 1.0f) * tab_size_x);
1168 az->
x2 = region->winrct.xmax + tab_size_y;
1169 az->
y2 = region->winrct.ymax - (edge_offset * tab_size_x);
1191 if (is_hidden && is_fullscreen) {
1212 const bool is_fullscreen)
1258 const View2D *v2d = ®ion->v2d;
1273 const int alignment,
1274 const bool is_fullscreen)
1294 const bool is_fullscreen = screen->state ==
SCREENFULL;
1311 if (is_fullscreen) {
1338 for (region_iter = region->
prev; region_iter; region_iter = region_iter->
prev) {
1351 align1 = align_iter;
1353 if (align1 != align) {
1369 if (region->winrct.xmax + region_iter->
winx > area->winx -
U.widget_unit) {
1376 if (region->winrct.xmin - region_iter->
winx <
U.widget_unit) {
1386 for (region_iter = region->
prev; region_iter; region_iter = region_iter->
prev) {
1424 if (
ELEM(regiontype,
1437 if (
ELEM(regiontype,
1458 rcti *remainder_prev = remainder;
1460 if (region ==
nullptr) {
1464 int prev_winx = region->winx;
1465 int prev_winy = region->winy;
1473 remainder = ®ion->prev->winrct;
1495 if ((region->sizex == 0) && (region->type->prefsizex == 0)) {
1496 region->type->prefsizex =
AREAMINX;
1498 if ((region->sizey == 0) && (region->type->prefsizey == 0)) {
1499 region->type->prefsizey =
HEADERY;
1505 ((region->sizex > 1) ? region->sizex + 0.5f : region->type->prefsizex);
1518 prefsizey = region->sizey > 1 ? (
UI_SCALE_FAC * (region->sizey + 0.5f)) :
1519 asset::shelf::region_prefsizey();
1522 prefsizey = asset::shelf::header_region_size();
1529 (region->sizey > 1 ? region->sizey + 0.5f : region->type->prefsizey);
1543 rcti overlap_remainder_margin = *overlap_remainder;
1548 region->winrct.xmin = overlap_remainder_margin.
xmin + region->runtime.offset_x;
1549 region->winrct.ymin = overlap_remainder_margin.
ymin + region->runtime.offset_y;
1550 region->winrct.xmax = region->winrct.xmin + prefsizex - 1;
1551 region->winrct.ymax = region->winrct.ymin + prefsizey - 1;
1553 BLI_rcti_isect(®ion->winrct, &overlap_remainder_margin, ®ion->winrct);
1564 winrct_test.
xmin = region->winrct.xmin;
1565 winrct_test.ymin = region->winrct.ymin;
1566 winrct_test.xmax = region->winrct.xmin + size_min[0];
1567 winrct_test.ymax = region->winrct.ymin + size_min[1];
1569 BLI_rcti_isect(&winrct_test, &overlap_remainder_margin, &winrct_test);
1582 region->winrct = *remainder;
1586 rcti *winrct = (region->overlap) ? overlap_remainder : remainder;
1598 region->winrct = *winrct;
1601 region->winrct.
ymin = region->winrct.ymax - prefsizey + 1;
1602 winrct->
ymax = region->winrct.ymin - 1;
1605 region->winrct.ymax = region->winrct.ymin + prefsizey - 1;
1606 winrct->
ymin = region->winrct.ymax + 1;
1612 rcti *winrct = (region->overlap) ? overlap_remainder : remainder;
1624 region->winrct = *winrct;
1627 region->winrct.
xmin = region->winrct.xmax - prefsizex + 1;
1628 winrct->
xmax = region->winrct.xmin - 1;
1631 region->winrct.xmax = region->winrct.xmin + prefsizex - 1;
1632 winrct->
xmin = region->winrct.xmax + 1;
1639 region->winrct = *remainder;
1644 remainder->
xmin = region->winrct.xmax + 1;
1653 remainder->
ymin = region->winrct.ymax + 1;
1661 region->winrct = *remainder;
1668 while (region_test) {
1670 region_test = region_test->
next;
1678 printf(
"region quadsplit failed\n");
1690 else if (
quad == 2) {
1694 else if (
quad == 3) {
1718 if (region->winx > 1) {
1721 if (region->winy > 1) {
1732 region->winrct = (region->overlap) ? *overlap_remainder : *remainder;
1734 switch (alignment) {
1736 region->winrct.
ymin = region->winrct.ymax;
1739 region->winrct.ymax = region->winrct.ymin;
1742 region->winrct.xmin = region->winrct.xmax;
1745 region->winrct.xmax = region->winrct.xmin;
1749 region->winrct.xmax = region->winrct.xmin;
1760 remainder = remainder_prev;
1768 if (!region->overlap) {
1769 *overlap_remainder = *remainder;
1777 if (region->winx != prev_winx || region->winy != prev_winy) {
1789 memset(®ion->runtime.visible_rect, 0,
sizeof(region->runtime.visible_rect));
1794 short px = short(
U.pixelsize);
1796 area->totrct.xmin = area->v1->vec.x;
1797 area->totrct.xmax = area->v4->vec.x;
1798 area->totrct.ymin = area->v1->vec.y;
1799 area->totrct.ymax = area->v2->vec.y;
1802 if (area->totrct.xmin > window_rect->
xmin) {
1803 area->totrct.xmin += px;
1805 if (area->totrct.xmax < (window_rect->
xmax - 1)) {
1806 area->totrct.xmax -= px;
1808 if (area->totrct.ymin > window_rect->
ymin) {
1809 area->totrct.ymin += px;
1811 if (area->totrct.ymax < (window_rect->
ymax - 1)) {
1812 area->totrct.ymax -= px;
1842 region->visible = !hidden;
1847 rcti rect = region->winrct;
1858 BLI_assert(region ? (®ion->handlers == handlers) : (&area->handlers == handlers));
1879 if (region->gizmo_map ==
nullptr) {
1881 params.spaceid = area->spacetype;
1882 params.regionid = region->type->regionid;
1971 rcti rect = area->totrct;
1972 rcti overlap_rect = rect;
1974 area,
static_cast<ARegion *
>(area->regionbase.first), &rect, &overlap_rect, 0);
1986 if (region->type->init) {
1987 region->type->init(wm, region);
1995 area->flag &= ~AREA_FLAG_REGION_SIZE_UPDATE;
2009 area->spacetype = space_type;
2014 if (sl_iter->spacetype == space_type) {
2021 if (
LIKELY(sl != sl_old)) {
2053 if (area->type ==
nullptr) {
2062 BLI_assert_msg(region->type !=
nullptr,
"Region type not valid for this space type");
2069 rcti rect = area->totrct;
2070 rcti overlap_rect = rect;
2072 area,
static_cast<ARegion *
>(area->regionbase.first), &rect, &overlap_rect, 0);
2073 area->flag &= ~AREA_FLAG_REGION_SIZE_UPDATE;
2078 if (area->type->init) {
2079 area->type->init(wm, area);
2089 if (region->visible) {
2093 if (region->type->init) {
2094 region->type->init(wm, region);
2116 (area->runtime.tool ==
nullptr))
2124 area->runtime.tool =
nullptr;
2125 area->runtime.is_tool_set =
true;
2156 if (area->type && area->type->exit) {
2157 area->type->exit(wm, area);
2161 if (region->type && region->type->exit) {
2162 region->type->exit(wm, region);
2167 region->visible =
false;
2171 if (region->regiontimer) {
2173 region->regiontimer =
nullptr;
2198 BLI_rcti_init(®ion->v2d.mask, 0, region->winx - 1, 0, region->winy - 1);
2218 if (region !=
nullptr) {
2222 if (area && region->type && region->type->cursor) {
2223 region->type->cursor(win, area, region);
2257 const bool do_init =
true;
2267 if (do_fade && region->overlap) {
2283 const char spacetype = area_dst->
spacetype;
2289 area_dst->
flag = (area_dst->
flag & ~flag_copy) | (area_src->
flag & flag_copy);
2317 std::swap(area_dst->
type, area_src->
type);
2361 const int index = region->regiontype;
2385 if ((tool_header_alignment != -1) &&
2387 ((tool_header_hidden ==
false) ||
2391 (header_hidden && tool_header_hidden)))
2393 return tool_header_alignment;
2395 if (header_alignment != -1) {
2396 return header_alignment;
2429 const short tool_header_alignment_src =
2435 region_align_info_src, -1);
2438 if (primary_header_alignment_src == -1) {
2443 const short tool_header_alignment_dst =
2450 short header_alignment_sync = -1;
2451 short tool_header_alignment_sync = -1;
2452 short footer_alignment_sync = -1;
2456 if (((header_alignment_src != -1) == (header_alignment_dst != -1)) &&
2457 ((tool_header_alignment_src != -1) == (tool_header_alignment_dst != -1)) &&
2458 (tool_header_hidden_src == tool_header_hidden_dst))
2460 if (header_alignment_dst != -1) {
2461 header_alignment_sync = header_alignment_src;
2463 if (tool_header_alignment_dst != -1) {
2464 tool_header_alignment_sync = tool_header_alignment_src;
2470 region_align_info_dst, -1);
2472 if (primary_header_alignment_src != primary_header_alignment_dst) {
2473 if ((header_alignment_dst != -1) && (tool_header_alignment_dst != -1)) {
2474 if (header_alignment_dst == tool_header_alignment_dst) {
2476 tool_header_alignment_sync = primary_header_alignment_src;
2477 header_alignment_sync = primary_header_alignment_src;
2481 tool_header_alignment_sync = primary_header_alignment_src;
2489 if (header_alignment_dst != -1) {
2490 header_alignment_sync = primary_header_alignment_src;
2492 if (tool_header_alignment_dst != -1) {
2493 tool_header_alignment_sync = primary_header_alignment_src;
2499 if (footer_alignment_dst != -1) {
2500 if ((header_alignment_dst != -1) && (header_alignment_dst == footer_alignment_dst)) {
2502 footer_alignment_sync = primary_header_alignment_src;
2506 footer_alignment_sync = (primary_header_alignment_src ==
RGN_ALIGN_BOTTOM) ?
2513 if (header_alignment_sync != -1) {
2515 if (region !=
nullptr) {
2521 if (tool_header_alignment_sync != -1) {
2523 if (region !=
nullptr) {
2529 if (footer_alignment_sync != -1) {
2531 if (region !=
nullptr) {
2545 region_by_type[index] = region;
2556 region_align_info_src, ®ion_align_info_dst, region_by_type);
2597 if (area->spacetype != type) {
2612 bool sync_header_alignment =
false;
2616 sync_header_alignment =
true;
2621 if (skip_region_exit && area->type) {
2622 area->type->exit =
nullptr;
2628 if (skip_region_exit && area->type) {
2629 area->type->exit = area_exit;
2632 area->spacetype = type;
2642 if (sl_iter->spacetype == type) {
2666 sl->
link_flag &= ~SPACE_FLAG_TYPE_WAS_ACTIVE;
2677 sl = st->
create(area, scene);
2690 if (sync_header_alignment) {
2709 area->butspacetype_subtype = 0;
2725 for (
SpaceLink *sl_iter = sl->
next; sl_iter; sl_iter = sl_iter->next) {
2732 for (
SpaceLink *sl_iter = sl->
next; sl_iter; sl_iter = sl_iter->next) {
2750 sl->
link_flag &= ~SPACE_FLAG_TYPE_TEMPORARY;
2758 area->flag &= ~AREA_FLAG_STACKED_FULLSCREEN;
2770 int xco = 0.4 *
U.widget_unit;
2780 1.6 *
U.widget_unit,
2789 return xco + 1.7 *
U.widget_unit;
2796 switch (region->regiontype) {
2809 if (region->overlap) {
2815 GPU_clear_color(back[3] * back[0], back[3] * back[1], back[3] * back[2], back[3]);
2832 for (
uint i = 0; arr[i]; i++) {
2833 if (
STREQ(arr[i], s)) {
2856 char *unique_panel_str,
2857 const char *search_filter,
2864 if (unique_panel_str) {
2877 const bool search_filter_active = search_filter !=
nullptr && search_filter[0] !=
'\0';
2880 int xco, yco, h = 0;
2943 if (open || search_filter_active) {
2981 if (!ends_with_layout_panel_header) {
2991 if (open || search_filter_active) {
2996 if (child_pt->
draw && (!child_pt->
poll || child_pt->
poll(C, child_pt))) {
3019 const char *contexts[],
3020 const char *category_override,
3024 if (panel_type->
parent) {
3028 if (category_override) {
3035 if (contexts !=
nullptr && panel_type->
context[0]) {
3049 if (panel_type->
poll && !panel_type->
poll(C, panel_type)) {
3067 bool *use_category_tabs)
3072 for (
LinkNode *pt_link = panel_types_stack; pt_link; pt_link = pt_link->
next) {
3085 *use_category_tabs =
false;
3091 const int max_width)
3103 const char *contexts[],
3104 const char *category_override)
3108 LinkNode *panel_types_stack =
nullptr;
3115 region->runtime.category =
nullptr;
3118 View2D *v2d = ®ion->v2d;
3120 bool use_category_tabs = (category_override ==
nullptr) &&
3123 const char *category =
nullptr;
3127 bool update_tot_size =
true;
3132 v2d->
scroll &= ~V2D_SCROLL_BOTTOM;
3136 if (use_category_tabs) {
3139 if (use_category_tabs) {
3140 margin_x = category_tabs_width;
3145 const int em = (region->type->prefsizex) ? 10 : 20;
3156 bool has_instanced_panel =
false;
3157 for (
LinkNode *pt_link = panel_types_stack; pt_link; pt_link = pt_link->
next) {
3161 has_instanced_panel =
true;
3167 if ((panel ==
nullptr) || ((panel->
flag &
PNL_PIN) == 0)) {
3175 update_tot_size =
false;
3179 C, region, ®ion->panels, pt, panel, width, em,
nullptr, search_filter, op_context);
3183 if (has_instanced_panel) {
3185 if (panel->type ==
nullptr) {
3191 if (use_category_tabs && panel->type->category[0] && !
STREQ(category, panel->type->category))
3199 update_tot_size =
false;
3224 if (region_layout_based) {
3228 Panel *panel =
static_cast<Panel *
>(region->panels.last);
3229 if (panel !=
nullptr) {
3230 const int size_dyn[2] = {
3235 if ((region->sizex != size_dyn[0]) || (region->sizey != size_dyn[1])) {
3236 region->sizex = size_dyn[0];
3237 region->sizey = size_dyn[1];
3246 if (v2d->
cur.
ymax < -FLT_EPSILON) {
3261 if (update_tot_size) {
3266 if (use_category_tabs) {
3267 region->runtime.category = category;
3279 View2D *v2d = ®ion->v2d;
3302 if (region->runtime.category) {
3307 bool use_mask =
false;
3309 if (region->runtime.category &&
3318 bool use_full_hide =
false;
3319 if (region->overlap) {
3321 use_full_hide =
true;
3329 const char *contexts[])
3363 const char *search_filter)
3373 if (panel ==
nullptr) {
3375 panel =
UI_panel_begin(region, ®ion->panels, block, panel_type, panel, &open);
3393 panel_type->
draw(C, panel);
3406 if (!panel_type_child->
poll || panel_type_child->
poll(C, panel_type_child)) {
3422 const char *contexts[],
3423 const char *category_override)
3430 LinkNode *panel_types_stack =
nullptr;
3437 const char *category =
nullptr;
3438 bool use_category_tabs = (category_override ==
nullptr) &&
3440 if (use_category_tabs) {
3445 bool has_result =
true;
3446 bool has_instanced_panel =
false;
3447 for (
LinkNode *pt_link = panel_types_stack; pt_link; pt_link = pt_link->
next) {
3451 has_instanced_panel =
true;
3455 if (use_category_tabs) {
3470 if (!has_result && has_instanced_panel) {
3476 if (use_category_tabs) {
3477 if (panel->type->category[0] && !
STREQ(category, panel->type->category)) {
3509 if (region->winrct.ymin == win_rect.
ymin) {
3512 if (region->winrct.ymax == (win_rect.
ymax - 1)) {
3517 if (region->winrct.ymax == area->totrct.ymax) {
3533 int yco = buttony + (region->winy - buttony) / 2;
3544 if (ht->poll && !ht->poll(C, ht)) {
3552 if (buttony_scale != 1.0f) {
3556 Header header = {
nullptr};
3560 ht->draw(C, &header);
3581 if (region_layout_based && (region->sizex != new_sizex)) {
3585 region->sizex = new_sizex;
3596 if (!region_layout_based) {
3636 if (region->overlap) {
3695 return area->global !=
nullptr;
3712 int event_xy_other[2];
3714 if (win_other && win_other != win) {
3721 if (!area && !win->
parent) {
3734 return static_cast<ScrArea *
>(screen->areabase.first);
3744 if (area->global ==
nullptr) {
3748 for (
ScrArea *area_iter = area->
next; area_iter; area_iter = area_iter->next) {
3754 return static_cast<ScrArea *
>(screen->areabase.first);
3763 const char *text_array[],
3764 const float fill_color[4],
3765 const bool full_redraw)
3781 const char **text = &text_array[0];
3785 1.2f *
U.widget_unit);
3792 const char **text = &text_array[0];
3799 rect.
ymin = rect.
ymax - header_height * num_lines;
3818 int offset = num_lines - 1;
3820 const char **text = &text_array[0];
3823 rect.
xmin + 0.6f *
U.widget_unit,
3824 rect.
ymin + 0.3f *
U.widget_unit + offset * header_height,
3835 GPU_scissor(scissor[0], scissor[1], scissor[2], scissor[3]);
3840 const float fill_color[4],
3841 const bool full_redraw)
3843 const char *text_array[2] = {text,
nullptr};
3855 uiItemL(row, field, ICON_NONE);
3856 uiItemL(row, value, ICON_NONE);
3886 float gridsize = 0.5f * (zoomx + zoomy);
3887 float gridstep = 1.0f / 32.0f;
3888 if (gridsize <= 0.0f) {
3892 if (gridsize < 1.0f) {
3893 while (gridsize < 1.0f) {
3899 while (gridsize >= 4.0f) {
3905 float blendfac = 0.25f * gridsize -
floorf(0.25f * gridsize);
3906 CLAMP(blendfac, 0.0f, 1.0f);
3908 int count_fine = 1.0f / gridstep;
3909 int count_large = 1.0f / (4.0f * gridstep);
3911 if (count_fine > 0) {
3919 float theme_color[3];
3924 for (
int i = 0; i < count_fine; i++) {
3936 if (count_large > 0) {
3941 for (
int i = 0; i < count_large; i++) {
3950 fac += 4.0f * gridstep;
3963 ARegion *region_iter = region;
3966 while (region_iter->
prev) {
3967 region_iter = region_iter->
prev;
3970 *rect = region->winrct;
3973 for (; region_iter; region_iter = region_iter->
next) {
3974 if (region != region_iter && region_iter->
overlap) {
4012 rcti *rect = ®ion->runtime.visible_rect;
4013 if (rect->
xmin == 0 && rect->
ymin == 0 && rect->
xmax == 0 && rect->
ymax == 0) {
4025 const int region_bottom = rect_visible->
ymin;
4040 float font_dims[2] = {0.0f, 0.0f};
4052 immRecti(
pos, x, y, x + font_dims[0] + 6.0f, y + font_dims[1] + 4.0f);
4057 BLF_draw(fontid, numstr,
sizeof(numstr));
4061 ARegion *region,
const int num_segments,
const int *points,
const int sfra,
const int efra)
4066 const int region_bottom = rect_visible->
ymin;
4073 for (
int a = 0; a < num_segments; a++) {
4074 float x1 =
float(points[a * 2] - sfra) / (efra - sfra + 1) * region->winx;
4075 float x2 =
float(points[a * 2 + 1] - sfra + 1) / (efra - sfra + 1) * region->winx;
4091 if (region->gizmo_map !=
nullptr) {
4099 if (region->type->message_subscribe !=
nullptr) {
4100 region->type->message_subscribe(
params);
4107 const int snap_match_threshold = 16;
4108 if (region->type->snap_size !=
nullptr) {
4109 const int snap_size_x = region->type->snap_size(region, region->sizex, 0);
4110 const int snap_size_y = region->type->snap_size(region, region->sizey, 1);
4111 return (((
abs(region->sizex - snap_size_x) <= snap_match_threshold) << 0) |
4112 ((
abs(region->sizey - snap_size_y) <= snap_match_threshold) << 1));
4119 bool changed =
false;
4120 if (region->type->snap_size !=
nullptr) {
4121 if (snap_flag & (1 << 0)) {
4122 short snap_size = region->type->snap_size(region, region->sizex, 0);
4123 if (snap_size != region->sizex) {
4124 region->sizex = snap_size;
4128 if (snap_flag & (1 << 1)) {
4129 short snap_size = region->type->snap_size(region, region->sizey, 1);
4130 if (snap_size != region->sizey) {
4131 region->sizey = snap_size;
WorkSpace * CTX_wm_workspace(const bContext *C)
bScreen * CTX_wm_screen(const bContext *C)
ScrArea * CTX_wm_area(const bContext *C)
wmWindow * CTX_wm_window(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
wmWindowManager * CTX_wm_manager(const bContext *C)
void BKE_spacedata_copylist(ListBase *lb_dst, ListBase *lb_src)
void BKE_spacedata_freelist(ListBase *lb)
ScrArea ScrArea * BKE_screen_find_area_xy(const bScreen *screen, int spacetype, const int xy[2]) ATTR_NONNULL(1
void BKE_screen_area_free(ScrArea *area)
SpaceType * BKE_spacetype_from_id(int spaceid)
ARegionType * BKE_regiontype_from_id(const SpaceType *st, int regionid)
void BKE_area_region_free(SpaceType *st, ARegion *region)
ARegion * BKE_area_region_copy(const SpaceType *st, const ARegion *region)
void BKE_area_region_panels_free(ListBase *panels)
@ PANEL_TYPE_LAYOUT_VERT_BAR
@ PANEL_TYPE_HEADER_EXPAND
void BKE_workspace_status_clear(WorkSpace *workspace)
bool BKE_workspace_owner_id_check(const WorkSpace *workspace, const char *owner_id) ATTR_NONNULL()
bScreen * BKE_workspace_active_screen_get(const WorkSpaceInstanceHook *hook) GETTER_ATTRS
void BLF_size(int fontid, float size)
void BLF_clipping(int fontid, int xmin, int ymin, int xmax, int ymax)
void BLF_width_and_height(int fontid, const char *str, size_t str_len, float *r_width, float *r_height) ATTR_NONNULL()
#define BLF_DRAW_STR_DUMMY_MAX
void BLF_disable(int fontid, int option)
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)
#define BLI_assert_msg(a, msg)
#define BLI_linklist_prepend_alloca(listp, ptr)
BLI_LINKSTACK_*** wrapper macros for using a LinkNode to store a stack of pointers,...
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)
void BLI_freelinkN(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
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_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) 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)
float BLI_thread_frand(int thread) ATTR_WARN_UNUSED_RESULT
void BLI_rcti_union(struct rcti *rct_a, const struct rcti *rct_b)
bool BLI_rcti_isect_pt_v(const struct rcti *rect, const int xy[2])
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
bool BLI_rcti_is_valid(const struct rcti *rect)
void BLI_rcti_translate(struct rcti *rect, int x, int y)
void BLI_rcti_init(struct rcti *rect, int xmin, int xmax, int ymin, int ymax)
void BLI_rcti_resize(struct rcti *rect, int x, int y)
void BLI_rcti_sanitize(struct rcti *rect)
bool BLI_rcti_isect(const struct rcti *src1, const struct rcti *src2, struct rcti *dest)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE int BLI_rcti_cent_y(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
BLI_INLINE int BLI_rcti_cent_x(const struct rcti *rct)
void BLI_str_rstrip(char *str) ATTR_NONNULL(1)
#define STRNCPY(dst, src)
#define SNPRINTF(dst, format,...)
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define BLI_string_join(...)
#define SET_FLAG_FROM_TEST(value, test, flag)
#define RGN_ALIGN_ENUM_FROM_MASK(align)
@ AREA_FLAG_ACTIVE_TOOL_UPDATE
@ AREA_FLAG_REGION_SIZE_UPDATE
@ AREA_FLAG_ACTIONZONES_UPDATE
@ RGN_ALIGN_HIDE_WITH_PREV
@ RGN_TYPE_ASSET_SHELF_HEADER
@ RGN_DRAW_EDITOR_OVERLAYS
#define RGN_TYPE_HAS_CATEGORY_MASK
@ RGN_FLAG_SEARCH_FILTER_UPDATE
@ RGN_FLAG_SEARCH_FILTER_ACTIVE
#define RGN_TYPE_IS_HEADER_ANY(regiontype)
#define RGN_ALIGN_FLAG_FROM_MASK(align)
@ SPACE_FLAG_TYPE_WAS_ACTIVE
@ SPACE_FLAG_TYPE_TEMPORARY
@ USER_APP_HIDE_REGION_TOGGLE
@ USER_APP_LOCK_CORNER_SPLIT
@ USER_APP_LOCK_EDGE_RESIZE
@ V2D_SCROLL_VERTICAL_HANDLES
@ V2D_SCROLL_HORIZONTAL_HANDLES
void ED_area_tag_redraw(ScrArea *area)
void ED_region_visibility_change_update_animated(bContext *C, ScrArea *area, ARegion *region)
void ED_area_exit(bContext *C, ScrArea *area)
AZone * ED_area_azones_update(ScrArea *area, const int mouse_xy[2])
void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
#define REGION_DRAW_POST_PIXEL
GPUFrameBuffer * GPU_framebuffer_active_get()
void GPU_clear_color(float red, float green, float blue, float alpha)
void GPU_framebuffer_bind(GPUFrameBuffer *framebuffer)
void GPU_matrix_identity_set()
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_width(float width)
void GPU_scissor(int x, int y, int width, int height)
void GPU_scissor_get(int coords[4])
Read Guarded memory(de)allocation.
void UI_region_button_sections_draw(const ARegion *region, int colorid, uiButtonSectionsAlign align)
void UI_blocklist_update_window_matrix(const bContext *C, const ListBase *lb)
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_panel_category_draw_all(ARegion *region, const char *category_id_active)
PanelCategoryDyn * UI_panel_category_find(const ARegion *region, const char *idname)
#define INSTANCED_PANEL_UNIQUE_STR_SIZE
bool UI_block_apply_search_filter(uiBlock *block, const char *search_filter)
void UI_blocklist_free(const bContext *C, ARegion *region)
void uiLayoutSetScaleY(uiLayout *layout, float scale)
void uiItemL(uiLayout *layout, const char *name, int icon)
Panel * UI_panel_find_by_type(ListBase *lb, const PanelType *pt)
void UI_blocklist_update_view_for_buttons(const bContext *C, const ListBase *lb)
void UI_panel_header_buttons_begin(Panel *panel)
void UI_panels_free_instanced(const bContext *C, ARegion *region)
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
uiLayout * UI_block_layout(uiBlock *block, int dir, int type, int x, int y, int size, int em, int padding, const uiStyle *style)
const uiStyle * UI_style_get_dpi()
bool UI_panel_category_is_visible(const ARegion *region)
void UI_block_listen(const uiBlock *block, const wmRegionListenerParams *listener_params)
void UI_block_translate(uiBlock *block, float x, float y)
uiBlock * UI_block_begin(const bContext *C, ARegion *region, std::string name, eUIEmbossType emboss)
void UI_draw_roundbox_corner_set(int type)
#define UI_PANEL_MARGIN_X
void UI_panels_begin(const bContext *C, ARegion *region)
Panel * UI_panel_begin(ARegion *region, ListBase *lb, uiBlock *block, PanelType *pt, Panel *panel, bool *r_open)
void uiItemS(uiLayout *layout)
int UI_panel_size_y(const Panel *panel)
void UI_panels_end(const bContext *C, ARegion *region, int *r_x, int *r_y)
void UI_region_message_subscribe(ARegion *region, wmMsgBus *mbus)
bool UI_panel_is_active(const Panel *panel)
const uiStyle * UI_style_get()
bool UI_panel_should_show_background(const ARegion *region, const PanelType *panel_type)
void UI_panel_category_clear_all(ARegion *region)
#define UI_PANEL_CATEGORY_MARGIN_WIDTH
void UI_blocklist_free_inactive(const bContext *C, ARegion *region)
int uiLayoutGetWidth(uiLayout *layout)
void UI_blocklist_draw(const bContext *C, const ListBase *lb)
void UI_block_layout_free(uiBlock *block)
void UI_panel_label_offset(const uiBlock *block, int *r_x, int *r_y)
int UI_icon_from_event_type(short event_type, short event_value)
void UI_block_layout_resolve(uiBlock *block, int *r_x, int *r_y)
void UI_panel_end(Panel *panel, int width, int height)
void UI_panel_header_buttons_end(Panel *panel)
bool UI_panel_is_dragging(const Panel *panel)
void UI_panels_draw(const bContext *C, ARegion *region)
void uiLayoutSetOperatorContext(uiLayout *layout, wmOperatorCallContext opcontext)
void UI_draw_roundbox_aa(const rctf *rect, bool filled, float rad, const float color[4])
void UI_list_panel_unique_str(Panel *panel, char *r_name)
uiBut * uiDefButR(uiBlock *block, int type, int retval, const char *str, int x, int y, short width, short height, PointerRNA *ptr, const char *propname, int index, float min, float max, const char *tip)
void UI_panel_category_add(ARegion *region, const char *name)
void UI_region_handlers_add(ListBase *handlers)
void UI_block_end(const bContext *C, uiBlock *block)
void UI_block_set_search_only(uiBlock *block, bool search_only)
const char * UI_panel_category_active_get(ARegion *region, bool set_fallback)
void UI_region_free_active_but_all(bContext *C, ARegion *region)
bool uiLayoutEndsWithPanelHeader(const uiLayout &layout)
#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_Theme_Store(bThemeState *theme_state)
void UI_Theme_Restore(const bThemeState *theme_state)
void UI_GetThemeColor3fv(int colorid, float col[3])
void UI_GetThemeColorShade3fv(int colorid, int offset, float col[3])
void UI_ThemeClearColor(int colorid)
void UI_GetThemeColor4fv(int colorid, float col[4])
void UI_FontThemeColor(int fontid, int colorid)
void UI_SetTheme(int spacetype, int regionid)
void UI_GetThemeColor4ubv(int colorid, unsigned char col[4])
#define UI_MARKER_MARGIN_Y
void UI_view2d_view_restore(const bContext *C)
void UI_view2d_region_reinit(View2D *v2d, short type, int winx, int winy)
void UI_view2d_totRect_set(View2D *v2d, int width, int height)
void UI_view2d_view_ortho(const View2D *v2d)
void UI_view2d_mask_from_win(const View2D *v2d, rcti *r_mask)
@ V2D_COMMONVIEW_PANELS_UI
void UI_view2d_view_to_region(const View2D *v2d, float x, float y, int *r_region_x, int *r_region_y) ATTR_NONNULL()
void UI_view2d_scrollers_draw_ex(View2D *v2d, const rcti *mask_custom, bool use_full_hide)
float UI_view2d_scale_get_x(const View2D *v2d)
@ WM_OP_INVOKE_REGION_WIN
ScrArea * ED_screen_areas_iter_next(const bScreen *screen, const ScrArea *area)
void ED_area_do_mgs_subscribe_for_tool_header(const wmRegionMessageSubscribeParams *params)
void ED_area_tag_redraw(ScrArea *area)
int ED_region_snap_size_test(const ARegion *region)
static constexpr float STATUS_MOUSE_ICON_PAD
bool ED_region_property_search(const bContext *C, ARegion *region, ListBase *paneltypes, const char *contexts[], const char *category_override)
void ED_region_tag_refresh_ui(ARegion *region)
void ED_area_do_mgs_subscribe_for_tool_ui(const wmRegionMessageSubscribeParams *params)
void ED_region_update_rect(ARegion *region)
ScrArea * ED_screen_areas_iter_first(const wmWindow *win, const bScreen *screen)
BLI_INLINE bool streq_array_any(const char *s, const char *arr[])
static bool panel_add_check(const bContext *C, const WorkSpace *workspace, const char *contexts[], const char *category_override, PanelType *panel_type)
void ED_region_cursor_set(wmWindow *win, ScrArea *area, ARegion *region)
const char * ED_area_region_search_filter_get(const ScrArea *area, const ARegion *region)
void ED_region_clear(const bContext *C, const ARegion *region, const int colorid)
void ED_region_do_listen(wmRegionListenerParams *params)
static void region_evaulate_visibility(ARegion *region)
int ED_area_global_size_y(const ScrArea *area)
void ED_region_search_filter_update(const ScrArea *area, ARegion *region)
void ED_region_toggle_hidden(bContext *C, ARegion *region)
static int panel_draw_width_from_max_width_get(const ARegion *region, const PanelType *panel_type, const int max_width)
static void region_draw_blocks_in_view2d(const bContext *C, const ARegion *region)
static bool region_uses_category_tabs(const ScrArea *area, const ARegion *region)
static SpaceLink * area_get_prevspace(ScrArea *area)
static void area_azone_tag_update(ScrArea *area)
int ED_area_global_min_size_y(const ScrArea *area)
ScrArea * ED_area_find_under_cursor(const bContext *C, int spacetype, const int event_xy[2])
void ED_region_floating_init(ARegion *region)
void ED_area_status_text(ScrArea *area, const char *str)
static void region_draw_azones(ScrArea *area, ARegion *region)
void ED_area_tag_redraw_no_rebuild(ScrArea *area)
int ED_area_global_max_size_y(const ScrArea *area)
void ED_region_panels(const bContext *C, ARegion *region)
void ED_region_do_msg_notify_tag_redraw(bContext *, wmMsgSubscribeKey *, wmMsgSubscribeValue *msg_val)
void region_toggle_hidden(bContext *C, ARegion *region, const bool do_fade)
static void ed_workspace_status_icon_item(WorkSpace *workspace, const int icon, const bool inverted=false)
void ED_region_header(const bContext *C, ARegion *region)
static void region_overlap_fix(ScrArea *area, ARegion *region)
const rcti * ED_region_visible_rect(ARegion *region)
static void area_offscreen_exit(wmWindowManager *wm, wmWindow *win, ScrArea *area)
static void ed_workspace_status_space(WorkSpace *workspace, const float space_factor)
void ED_area_do_listen(wmSpaceTypeListenerParams *params)
static bool panel_property_search(const bContext *C, ARegion *region, const uiStyle *style, Panel *panel, PanelType *panel_type, const char *search_filter)
static const char * region_panels_collect_categories(ARegion *region, LinkNode *panel_types_stack, bool *use_category_tabs)
void ED_region_cache_draw_cached_segments(ARegion *region, const int num_segments, const int *points, const int sfra, const int efra)
static void region_align_info_from_area(ScrArea *area, RegionTypeAlignInfo *r_align_info)
void ED_region_header_init(ARegion *region)
static constexpr float STATUS_AFTER_TEXT
void ED_region_header_with_button_sections(const bContext *C, ARegion *region, const uiButtonSectionsAlign align)
bool ED_area_is_global(const ScrArea *area)
void ED_region_cache_draw_background(ARegion *region)
void ED_area_swapspace(bContext *C, ScrArea *sa1, ScrArea *sa2)
void ED_region_header_draw_with_button_sections(const bContext *C, const ARegion *region, const uiButtonSectionsAlign align)
static void region_draw_emboss(const ARegion *region, const rcti *scirct, int sides)
static void ed_workspace_status_text_item(WorkSpace *workspace, std::string text)
void ED_region_pixelspace(const ARegion *region)
static void area_calc_totrct(ScrArea *area, const rcti *window_rect)
void ED_area_offscreen_free(wmWindowManager *wm, wmWindow *win, ScrArea *area)
void ED_area_data_copy(ScrArea *area_dst, ScrArea *area_src, const bool do_free)
void ED_region_header_draw(const bContext *C, ARegion *region)
static void region_azone_edge_init(ScrArea *area, ARegion *region, AZEdge edge, const bool is_fullscreen)
void ED_region_tag_redraw_no_rebuild(ARegion *region)
ScrArea * ED_area_offscreen_create(wmWindow *win, eSpace_Type space_type)
void ED_area_tag_redraw_regiontype(ScrArea *area, int regiontype)
bool ED_area_has_shared_border(ScrArea *a, ScrArea *b)
void ED_region_panels_layout_ex(const bContext *C, ARegion *region, ListBase *paneltypes, wmOperatorCallContext op_context, const char *contexts[], const char *category_override)
static void region_azone_edge(const ScrArea *area, AZone *az, const ARegion *region)
bool ED_region_snap_size_apply(ARegion *region, int snap_flag)
bool ED_region_is_overlap(int spacetype, int regiontype)
static void metadata_panel_draw_field(const char *field, const char *value, void *ctx_v)
static void area_draw_azone(short, short, short, short)
Corner widgets use for dragging and splitting the view.
void ED_region_tag_redraw_partial(ARegion *region, const rcti *rct, bool rebuild)
static void region_azone_scrollbar_init(ScrArea *area, ARegion *region, AZScrollDirection direction)
void ED_area_tag_region_size_update(ScrArea *area, ARegion *changed_region)
static void region_visible_rect_calc(ARegion *region, rcti *rect)
static void region_clear_fully_transparent(const bContext *C)
static void region_azones_add(const bScreen *screen, ScrArea *area, ARegion *region)
void ED_region_visibility_change_update(bContext *C, ScrArea *area, ARegion *region)
static void area_azone_init(wmWindow *win, const bScreen *screen, ScrArea *area)
void ED_region_do_layout(bContext *C, ARegion *region)
void ED_region_tag_redraw_cursor(ARegion *region)
void ED_area_newspace(bContext *C, ScrArea *area, int type, const bool skip_region_exit)
void ED_region_cache_draw_curfra_label(const int framenr, const float x, const float y)
void ED_area_data_swap(ScrArea *area_dst, ScrArea *area_src)
static void region_draw_status_text(ScrArea *, ARegion *region)
static bool region_background_is_transparent(const ScrArea *area, const ARegion *region)
void ED_area_update_region_sizes(wmWindowManager *wm, wmWindow *win, ScrArea *area)
void ED_area_tag_refresh(ScrArea *area)
void ED_region_info_draw_multiline(ARegion *region, const char *text_array[], const float fill_color[4], const bool full_redraw)
int ED_region_global_size_y()
static void region_azone_tab_plus(ScrArea *area, AZone *az, ARegion *region)
static void ed_default_handlers(wmWindowManager *wm, ScrArea *area, ARegion *region, ListBase *handlers, int flag)
static bool region_azone_edge_poll(const ARegion *region, const bool is_fullscreen)
static short region_alignment_from_header_and_tool_header_state(const RegionTypeAlignInfo *region_align_info, const short fallback)
void ED_area_do_refresh(bContext *C, ScrArea *area)
static void region_align_info_to_area_for_headers(const RegionTypeAlignInfo *region_align_info_src, const RegionTypeAlignInfo *region_align_info_dst, ARegion *region_by_type[RGN_TYPE_NUM])
void ED_region_panels_layout(const bContext *C, ARegion *region)
void ED_region_panels_init(wmWindowManager *wm, ARegion *region)
void ED_workspace_status_text(bContext *C, const char *str)
static void area_init_type_fallback(ScrArea *area, eSpace_Type space_type)
void ED_region_image_metadata_panel_draw(ImBuf *ibuf, uiLayout *layout)
static bool event_in_markers_region(const ARegion *region, const wmEvent *event)
void ED_region_tag_redraw_editor_overlays(ARegion *region)
static void region_draw_azone_tab_arrow(ScrArea *area, ARegion *region, AZone *az)
static void region_update_rect(ARegion *region)
int ED_area_header_switchbutton(const bContext *C, uiBlock *block, int yco)
void ED_region_info_draw(ARegion *region, const char *text, const float fill_color[4], const bool full_redraw)
void ED_region_visibility_change_update_ex(bContext *C, ScrArea *area, ARegion *region, bool is_hidden, bool do_init)
static void area_offscreen_init(ScrArea *area)
void ED_area_do_msg_notify_tag_refresh(bContext *, wmMsgSubscribeKey *, wmMsgSubscribeValue *msg_val)
static void ed_workspace_status_item(WorkSpace *workspace, std::string text, const int icon, const float space_factor=0.0f, const bool inverted=false)
void ED_region_do_draw(bContext *C, ARegion *region)
void ED_region_tag_redraw(ARegion *region)
static void region_align_info_to_area(ScrArea *area, const RegionTypeAlignInfo region_align_info_src[RGN_TYPE_NUM])
void ED_region_message_subscribe(wmRegionMessageSubscribeParams *params)
void ED_region_grid_draw(ARegion *region, float zoomx, float zoomy, float x0, float y0)
static ThemeColorID region_background_color_id(const bContext *, const ARegion *region)
static void fullscreen_azone_init(ScrArea *area, ARegion *region)
void ED_area_prevspace(bContext *C, ScrArea *area)
static void layout_coordinates_correct_for_drawable_rect(const wmWindow *win, const ScrArea *area, const ARegion *region, int *, int *r_yco)
static void area_draw_azone_fullscreen(short, short, short x2, short y2, float alpha)
Corner widget use for quitting full-screen.
static bool area_is_pseudo_minimized(const ScrArea *area)
static void region_rect_recursive(ScrArea *area, ARegion *region, rcti *remainder, rcti *overlap_remainder, int quad)
void ED_area_init(wmWindowManager *wm, wmWindow *win, ScrArea *area)
void ED_region_panels_ex(const bContext *C, ARegion *region, wmOperatorCallContext op_context, const char *contexts[])
static void draw_azone_arrow(float x1, float y1, float x2, float y2, AZEdge edge)
Edge widgets to show hidden panels such as the toolbar and headers.
static void region_azones_scrollbars_init(ScrArea *area, ARegion *region)
static void region_azones_add_edge(ScrArea *area, ARegion *region, const int alignment, const bool is_fullscreen)
void ED_region_panels_draw(const bContext *C, ARegion *region)
static int rct_fits(const rcti *rect, const eScreenAxis dir_axis, int size)
void ED_region_header_layout(const bContext *C, ARegion *region)
static void ed_panel_draw(const bContext *C, ARegion *region, ListBase *lb, PanelType *pt, Panel *panel, int w, int em, char *unique_panel_str, const char *search_filter, wmOperatorCallContext op_context)
int pad[32 - sizeof(int)]
ATTR_WARN_UNUSED_RESULT const BMLoop * l
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
void range(std::string text, int icon1, int icon2)
void item_bool(std::string text, bool inverted, int icon1, int icon2=0)
WorkspaceStatus(bContext *C)
void item(std::string text, int icon1, int icon2=0)
void opmodal(std::string text, const wmOperatorType *ot, int propvalue, bool inverted=false)
local_group_size(16, 16) .push_constant(Type b
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
blender::gpu::Batch * quad
BLI_INLINE float fb(float length, float L)
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 float4 mask(const int4 mask, const float4 a)
static void add(blender::Map< std::string, std::string > &messages, Message &msg)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
eScreenDir area_getorientation(ScrArea *sa_a, ScrArea *sa_b)
void screen_area_spacelink_add(const Scene *scene, ScrArea *area, eSpace_Type space_type)
void(* layout)(const bContext *C, ARegion *region)
AZScrollDirection direction
void(* draw)(const bContext *C, Panel *panel)
char idname[BKE_ST_MAXNAME]
bool(* poll)(const bContext *C, PanelType *pt)
char context[BKE_ST_MAXNAME]
char category[BKE_ST_MAXNAME]
void(* draw_header_preset)(const bContext *C, Panel *panel)
void(* draw_header)(const bContext *C, Panel *panel)
LayoutPanels layout_panels
struct Panel_Runtime * runtime
struct RegionTypeAlignInfo::@468 by_type[RGN_TYPE_NUM]
ScrGlobalAreaData * global
void(* free)(SpaceLink *sl)
SpaceLink *(* create)(const ScrArea *area, const Scene *scene)
void(* space_subtype_item_extend)(bContext *C, EnumPropertyItem **item, int *totitem)
void(* space_subtype_set)(ScrArea *area, int value)
WorkSpaceRuntimeHandle * runtime
struct wmMsgBus * message_bus
struct wmKeyConfig * defaultconf
struct wmEvent * eventstate
struct WorkSpaceInstanceHook * workspace_hook
bool ED_time_scrub_event_in_region(const ARegion *region, const wmEvent *event)
ccl_device_inline int abs(int x)
void WM_cursor_set(wmWindow *win, int curs)
bool WM_cursor_set_from_tool(wmWindow *win, const ScrArea *area, const ARegion *region)
ListBase * WM_dropboxmap_find(const char *idname, int spaceid, int regionid)
static ListBase dropboxes
bool WM_region_use_viewport(ScrArea *area, ARegion *region)
void WM_draw_region_free(ARegion *region)
wmEventHandler_Dropbox * WM_event_add_dropbox_handler(ListBase *handlers, ListBase *dropboxes)
wmEventHandler_Keymap * WM_event_add_keymap_handler_poll(ListBase *handlers, wmKeyMap *keymap, EventHandlerPoll poll)
wmEventHandler_Keymap * WM_event_add_keymap_handler(ListBase *handlers, wmKeyMap *keymap)
void WM_event_get_keymap_from_toolsystem(wmWindowManager *wm, wmWindow *win, wmEventHandler_Keymap *handler, wmEventHandler_KeymapResult *km_result)
void WM_event_modal_handler_region_replace(wmWindow *win, const ARegion *old_region, ARegion *new_region)
void WM_event_modal_handler_area_replace(wmWindow *win, const ScrArea *old_area, ScrArea *new_area)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
wmEventHandler_Keymap * WM_event_add_keymap_handler_dynamic(ListBase *handlers, wmEventHandler_KeymapDynamicFn keymap_fn, void *user_data)
ScrArea * WM_window_status_area_find(wmWindow *win, bScreen *screen)
void WM_event_get_keymap_from_toolsystem_with_gizmos(wmWindowManager *wm, wmWindow *win, wmEventHandler_Keymap *handler, wmEventHandler_KeymapResult *km_result)
void WM_event_remove_handlers(bContext *C, ListBase *handlers)
void WM_event_add_mousemove(wmWindow *win)
bool WM_gizmomap_cursor_set(const wmGizmoMap *gzmap, wmWindow *win)
void WM_gizmomap_add_handlers(ARegion *region, wmGizmoMap *gzmap)
void WM_gizmomap_message_subscribe(const bContext *C, wmGizmoMap *gzmap, ARegion *region, wmMsgBus *mbus)
wmGizmoMap * WM_gizmomap_new_from_type(const wmGizmoMapType_Params *gzmap_params)
const wmKeyMapItem * WM_modalkeymap_find_propvalue(const wmKeyMap *km, const int propvalue)
wmKeyMap * WM_keymap_active(const wmWindowManager *wm, wmKeyMap *keymap)
wmKeyMap * WM_keymap_ensure(wmKeyConfig *keyconf, const char *idname, int spaceid, int regionid)
void WM_msgbus_clear_by_owner(wmMsgBus *mbus, void *owner)
#define WM_msg_subscribe_rna_prop(mbus, id_, data_, type_, prop_, value)
void WM_msg_subscribe_rna(wmMsgBus *mbus, PointerRNA *ptr, const PropertyRNA *prop, const wmMsgSubscribeValue *msg_val_params, const char *id_repr)
void wmPartialViewport(rcti *drawrct, const rcti *winrct, const rcti *partialrct)
void wmOrtho2_region_pixelspace(const ARegion *region)
bool WM_window_is_fullscreen(const wmWindow *win)
int WM_window_native_pixel_x(const wmWindow *win)
wmWindow * WM_window_find_under_cursor(wmWindow *win, const int event_xy[2], int r_event_xy_other[2])
void WM_window_rect_calc(const wmWindow *win, rcti *r_rect)
ViewLayer * WM_window_get_active_view_layer(const wmWindow *win)
Scene * WM_window_get_active_scene(const wmWindow *win)
void WM_event_timer_remove(wmWindowManager *wm, wmWindow *, wmTimer *timer)
void WM_window_title(wmWindowManager *wm, wmWindow *win, const char *title)
WorkSpace * WM_window_get_active_workspace(const wmWindow *win)
bScreen * WM_window_get_active_screen(const wmWindow *win)