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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2010-01-28 13:57:31 +0300
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2010-01-28 13:57:31 +0300
commita2372d43122ea5741acc897dc4cc067bc487791f (patch)
tree82827ece19a0029a76a7889f4e44db40ce41bb90 /source/blender/editors/space_buttons
parent47e8ea500433efa188d968fdb8060ee3e30a896e (diff)
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.
Diffstat (limited to 'source/blender/editors/space_buttons')
-rw-r--r--source/blender/editors/space_buttons/buttons_context.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c
index d94170533cf..5fe738d7250 100644
--- a/source/blender/editors/space_buttons/buttons_context.c
+++ b/source/blender/editors/space_buttons/buttons_context.c
@@ -474,6 +474,32 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma
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 @@ void buttons_context_compute(const bContext *C, SpaceButs *sbuts)
/* 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 @@ void buttons_context_compute(const bContext *C, SpaceButs *sbuts)
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;
}