32 return area->v2->vec.y - area->v1->vec.y + 1;
36 return area->v4->vec.x - area->v1->vec.x + 1;
75 const rcti *bounds_rect,
85 if ((se->v1->vec.y > bounds_rect->
ymin) && (se->v1->vec.y < (bounds_rect->
ymax - 1))) {
87 min = std::min(se->v1->vec.x, se->v2->vec.x);
88 max = std::max(se->v1->vec.x, se->v2->vec.x);
90 if (
abs(my - se->v1->vec.y) <= safety && mx >=
min && mx <= max) {
96 if ((se->v1->vec.x > bounds_rect->
xmin) && (se->v1->vec.x < (bounds_rect->
xmax - 1))) {
98 min = std::min(se->v1->vec.y, se->v2->vec.y);
99 max = std::max(se->v1->vec.y, se->v2->vec.y);
101 if (
abs(mx - se->v1->vec.x) <= safety && my >=
min && my <= max) {
141 const rcti *screen_rect)
146 bool needs_another_pass =
false;
149 float min[2] = {20000.0f, 20000.0f};
150 float max[2] = {0.0f, 0.0f};
153 const float fv[2] = {
float(sv->vec.x),
float(sv->vec.y)};
157 int screen_size_x_prev = (max[0] -
min[0]) + 1;
158 int screen_size_y_prev = (max[1] -
min[1]) + 1;
160 if (screen_size_x_prev != screen_size_x || screen_size_y_prev != screen_size_y) {
161 const float facx = (
float(screen_size_x) - 1) / (
float(screen_size_x_prev) - 1);
162 const float facy = (
float(screen_size_y) - 1) / (
float(screen_size_y_prev) - 1);
181 if (area->spacetype ==
SPACE_ACTION && area->v1->vec.y == screen_rect->
ymin &&
186 const int yval = area->v1->vec.y + headery - 1;
193 if (!
ELEM(sv, area->v1, area->v4)) {
197 needs_another_pass =
true;
211 if (se && area->
v1 != area->v2) {
212 const int yval = area->v2->vec.y - headery + 1;
219 if (!
ELEM(sv, area->v2, area->v3)) {
223 needs_another_pass =
true;
233 return needs_another_pass;
238 rcti window_rect, screen_rect;
242 bool needs_another_pass;
243 int max_passes_left = 10;
247 }
while (needs_another_pass && (max_passes_left > 0));
258 if (area->v1->vec.y > window_rect.
ymin) {
259 height +=
U.pixelsize;
261 if (area->v2->vec.y < (window_rect.
ymax - 1)) {
262 height +=
U.pixelsize;
266 area->v1->vec.x = area->v2->vec.x = window_rect.
xmin;
267 area->v3->vec.x = area->v4->vec.x = window_rect.
xmax - 1;
269 area->v1->vec.y = area->v4->vec.y = window_rect.
ymin;
270 area->v2->vec.y = area->v3->vec.y = window_rect.
ymax - 1;
272 switch (area->global->align) {
274 area->v1->vec.y = area->v4->vec.y = area->v2->vec.y - height;
277 area->v2->vec.y = area->v3->vec.y = area->v1->vec.y + height;
284 const rcti *window_rect,
295 if (cur_area_width <= 2 * area_min_x) {
300 if (cur_area_height <= 2 * area_min_y) {
306 CLAMP(fac, 0.0f, 1.0f);
311 int area_min = area_min_y;
313 if (area->v1->vec.y > window_rect->
ymin) {
314 area_min +=
U.pixelsize;
316 if (area->v2->vec.y < (window_rect->
ymax - 1)) {
317 area_min +=
U.pixelsize;
320 if (y - area->v1->vec.y < area_min) {
321 y = area->v1->vec.y + area_min;
323 else if (area->v2->vec.y - y < area_min) {
324 y = area->v2->vec.y - area_min;
332 int area_min = area_min_x;
334 if (area->v1->vec.x > window_rect->
xmin) {
335 area_min +=
U.pixelsize;
337 if (area->v4->vec.x < (window_rect->
xmax - 1)) {
338 area_min +=
U.pixelsize;
341 if (x - area->v1->vec.x < area_min) {
342 x = area->v1->vec.x + area_min;
344 else if (area->v4->vec.x - x < area_min) {
345 x = area->v4->vec.x - area_min;
357 if (edge->v1->vec.x == edge->v2->vec.x) {
373 bool oneselected =
true;
374 while (oneselected) {
377 if (se->v1->flag + se->v2->flag == 1) {
379 if (se->v1->vec.y == se->v2->vec.y) {
380 se->v1->flag = se->v2->flag = 1;
385 if (se->v1->vec.x == se->v2->vec.x) {
386 se->v1->flag = se->v2->flag = 1;
void BKE_screen_sort_scrvert(ScrVert **v1, ScrVert **v2)
ScrEdge * BKE_screen_find_edge(const bScreen *screen, ScrVert *v1, ScrVert *v2)
#define LISTBASE_FOREACH(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE short round_fl_to_short(float a)
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
#define AREAMAP_FROM_SCREEN(screen)
@ GLOBAL_AREA_ALIGN_BOTTOM
@ USER_APP_LOCK_EDGE_RESIZE
int ED_area_global_size_y(const ScrArea *area)
#define ED_screen_verts_iter(win, screen, vert_name)
Read Guarded memory(de)allocation.
ATTR_WARN_UNUSED_RESULT const BMVert * v2
draw_view in_light_buf[] float
void *(* MEM_callocN)(size_t len, const char *str)
ScrVert * screen_geom_vertex_add(bScreen *screen, short x, short y)
ScrEdge * screen_geom_edge_add_ex(ScrAreaMap *area_map, ScrVert *v1, ScrVert *v2)
ScrVert * screen_geom_vertex_add_ex(ScrAreaMap *area_map, short x, short y)
ScrEdge * screen_geom_area_map_find_active_scredge(const ScrAreaMap *area_map, const rcti *bounds_rect, const int mx, const int my)
ScrEdge * screen_geom_find_active_scredge(const wmWindow *win, const bScreen *screen, const int mx, const int my)
ScrEdge * screen_geom_edge_add(bScreen *screen, ScrVert *v1, ScrVert *v2)
void screen_geom_select_connected_edge(const wmWindow *win, ScrEdge *edge)
bool screen_geom_edge_is_horizontal(ScrEdge *se)
static bool screen_geom_vertices_scale_pass(const wmWindow *win, const bScreen *screen, const rcti *screen_rect)
int screen_geom_area_width(const ScrArea *area)
int screen_geom_area_height(const ScrArea *area)
void screen_geom_vertices_scale(const wmWindow *win, bScreen *screen)
Main screen-layout calculation function.
short screen_geom_find_area_split_point(const ScrArea *area, const rcti *window_rect, const eScreenAxis dir_axis, float fac)
ccl_device_inline int abs(int x)
void WM_window_rect_calc(const wmWindow *win, rcti *r_rect)
void WM_window_screen_rect_calc(const wmWindow *win, rcti *r_rect)
bScreen * WM_window_get_active_screen(const wmWindow *win)