diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-01-28 13:57:31 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2010-01-28 13:57:31 +0300 |
commit | a2372d43122ea5741acc897dc4cc067bc487791f (patch) | |
tree | 82827ece19a0029a76a7889f4e44db40ce41bb90 /source | |
parent | 47e8ea500433efa188d968fdb8060ee3e30a896e (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')
-rw-r--r-- | source/blender/editors/space_buttons/buttons_context.c | 37 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_space_types.h | 6 |
2 files changed, 39 insertions, 4 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; } diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 01b03477dbf..f7b7584a731 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -126,8 +126,8 @@ typedef struct SpaceButs { 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 @@ typedef struct SpaceUserPref { #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 @@ typedef struct SpaceUserPref { #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 |