[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32244] trunk/blender/source/blender: Fix #23629: Layers doesn't sign there are objects on them, only if the object is selected
Sergey Sharybin
g.ulairi at gmail.com
Sat Oct 2 11:28:41 CEST 2010
Revision: 32244
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32244
Author: nazgul
Date: 2010-10-02 11:28:41 +0200 (Sat, 02 Oct 2010)
Log Message:
-----------
Fix #23629: Layers doesn't sign there are objects on them, only if the object is selected
Also fixed layer buttons update when changing scene/screen
Modified Paths:
--------------
trunk/blender/source/blender/editors/screen/screen_edit.c
trunk/blender/source/blender/editors/space_view3d/space_view3d.c
trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
trunk/blender/source/blender/windowmanager/WM_types.h
Modified: trunk/blender/source/blender/editors/screen/screen_edit.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_edit.c 2010-10-02 09:17:32 UTC (rev 32243)
+++ trunk/blender/source/blender/editors/screen/screen_edit.c 2010-10-02 09:28:41 UTC (rev 32244)
@@ -1312,6 +1312,7 @@
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);
Modified: trunk/blender/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/space_view3d.c 2010-10-02 09:17:32 UTC (rev 32243)
+++ trunk/blender/source/blender/editors/space_view3d/space_view3d.c 2010-10-02 09:28:41 UTC (rev 32244)
@@ -529,30 +529,30 @@
return NULL;
}
-static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn)
+static void view3d_recalc_used_layers(ARegion *ar, wmNotifier *wmn, Scene *scene)
{
wmWindow *win= wmn->wm->winactive;
ScrArea *sa;
+ int lay_used= 0;
+ Base *base;
if (!win) return;
+ base= scene->base.first;
+ while(base) {
+ lay_used|= base->lay;
+
+ if (lay_used & (1<<20-1)) break;
+
+ base= base->next;
+ }
+
sa= win->screen->areabase.first;
-
while(sa) {
if(sa->spacetype == SPACE_VIEW3D)
if(BLI_findindex(&sa->regionbase, ar) >= 0) {
View3D *v3d= sa->spacedata.first;
- Scene *scene= wmn->reference;
- Base *base;
-
- v3d->lay_used= 0;
- base= scene->base.first;
- while(base) {
- v3d->lay_used|= base->lay;
-
- base= base->next;
- }
-
+ v3d->lay_used= lay_used;
break;
}
@@ -562,6 +562,8 @@
static void view3d_main_area_listener(ARegion *ar, wmNotifier *wmn)
{
+ bScreen *sc;
+
/* context changes */
switch(wmn->category) {
case NC_ANIMATION:
@@ -584,7 +586,7 @@
case NC_SCENE:
switch(wmn->data) {
case ND_LAYER_CONTENT:
- view3d_recalc_used_layers(ar, wmn);
+ view3d_recalc_used_layers(ar, wmn, wmn->reference);
ED_region_tag_redraw(ar);
break;
case ND_FRAME:
@@ -681,10 +683,22 @@
ED_region_tag_redraw(ar);
break;
case NC_SCREEN:
- if(wmn->data == ND_GPENCIL)
- ED_region_tag_redraw(ar);
- else if(wmn->data==ND_ANIMPLAY)
- ED_region_tag_redraw(ar);
+ switch(wmn->data) {
+ case ND_GPENCIL:
+ case ND_ANIMPLAY:
+ ED_region_tag_redraw(ar);
+ break;
+ case ND_SCREENBROWSE:
+ case ND_SCREENDELETE:
+ case ND_SCREENSET:
+ /* screen was changed, need to update used layers due to NC_SCENE|ND_LAYER_CONTENT */
+ /* updates used layers only for View3D in active screen */
+ sc= wmn->reference;
+ view3d_recalc_used_layers(ar, wmn, sc->scene);
+ ED_region_tag_redraw(ar);
+ break;
+ }
+
break;
}
}
Modified: trunk/blender/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_view3d/view3d_draw.c 2010-10-02 09:17:32 UTC (rev 32243)
+++ trunk/blender/source/blender/editors/space_view3d/view3d_draw.c 2010-10-02 09:28:41 UTC (rev 32244)
@@ -2260,7 +2260,7 @@
Base *base;
Object *ob;
float backcol[3];
- int retopo= 0, sculptparticle= 0;
+ int retopo= 0, sculptparticle= 0, lay_used= 0;
Object *obact = OBACT;
char *grid_unit= NULL;
@@ -2363,8 +2363,12 @@
/* Transp and X-ray afterdraw stuff for sets is done later */
}
+ lay_used= 0;
+
/* then draw not selected and the duplis, but skip editmode object */
for(base= scene->base.first; base; base= base->next) {
+ lay_used |= base->lay;
+
if(v3d->lay & base->lay) {
/* dupli drawing */
@@ -2378,6 +2382,20 @@
}
}
+ if(v3d->lay_used != lay_used) { /* happens when loading old files or loading with UI load */
+ ARegion *ar;
+ ScrArea *sa= CTX_wm_area(C);
+
+ /* find header and force tag redraw */
+ for(ar= sa->regionbase.first; ar; ar= ar->next)
+ if(ar->regiontype==RGN_TYPE_HEADER) {
+ ED_region_tag_redraw(ar);
+ break;
+ }
+
+ v3d->lay_used= lay_used;
+ }
+
// retopo= retopo_mesh_check() || retopo_curve_check();
sculptparticle= (obact && obact->mode & (OB_MODE_PARTICLE_EDIT)) && !scene->obedit;
if(retopo)
Modified: trunk/blender/source/blender/windowmanager/WM_types.h
===================================================================
--- trunk/blender/source/blender/windowmanager/WM_types.h 2010-10-02 09:17:32 UTC (rev 32243)
+++ trunk/blender/source/blender/windowmanager/WM_types.h 2010-10-02 09:28:41 UTC (rev 32244)
@@ -167,6 +167,7 @@
#define ND_ANIMPLAY (4<<16)
#define ND_GPENCIL (5<<16)
#define ND_EDITOR_CHANGED (6<<16) /*sent to new editors after switching to them*/
+#define ND_SCREENSET (7<<16)
/* NC_SCENE Scene */
#define ND_SCENEBROWSE (1<<16)
More information about the Bf-blender-cvs
mailing list