diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-01-03 04:23:17 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-01-03 04:25:37 +0300 |
commit | ba9e10fd6a5b7052d25f34343b7b723d25a94490 (patch) | |
tree | f9b45841dbbcc40c9c2e0b40f9d69d572589adc5 /source | |
parent | 11f2c65128dc9bdead56003df7c282b6e091cbd1 (diff) | |
parent | 847b21ee08e5a30a2fe35ede4c5b3a73af404af7 (diff) |
Merge branch 'blender2.7'
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/BKE_material.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/material.c | 23 | ||||
-rw-r--r-- | source/blender/editors/render/render_shading.c | 11 |
3 files changed, 28 insertions, 9 deletions
diff --git a/source/blender/blenkernel/BKE_material.h b/source/blender/blenkernel/BKE_material.h index 062658139af..890272aae64 100644 --- a/source/blender/blenkernel/BKE_material.h +++ b/source/blender/blenkernel/BKE_material.h @@ -79,7 +79,8 @@ enum { BKE_MAT_ASSIGN_OBJECT }; -struct Material *give_current_material(struct Object *ob, short act); +struct Material **give_current_material_p(struct Object *ob, short act); +struct Material *give_current_material(struct Object *ob, short act); void assign_material_id(struct Main *bmain, struct ID *id, struct Material *ma, short act); void assign_material(struct Main *bmain, struct Object *ob, struct Material *ma, short act, int assign_type); void assign_matarar(struct Main *bmain, struct Object *ob, struct Material ***matar, short totcol); diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c index 30fc02e94de..7e59d31571b 100644 --- a/source/blender/blenkernel/intern/material.c +++ b/source/blender/blenkernel/intern/material.c @@ -512,9 +512,9 @@ void BKE_material_clear_id(Main *bmain, ID *id, bool update_data) } } -Material *give_current_material(Object *ob, short act) +Material **give_current_material_p(Object *ob, short act) { - Material ***matarar, *ma; + Material ***matarar, **ma_p; const short *totcolp; if (ob == NULL) return NULL; @@ -534,7 +534,7 @@ Material *give_current_material(Object *ob, short act) } if (ob->matbits && ob->matbits[act - 1]) { /* in object */ - ma = ob->mat[act - 1]; + ma_p = &ob->mat[act - 1]; } else { /* in data */ @@ -545,12 +545,21 @@ Material *give_current_material(Object *ob, short act) matarar = give_matarar(ob); - if (matarar && *matarar) ma = (*matarar)[act - 1]; - else ma = NULL; - + if (matarar && *matarar) { + ma_p = &(*matarar)[act - 1]; + } + else { + ma_p = NULL; + } } - return ma; + return ma_p; +} + +Material *give_current_material(Object *ob, short act) +{ + Material **ma_p = give_current_material_p(ob, act); + return ma_p ? *ma_p : NULL; } MaterialGPencilStyle *BKE_material_gpencil_settings_get(Object *ob, short act) diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index c4effd3a523..6875c803c33 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -523,7 +523,6 @@ static int new_material_exec(bContext *C, wmOperator *UNUSED(op)) { Material *ma = CTX_data_pointer_get_type(C, "material", &RNA_Material).data; Main *bmain = CTX_data_main(C); - Object *ob = CTX_data_active_object(C); PointerRNA ptr, idptr; PropertyRNA *prop; @@ -532,6 +531,7 @@ static int new_material_exec(bContext *C, wmOperator *UNUSED(op)) ma = BKE_material_copy(bmain, ma); } else { + Object *ob = CTX_data_active_object(C); if ((!ob) || (ob->type != OB_GPENCIL)) { ma = BKE_material_add(bmain, DATA_("Material")); } @@ -546,6 +546,15 @@ static int new_material_exec(bContext *C, wmOperator *UNUSED(op)) UI_context_active_but_prop_get_templateID(C, &ptr, &prop); if (prop) { + if (RNA_struct_is_a(ptr.type, &RNA_Object)) { + /* Add slot follows user-preferences for creating new slots, + * RNA pointer assignment doesn't, see: T60014. */ + Object *ob = ptr.data; + if (give_current_material_p(ob, ob->actcol) == NULL) { + BKE_object_material_slot_add(bmain, ob); + } + } + /* when creating new ID blocks, use is already 1, but RNA * pointer use also increases user, so this compensates it */ id_us_min(&ma->id); |