[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [21989] branches/blender2.5/blender: 2.5: Materials and textures can now be assigned again

Brecht Van Lommel brecht at blender.org
Tue Jul 28 20:54:03 CEST 2009


Revision: 21989
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21989
Author:   blendix
Date:     2009-07-28 20:54:02 +0200 (Tue, 28 Jul 2009)

Log Message:
-----------
2.5: Materials and textures can now be assigned again
even if not slot for them is available.

Modified Paths:
--------------
    branches/blender2.5/blender/release/ui/buttons_material.py
    branches/blender2.5/blender/release/ui/buttons_texture.py
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_material.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c
    branches/blender2.5/blender/source/blender/makesrna/intern/rna_world.c

Modified: branches/blender2.5/blender/release/ui/buttons_material.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_material.py	2009-07-28 18:51:06 UTC (rev 21988)
+++ branches/blender2.5/blender/release/ui/buttons_material.py	2009-07-28 18:54:02 UTC (rev 21989)
@@ -52,10 +52,13 @@
 
 		split = layout.split(percentage=0.65)
 
-		if ob and slot:
-			split.template_ID(slot, "material", new="material.new")
+		if ob:
+			split.template_ID(ob, "active_material", new="material.new")
 			row = split.row()
-			row.itemR(slot, "link", expand=True)
+			if slot:
+				row.itemR(slot, "link", expand=True)
+			else:
+				row.itemL()
 		elif mat:
 			split.template_ID(space, "pin_id")
 			split.itemS()

Modified: branches/blender2.5/blender/release/ui/buttons_texture.py
===================================================================
--- branches/blender2.5/blender/release/ui/buttons_texture.py	2009-07-28 18:51:06 UTC (rev 21988)
+++ branches/blender2.5/blender/release/ui/buttons_texture.py	2009-07-28 18:54:02 UTC (rev 21989)
@@ -48,26 +48,26 @@
 		wo = context.world
 		br = context.brush
 		space = context.space_data
-		slot = context.texture_slot
 
-		if ma or la or wo or br:
+		if ma:
+			id = ma
+		elif la:
+			id = la
+		elif wo:
+			id = wo
+		elif br:
+			id = br
+		else:
+			id = None
+
+		if id:
 			row = layout.row()
-			if ma:
-				row.template_list(ma, "textures", ma, "active_texture_index", type="ICONS")
-			elif la:
-				row.template_list(la, "textures", la, "active_texture_index", type="ICONS")
-			elif wo:
-				row.template_list(wo, "textures", wo, "active_texture_index", type="ICONS")
-			elif br:
-				row.template_list(br, "textures", br, "active_texture_index", type="ICONS")
+			row.template_list(id, "textures", id, "active_texture_index", type="ICONS")
 
 		split = layout.split(percentage=0.65)
 
-		if ma or la or wo or br:
-			if slot:
-				split.template_ID(slot, "texture", new="texture.new")
-			else:
-				split.itemS()
+		if id:
+			split.template_ID(id, "active_texture", new="texture.new")
 		elif tex:
 			split.template_ID(space, "pin_id")
 
@@ -75,8 +75,6 @@
 		   (context.sculpt_object or context.vertex_paint_object or \
 		   context.weight_paint_object or context.texture_paint_object):
 			split.itemR(space, "brush_texture", text="Brush", toggle=True)
-		else:
-			split.itemS()
 		
 		layout.itemS()
 

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c	2009-07-28 18:51:06 UTC (rev 21988)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_brush.c	2009-07-28 18:54:02 UTC (rev 21989)
@@ -46,29 +46,32 @@
 
 static PointerRNA rna_Brush_active_texture_get(PointerRNA *ptr)
 {
-	Brush *brush= (Brush*)ptr->data;
-	return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, brush->mtex[(int)brush->texact]);
+	Brush *br= (Brush*)ptr->data;
+	Tex *tex;
+
+	tex= (br->mtex[(int)br->texact])? br->mtex[(int)br->texact]->tex: NULL;
+	return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
 }
 
