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:
authorCampbell Barton <ideasman42@gmail.com>2019-01-03 04:23:17 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-01-03 04:25:37 +0300
commitba9e10fd6a5b7052d25f34343b7b723d25a94490 (patch)
treef9b45841dbbcc40c9c2e0b40f9d69d572589adc5
parent11f2c65128dc9bdead56003df7c282b6e091cbd1 (diff)
parent847b21ee08e5a30a2fe35ede4c5b3a73af404af7 (diff)
Merge branch 'blender2.7'
-rw-r--r--source/blender/blenkernel/BKE_material.h3
-rw-r--r--source/blender/blenkernel/intern/material.c23
-rw-r--r--source/blender/editors/render/render_shading.c11
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);