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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to