Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/screen/screen_edit.c')
-rw-r--r--source/blender/editors/screen/screen_edit.c274
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))
}
}
}
-
+
}
/*