Revision: 17911 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17911 Author: ton Date: 2008-12-17 20:40:19 +0100 (Wed, 17 Dec 2008)
Log Message: ----------- 2.5 Added operator for moving area to 'full screen'. This is instable with tooltips on... fishy stuff then goes on, which Brecht will first look at. :) Modified Paths: -------------- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h branches/blender2.5/blender/source/blender/editors/screen/area.c branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c Modified: branches/blender2.5/blender/source/blender/editors/include/ED_screen.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/include/ED_screen.h 2008-12-17 17:33:45 UTC (rev 17910) +++ branches/blender2.5/blender/source/blender/editors/include/ED_screen.h 2008-12-17 19:40:19 UTC (rev 17911) @@ -72,7 +72,6 @@ bScreen *ED_screen_duplicate(struct wmWindow *win, struct bScreen *sc); void ED_screen_set_subwinactive(struct wmWindow *win, struct wmEvent *event); void ED_screen_exit(struct bContext *C, struct wmWindow *window, struct bScreen *screen); -void ED_screen_set(struct bContext *C, struct bScreen *sc); void ED_operatortypes_screen(void); void ED_keymap_screen(struct wmWindowManager *wm); Modified: branches/blender2.5/blender/source/blender/editors/screen/area.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/screen/area.c 2008-12-17 17:33:45 UTC (rev 17910) +++ branches/blender2.5/blender/source/blender/editors/screen/area.c 2008-12-17 19:40:19 UTC (rev 17911) @@ -490,6 +490,7 @@ sa1->headertype= sa2->headertype; sa1->spacetype= sa2->spacetype; + sa1->butspacetype= sa2->butspacetype; if(swap_space) { SWAP(ListBase, sa1->spacedata, sa2->spacedata); @@ -539,7 +540,7 @@ /* *********** Space switching code, local now *********** */ /* XXX make operator for this */ -static void area_newspace(bContext *C, ScrArea *sa, int type) +void area_newspace(bContext *C, ScrArea *sa, int type) { if(sa->spacetype != type) { SpaceType *st; @@ -585,7 +586,8 @@ BLI_addhead(&sa->spacedata, sl); /* swap regions */ - slold->regionbase= sa->regionbase; + if(slold) + slold->regionbase= sa->regionbase; sa->regionbase= sl->regionbase; sl->regionbase.first= sl->regionbase.last= NULL; } Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c 2008-12-17 17:33:45 UTC (rev 17910) +++ branches/blender2.5/blender/source/blender/editors/screen/screen_edit.c 2008-12-17 19:40:19 UTC (rev 17911) @@ -419,7 +419,7 @@ screen_addedge(sc, sv4, sv1); /* dummy type, no spacedata */ - screen_addarea(sc, sv1, sv2, sv3, sv4, HEADERDOWN, SPACE_INFO); + screen_addarea(sc, sv1, sv2, sv3, sv4, HEADERDOWN, SPACE_EMPTY); return sc; } @@ -1042,6 +1042,7 @@ ARegion *ar; C->window= window; + for(ar= screen->regionbase.first; ar; ar= ar->next) ED_region_exit(C, ar); @@ -1155,7 +1156,7 @@ /* operator call, WM + Window + screen already existed before */ /* Do NOT call in area/region queues! */ -void ED_screen_set(bContext *C, bScreen *sc) +void ed_screen_set(bContext *C, bScreen *sc) { if(sc->full) { /* find associated full */ @@ -1167,7 +1168,7 @@ break; } } - if(sc1==NULL) printf("setscreen error\n"); + if(sc1==NULL) printf("set screen error\n"); } if (C->screen != sc) { @@ -1180,3 +1181,76 @@ } } +/* this function toggles: if area is full then the parent will be restored */ +void ed_screen_fullarea(bContext *C) +{ + bScreen *sc, *oldscreen; + ScrArea *newa, *old; + short fulltype; + + if(C->area->full) { + sc= C->area->full; /* the old screen to restore */ + oldscreen= C->screen; /* the one disappearing */ + + fulltype = sc->full; + + /* refuse to go out of SCREENAUTOPLAY as long as G_FLAGS_AUTOPLAY + is set */ + + if (fulltype != SCREENAUTOPLAY || (G.flags & G_FILE_AUTOPLAY) == 0) { + sc->full= 0; + + /* find old area */ + for(old= sc->areabase.first; old; old= old->next) + if(old->full) break; + if(old==NULL) { + printf("something wrong in areafullscreen\n"); + return; + } + // old feature described below (ton) + // in autoplay screens the headers are disabled by + // default. So use the old headertype instead + + area_copy_data(old, C->area, 1); /* 1 = swap spacelist */ + + old->full= NULL; + + ed_screen_set(C, sc); + + free_screen(oldscreen); + free_libblock(&G.main->screen, oldscreen); + } + } + else { + /* is there only 1 area? */ + if(C->screen->areabase.first==C->screen->areabase.last) return; + if(C->area->spacetype==SPACE_INFO) return; + + C->screen->full = SCREENFULL; + + oldscreen= C->screen; + sc= screen_add(C->window, "temp"); /* sets C->window->screen! */ + + /* returns the top small area */ + newa= area_split(C->window, sc, (ScrArea *)sc->areabase.first, 'h', 0.99f); + area_newspace(C, newa, SPACE_INFO); + + /* copy area */ + newa= newa->prev; + area_copy_data(newa, C->area, 1); /* 1 = swap spacelist */ + + C->area->full= oldscreen; + newa->full= oldscreen; + newa->next->full= oldscreen; + + C->screen= oldscreen; + ed_screen_set(C, sc); + } + + /* XXX bad code: setscreen() ends with first area active. fullscreen render assumes this too */ + C->area= sc->areabase.first; + + /* XXX retopo_force_update(); */ + +} + Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h =================================================================== --- branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h 2008-12-17 17:33:45 UTC (rev 17910) +++ branches/blender2.5/blender/source/blender/editors/screen/screen_intern.h 2008-12-17 19:40:19 UTC (rev 17911) @@ -33,6 +33,7 @@ /* area.c */ void area_copy_data (ScrArea *sa1, ScrArea *sa2, int swap_space); +void area_newspace(bContext *C, ScrArea *sa, int type); /* screen_edit.c */ bScreen *screen_add(struct wmWindow *win, char *name); @@ -49,8 +50,10 @@ int scredge_is_horizontal(ScrEdge *se); ScrEdge *screen_find_active_scredge(bScreen *sc, int mx, int my); -AZone *is_in_area_actionzone(ScrArea *sa, int x, int y); +AZone *is_in_area_actionzone(ScrArea *sa, int x, int y); +void ed_screen_set(bContext *C, bScreen *sc); +void ed_screen_fullarea(bContext *C); #endif /* ED_SCREEN_INTERN_H */ Modified: branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c =================================================================== --- branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c 2008-12-17 17:33:45 UTC (rev 17910) +++ branches/blender2.5/blender/source/blender/editors/screen/screen_ops.c 2008-12-17 19:40:19 UTC (rev 17911) @@ -866,6 +866,10 @@ bScreen *screen= C->screen; int delta= RNA_int_get(op->ptr, "delta"); + /* this screen is 'fake', solve later XXX */ + if(C->area->full) + return OPERATOR_CANCELLED; + if(delta==1) { screen= screen->id.next; if(screen==NULL) screen= G.main->screen.first; @@ -879,7 +883,7 @@ } if(screen) { - ED_screen_set(C, screen); + ed_screen_set(C, screen); return OPERATOR_FINISHED; } return OPERATOR_CANCELLED; @@ -898,8 +902,27 @@ RNA_def_property(ot->srna, "delta", PROP_INT, PROP_NONE); } +/* ************** screen full-area operator ***************************** */ +/* function to be called outside UI context, or for redo */ +static int screen_full_area_exec(bContext *C, wmOperator *op) +{ + ed_screen_fullarea(C); + return OPERATOR_FINISHED; +} + +void ED_SCR_OT_screen_full_area(wmOperatorType *ot) +{ + ot->name = "Toggle Full Area in Screen"; + ot->idname = "ED_SCR_OT_screen_full_area"; + + ot->exec= screen_full_area_exec; + ot->poll= ED_operator_screenactive; +} + + + /* ************** join area operator ********************************************** */ /* operator state vars used: @@ -1356,6 +1379,7 @@ WM_operatortype_append(ED_SCR_OT_region_split); WM_operatortype_append(ED_SCR_OT_region_flip); WM_operatortype_append(ED_SCR_OT_screen_set); + WM_operatortype_append(ED_SCR_OT_screen_full_area); /*frame changes*/ WM_operatortype_append(ED_SCR_OT_frame_offset); @@ -1378,6 +1402,9 @@ WM_keymap_verify_item(keymap, "ED_SCR_OT_area_rip", RKEY, KM_PRESS, KM_ALT, 0); RNA_int_set(WM_keymap_add_item(keymap, "ED_SCR_OT_screen_set", RIGHTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "delta", 1); RNA_int_set(WM_keymap_add_item(keymap, "ED_SCR_OT_screen_set", LEFTARROWKEY, KM_PRESS, KM_CTRL, 0)->ptr, "delta", -1); + WM_keymap_add_item(keymap, "ED_SCR_OT_screen_full_area", UPARROWKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "ED_SCR_OT_screen_full_area", DOWNARROWKEY, KM_PRESS, KM_CTRL, 0); + WM_keymap_add_item(keymap, "ED_SCR_OT_screen_full_area", SPACEKEY, KM_PRESS, KM_CTRL, 0); /* tests */ RNA_enum_set(WM_keymap_add_item(keymap, "ED_SCR_OT_region_split", SKEY, KM_PRESS, 0, 0)->ptr, "dir", 'h'); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs