diff options
Diffstat (limited to 'source/blender/editors/screen/screen_edit.c')
-rw-r--r-- | source/blender/editors/screen/screen_edit.c | 274 |
1 files changed, 137 insertions, 137 deletions
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c index 6e875f53c26..ec1c5511ae8 100644 --- a/source/blender/editors/screen/screen_edit.c +++ b/source/blender/editors/screen/screen_edit.c @@ -79,7 +79,7 @@ static ScrVert *screen_addvert(bScreen *sc, short x, short y) ScrVert *sv = MEM_callocN(sizeof(ScrVert), "addscrvert"); sv->vec.x = x; sv->vec.y = y; - + BLI_addtail(&sc->vertbase, sv); return sv; } @@ -87,7 +87,7 @@ static ScrVert *screen_addvert(bScreen *sc, short x, short y) static void sortscrvert(ScrVert **v1, ScrVert **v2) { ScrVert *tmp; - + if (*v1 > *v2) { tmp = *v1; *v1 = *v2; @@ -98,11 +98,11 @@ static void sortscrvert(ScrVert **v1, ScrVert **v2) static ScrEdge *screen_addedge(bScreen *sc, ScrVert *v1, ScrVert *v2) { ScrEdge *se = MEM_callocN(sizeof(ScrEdge), "addscredge"); - + sortscrvert(&v1, &v2); se->v1 = v1; se->v2 = v2; - + BLI_addtail(&sc->edgebase, se); return se; } @@ -111,12 +111,12 @@ static ScrEdge *screen_addedge(bScreen *sc, ScrVert *v1, ScrVert *v2) ScrEdge *screen_findedge(bScreen *sc, ScrVert *v1, ScrVert *v2) { ScrEdge *se; - + sortscrvert(&v1, &v2); for (se = sc->edgebase.first; se; se = se->next) if (se->v1 == v1 && se->v2 == v2) return se; - + return NULL; } @@ -125,7 +125,7 @@ void removedouble_scrverts(bScreen *sc) ScrVert *v1, *verg; ScrEdge *se; ScrArea *sa; - + verg = sc->vertbase.first; while (verg) { if (verg->newv == NULL) { /* !!! */ @@ -178,16 +178,16 @@ void removenotused_scrverts(bScreen *sc) { ScrVert *sv, *svn; ScrEdge *se; - + /* we assume edges are ok */ - + se = sc->edgebase.first; while (se) { se->v1->flag = 1; se->v2->flag = 1; se = se->next; } - + sv = sc->vertbase.first; while (sv) { svn = sv->next; @@ -205,7 +205,7 @@ void removenotused_scrverts(bScreen *sc) void removedouble_scredges(bScreen *sc) { ScrEdge *verg, *se, *sn; - + /* compare */ verg = sc->edgebase.first; while (verg) { @@ -227,7 +227,7 @@ void removenotused_scredges(bScreen *sc) ScrEdge *se, *sen; ScrArea *sa; int a = 0; - + /* sets flags when edge is used in area */ sa = sc->areabase.first; while (sa) { @@ -272,16 +272,16 @@ ScrEdge *screen_find_active_scredge(bScreen *sc, { ScrEdge *se; int safety = U.widget_unit / 10; - + if (safety < 2) safety = 2; - + for (se = sc->edgebase.first; se; se = se->next) { if (scredge_is_horizontal(se)) { if (se->v1->vec.y > 0 && se->v1->vec.y < winsize_y - 1) { short min, max; min = MIN2(se->v1->vec.x, se->v2->vec.x); max = MAX2(se->v1->vec.x, se->v2->vec.x); - + if (abs(my - se->v1->vec.y) <= safety && mx >= min && mx <= max) return se; } @@ -291,13 +291,13 @@ ScrEdge *screen_find_active_scredge(bScreen *sc, short min, max; min = MIN2(se->v1->vec.y, se->v2->vec.y); max = MAX2(se->v1->vec.y, se->v2->vec.y); - + if (abs(mx - se->v1->vec.x) <= safety && my >= min && my <= max) return se; } } } - + return NULL; } @@ -313,19 +313,19 @@ static ScrArea *screen_addarea(bScreen *sc, ScrVert *v1, ScrVert *v2, ScrVert *v sa->v4 = v4; sa->headertype = headertype; sa->spacetype = sa->butspacetype = spacetype; - + BLI_addtail(&sc->areabase, sa); - + return sa; } static void screen_delarea(bContext *C, bScreen *sc, ScrArea *sa) { - + ED_area_exit(C, sa); - + BKE_screen_area_free(sa); - + BLI_remlink(&sc->areabase, sa); MEM_freeN(sa); } @@ -337,34 +337,34 @@ static short testsplitpoint(ScrArea *sa, char dir, float fac) short x, y; const short area_min_x = AREAMINX; const short area_min_y = ED_area_headersize(); - + // area big enough? if (dir == 'v' && (sa->v4->vec.x - sa->v1->vec.x <= 2 * area_min_x)) return 0; if (dir == 'h' && (sa->v2->vec.y - sa->v1->vec.y <= 2 * area_min_y)) return 0; - + // to be sure CLAMP(fac, 0.0f, 1.0f); - + if (dir == 'h') { y = sa->v1->vec.y + fac * (sa->v2->vec.y - sa->v1->vec.y); - + if (y - sa->v1->vec.y < area_min_y) y = sa->v1->vec.y + area_min_y; else if (sa->v2->vec.y - y < area_min_y) y = sa->v2->vec.y - area_min_y; else y -= (y % AREAGRID); - + return y; } else { x = sa->v1->vec.x + fac * (sa->v4->vec.x - sa->v1->vec.x); - + if (x - sa->v1->vec.x < area_min_x) x = sa->v1->vec.x + area_min_x; else if (sa->v4->vec.x - x < area_min_x) x = sa->v4->vec.x - area_min_x; else x -= (x % AREAGRID); - + return x; } } @@ -374,12 +374,12 @@ ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge) ScrArea *newa = NULL; ScrVert *sv1, *sv2; short split; - + if (sa == NULL) return NULL; - + split = testsplitpoint(sa, dir, fac); if (split == 0) return NULL; - + /* note regarding (fac > 0.5f) checks below. * normally it shouldn't matter which is used since the copy should match the original * however with viewport rendering and python console this isn't the case. - campbell */ @@ -388,14 +388,14 @@ ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge) /* new vertices */ sv1 = screen_addvert(sc, sa->v1->vec.x, split); sv2 = screen_addvert(sc, sa->v4->vec.x, split); - + /* new edges */ screen_addedge(sc, sa->v1, sv1); screen_addedge(sc, sv1, sa->v2); screen_addedge(sc, sa->v3, sv2); screen_addedge(sc, sv2, sa->v4); screen_addedge(sc, sv1, sv2); - + if (fac > 0.5f) { /* new areas: top */ newa = screen_addarea(sc, sv1, sa->v2, sa->v3, sv2, sa->headertype, sa->spacetype); @@ -414,20 +414,20 @@ ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge) } ED_area_data_copy(newa, sa, true); - + } else { /* new vertices */ sv1 = screen_addvert(sc, split, sa->v1->vec.y); sv2 = screen_addvert(sc, split, sa->v2->vec.y); - + /* new edges */ screen_addedge(sc, sa->v1, sv1); screen_addedge(sc, sv1, sa->v4); screen_addedge(sc, sa->v2, sv2); screen_addedge(sc, sv2, sa->v3); screen_addedge(sc, sv1, sv2); - + if (fac > 0.5f) { /* new areas: right */ newa = screen_addarea(sc, sv1, sv2, sa->v3, sa->v4, sa->headertype, sa->spacetype); @@ -447,13 +447,13 @@ ScrArea *area_split(bScreen *sc, ScrArea *sa, char dir, float fac, int merge) ED_area_data_copy(newa, sa, true); } - + /* remove double vertices en edges */ if (merge) removedouble_scrverts(sc); removedouble_scredges(sc); removenotused_scredges(sc); - + return newa; } @@ -466,7 +466,7 @@ bScreen *ED_screen_add(wmWindow *win, Scene *scene, const char *name) bScreen *sc; ScrVert *sv1, *sv2, *sv3, *sv4; - + sc = BKE_libblock_alloc(G.main, ID_SCR, name, 0); sc->scene = scene; sc->do_refresh = true; @@ -477,15 +477,15 @@ bScreen *ED_screen_add(wmWindow *win, Scene *scene, const char *name) sv2 = screen_addvert(sc, 0, winsize_y - 1); sv3 = screen_addvert(sc, winsize_x - 1, winsize_y - 1); sv4 = screen_addvert(sc, winsize_x - 1, 0); - + screen_addedge(sc, sv1, sv2); screen_addedge(sc, sv2, sv3); screen_addedge(sc, sv3, sv4); screen_addedge(sc, sv4, sv1); - + /* dummy type, no spacedata */ screen_addarea(sc, sv1, sv2, sv3, sv4, HEADERDOWN, SPACE_EMPTY); - + return sc; } @@ -494,26 +494,26 @@ static void screen_copy(bScreen *to, bScreen *from) ScrVert *s1, *s2; ScrEdge *se; ScrArea *sa, *saf; - + /* free contents of 'to', is from blenkernel screen.c */ BKE_screen_free(to); - + BLI_duplicatelist(&to->vertbase, &from->vertbase); BLI_duplicatelist(&to->edgebase, &from->edgebase); BLI_duplicatelist(&to->areabase, &from->areabase); BLI_listbase_clear(&to->regionbase); - + s2 = to->vertbase.first; for (s1 = from->vertbase.first; s1; s1 = s1->next, s2 = s2->next) { s1->newv = s2; } - + for (se = to->edgebase.first; se; se = se->next) { se->v1 = se->v1->newv; se->v2 = se->v2->newv; sortscrvert(&(se->v1), &(se->v2)); } - + saf = from->areabase.first; for (sa = to->areabase.first; sa; sa = sa->next, saf = saf->next) { sa->v1 = sa->v1->newv; @@ -525,10 +525,10 @@ static void screen_copy(bScreen *to, bScreen *from) BLI_listbase_clear(&sa->regionbase); BLI_listbase_clear(&sa->actionzones); BLI_listbase_clear(&sa->handlers); - + ED_area_data_copy(sa, saf, true); } - + /* put at zero (needed?) */ for (s1 = from->vertbase.first; s1; s1 = s1->next) s1->newv = NULL; @@ -554,7 +554,7 @@ int area_getorientation(ScrArea *sa, ScrArea *sb) sbv2 = sb->v2; sbv3 = sb->v3; sbv4 = sb->v4; - + if (sav1 == sbv4 && sav2 == sbv3) { /* sa to right of sb = W */ return 0; } @@ -567,7 +567,7 @@ int area_getorientation(ScrArea *sa, ScrArea *sb) else if (sav1 == sbv2 && sav4 == sbv3) { /* sa on top of sb = S*/ return 3; } - + return -1; } @@ -577,14 +577,14 @@ int area_getorientation(ScrArea *sa, ScrArea *sb) int screen_area_join(bContext *C, bScreen *scr, ScrArea *sa1, ScrArea *sa2) { int dir; - + dir = area_getorientation(sa1, sa2); /*printf("dir is : %i\n", dir);*/ - + if (dir == -1) { return 0; } - + if (dir == 0) { sa1->v1 = sa2->v1; sa1->v2 = sa2->v2; @@ -609,7 +609,7 @@ int screen_area_join(bContext *C, bScreen *scr, ScrArea *sa1, ScrArea *sa2) screen_addedge(scr, sa1->v1, sa1->v2); screen_addedge(scr, sa1->v3, sa1->v4); } - + screen_delarea(C, scr, sa2); removedouble_scrverts(scr); @@ -622,22 +622,22 @@ void select_connected_scredge(bScreen *sc, ScrEdge *edge) ScrVert *sv; int oneselected; char dir; - + /* select connected, only in the right direction */ /* 'dir' is the direction of EDGE */ - + if (edge->v1->vec.x == edge->v2->vec.x) dir = 'v'; else dir = 'h'; - + sv = sc->vertbase.first; while (sv) { sv->flag = 0; sv = sv->next; } - + edge->v1->flag = 1; edge->v2->flag = 1; - + oneselected = 1; while (oneselected) { se = sc->edgebase.first; @@ -674,22 +674,22 @@ static void screen_test_scale(bScreen *sc, int winsize_x, int winsize_y) ScrArea *sa; int winsize_x_prev, winsize_y_prev; float facx, facy, tempf, min[2], max[2]; - + /* calculate size */ min[0] = min[1] = 20000.0f; max[0] = max[1] = 0.0f; - + for (sv = sc->vertbase.first; sv; sv = sv->next) { const float fv[2] = {(float)sv->vec.x, (float)sv->vec.y}; minmax_v2v2_v2(min, max, fv); } - + /* always make 0.0 left under */ for (sv = sc->vertbase.first; sv; sv = sv->next) { sv->vec.x -= min[0]; sv->vec.y -= min[1]; } - + winsize_x_prev = (max[0] - min[0]) + 1; winsize_y_prev = (max[1] - min[1]) + 1; @@ -725,7 +725,7 @@ static void screen_test_scale(bScreen *sc, int winsize_x, int winsize_y) if (winsize_x_prev != winsize_x || winsize_y_prev != winsize_y) { facx = ((float)winsize_x - 1) / ((float)winsize_x_prev - 1); facy = ((float)winsize_y - 1) / ((float)winsize_y_prev - 1); - + /* make sure it fits! */ for (sv = sc->vertbase.first; sv; sv = sv->next) { /* FIXME, this re-sizing logic is no good when re-sizing the window + redrawing [#24428] @@ -736,7 +736,7 @@ static void screen_test_scale(bScreen *sc, int winsize_x, int winsize_y) //sv->vec.x -= (sv->vec.x % AREAGRID); CLAMP(sv->vec.x, 0, winsize_x - 1); - + tempf = ((float)sv->vec.y) * facy; sv->vec.y = (short)(tempf + 0.5f); //sv->vec.y += AREAGRID - 1; @@ -800,25 +800,25 @@ static void screen_test_scale(bScreen *sc, int winsize_x, int winsize_y) /* 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 > 0) headery += U.pixelsize; if (sa->v2->vec.y < winsize_y - 1) headery += U.pixelsize; - + if (sa->v2->vec.y - sa->v1->vec.y + 1 < headery) { /* lower edge */ ScrEdge *se = screen_findedge(sc, sa->v4, sa->v1); if (se && sa->v1 != sa->v2) { int yval; - + select_connected_scredge(sc, se); - + /* all selected vertices get the right offset */ yval = sa->v2->vec.y - headery + 1; for (sv = sc->vertbase.first; sv; sv = sv->next) { @@ -832,7 +832,7 @@ static void screen_test_scale(bScreen *sc, int winsize_x, int winsize_y) } } } - + } /* ****************** EXPORTED API TO OTHER MODULES *************************** */ @@ -840,9 +840,9 @@ static void screen_test_scale(bScreen *sc, int winsize_x, int winsize_y) bScreen *ED_screen_duplicate(wmWindow *win, bScreen *sc) { bScreen *newsc; - + if (sc->state != SCREENNORMAL) return NULL; /* XXX handle this case! */ - + /* make new empty screen: */ newsc = ED_screen_add(win, sc->scene, sc->id.name + 2); /* copy all data */ @@ -869,7 +869,7 @@ static void region_cursor_set(wmWindow *win, int swinid, int swin_changed) void ED_screen_do_listen(bContext *C, wmNotifier *note) { wmWindow *win = CTX_wm_window(C); - + /* generic notes */ switch (note->category) { case NC_WM: @@ -895,7 +895,7 @@ static void screen_refresh_headersizes(void) { const ListBase *lb = BKE_spacetypes_list(); SpaceType *st; - + for (st = lb->first; st; st = st->next) { ARegionType *art = BKE_regiontype_from_id(st, RGN_TYPE_HEADER); if (art) art->prefsizey = ED_area_headersize(); @@ -905,38 +905,38 @@ static void screen_refresh_headersizes(void) /* make this screen usable */ /* for file read and first use, for scaling window, area moves */ void ED_screen_refresh(wmWindowManager *wm, wmWindow *win) -{ +{ /* exception for bg mode, we only need the screen context */ if (!G.background) { const int winsize_x = WM_window_pixels_x(win); const int winsize_y = WM_window_pixels_y(win); ScrArea *sa; rcti winrct; - + winrct.xmin = 0; winrct.xmax = winsize_x - 1; winrct.ymin = 0; winrct.ymax = winsize_y - 1; - + /* header size depends on DPI, let's verify */ WM_window_set_dpi(win); screen_refresh_headersizes(); - + screen_test_scale(win->screen, winsize_x, winsize_y); - + if (win->screen->mainwin == 0) { win->screen->mainwin = wm_subwindow_open(win, &winrct, false); } else { wm_subwindow_position(win, win->screen->mainwin, &winrct, false); } - + for (sa = win->screen->areabase.first; sa; sa = sa->next) { /* set spacetype and region callbacks, calls init() */ /* sets subwindows for regions, adds handlers */ ED_area_initialize(wm, win, sa); } - + /* wake up animtimer */ if (win->screen->animtimer) WM_event_timer_sleep(wm, win, win->screen->animtimer, false); @@ -954,12 +954,12 @@ void ED_screen_refresh(wmWindowManager *wm, wmWindow *win) void ED_screens_initialize(wmWindowManager *wm) { wmWindow *win; - + for (win = wm->windows.first; win; win = win->next) { - + if (win->screen == NULL) win->screen = G.main->screen.first; - + ED_screen_refresh(wm, win); } } @@ -981,12 +981,12 @@ void ED_region_exit(bContext *C, ARegion *ar) wm_subwindow_close(CTX_wm_window(C), ar->swinid); ar->swinid = 0; } - + if (ar->headerstr) { MEM_freeN(ar->headerstr); ar->headerstr = NULL; } - + if (ar->regiontimer) { WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), ar->regiontimer); ar->regiontimer = NULL; @@ -1020,7 +1020,7 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen) ARegion *ar; CTX_wm_window_set(C, window); - + if (screen->animtimer) WM_event_remove_timer(wm, window, screen->animtimer); screen->animtimer = NULL; @@ -1030,7 +1030,7 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen) wm_subwindow_close(window, screen->mainwin); screen->mainwin = 0; screen->subwinactive = 0; - + for (ar = screen->regionbase.first; ar; ar = ar->next) ED_region_exit(C, ar); @@ -1039,7 +1039,7 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen) /* mark it available for use for other windows */ screen->winid = 0; - + if (prevwin->screen->temp == 0) { /* use previous window if possible */ CTX_wm_window_set(C, prevwin); @@ -1048,7 +1048,7 @@ void ED_screen_exit(bContext *C, wmWindow *window, bScreen *screen) /* none otherwise */ CTX_wm_window_set(C, NULL); } - + } /* *********************************** */ @@ -1061,11 +1061,11 @@ static void screen_cursor_set(wmWindow *win, const wmEvent *event) AZone *az = NULL; ScrArea *sa; - + for (sa = win->screen->areabase.first; sa; sa = sa->next) if ((az = is_in_area_actionzone(sa, &event->x))) break; - + if (sa) { if (az->type == AZONE_AREA) WM_cursor_set(win, CURSOR_EDIT); @@ -1078,7 +1078,7 @@ static void screen_cursor_set(wmWindow *win, const wmEvent *event) } else { ScrEdge *actedge = screen_find_active_scredge(win->screen, winsize_x, winsize_y, event->x, event->y); - + if (actedge) { if (scredge_is_horizontal(actedge)) WM_cursor_set(win, CURSOR_Y_MOVE); @@ -1096,7 +1096,7 @@ static void screen_cursor_set(wmWindow *win, const wmEvent *event) void ED_screen_set_subwinactive(bContext *C, const wmEvent *event) { wmWindow *win = CTX_wm_window(C); - + if (win->screen) { bScreen *scr = win->screen; ScrArea *sa; @@ -1120,17 +1120,17 @@ void ED_screen_set_subwinactive(bContext *C, const wmEvent *event) } else scr->subwinactive = scr->mainwin; - + /* check for redraw headers */ if (oldswin != scr->subwinactive) { for (sa = scr->areabase.first; sa; sa = sa->next) { bool do_draw = false; - + for (ar = sa->regionbase.first; ar; ar = ar->next) if (ar->swinid == oldswin || ar->swinid == scr->subwinactive) do_draw = true; - + if (do_draw) { for (ar = sa->regionbase.first; ar; ar = ar->next) if (ar->regiontype == RGN_TYPE_HEADER) @@ -1138,7 +1138,7 @@ void ED_screen_set_subwinactive(bContext *C, const wmEvent *event) } } } - + /* cursors, for time being set always on edges, otherwise aregion doesnt switch */ if (scr->subwinactive == scr->mainwin) { screen_cursor_set(win, event); @@ -1168,10 +1168,10 @@ int ED_screen_area_active(const bContext *C) if (win && sc && sa) { AZone *az = is_in_area_actionzone(sa, &win->eventstate->x); ARegion *ar; - + if (az && az->type == AZONE_REGION) return 1; - + for (ar = sa->regionbase.first; ar; ar = ar->next) if (ar->swinid == sc->subwinactive) return 1; @@ -1191,7 +1191,7 @@ bool ED_screen_set(bContext *C, bScreen *sc) wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win = CTX_wm_window(C); bScreen *oldscreen = CTX_wm_screen(C); - + /* validate screen, it's called with notifier reference */ if (BLI_findindex(&bmain->screen, sc) == -1) { return true; @@ -1213,7 +1213,7 @@ bool ED_screen_set(bContext *C, bScreen *sc) if (sc->winid != 0 && sc->winid != win->winid) { return false; } - + if (oldscreen != sc) { wmTimer *wt = oldscreen->animtimer; ScrArea *sa; @@ -1246,14 +1246,14 @@ bool ED_screen_set(bContext *C, bScreen *sc) win->screen = sc; CTX_wm_window_set(C, win); // stores C->wm.screen... hrmf - + /* prevent multiwin errors */ sc->winid = win->winid; - + ED_screen_refresh(CTX_wm_manager(C), CTX_wm_window(C)); WM_event_add_notifier(C, NC_WINDOW, NULL); WM_event_add_notifier(C, NC_SCREEN | ND_SCREENSET, sc); - + /* makes button hilites work */ WM_event_add_mousemove(C); @@ -1308,7 +1308,7 @@ bool ED_screen_delete(bContext *C, bScreen *sc) wmWindowManager *wm = CTX_wm_manager(C); wmWindow *win = CTX_wm_window(C); bScreen *newsc; - + /* don't allow deleting temp fullscreens for now */ if (ELEM(sc->state, SCREENMAXIMIZED, SCREENFULL)) { return false; @@ -1321,7 +1321,7 @@ bool ED_screen_delete(bContext *C, bScreen *sc) for (newsc = sc->id.prev; newsc; newsc = newsc->id.prev) if (!ed_screen_used(wm, newsc) && !newsc->temp) break; - + if (!newsc) { for (newsc = sc->id.next; newsc; newsc = newsc->id.next) if (!ed_screen_used(wm, newsc) && !newsc->temp) @@ -1354,13 +1354,13 @@ static void ed_screen_set_3dview_camera(Scene *scene, bScreen *sc, ScrArea *sa, if (!v3d->camera) { ARegion *ar; ListBase *regionbase; - + /* regionbase is in different place depending if space is active */ if (v3d == sa->spacedata.first) regionbase = &sa->regionbase; else regionbase = &v3d->regionbase; - + for (ar = regionbase->first; ar; ar = ar->next) { if (ar->regiontype == RGN_TYPE_WINDOW) { RegionView3D *rv3d = ar->regiondata; @@ -1388,7 +1388,7 @@ void ED_screen_set_scene(bContext *C, bScreen *screen, Scene *scene) for (sc = bmain->screen.first; sc; sc = sc->id.next) { if ((U.flag & USER_SCENEGLOBAL) || sc == screen) { - + if (scene != sc->scene) { /* all areas endlocalview */ // XXX ScrArea *sa = sc->areabase.first; @@ -1398,12 +1398,12 @@ void ED_screen_set_scene(bContext *C, bScreen *screen, Scene *scene) // } sc->scene = scene; } - + } } - + // copy_view3d_lock(0); /* space.c */ - + /* are there cameras in the views that are not in the scene? */ for (sc = bmain->screen.first; sc; sc = sc->id.next) { if ((U.flag & USER_SCENEGLOBAL) || sc == screen) { @@ -1422,17 +1422,17 @@ void ED_screen_set_scene(bContext *C, bScreen *screen, Scene *scene) } } } - + CTX_data_scene_set(C, scene); BKE_scene_set_background(bmain, scene); DAG_on_visible_update(bmain, false); - + ED_render_engine_changed(bmain); ED_update_for_newframe(bmain, scene, 1); - + /* complete redraw */ WM_event_add_notifier(C, NC_WINDOW, NULL); - + } /** @@ -1472,7 +1472,7 @@ ScrArea *ED_screen_full_newspace(bContext *C, ScrArea *sa, int type) if (!sa || sa->full == NULL) { newsa = ED_screen_state_toggle(C, win, sa, SCREENMAXIMIZED); } - + if (!newsa) { if (sa->full && (screen->state == SCREENMAXIMIZED)) { /* if this has been called from the temporary info header generated in @@ -1540,10 +1540,10 @@ void ED_screen_full_restore(bContext *C, ScrArea *sa) SpaceLink *sl = sa->spacedata.first; bScreen *screen = CTX_wm_screen(C); short state = (screen ? screen->state : SCREENMAXIMIZED); - + /* if fullscreen area has a temporary space (such as a file browser or fullscreen render * overlaid on top of an existing setup) then return to the previous space */ - + if (sl->next) { if (sa->flag & AREA_FLAG_TEMP_TYPE) { ED_screen_full_prevspace(C, sa); @@ -1717,15 +1717,15 @@ void ED_refresh_viewport_fps(bContext *C) { wmTimer *animtimer = CTX_wm_screen(C)->animtimer; Scene *scene = CTX_data_scene(C); - + /* is anim playback running? */ if (animtimer && (U.uiflag & USER_SHOW_FPS)) { ScreenFrameRateInfo *fpsi = scene->fps_info; - + /* if there isn't any info, init it first */ if (fpsi == NULL) fpsi = scene->fps_info = MEM_callocN(sizeof(ScreenFrameRateInfo), "refresh_viewport_fps fps_info"); - + /* update the values */ fpsi->redrawtime = fpsi->lredrawtime; fpsi->lredrawtime = animtimer->ltime; @@ -1738,7 +1738,7 @@ void ED_refresh_viewport_fps(bContext *C) } } -/* redraws: uses defines from stime->redraws +/* redraws: uses defines from stime->redraws * enable: 1 - forward on, -1 - backwards on, 0 - off */ void ED_screen_animation_timer(bContext *C, int redraws, int refresh, int sync, int enable) @@ -1748,17 +1748,17 @@ void ED_screen_animation_timer(bContext *C, int redraws, int refresh, int sync, wmWindow *win = CTX_wm_window(C); Scene *scene = CTX_data_scene(C); bScreen *stopscreen = ED_screen_animation_playing(wm); - + if (stopscreen) { WM_event_remove_timer(wm, win, stopscreen->animtimer); stopscreen->animtimer = NULL; } - + if (enable) { ScreenAnimData *sad = MEM_callocN(sizeof(ScreenAnimData), "ScreenAnimData"); - + screen->animtimer = WM_event_add_timer(wm, win, TIMER0, (1.0 / FPS)); - + sad->ar = CTX_wm_region(C); /* if startframe is larger than current frame, we put currentframe on startframe. * note: first frame then is not drawn! (ton) */ @@ -1793,7 +1793,7 @@ void ED_screen_animation_timer(bContext *C, int redraws, int refresh, int sync, sad->from_anim_edit = (ELEM(spacetype, SPACE_IPO, SPACE_ACTION, SPACE_NLA, SPACE_TIME)); screen->animtimer->customdata = sad; - + } /* notifier catched by top header, for button */ @@ -1806,7 +1806,7 @@ static ARegion *time_top_left_3dwindow(bScreen *screen) ARegion *aret = NULL; ScrArea *sa; int min = 10000; - + for (sa = screen->areabase.first; sa; sa = sa->next) { if (sa->spacetype == SPACE_VIEW3D) { ARegion *ar; @@ -1829,7 +1829,7 @@ void ED_screen_animation_timer_update(bScreen *screen, int redraws, int refresh) if (screen && screen->animtimer) { wmTimer *wt = screen->animtimer; ScreenAnimData *sad = wt->customdata; - + sad->redraws = redraws; sad->refresh = refresh; sad->ar = NULL; @@ -1857,7 +1857,7 @@ void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute)) } } #endif - + ED_clip_update_frame(bmain, scene->r.cfra); /* get layers from all windows */ @@ -1870,7 +1870,7 @@ void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute)) /* composite */ if (scene->use_nodes && scene->nodetree) ntreeCompositTagAnimated(scene->nodetree); - + /* update animated texture nodes */ { Tex *tex; @@ -1880,7 +1880,7 @@ void ED_update_for_newframe(Main *bmain, Scene *scene, int UNUSED(mute)) } } } - + } /* |