Revision: 24091 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24091 Author: blendix Date: 2009-10-26 13:42:25 +0100 (Mon, 26 Oct 2009)
Log Message: ----------- Bugfix: 3d view with scene layer lock were not updated when the scene layer or other 3d view layers were changed. Modified Paths: -------------- trunk/blender/source/blender/editors/include/ED_view3d.h trunk/blender/source/blender/editors/space_buttons/space_buttons.c trunk/blender/source/blender/editors/space_outliner/space_outliner.c trunk/blender/source/blender/editors/space_view3d/space_view3d.c trunk/blender/source/blender/editors/space_view3d/view3d_header.c trunk/blender/source/blender/makesrna/intern/rna_scene.c trunk/blender/source/blender/windowmanager/WM_types.h Modified: trunk/blender/source/blender/editors/include/ED_view3d.h =================================================================== --- trunk/blender/source/blender/editors/include/ED_view3d.h 2009-10-26 12:30:28 UTC (rev 24090) +++ trunk/blender/source/blender/editors/include/ED_view3d.h 2009-10-26 12:42:25 UTC (rev 24091) @@ -43,6 +43,7 @@ struct ImBuf; struct Scene; struct bContext; +struct Main; /* for derivedmesh drawing callbacks, for view3d_select, .... */ typedef struct ViewContext { @@ -136,5 +137,7 @@ void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d); +void ED_view3d_scene_layers_update(struct Main *bmain, struct Scene *scene); + #endif /* ED_VIEW3D_H */ Modified: trunk/blender/source/blender/editors/space_buttons/space_buttons.c =================================================================== --- trunk/blender/source/blender/editors/space_buttons/space_buttons.c 2009-10-26 12:30:28 UTC (rev 24090) +++ trunk/blender/source/blender/editors/space_buttons/space_buttons.c 2009-10-26 12:42:25 UTC (rev 24091) @@ -252,6 +252,7 @@ case ND_MODE: case ND_RENDER_OPTIONS: case ND_KEYINGSET: + case ND_LAYER: ED_area_tag_redraw(sa); break; Modified: trunk/blender/source/blender/editors/space_outliner/space_outliner.c =================================================================== --- trunk/blender/source/blender/editors/space_outliner/space_outliner.c 2009-10-26 12:30:28 UTC (rev 24090) +++ trunk/blender/source/blender/editors/space_outliner/space_outliner.c 2009-10-26 12:42:25 UTC (rev 24091) @@ -121,6 +121,7 @@ case ND_KEYINGSET: case ND_FRAME: case ND_RENDER_OPTIONS: + case ND_LAYER: ED_region_tag_redraw(ar); break; } Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c =================================================================== --- trunk/blender/source/blender/editors/space_view3d/space_view3d.c 2009-10-26 12:30:28 UTC (rev 24090) +++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c 2009-10-26 12:42:25 UTC (rev 24091) @@ -445,6 +445,7 @@ case ND_FRAME: case ND_OB_ACTIVE: case ND_OB_SELECT: + case ND_LAYER: ED_region_tag_redraw(ar); break; case ND_MODE: @@ -551,6 +552,7 @@ case ND_OB_ACTIVE: case ND_OB_SELECT: case ND_MODE: + case ND_LAYER: ED_region_tag_redraw(ar); break; } @@ -598,6 +600,7 @@ case ND_OB_ACTIVE: case ND_OB_SELECT: case ND_MODE: + case ND_LAYER: ED_region_tag_redraw(ar); break; } Modified: trunk/blender/source/blender/editors/space_view3d/view3d_header.c =================================================================== --- trunk/blender/source/blender/editors/space_view3d/view3d_header.c 2009-10-26 12:30:28 UTC (rev 24090) +++ trunk/blender/source/blender/editors/space_view3d/view3d_header.c 2009-10-26 12:42:25 UTC (rev 24091) @@ -134,7 +134,6 @@ #define B_VIEWBUT 104 #define B_PERSP 105 #define B_VIEWRENDER 106 -#define B_STARTGAME 107 #define B_MODESELECT 108 #define B_AROUND 109 #define B_SEL_VERT 110 @@ -169,9 +168,50 @@ return NULL; } +static void copy_view3d_lock_space(View3D *vd, Scene *scene) +{ + int bit; + + if(vd->scenelock && vd->localvd==NULL) { + vd->lay= scene->lay; + vd->camera= scene->camera; + + if(vd->camera==0 && vd->persp==V3D_CAMOB) + vd->persp= V3D_PERSP; + + if((vd->lay & vd->layact) == 0) { + for(bit= 0; bit<32; bit++) { + if(vd->lay & (1<<bit)) { + vd->layact= 1<<bit; + break; + } + } + } + } +} + +void ED_view3d_scene_layers_update(Main *bmain, Scene *scene) +{ + bScreen *sc; + ScrArea *sa; + SpaceLink *sl; + + /* from scene copy to the other views */ + for(sc=bmain->screen.first; sc; sc=sc->id.next) { + if(sc->scene!=scene) + continue; + + for(sa=sc->areabase.first; sa; sa=sa->next) + for(sl=sa->spacedata.first; sl; sl=sl->next) + if(sl->spacetype==SPACE_VIEW3D) + copy_view3d_lock_space((View3D*)sl, scene); + } +} + // XXX quickly ported across static void handle_view3d_lock(bContext *C) { + Main *bmain= CTX_data_main(C); Scene *scene= CTX_data_scene(C); ScrArea *sa= CTX_wm_area(C); View3D *v3d= CTX_wm_view3d(C); @@ -181,9 +221,13 @@ /* copy to scene */ scene->lay= v3d->lay; scene->camera= v3d->camera; + + /* not through notifiery, listener don't have context + and non-open screens or spaces need to be updated too */ + ED_view3d_scene_layers_update(bmain, scene); /* notifiers for scene update */ - WM_event_add_notifier(C, NC_SCENE, scene); + WM_event_add_notifier(C, NC_SCENE|ND_LAYER, scene); } } } @@ -1713,21 +1757,11 @@ } break; - case B_VIEWBUT: - - - case B_PERSP: - - - break; case B_VIEWRENDER: if (sa->spacetype==SPACE_VIEW3D) { // XXX BIF_do_ogl_render(v3d, shift); } break; - case B_STARTGAME: -// XXX start_game(); - break; case B_MODESELECT: WM_operator_properties_create(&props_ptr, "OBJECT_OT_mode_set"); RNA_enum_set(&props_ptr, "mode", v3d->modeselect); Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c =================================================================== --- trunk/blender/source/blender/makesrna/intern/rna_scene.c 2009-10-26 12:30:28 UTC (rev 24090) +++ trunk/blender/source/blender/makesrna/intern/rna_scene.c 2009-10-26 12:42:25 UTC (rev 24091) @@ -76,14 +76,16 @@ #include "BKE_context.h" #include "BKE_global.h" -#include "BKE_scene.h" +#include "BKE_main.h" #include "BKE_node.h" #include "BKE_pointcache.h" +#include "BKE_scene.h" #include "BLI_threads.h" #include "ED_info.h" #include "ED_node.h" +#include "ED_view3d.h" #include "RE_pipeline.h" @@ -160,6 +162,14 @@ scene->lay= layer_set(scene->lay, values); } +static void rna_Scene_layer_update(bContext *C, PointerRNA *ptr) +{ + Main *bmain= CTX_data_main(C); + Scene *scene= (Scene*)ptr->data; + + ED_view3d_scene_layers_update(bmain, scene); +} + static void rna_Scene_start_frame_set(PointerRNA *ptr, int value) { Scene *data= (Scene*)ptr->data; @@ -2219,10 +2229,10 @@ prop= RNA_def_property(srna, "visible_layers", PROP_BOOLEAN, PROP_LAYER_MEMBER); RNA_def_property_boolean_sdna(prop, NULL, "lay", 1); RNA_def_property_array(prop, 20); + RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_layer_set"); RNA_def_property_ui_text(prop, "Visible Layers", "Layers visible when rendering the scene."); - RNA_def_property_boolean_funcs(prop, NULL, "rna_Scene_layer_set"); + RNA_def_property_update(prop, NC_SCENE|ND_LAYER, "rna_Scene_layer_update"); - /* Frame Range Stuff */ prop= RNA_def_property(srna, "current_frame", PROP_INT, PROP_TIME); RNA_def_property_clear_flag(prop, PROP_ANIMATEABLE); Modified: trunk/blender/source/blender/windowmanager/WM_types.h =================================================================== --- trunk/blender/source/blender/windowmanager/WM_types.h 2009-10-26 12:30:28 UTC (rev 24090) +++ trunk/blender/source/blender/windowmanager/WM_types.h 2009-10-26 12:42:25 UTC (rev 24091) @@ -165,6 +165,7 @@ #define ND_COMPO_RESULT (11<<16) #define ND_KEYINGSET (12<<16) #define ND_SCENEDELETE (13<<16) +#define ND_LAYER (14<<16) /* NC_OBJECT Object */ #define ND_TRANSFORM (16<<16) _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs