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
path: root/source
diff options
context:
space:
mode:
authorMatt Ebb <matt@mke3.net>2010-06-04 05:39:34 +0400
committerMatt Ebb <matt@mke3.net>2010-06-04 05:39:34 +0400
commitb0eee216d4e551fc3c344d73983928e97bd59bb0 (patch)
tree4cc77c32666393d42f5df392a72ccdbc8257c13b /source
parentab5367e09f9cfc332a171099385e2c1b6d7516da (diff)
Fix [#22383] 3dView Layer Management (by Mouse) broken
Diffstat (limited to 'source')
-rw-r--r--source/blender/blenloader/intern/readfile.c13
-rw-r--r--source/blender/editors/include/ED_view3d.h2
-rw-r--r--source/blender/editors/object/object_add.c5
-rw-r--r--source/blender/editors/space_view3d/view3d_header.c1
-rw-r--r--source/blender/editors/space_view3d/view3d_view.c22
-rw-r--r--source/blender/makesdna/DNA_scene_types.h6
-rw-r--r--source/blender/makesrna/intern/rna_scene.c4
-rw-r--r--source/blender/makesrna/intern/rna_space.c2
8 files changed, 45 insertions, 10 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index d4563df4d2c..b9be5e66106 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -10852,6 +10852,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
/* put 2.50 compatibility code here until next subversion bump */
{
Object *ob;
+ Scene *scene;
bScreen *sc;
for (sc= main->screen.first; sc; sc= sc->id.next) {
@@ -10908,6 +10909,18 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
}
}
+
+ /* initialise scene active layer */
+ for (scene= main->scene.first; scene; scene=scene->id.next) {
+ int i;
+ for(i=0; i<20; i++) {
+ if(scene->lay & (1<<i)) {
+ scene->layact= 1<<i;
+ break;
+ }
+ }
+ }
+
}
/* WATCH IT!!!: pointers from libdata have not been converted yet here! */
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 9e279044962..bb4a7543d90 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -153,7 +153,7 @@ struct RegionView3D *ED_view3d_context_rv3d(struct bContext *C);
void ED_view3d_init_mats_rv3d(struct Object *ob, struct RegionView3D *rv3d);
-int ED_view3d_scene_layer_set(int lay, const int *values);
+int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
int ED_view3d_context_activate(struct bContext *C);
void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct ARegion *ar,
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 9b0a5c9ff33..393fb70c177 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -212,12 +212,13 @@ static void object_add_generic_invoke_options(bContext *C, wmOperator *op)
for(a=0; a<32; a++)
values[a]= (layer & (1<<a));
} else {
- layer = v3d->layact;
+ layer = (v3d->scenelock)?scene->layact:v3d->layact;
+
for(a=0; a<32; a++)
values[a]= (layer & (1<<a));
}
} else {
- layer = scene->lay;
+ layer = scene->layact;
for(a=0; a<32; a++)
values[a]= (layer & (1<<a));
}
diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c
index 489f00b105c..14b769fdf39 100644
--- a/source/blender/editors/space_view3d/view3d_header.c
+++ b/source/blender/editors/space_view3d/view3d_header.c
@@ -137,6 +137,7 @@ static void handle_view3d_lock(bContext *C)
if(v3d->localvd==NULL && v3d->scenelock && sa->spacetype==SPACE_VIEW3D) {
/* copy to scene */
scene->lay= v3d->lay;
+ scene->layact= v3d->layact;
scene->camera= v3d->camera;
/* not through notifiery, listener don't have context
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 9790e928188..54cf6233cf8 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -1380,7 +1380,7 @@ static unsigned int free_localbit(void)
return 0;
}
-int ED_view3d_scene_layer_set(int lay, const int *values)
+int ED_view3d_scene_layer_set(int lay, const int *values, int *active)
{
int i, tot= 0;
@@ -1393,10 +1393,28 @@ int ED_view3d_scene_layer_set(int lay, const int *values)
return lay;
for(i=0; i<20; i++) {
- if(values[i]) lay |= (1<<i);
+
+ if (active) {
+ /* if this value has just been switched on, make that layer active */
+ if (values[i] && (lay & (1<<i))==0) {
+ *active = (1<<i);
+ }
+ }
+
+ if (values[i]) lay |= (1<<i);
else lay &= ~(1<<i);
}
+ /* ensure always an active layer */
+ if (active && (lay & *active)==0) {
+ for(i=0; i<20; i++) {
+ if(lay & (1<<i)) {
+ *active= 1<<i;
+ break;
+ }
+ }
+ }
+
return lay;
}
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 8fe48f7d56a..b7975653c15 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -755,9 +755,11 @@ typedef struct Scene {
float cursor[3]; /* 3d cursor location */
float twcent[3]; /* center for transform widget */
float twmin[3], twmax[3]; /* boundbox of selection for transform widget */
- unsigned int lay;
-
+ unsigned int lay; /* bitflags for layer visibility */
+ int layact; /* active layer */
+ int pad1;
+
short flag; /* various settings */
short use_nodes;
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index c03a5a7adfa..79cc268a854 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -272,7 +272,7 @@ static void rna_Scene_layer_set(PointerRNA *ptr, const int *values)
{
Scene *scene= (Scene*)ptr->data;
- scene->lay= ED_view3d_scene_layer_set(scene->lay, values);
+ scene->lay= ED_view3d_scene_layer_set(scene->lay, values, &scene->layact);
}
static void rna_Scene_view3d_update(Main *bmain, Scene *unused, PointerRNA *ptr)
@@ -734,7 +734,7 @@ static int rna_RenderSettings_use_game_engine_get(PointerRNA *ptr)
static void rna_SceneRenderLayer_layer_set(PointerRNA *ptr, const int *values)
{
SceneRenderLayer *rl= (SceneRenderLayer*)ptr->data;
- rl->lay= ED_view3d_scene_layer_set(rl->lay, values);
+ rl->lay= ED_view3d_scene_layer_set(rl->lay, values, NULL);
}
static void rna_SceneRenderLayer_pass_update(Main *bmain, Scene *unused, PointerRNA *ptr)
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 47dccda58f2..a0f0f3d2f4d 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -303,7 +303,7 @@ static void rna_SpaceView3D_layer_set(PointerRNA *ptr, const int *values)
{
View3D *v3d= (View3D*)(ptr->data);
- v3d->lay= ED_view3d_scene_layer_set(v3d->lay, values);
+ v3d->lay= ED_view3d_scene_layer_set(v3d->lay, values, &v3d->layact);
}
static PointerRNA rna_SpaceView3D_region_3d_get(PointerRNA *ptr)