diff options
author | Matt Ebb <matt@mke3.net> | 2010-06-04 05:39:34 +0400 |
---|---|---|
committer | Matt Ebb <matt@mke3.net> | 2010-06-04 05:39:34 +0400 |
commit | b0eee216d4e551fc3c344d73983928e97bd59bb0 (patch) | |
tree | 4cc77c32666393d42f5df392a72ccdbc8257c13b /source/blender/editors/space_view3d/view3d_view.c | |
parent | ab5367e09f9cfc332a171099385e2c1b6d7516da (diff) |
Fix [#22383] 3dView Layer Management (by Mouse) broken
Diffstat (limited to 'source/blender/editors/space_view3d/view3d_view.c')
-rw-r--r-- | source/blender/editors/space_view3d/view3d_view.c | 22 |
1 files changed, 20 insertions, 2 deletions
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; } |