From 4d1128872ecfe5f5b0fb794d2562a26f8b3b76ad Mon Sep 17 00:00:00 2001 From: George Vogiatzis Date: Thu, 25 Apr 2019 18:10:41 +0200 Subject: UI: keep timeline collapsed to header size when resizing window This restores functionality lost with e8c9e85401ef. Differential Revision: https://developer.blender.org/D4714 --- source/blender/editors/screen/screen_geometry.c | 77 +++++++++++++++---------- 1 file changed, 47 insertions(+), 30 deletions(-) (limited to 'source/blender/editors/screen/screen_geometry.c') diff --git a/source/blender/editors/screen/screen_geometry.c b/source/blender/editors/screen/screen_geometry.c index a0d9c232195..25855382307 100644 --- a/source/blender/editors/screen/screen_geometry.c +++ b/source/blender/editors/screen/screen_geometry.c @@ -160,7 +160,6 @@ void screen_geom_vertices_scale(const wmWindow *win, bScreen *sc) WM_window_rect_calc(win, &window_rect); WM_window_screen_rect_calc(win, &screen_rect); - const int headery_init = ED_area_headersize(); const int screen_size_x = BLI_rcti_size_x(&screen_rect); const int screen_size_y = BLI_rcti_size_y(&screen_rect); ScrVert *sv = NULL; @@ -192,37 +191,55 @@ void screen_geom_vertices_scale(const wmWindow *win, bScreen *sc) 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); } - } - - /* test for collapsed areas. This could happen in some blender version... */ - /* ton: removed option now, it needs Context... */ - - /* make each window at least ED_area_headersize() high */ - for (sa = sc->areabase.first; sa; sa = sa->next) { - int headery = headery_init; - /* adjust headery if verts are along the edge of window */ - if (sa->v1->vec.y > window_rect.ymin) { - headery += U.pixelsize; - } - if (sa->v2->vec.y < (window_rect.ymax - 1)) { - headery += U.pixelsize; + /* test for collapsed areas. This could happen in some blender version... */ + /* ton: removed option now, it needs Context... */ + + int headery = ED_area_headersize() + (U.pixelsize * 2); + + if (facy > 1) { + /* Keep timeline small in video edit workspace. */ + for (sa = sc->areabase.first; sa; sa = sa->next) { + if (sa->spacetype == SPACE_ACTION && sa->v1->vec.y == screen_rect.ymin && + screen_geom_area_height(sa) <= headery * facy + 1) { + ScrEdge *se = BKE_screen_find_edge(sc, sa->v2, sa->v3); + if (se) { + const int yval = sa->v1->vec.y + headery - 1; + + screen_geom_select_connected_edge(win, se); + + /* all selected vertices get the right offset */ + for (sv = sc->vertbase.first; sv; sv = sv->next) { + /* if is a collapsed area */ + if (sv != sa->v1 && sv != sa->v4) { + if (sv->flag) { + sv->vec.y = yval; + } + } + } + } + } + } } - - if (screen_geom_area_height(sa) < headery) { - /* lower edge */ - ScrEdge *se = BKE_screen_find_edge(sc, sa->v4, sa->v1); - if (se && sa->v1 != sa->v2) { - const int yval = sa->v2->vec.y - headery + 1; - - screen_geom_select_connected_edge(win, se); - - /* all selected vertices get the right offset */ - for (sv = sc->vertbase.first; sv; sv = sv->next) { - /* if is a collapsed area */ - if (sv != sa->v2 && sv != sa->v3) { - if (sv->flag) { - sv->vec.y = yval; + if (facy < 1) { + /* make each window at least ED_area_headersize() high */ + for (sa = sc->areabase.first; sa; sa = sa->next) { + if (screen_geom_area_height(sa) < headery) { + /* lower edge */ + ScrEdge *se = BKE_screen_find_edge(sc, sa->v4, sa->v1); + if (se && sa->v1 != sa->v2) { + const int yval = sa->v2->vec.y - headery + 1; + + screen_geom_select_connected_edge(win, se); + + /* all selected vertices get the right offset */ + for (sv = sc->vertbase.first; sv; sv = sv->next) { + /* if is not a collapsed area */ + if (sv != sa->v2 && sv != sa->v3) { + if (sv->flag) { + sv->vec.y = yval; + } + } } } } -- cgit v1.2.3