Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/screen/screen_geometry.c
| Show First 20 Lines • Show All 156 Lines • ▼ Show 20 Lines | |||||
| { | { | ||||
| rcti window_rect, screen_rect; | rcti window_rect, screen_rect; | ||||
| WM_window_rect_calc(win, &window_rect); | WM_window_rect_calc(win, &window_rect); | ||||
| WM_window_screen_rect_calc(win, &screen_rect); | WM_window_screen_rect_calc(win, &screen_rect); | ||||
| const int screen_size_x = BLI_rcti_size_x(&screen_rect); | const int screen_size_x = BLI_rcti_size_x(&screen_rect); | ||||
| const int screen_size_y = BLI_rcti_size_y(&screen_rect); | const int screen_size_y = BLI_rcti_size_y(&screen_rect); | ||||
| ScrVert *sv = NULL; | |||||
| int screen_size_x_prev, screen_size_y_prev; | int screen_size_x_prev, screen_size_y_prev; | ||||
| float min[2], max[2]; | float min[2], max[2]; | ||||
| /* calculate size */ | /* calculate size */ | ||||
| min[0] = min[1] = 20000.0f; | min[0] = min[1] = 20000.0f; | ||||
| max[0] = max[1] = 0.0f; | max[0] = max[1] = 0.0f; | ||||
| for (sv = screen->vertbase.first; sv; sv = sv->next) { | LISTBASE_FOREACH (ScrVert *, sv, &screen->vertbase) { | ||||
| const float fv[2] = {(float)sv->vec.x, (float)sv->vec.y}; | const float fv[2] = {(float)sv->vec.x, (float)sv->vec.y}; | ||||
| minmax_v2v2_v2(min, max, fv); | minmax_v2v2_v2(min, max, fv); | ||||
| } | } | ||||
| screen_size_x_prev = (max[0] - min[0]) + 1; | screen_size_x_prev = (max[0] - min[0]) + 1; | ||||
| screen_size_y_prev = (max[1] - min[1]) + 1; | screen_size_y_prev = (max[1] - min[1]) + 1; | ||||
| if (screen_size_x_prev != screen_size_x || screen_size_y_prev != screen_size_y) { | if (screen_size_x_prev != screen_size_x || screen_size_y_prev != screen_size_y) { | ||||
| const float facx = ((float)screen_size_x - 1) / ((float)screen_size_x_prev - 1); | const float facx = ((float)screen_size_x - 1) / ((float)screen_size_x_prev - 1); | ||||
| const float facy = ((float)screen_size_y - 1) / ((float)screen_size_y_prev - 1); | const float facy = ((float)screen_size_y - 1) / ((float)screen_size_y_prev - 1); | ||||
| /* make sure it fits! */ | /* make sure it fits! */ | ||||
| for (sv = screen->vertbase.first; sv; sv = sv->next) { | LISTBASE_FOREACH (ScrVert *, sv, &screen->vertbase) { | ||||
| sv->vec.x = screen_rect.xmin + round_fl_to_short((sv->vec.x - min[0]) * facx); | sv->vec.x = screen_rect.xmin + round_fl_to_short((sv->vec.x - min[0]) * facx); | ||||
| CLAMP(sv->vec.x, screen_rect.xmin, screen_rect.xmax - 1); | CLAMP(sv->vec.x, screen_rect.xmin, screen_rect.xmax - 1); | ||||
| sv->vec.y = screen_rect.ymin + round_fl_to_short((sv->vec.y - min[1]) * facy); | sv->vec.y = screen_rect.ymin + round_fl_to_short((sv->vec.y - min[1]) * facy); | ||||
| CLAMP(sv->vec.y, screen_rect.ymin, screen_rect.ymax - 1); | CLAMP(sv->vec.y, screen_rect.ymin, screen_rect.ymax - 1); | ||||
| } | } | ||||
| /* test for collapsed areas. This could happen in some blender version... */ | /* test for collapsed areas. This could happen in some blender version... */ | ||||
| /* ton: removed option now, it needs Context... */ | /* ton: removed option now, it needs Context... */ | ||||
| int headery = ED_area_headersize() + (U.pixelsize * 2); | int headery = ED_area_headersize() + (U.pixelsize * 2); | ||||
| if (facy > 1) { | if (facy > 1) { | ||||
| /* Keep timeline small in video edit workspace. */ | /* Keep timeline small in video edit workspace. */ | ||||
| LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { | LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { | ||||
| if (area->spacetype == SPACE_ACTION && area->v1->vec.y == screen_rect.ymin && | if (area->spacetype == SPACE_ACTION && area->v1->vec.y == screen_rect.ymin && | ||||
| screen_geom_area_height(area) <= headery * facy + 1) { | screen_geom_area_height(area) <= headery * facy + 1) { | ||||
| ScrEdge *se = BKE_screen_find_edge(screen, area->v2, area->v3); | ScrEdge *se = BKE_screen_find_edge(screen, area->v2, area->v3); | ||||
| if (se) { | if (se) { | ||||
| const int yval = area->v1->vec.y + headery - 1; | const int yval = area->v1->vec.y + headery - 1; | ||||
| screen_geom_select_connected_edge(win, se); | screen_geom_select_connected_edge(win, se); | ||||
| /* all selected vertices get the right offset */ | /* all selected vertices get the right offset */ | ||||
| for (sv = screen->vertbase.first; sv; sv = sv->next) { | LISTBASE_FOREACH (ScrVert *, sv, &screen->vertbase) { | ||||
| /* if is a collapsed area */ | /* if is a collapsed area */ | ||||
| if (sv != area->v1 && sv != area->v4) { | if (sv != area->v1 && sv != area->v4) { | ||||
| if (sv->flag) { | if (sv->flag) { | ||||
| sv->vec.y = yval; | sv->vec.y = yval; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| if (facy < 1) { | if (facy < 1) { | ||||
| /* make each window at least ED_area_headersize() high */ | /* make each window at least ED_area_headersize() high */ | ||||
| LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { | LISTBASE_FOREACH (ScrArea *, area, &screen->areabase) { | ||||
| if (screen_geom_area_height(area) < headery) { | if (screen_geom_area_height(area) < headery) { | ||||
| /* lower edge */ | /* lower edge */ | ||||
| ScrEdge *se = BKE_screen_find_edge(screen, area->v4, area->v1); | ScrEdge *se = BKE_screen_find_edge(screen, area->v4, area->v1); | ||||
| if (se && area->v1 != area->v2) { | if (se && area->v1 != area->v2) { | ||||
| const int yval = area->v2->vec.y - headery + 1; | const int yval = area->v2->vec.y - headery + 1; | ||||
| screen_geom_select_connected_edge(win, se); | screen_geom_select_connected_edge(win, se); | ||||
| /* all selected vertices get the right offset */ | /* all selected vertices get the right offset */ | ||||
| for (sv = screen->vertbase.first; sv; sv = sv->next) { | LISTBASE_FOREACH (ScrVert *, sv, &screen->vertbase) { | ||||
| /* if is not a collapsed area */ | /* if is not a collapsed area */ | ||||
| if (sv != area->v2 && sv != area->v3) { | if (sv != area->v2 && sv != area->v3) { | ||||
| if (sv->flag) { | if (sv->flag) { | ||||
| sv->vec.y = yval; | sv->vec.y = yval; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 155 Lines • Show Last 20 Lines | |||||