-static void rna_Brush_active_texture_index_set(PointerRNA *ptr, int value)
+static void rna_Brush_active_texture_set(PointerRNA *ptr, PointerRNA value)
 {
-	Brush *brush= (Brush*)ptr->data;
-	int act= brush->texact;
+	Brush *br= (Brush*)ptr->data;
+	int act= br->texact;
 
-	if(value == act || value < 0 || value >= MAX_MTEX)
-		return;
+	if(br->mtex[act] && br->mtex[act]->tex)
+		id_us_min(&br->mtex[act]->tex->id);
 
-	/* auto create/free mtex on activate/deactive, so we can edit
-	 * the texture pointer in the buttons UI. */
-	if(brush->mtex[act] && !brush->mtex[act]->tex) {
-		MEM_freeN(brush->mtex[act]);
-		brush->mtex[act]= NULL;
+	if(value.data) {
+		if(!br->mtex[act])
+			br->mtex[act]= add_mtex();
+		
+		br->mtex[act]->tex= value.data;
+		id_us_plus(&br->mtex[act]->tex->id);
 	}
-
-	brush->texact= value;
-
-	if(!brush->mtex[value])
-		brush->mtex[value]= add_mtex();
+	else if(br->mtex[act]) {
+		MEM_freeN(br->mtex[act]);
+		br->mtex[act]= NULL;
+	}
 }
 
 static float rna_Brush_rotation_get(PointerRNA *ptr)
@@ -224,7 +227,8 @@
 	RNA_def_property_ui_text(prop, "Curve", "Editable falloff curve.");
 
 	/* texture */
-	rna_def_mtex_common(srna, "rna_Brush_mtex_begin", "rna_Brush_active_texture_get", "rna_Brush_active_texture_index_set", "TextureSlot");
+	rna_def_mtex_common(srna, "rna_Brush_mtex_begin", "rna_Brush_active_texture_get",
+		"rna_Brush_active_texture_set", "TextureSlot");
 
 	/* clone tool */
 	prop= RNA_def_property(srna, "clone_image", PROP_POINTER, PROP_NONE);

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c	2009-07-28 18:51:06 UTC (rev 21988)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_lamp.c	2009-07-28 18:54:02 UTC (rev 21989)
@@ -64,30 +64,33 @@
 static PointerRNA rna_Lamp_active_texture_get(PointerRNA *ptr)
 {
 	Lamp *la= (Lamp*)ptr->data;
-	return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, la->mtex[(int)la->texact]);
+	Tex *tex;
+
+	tex= (la->mtex[(int)la->texact])? la->mtex[(int)la->texact]->tex: NULL;
+	return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
 }
 
-static void rna_Lamp_active_texture_index_set(PointerRNA *ptr, int value)
+static void rna_Lamp_active_texture_set(PointerRNA *ptr, PointerRNA value)
 {
 	Lamp *la= (Lamp*)ptr->data;
 	int act= la->texact;
 
-	if(value == act || value < 0 || value >= MAX_MTEX)
-		return;
+	if(la->mtex[act] && la->mtex[act]->tex)
+		id_us_min(&la->mtex[act]->tex->id);
 
-	/* auto create/free mtex on activate/deactive, so we can edit
-	 * the texture pointer in the buttons UI. */
-	if(la->mtex[act] && !la->mtex[act]->tex) {
+	if(value.data) {
+		if(!la->mtex[act]) {
+			la->mtex[act]= add_mtex();
+			la->mtex[act]->texco= TEXCO_GLOB;
+		}
+		
+		la->mtex[act]->tex= value.data;
+		id_us_plus(&la->mtex[act]->tex->id);
+	}
+	else if(la->mtex[act]) {
 		MEM_freeN(la->mtex[act]);
 		la->mtex[act]= NULL;
 	}
-
-	la->texact= value;
-
-	if(!la->mtex[value]) {
-		la->mtex[value]= add_mtex();
-		la->mtex[value]->texco= TEXCO_GLOB;
-	}
 }
 
 static StructRNA* rna_Lamp_refine(struct PointerRNA *ptr)
@@ -349,7 +352,8 @@
 	RNA_def_property_update(prop, NC_LAMP|ND_LIGHTING, NULL);
 
 	/* textures */
-	rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get", "rna_Lamp_active_texture_index_set", "LampTextureSlot");
+	rna_def_mtex_common(srna, "rna_Lamp_mtex_begin", "rna_Lamp_active_texture_get",
+		"rna_Lamp_active_texture_set", "LampTextureSlot");
 }
 
 static void rna_def_lamp_falloff(StructRNA *srna)

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_material.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_material.c	2009-07-28 18:51:06 UTC (rev 21988)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_material.c	2009-07-28 18:54:02 UTC (rev 21989)
@@ -85,28 +85,31 @@
 static PointerRNA rna_Material_active_texture_get(PointerRNA *ptr)
 {
 	Material *ma= (Material*)ptr->data;
-	return rna_pointer_inherit_refine(ptr, &RNA_TextureSlot, ma->mtex[(int)ma->texact]);
+	Tex *tex;
+
+	tex= (ma->mtex[(int)ma->texact])? ma->mtex[(int)ma->texact]->tex: NULL;
+	return rna_pointer_inherit_refine(ptr, &RNA_Texture, tex);
 }
 
