[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26363] trunk/blender/source/blender: Properties window: try to keep showing shading related tabs as you switch

Brecht Van Lommel brecht at blender.org
Thu Jan 28 11:57:31 CET 2010


Revision: 26363
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26363
Author:   blendix
Date:     2010-01-28 11:57:31 +0100 (Thu, 28 Jan 2010)

Log Message:
-----------
Properties window: try to keep showing shading related tabs as you switch
between active objects, e.g. switch from lamp to material tab when you are
selecting a lamp instead of a mesh.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/space_buttons/buttons_context.c
    trunk/blender/source/blender/makesdna/DNA_space_types.h

Modified: trunk/blender/source/blender/editors/space_buttons/buttons_context.c
===================================================================
--- trunk/blender/source/blender/editors/space_buttons/buttons_context.c	2010-01-28 10:56:35 UTC (rev 26362)
+++ trunk/blender/source/blender/editors/space_buttons/buttons_context.c	2010-01-28 10:57:31 UTC (rev 26363)
@@ -474,6 +474,32 @@
 	return found;
 }
 
+static int buttons_shading_context(const bContext *C, int mainb)
+{
+	Object *ob= CTX_data_active_object(C);
+
+	if(ELEM3(mainb, BCONTEXT_MATERIAL, BCONTEXT_WORLD, BCONTEXT_TEXTURE))
+		return 1;
+	if(mainb == BCONTEXT_DATA && ob && ELEM(ob->type, OB_LAMP, OB_CAMERA))
+		return 1;
+	
+	return 0;
+}
+
+static int buttons_shading_new_context(const bContext *C, int flag, int mainb)
+{
+	Object *ob= CTX_data_active_object(C);
+
+	if(flag & (1 << BCONTEXT_MATERIAL))
+		return BCONTEXT_MATERIAL;
+	else if(ob && ELEM(ob->type, OB_LAMP, OB_CAMERA) && (flag & (1 << BCONTEXT_DATA)))
+		return BCONTEXT_DATA;
+	else if(flag & (1 << BCONTEXT_WORLD))
+		return BCONTEXT_WORLD;
+	
+	return BCONTEXT_RENDER;
+}
+
 void buttons_context_compute(const bContext *C, SpaceButs *sbuts)
 {
 	ButsContextPath *path;
@@ -511,7 +537,11 @@
 
 	/* in case something becomes invalid, change */
 	if((flag & (1 << sbuts->mainb)) == 0) {
-		if(flag & BCONTEXT_OBJECT) {
+		if(sbuts->flag & SB_SHADING_CONTEXT) {
+			/* try to keep showing shading related buttons */
+			sbuts->mainb= buttons_shading_new_context(C, flag, sbuts->mainb);
+		}
+		else if(flag & BCONTEXT_OBJECT) {
 			sbuts->mainb= BCONTEXT_OBJECT;
 		}
 		else {
@@ -533,6 +563,11 @@
 			sbuts->mainb= BCONTEXT_SCENE;
 	}
 
+	if(buttons_shading_context(C, sbuts->mainb))
+		sbuts->flag |= SB_SHADING_CONTEXT;
+	else
+		sbuts->flag &= ~SB_SHADING_CONTEXT;
+
 	sbuts->pathflag= flag;
 }
 

Modified: trunk/blender/source/blender/makesdna/DNA_space_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_space_types.h	2010-01-28 10:56:35 UTC (rev 26362)
+++ trunk/blender/source/blender/makesdna/DNA_space_types.h	2010-01-28 10:57:31 UTC (rev 26363)
@@ -126,8 +126,8 @@
 	short preview;					/* preview is signal to refresh */
 	char flag, pad[3];
 	
-	void *path;				/* runtime */
-	int pathflag, dataicon;	/* runtime */
+	void *path;						/* runtime */
+	int pathflag, dataicon;			/* runtime */
 	ID *pinid;
 } SpaceButs;
 
@@ -577,7 +577,6 @@
 #define TAB_SCENE_SOUND		3
 #define TAB_SCENE_SEQUENCER	4
 
-
 /* buts->mainb new */
 #define BCONTEXT_RENDER				0
 #define BCONTEXT_SCENE				1
@@ -599,6 +598,7 @@
 #define SB_PIN_CONTEXT		2
 #define SB_WORLD_TEX		4
 #define SB_BRUSH_TEX		8
+#define SB_SHADING_CONTEXT	16
 
 /* sbuts->align */
 #define BUT_FREE  		0





More information about the Bf-blender-cvs mailing list