diff options
-rw-r--r-- | release/scripts/ui/properties_texture.py | 6 | ||||
-rw-r--r-- | source/blender/editors/space_buttons/buttons_context.c | 9 | ||||
-rw-r--r-- | source/blender/editors/space_buttons/buttons_header.c | 6 | ||||
-rw-r--r-- | source/blender/makesdna/DNA_space_types.h | 12 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_space.c | 56 |
5 files changed, 70 insertions, 19 deletions
diff --git a/release/scripts/ui/properties_texture.py b/release/scripts/ui/properties_texture.py index bd9f1a3b13f..9549eb28c63 100644 --- a/release/scripts/ui/properties_texture.py +++ b/release/scripts/ui/properties_texture.py @@ -99,6 +99,9 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel, bpy.types.Panel): if not isinstance(pin_id, bpy.types.Material): pin_id = None + if not space.use_pin_id: + layout.prop(space, "texture_context", expand=True) + tex_collection = (pin_id is None) and (node is None) and (not isinstance(idblock, bpy.types.Brush)) if tex_collection: @@ -126,9 +129,6 @@ class TEXTURE_PT_context_texture(TextureButtonsPanel, bpy.types.Panel): col = split.column() - if not space.pin_id: - col.prop(space, "show_brush_texture", text="Brush", toggle=True) - if tex: split = layout.split(percentage=0.2) diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c index b0b1c23cbc0..d075958ffef 100644 --- a/source/blender/editors/space_buttons/buttons_context.c +++ b/source/blender/editors/space_buttons/buttons_context.c @@ -66,6 +66,7 @@ typedef struct ButsContextPath { PointerRNA ptr[8]; int len; int flag; + int tex_ctx; } ButsContextPath; static int set_pointer_type(ButsContextPath *path, bContextDataResult *result, StructRNA *type) @@ -368,7 +369,7 @@ static int buttons_context_path_texture(ButsContextPath *path) return 1; } /* try brush */ - if((path->flag & SB_BRUSH_TEX) && buttons_context_path_brush(path)) { + if((path->tex_ctx == SB_TEXC_BRUSH) && buttons_context_path_brush(path)) { br= path->ptr[path->len-1].data; if(br) { @@ -380,7 +381,7 @@ static int buttons_context_path_texture(ButsContextPath *path) } } /* try world */ - if((path->flag & SB_WORLD_TEX) && buttons_context_path_world(path)) { + if((path->tex_ctx == SB_TEXC_WORLD) && buttons_context_path_world(path)) { wo= path->ptr[path->len-1].data; if(wo && GS(wo->id.name)==ID_WO) { @@ -442,6 +443,7 @@ static int buttons_context_path(const bContext *C, ButsContextPath *path, int ma memset(path, 0, sizeof(*path)); path->flag= flag; + path->tex_ctx = sbuts->texture_context; /* if some ID datablock is pinned, set the root pointer */ if(sbuts->pinid) { @@ -534,13 +536,12 @@ void buttons_context_compute(const bContext *C, SpaceButs *sbuts) { ButsContextPath *path; PointerRNA *ptr; - int a, pflag, flag= 0; + int a, pflag= 0, flag= 0; if(!sbuts->path) sbuts->path= MEM_callocN(sizeof(ButsContextPath), "ButsContextPath"); path= sbuts->path; - pflag= (sbuts->flag & (SB_WORLD_TEX|SB_BRUSH_TEX)); /* for each context, see if we can compute a valid path to it, if * this is the case, we know we have to display the button */ diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index bd1674aa307..0fbf7f51b70 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -62,12 +62,6 @@ static void do_buttons_buttons(bContext *C, void *UNUSED(arg), int event) case B_BUTSPREVIEW: ED_area_tag_redraw(CTX_wm_area(C)); - /* silly exception */ - if(sbuts->mainb == BCONTEXT_WORLD) - sbuts->flag |= SB_WORLD_TEX; - else if(sbuts->mainb != BCONTEXT_TEXTURE) - sbuts->flag &= ~SB_WORLD_TEX; - sbuts->preview= 1; break; } diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index 90961a5cc15..43bda96baad 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -135,7 +135,8 @@ typedef struct SpaceButs { short mainb, mainbo, mainbuser; /* context tabs */ short re_align, align; /* align for panels */ short preview; /* preview is signal to refresh */ - char flag, pad[3]; + short texture_context; /* texture context selector (material, world, brush)*/ + char flag, pad; void *path; /* runtime */ int pathflag, dataicon; /* runtime */ @@ -627,10 +628,15 @@ typedef struct SpaceSound { /* sbuts->flag */ #define SB_PRV_OSA 1 #define SB_PIN_CONTEXT 2 -#define SB_WORLD_TEX 4 -#define SB_BRUSH_TEX 8 +//#define SB_WORLD_TEX 4 //not used anymore +//#define SB_BRUSH_TEX 8 //not used anymore #define SB_SHADING_CONTEXT 16 +/* sbuts->texture_context */ +#define SB_TEXC_MAT_OR_LAMP 0 +#define SB_TEXC_WORLD 1 +#define SB_TEXC_BRUSH 2 + /* sbuts->align */ #define BUT_FREE 0 #define BUT_HORIZONTAL 1 diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index afb0b82b8a5..0a1ae8fdc5f 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -742,6 +742,51 @@ static void rna_BackgroundImage_opacity_set(PointerRNA *ptr, float value) bgpic->blend = 1.0f - value; } +static EnumPropertyItem *rna_SpaceProperties_texture_context_itemf(bContext *C, PointerRNA *ptr, int *free) +{ + Scene *scene = CTX_data_scene(C); + Object *ob = CTX_data_active_object(C); + EnumPropertyItem *item= NULL; + EnumPropertyItem tmp= {0, "", 0, "", ""}; + int totitem= 0; + + if(ob) { + if(ob->type == OB_LAMP) { + tmp.value = SB_TEXC_MAT_OR_LAMP; + tmp.description = "Show Lamp Textures"; + tmp.identifier = "LAMP"; + tmp.icon = ICON_LAMP_POINT; + RNA_enum_item_add(&item, &totitem, &tmp); + } + else if(ob->totcol) { + tmp.value = SB_TEXC_MAT_OR_LAMP; + tmp.description = "Show Material Textures"; + tmp.identifier = "MATERIAL"; + tmp.icon = ICON_MATERIAL; + RNA_enum_item_add(&item, &totitem, &tmp); + } + } + + if(scene && scene->world) { + tmp.value = SB_TEXC_WORLD; + tmp.description = "Show World Textures"; + tmp.identifier = "WORLD"; + tmp.icon = ICON_WORLD; + RNA_enum_item_add(&item, &totitem, &tmp); + } + + tmp.value = SB_TEXC_BRUSH; + tmp.description = "Show Brush Textures"; + tmp.identifier = "BRUSH"; + tmp.icon = ICON_BRUSH_DATA; + RNA_enum_item_add(&item, &totitem, &tmp); + + RNA_enum_item_end(&item, &totitem); + *free = 1; + + return item; +} + #else static void rna_def_space(BlenderRNA *brna) @@ -1323,6 +1368,10 @@ static void rna_def_space_buttons(BlenderRNA *brna) {BUT_HORIZONTAL, "HORIZONTAL", 0, "Horizontal", ""}, {BUT_VERTICAL, "VERTICAL", 0, "Vertical", ""}, {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem buttons_texture_context_items[] = { + {SB_TEXC_MAT_OR_LAMP, "MATERIAL", ICON_MATERIAL, "Material", "Material"}, + {0, NULL, 0, NULL, NULL}}; //actually populated dynamically trough a function srna= RNA_def_struct(brna, "SpaceProperties", "Space"); RNA_def_struct_sdna(srna, "SpaceButs"); @@ -1342,9 +1391,10 @@ static void rna_def_space_buttons(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Align", "Arrangement of the panels"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, NULL); - prop= RNA_def_property(srna, "show_brush_texture", PROP_BOOLEAN, PROP_NONE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", SB_BRUSH_TEX); - RNA_def_property_ui_text(prop, "Brush Texture", "Show brush textures"); + prop= RNA_def_property(srna, "texture_context", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, buttons_texture_context_items); + RNA_def_property_enum_funcs(prop, NULL, NULL, "rna_SpaceProperties_texture_context_itemf"); + RNA_def_property_ui_text(prop, "Texture Context", "Type of texture data to display and edit"); RNA_def_property_update(prop, NC_SPACE|ND_SPACE_PROPERTIES, NULL); /* pinned data */ |