-static void rna_Material_active_texture_index_set(PointerRNA *ptr, int value)
+static void rna_Material_active_texture_set(PointerRNA *ptr, PointerRNA value)
 {
 	Material *ma= (Material*)ptr->data;
 	int act= ma->texact;
 
-	if(value == act || value < 0 || value >= MAX_MTEX)
-		return;
+	if(ma->mtex[act] && ma->mtex[act]->tex)
+		id_us_min(&ma->mtex[act]->tex->id);
 
-	/* auto create/free mtex on activate/deactive, so we can edit
-	 * the texture pointer in the buttons UI. */
-	if(ma->mtex[act] && !ma->mtex[act]->tex) {
+	if(value.data) {
+		if(!ma->mtex[act])
+			ma->mtex[act]= add_mtex();
+		
+		ma->mtex[act]->tex= value.data;
+		id_us_plus(&ma->mtex[act]->tex->id);
+	}
+	else if(ma->mtex[act]) {
 		MEM_freeN(ma->mtex[act]);
 		ma->mtex[act]= NULL;
 	}
-
-	ma->texact= value;
-
-	if(!ma->mtex[value])
-		ma->mtex[value]= add_mtex();
 }
 
 static void rna_MaterialStrand_start_size_range(PointerRNA *ptr, float *min, float *max)
@@ -1276,7 +1279,8 @@
 
 	/* common */
 	rna_def_animdata_common(srna);
-	rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get", "rna_Material_active_texture_index_set", "MaterialTextureSlot");
+	rna_def_mtex_common(srna, "rna_Material_mtex_begin", "rna_Material_active_texture_get",
+		"rna_Material_active_texture_set", "MaterialTextureSlot");
 	
 	rna_def_material_colors(srna);
 	rna_def_material_diffuse(srna);
@@ -1302,14 +1306,13 @@
 	RNA_def_property_ui_text(prop, "Textures", "Texture slots defining the mapping and influence of textures.");
 
 	prop= RNA_def_property(srna, "active_texture", PROP_POINTER, PROP_NONE);
-	RNA_def_property_clear_flag(prop, PROP_EDITABLE);
-	RNA_def_property_struct_type(prop, structname);
-	RNA_def_property_pointer_funcs(prop, activeget, NULL, NULL);
+	RNA_def_property_struct_type(prop, "Texture");
+	RNA_def_property_flag(prop, PROP_EDITABLE);
+	RNA_def_property_pointer_funcs(prop, activeget, activeset, NULL);
 	RNA_def_property_ui_text(prop, "Active Texture", "Active texture slot being displayed.");
 
 	prop= RNA_def_property(srna, "active_texture_index", PROP_INT, PROP_UNSIGNED);
 	RNA_def_property_int_sdna(prop, NULL, "texact");
-	RNA_def_property_int_funcs(prop, NULL, activeset, NULL);
 	RNA_def_property_range(prop, 0, MAX_MTEX-1);
 	RNA_def_property_ui_text(prop, "Active Texture Index", "Index of active texture slot.");
 }

Modified: branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c
===================================================================
--- branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c	2009-07-28 18:51:06 UTC (rev 21988)
+++ branches/blender2.5/blender/source/blender/makesrna/intern/rna_object.c	2009-07-28 18:54:02 UTC (rev 21989)
@@ -377,9 +377,19 @@
 static PointerRNA rna_Object_active_material_get(PointerRNA *ptr)
 {
 	Object *ob= (Object*)ptr->id.data;

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list