diff --git a/source/blender/src/buttons_object.c b/source/blender/src/buttons_object.c index 92161b2951d..0d2f142e26d 100644 --- a/source/blender/src/buttons_object.c +++ b/source/blender/src/buttons_object.c @@ -1262,9 +1262,9 @@ static void editing_panel_deflectors(Object *ob) if(ob->pd) { uiBlockBeginAlign(block); - uiDefButI(block, ROW, REDRAWVIEW3D, "None", 10,160,200,20, &ob->pd->forcefield, 1.0, 0, 0, 0, "No force"); - uiDefButI(block, ROW, REDRAWVIEW3D, "Force field", 10,140,200,20, &ob->pd->forcefield, 1.0, PFIELD_FORCE, 0, 0, "Object center attracts or repels particles"); - uiDefButI(block, ROW, REDRAWVIEW3D, "Vortex field", 10,120,200,20, &ob->pd->forcefield, 1.0, PFIELD_VORTEX, 0, 0, "Particles swirl around Z-axis of the object"); + uiDefButS(block, ROW, REDRAWVIEW3D, "None", 10,160,200,20, &ob->pd->forcefield, 1.0, 0, 0, 0, "No force"); + uiDefButS(block, ROW, REDRAWVIEW3D, "Force field", 10,140,200,20, &ob->pd->forcefield, 1.0, PFIELD_FORCE, 0, 0, "Object center attracts or repels particles"); + uiDefButS(block, ROW, REDRAWVIEW3D, "Vortex field", 10,120,200,20, &ob->pd->forcefield, 1.0, PFIELD_VORTEX, 0, 0, "Particles swirl around Z-axis of the object"); uiDefButF(block, NUM, B_DIFF, "Strength: ", 10,100,200,20, &ob->pd->f_strength, -1000, 1000, 1000, 0, "Strength of force field"); uiDefButF(block, NUM, REDRAWVIEW3D, "Fall-off: ", 10,80,200,20, &ob->pd->f_power, 0, 10, 100, 0, "Falloff power (real gravitational fallof = 2)"); diff --git a/source/blender/src/editipo.c b/source/blender/src/editipo.c index 0e620a534ee..8381fc28806 100644 --- a/source/blender/src/editipo.c +++ b/source/blender/src/editipo.c @@ -68,6 +68,7 @@ #include "DNA_sound_types.h" #include "DNA_camera_types.h" #include "DNA_material_types.h" +#include "DNA_texture_types.h" #include "DNA_key_types.h" #include "DNA_screen_types.h" #include "DNA_scene_types.h" @@ -83,6 +84,7 @@ #include "BKE_action.h" #include "BKE_anim.h" #include "BKE_material.h" +#include "BKE_texture.h" #include "BKE_ipo.h" #include "BKE_key.h" #include "BKE_ika.h" @@ -137,360 +139,157 @@ extern int cam_ar[]; extern int snd_ar[]; extern int ac_ar[]; extern int co_ar[]; +extern int te_ar[]; -void getname_ac_ei(int nr, char *str) -{ +char *ob_ic_names[OB_TOTNAM] = { "LocX", "LocY", "LocZ", "dLocX", "dLocY", "dLocZ", + "RotX", "RotY", "RotZ", "dRotX", "dRotY", "dRotZ", + "SizeX", "SizeY", "SizeZ", "dSizeX", "dSizeY", "dSizeZ", + "Layer", "Time", "ColR", "ColG", "ColB", "ColA", + "FStreng", "FFall", "Damping", "RDamp", "Perm" }; +char *obeff_ic_names[3] = { "EffX", "EffY", "EffZ" }; +char *co_ic_names[CO_TOTNAM] = { "Inf" }; +char *mtex_ic_names[TEX_TOTNAM] = { "OfsX", "OfsY", "OfsZ", "SizeX", "SizeY", "SizeZ", + "texR", "texG", "texB", "DefVar", "Col", "Nor", "Var", + "Disp" }; +char *tex_ic_names[TE_TOTNAM] = { "NSize", "NDepth", "NType", "Turb", "Vnw1", "Vnw2", + "Vnw3", "Vnw4", "MinkMExp", "DistM", "ColT", "iScale", + "DistA", "MgType", "MgH", "Lacu", "Oct", "MgOff", + "MgGain", "NBase1", "NBase2" }; +char *ma_ic_names[MA_TOTNAM] = { "R", "G", "B", "SpecR", "SpecG", "SpecB", "MirR", + "MirG", "MirB", "Ref", "Alpha", "Emit", "Amb", "Spec", + "Hard", "SpTra", "Ior", "Mode", "HaSize", "Translu", + "RayMir", "FresMir", "FresMirI", "FresTra", "FresTraI", + "TraGlow" }; +char *seq_ic_names[SEQ_TOTNAM] = { "Fac" }; +char *cu_ic_names[CU_TOTNAM] = { "Speed" }; +char *key_ic_names[KEY_TOTNAM] = { "Speed", "Key 1", "Key 2", "Key 3", "Key 4", "Key 5", + "Key 6", "Key 7", "Key 8", "Key 9", "Key 10", + "Key 11", "Key 12", "Key 13", "Key 14", "Key 15", + "Key 16", "Key 17", "Key 18", "Key 19", "Key 20", + "Key 21", "Key 22", "Key 23", "Key 24", "Key 25", + "Key 26", "Key 27", "Key 28", "Key 29", "Key 30", + "Key 31" }; +char *wo_ic_names[WO_TOTNAM] = { "HorR", "HorG" "HorB", "ZenR", "ZenG", "ZenB", "Expos", + "Misi", "MisDi", "MisSta", "MisHi", "StarR", "StarB", + "StarG", "StarDi", "StarSi" }; +char *la_ic_names[LA_TOTNAM] = { "Energ", "R", "G", "B", "Dist", "SpoSi", "SpoBl", + "Quad1", "Quad2", "HaInt" }; +char *cam_ic_names[CAM_TOTNAM] = { "Lens", "ClSta", "ClEnd" }; +char *snd_ic_names[SND_TOTNAM] = { "Vol", "Pitch", "Pan", "Atten" }; +char *ac_ic_names[AC_TOTNAM] = {"LocX", "LocY", "LocZ", "SizeX", "SizeY", + "SizeZ", "QuatX", "QuatY", "QuatZ", "QuatW"}; +char *ic_name_empty[1] ={ "" }; + +char *getname_ac_ei(int nr) { switch(nr) { case AC_LOC_X: - strcpy(str, "LocX"); break; case AC_LOC_Y: - strcpy(str, "LocY"); break; case AC_LOC_Z: - strcpy(str, "LocZ"); break; + return ac_ic_names[nr-1]; case AC_SIZE_X: - strcpy(str, "SizeX"); break; case AC_SIZE_Y: - strcpy(str, "SizeY"); break; case AC_SIZE_Z: - strcpy(str, "SizeZ"); break; + return ac_ic_names[nr-10]; case AC_QUAT_X: - strcpy(str, "QuatX"); break; case AC_QUAT_Y: - strcpy(str, "QuatY"); break; case AC_QUAT_Z: - strcpy(str, "QuatZ"); break; case AC_QUAT_W: - strcpy(str, "QuatW"); break; + return ac_ic_names[nr-19]; default: - str[0]= 0; - } + return ic_name_empty[0]; /* empty */ + } } -void getname_co_ei(int nr, char *str) +char *getname_co_ei(int nr) { switch(nr){ case CO_ENFORCE: - strcpy(str, "Inf"); break; + return co_ic_names[nr-1]; } + return ic_name_empty[0]; } -void getname_ob_ei(int nr, char *str, int colipo) +char *getname_ob_ei(int nr, int colipo) { - switch(nr) { - case OB_LOC_X: - strcpy(str, "LocX"); break; - case OB_LOC_Y: - strcpy(str, "LocY"); break; - case OB_LOC_Z: - strcpy(str, "LocZ"); break; - case OB_DLOC_X: - strcpy(str, "dLocX"); break; - case OB_DLOC_Y: - strcpy(str, "dLocY"); break; - case OB_DLOC_Z: - strcpy(str, "dLocZ"); break; + if(!colipo && (nr>=OB_EFF_X && nr <=OB_EFF_Z)) { + return obeff_ic_names[nr-OB_EFF_X]; + } else { + if(nr>=OB_LOC_X && nr <= OB_PD_PERM) return ob_ic_names[nr-1]; + } + return ic_name_empty[0]; +} - case OB_ROT_X: - strcpy(str, "RotX"); break; - case OB_ROT_Y: - strcpy(str, "RotY"); break; - case OB_ROT_Z: - strcpy(str, "RotZ"); break; - case OB_DROT_X: - strcpy(str, "dRotX"); break; - case OB_DROT_Y: - strcpy(str, "dRotY"); break; - case OB_DROT_Z: - strcpy(str, "dRotZ"); break; - - case OB_SIZE_X: - strcpy(str, "SizeX"); break; - case OB_SIZE_Y: - strcpy(str, "SizeY"); break; - case OB_SIZE_Z: - strcpy(str, "SizeZ"); break; - case OB_DSIZE_X: - strcpy(str, "dSizeX"); break; - case OB_DSIZE_Y: - strcpy(str, "dSizeY"); break; - case OB_DSIZE_Z: - strcpy(str, "dSizeZ"); break; +char *getname_tex_ei(int nr) +{ + if(nr>=TE_NSIZE && nr<=TE_N_BAS2) return tex_ic_names[nr-1]; + + return ic_name_empty[0]; +} + +char *getname_mtex_ei(int nr) +{ + if(nr>=MAP_OFS_X && nr<=MAP_DISP) return mtex_ic_names[nr-1]; - case OB_LAY: - strcpy(str, "Layer"); break; - - case OB_TIME: - strcpy(str, "Time"); break; - case OB_EFF_X: - if(colipo) strcpy(str, "ColR"); - else strcpy(str, "EffX"); - break; - case OB_EFF_Y: - if(colipo) strcpy(str, "ColG"); - else strcpy(str, "EffY"); - break; - case OB_EFF_Z: - if(colipo) strcpy(str, "ColB"); - else strcpy(str, "EffZ"); - break; - case OB_COL_A: - strcpy(str, "ColA"); - break; - case OB_PD_FSTR: - strcpy(str, "FStreng"); - break; - case OB_PD_FFALL: - strcpy(str, "FFall"); - break; - case OB_PD_SDAMP: - strcpy(str, "Damping"); - break; - case OB_PD_RDAMP: - strcpy(str, "RDamp"); - break; - case OB_PD_PERM: - strcpy(str, "Perm"); - break; - default: - str[0]= 0; - } + return ic_name_empty[0]; } -void getname_tex_ei(int nr, char *str) +char *getname_mat_ei(int nr) { - switch(nr) { - case MAP_OFS_X: - strcpy(str, "OfsX"); break; - case MAP_OFS_Y: - strcpy(str, "OfsY"); break; - case MAP_OFS_Z: - strcpy(str, "OfsZ"); break; - case MAP_SIZE_X: - strcpy(str, "SizeX"); break; - case MAP_SIZE_Y: - strcpy(str, "SizeY"); break; - case MAP_SIZE_Z: - strcpy(str, "SizeZ"); break; - case MAP_R: - strcpy(str, "texR"); break; - case MAP_G: - strcpy(str, "texG"); break; - case MAP_B: - strcpy(str, "texB"); break; - case MAP_DVAR: - strcpy(str, "DefVar"); break; - case MAP_COLF: - strcpy(str, "Col"); break; - case MAP_NORF: - strcpy(str, "Nor"); break; - case MAP_VARF: - strcpy(str, "Var"); break; - case MAP_DISP: - strcpy(str, "Disp"); break; - default: - str[0]= 0; - } -} - -void getname_mat_ei(int nr, char *str) -{ - if(nr>=MA_MAP1) getname_tex_ei((nr & (MA_MAP1-1)), str); + if(nr>=MA_MAP1) return getname_mtex_ei((nr & (MA_MAP1-1))); else { - switch(nr) { - case MA_COL_R: - strcpy(str, "R"); break; - case MA_COL_G: - strcpy(str, "G"); break; - case MA_COL_B: - strcpy(str, "B"); break; - case MA_SPEC_R: - strcpy(str, "SpecR"); break; - case MA_SPEC_G: - strcpy(str, "SpecG"); break; - case MA_SPEC_B: - strcpy(str, "SpecB"); break; - case MA_MIR_R: - strcpy(str, "MirR"); break; - case MA_MIR_G: - strcpy(str, "MirG"); break; - case MA_MIR_B: - strcpy(str, "MirB"); break; - case MA_REF: - strcpy(str, "Ref"); break; - case MA_ALPHA: - strcpy(str, "Alpha"); break; - case MA_EMIT: - strcpy(str, "Emit"); break; - case MA_AMB: - strcpy(str, "Amb"); break; - case MA_SPEC: - strcpy(str, "Spec"); break; - case MA_HARD: - strcpy(str, "Hard"); break; - case MA_SPTR: - strcpy(str, "SpTra"); break; - case MA_IOR: - strcpy(str, "Ior"); break; - case MA_MODE: - strcpy(str, "Mode"); break; - case MA_HASIZE: - strcpy(str, "HaSize"); break; - case MA_TRANSLU: - strcpy(str, "Translu"); break; - case MA_RAYM: - strcpy(str, "RayMir"); break; - case MA_FRESMIR: - strcpy(str, "FresMir"); break; - case MA_FRESMIRI: - strcpy(str, "FresMirI"); break; - case MA_FRESTRA: - strcpy(str, "FresTra"); break; - case MA_FRESTRAI: - strcpy(str, "FresTraI"); break; - case MA_ADD: - strcpy(str, "TraGlow"); break; - default: - str[0]= 0; - } + if(nr>=MA_COL_R && nr<=MA_ADD) return ma_ic_names[nr-1]; } + return ic_name_empty[0]; } -void getname_world_ei(int nr, char *str) +char *getname_world_ei(int nr) { - if(nr>=MA_MAP1) getname_tex_ei((nr & (MA_MAP1-1)), str); + if(nr>=MA_MAP1) return getname_mtex_ei((nr & (MA_MAP1-1))); else { - switch(nr) { - case WO_HOR_R: - strcpy(str, "HorR"); break; - case WO_HOR_G: - strcpy(str, "HorG"); break; - case WO_HOR_B: - strcpy(str, "HorB"); break; - case WO_ZEN_R: - strcpy(str, "ZenR"); break; - case WO_ZEN_G: - strcpy(str, "ZenG"); break; - case WO_ZEN_B: - strcpy(str, "ZenB"); break; - - case WO_EXPOS: - strcpy(str, "Expos"); break; - - case WO_MISI: - strcpy(str, "Misi"); break; - case WO_MISTDI: - strcpy(str, "MisDi"); break; - case WO_MISTSTA: - strcpy(str, "MisSta"); break; - case WO_MISTHI: - strcpy(str, "MisHi"); break; - - case WO_STAR_R: - strcpy(str, "StarR"); break; - case WO_STAR_G: - strcpy(str, "StarB"); break; - case WO_STAR_B: - strcpy(str, "StarG"); break; - - case WO_STARDIST: - strcpy(str, "StarDi"); break; - case WO_STARSIZE: - strcpy(str, "StarSi"); break; - default: - str[0]= 0; - } + if(nr>=WO_HOR_R && nr<=WO_STARSIZE) return wo_ic_names[nr-1]; } + return ic_name_empty[0]; } -void getname_seq_ei(int nr, char *str) +char *getname_seq_ei(int nr) { - switch(nr) { - case SEQ_FAC1: - strcpy(str, "Fac"); break; - default: - str[0]= 0; - } + if(nr == SEQ_FAC1) return seq_ic_names[nr-1]; + return ic_name_empty[0]; } -void getname_cu_ei(int nr, char *str) +char *getname_cu_ei(int nr) { - - switch(nr) { - case CU_SPEED: - strcpy(str, "Speed"); break; - default: - str[0]= 0; - } + if(nr==CU_SPEED) return cu_ic_names[nr-1]; + return ic_name_empty[0]; } -void getname_key_ei(int nr, char *str) +char *getname_key_ei(int nr) { - if(nr==KEY_SPEED) strcpy(str, "Speed"); - else sprintf(str, "Key %d", nr); + if(nr>=KEY_SPEED && nr<=31) return key_ic_names[nr]; + return ic_name_empty[0]; } -void getname_la_ei(int nr, char *str) +char *getname_la_ei(int nr) { - if(nr>=MA_MAP1) getname_tex_ei((nr & (MA_MAP1-1)), str); + if(nr>=MA_MAP1) return getname_mtex_ei((nr & (MA_MAP1-1))); else { - switch(nr) { - case LA_ENERGY: - strcpy(str, "Energ"); break; - case LA_COL_R: - strcpy(str, "R"); break; - case LA_COL_G: - strcpy(str, "G"); break; - case LA_COL_B: - strcpy(str, "B"); break; - case LA_DIST: - strcpy(str, "Dist"); break; - case LA_SPOTSI: - strcpy(str, "SpoSi"); break; - case LA_SPOTBL: - strcpy(str, "SpoBl"); break; - case LA_QUAD1: - strcpy(str, "Quad1"); break; - case LA_QUAD2: - strcpy(str, "Quad2"); break; - case LA_HALOINT: - strcpy(str, "HaInt"); break; - default: - str[0]= 0; - } + if(nr>=LA_ENERGY && nr<=LA_HALOINT) return la_ic_names[nr-1]; } + return ic_name_empty[0]; } -void getname_cam_ei(int nr, char *str) +char *getname_cam_ei(int nr) { - switch(nr) { - case CAM_LENS: - strcpy(str, "Lens"); break; - case CAM_STA: - strcpy(str, "ClSta"); break; - case CAM_END: - strcpy(str, "ClEnd"); break; - default: - str[0]= 0; - } + if(nr>=CAM_LENS && nr<=CAM_END) return cam_ic_names[nr-1]; + return ic_name_empty[0]; } -void getname_snd_ei(int nr, char *str) +char *getname_snd_ei(int nr) { - switch(nr) { - case SND_VOLUME: - strcpy(str, "Vol"); break; - case SND_PITCH: - strcpy(str, "Pitch"); break; - case SND_PANNING: - strcpy(str, "Pan"); break; - case SND_ATTEN: - strcpy(str, "Atten"); break; - default: - str[0]= 0; - } + if(nr>=SND_VOLUME && nr<=SND_ATTEN) return snd_ic_names[nr-1]; + return ic_name_empty[0]; } - IpoCurve *find_ipocurve(Ipo *ipo, int adrcode) { if(ipo) { @@ -666,6 +465,7 @@ void editipo_changed(SpaceIpo *si, int doredraw) } else if(si->blocktype==ID_MA) allqueue(REDRAWBUTSSHADING, 0); + else if(si->blocktype==ID_TE) allqueue(REDRAWBUTSSHADING, 0); else if(si->blocktype==ID_WO) allqueue(REDRAWBUTSSHADING, 0); else if(si->blocktype==ID_LA) allqueue(REDRAWBUTSSHADING, 0); // else if(si->blocktype==ID_SO) allqueue(REDRAWBUTSSOUND, 0); @@ -780,6 +580,13 @@ Ipo *get_ipo_to_edit(ID **from) return ob->ipo; } } + else if(G.sipo->blocktype==ID_TE) { + if(ob) { + Tex *tex= give_current_texture(ob, ob->actcol); + *from= (ID *)tex; + if(tex) return tex->ipo; + } + } else if(G.sipo->blocktype==ID_MA) { if(ob) { Material *ma= give_current_material(ob, ob->actcol); @@ -847,6 +654,7 @@ void make_ob_editipo(Object *ob, SpaceIpo *si) { EditIpo *ei; int a, len, colipo=0; + char *name; if(ob->type==OB_MESH) colipo= 1; @@ -855,7 +663,8 @@ void make_ob_editipo(Object *ob, SpaceIpo *si) si->totipo= OB_TOTIPO; for(a=0; aname, colipo); + name = getname_ob_ei(ob_ar[a], colipo); + strcpy(ei->name, name); ei->adrcode= ob_ar[a]; if ELEM6(ei->adrcode, OB_ROT_X, OB_ROT_Y, OB_ROT_Z, OB_DROT_X, OB_DROT_Y, OB_DROT_Z) ei->disptype= IPO_DISPDEGR; @@ -887,6 +696,7 @@ void make_seq_editipo(SpaceIpo *si) { EditIpo *ei; int a; + char *name; ei= si->editipo= MEM_callocN(SEQ_TOTIPO*sizeof(EditIpo), "editipo"); @@ -894,7 +704,8 @@ void make_seq_editipo(SpaceIpo *si) for(a=0; aname); + name = getname_seq_ei(seq_ar[a]); + strcpy(ei->name, name); ei->adrcode= seq_ar[a]; ei->col= ipo_rainbow(a, SEQ_TOTIPO); @@ -913,6 +724,7 @@ void make_cu_editipo(SpaceIpo *si) { EditIpo *ei; int a; + char *name; ei= si->editipo= MEM_callocN(CU_TOTIPO*sizeof(EditIpo), "editipo"); @@ -920,7 +732,8 @@ void make_cu_editipo(SpaceIpo *si) for(a=0; aname); + name = getname_cu_ei(cu_ar[a]); + strcpy(ei->name, name); ei->adrcode= cu_ar[a]; ei->col= ipo_rainbow(a, CU_TOTIPO); @@ -941,6 +754,7 @@ void make_key_editipo(SpaceIpo *si) KeyBlock *kb=NULL; EditIpo *ei; int a; + char *name; ei= si->editipo= MEM_callocN(KEY_TOTIPO*sizeof(EditIpo), "editipo"); @@ -951,7 +765,10 @@ void make_key_editipo(SpaceIpo *si) for(a=0; aname[0] != 0) strncpy(ei->name, kb->name, 32); // length both same - else getname_key_ei(key_ar[a], ei->name); + else { + name = getname_key_ei(key_ar[a]); + strcpy(ei->name, name); + } ei->adrcode= key_ar[a]; ei->col= ipo_rainbow(a, KEY_TOTIPO); @@ -993,6 +810,7 @@ void make_mat_editipo(SpaceIpo *si) { EditIpo *ei; int a, len; + char *name; if(si->from==0) return; @@ -1001,7 +819,8 @@ void make_mat_editipo(SpaceIpo *si) si->totipo= MA_TOTIPO; for(a=0; aname); + name = getname_mat_ei(ma_ar[a]); + strcpy(ei->name, name); ei->adrcode= ma_ar[a]; if(ei->adrcode & MA_MAP1) { @@ -1030,10 +849,39 @@ void make_mat_editipo(SpaceIpo *si) } } +void make_texture_editipo(SpaceIpo *si) +{ + EditIpo *ei; + int a; + char *name; + + if(si->from==0) return; + + ei= si->editipo= MEM_callocN(TE_TOTIPO*sizeof(EditIpo), "editipo"); + + si->totipo= TE_TOTIPO; + + for(a=0; aname, name); + ei->adrcode= te_ar[a]; + + ei->col= ipo_rainbow(a, TE_TOTIPO); + + ei->icu= find_ipocurve(si->ipo, ei->adrcode); + if(ei->icu) { + ei->flag= ei->icu->flag; + } + + ei++; + } +} + void make_world_editipo(SpaceIpo *si) { EditIpo *ei; int a, len; + char *name; if(si->from==0) return; @@ -1042,7 +890,8 @@ void make_world_editipo(SpaceIpo *si) si->totipo= WO_TOTIPO; for(a=0; aname); + name = getname_world_ei(wo_ar[a]); + strcpy(ei->name, name); ei->adrcode= wo_ar[a]; if(ei->adrcode & MA_MAP1) { @@ -1075,6 +924,7 @@ void make_lamp_editipo(SpaceIpo *si) { EditIpo *ei; int a; + char *name; ei= si->editipo= MEM_callocN(LA_TOTIPO*sizeof(EditIpo), "editipo"); @@ -1082,7 +932,8 @@ void make_lamp_editipo(SpaceIpo *si) for(a=0; aname); + name = getname_la_ei(la_ar[a]); + strcpy(ei->name, name); ei->adrcode= la_ar[a]; if(ei->adrcode & MA_MAP1) { @@ -1105,6 +956,7 @@ void make_camera_editipo(SpaceIpo *si) { EditIpo *ei; int a; + char *name; ei= si->editipo= MEM_callocN(CAM_TOTIPO*sizeof(EditIpo), "editipo"); @@ -1112,7 +964,8 @@ void make_camera_editipo(SpaceIpo *si) for(a=0; aname); + name = getname_cam_ei(cam_ar[a]); + strcpy(ei->name, name); ei->adrcode= cam_ar[a]; ei->col= ipo_rainbow(a, CAM_TOTIPO); @@ -1130,11 +983,13 @@ int make_constraint_editipo(Ipo *ipo, EditIpo **si) { EditIpo *ei; int a; + char *name; ei= *si= MEM_callocN(CO_TOTIPO*sizeof(EditIpo), "editipo"); for(a=0; aname); + name = getname_co_ei(co_ar[a]); + strcpy(ei->name, name); ei->adrcode= co_ar[a]; ei->col= ipo_rainbow(a, CO_TOTIPO); @@ -1153,11 +1008,13 @@ int make_action_editipo(Ipo *ipo, EditIpo **si) { EditIpo *ei; int a; + char *name; ei= *si= MEM_callocN(AC_TOTIPO*sizeof(EditIpo), "editipo"); for(a=0; aname); + name = getname_ac_ei(ac_ar[a]); + strcpy(ei->name, name); ei->adrcode= ac_ar[a]; ei->col= ipo_rainbow(a, AC_TOTIPO); @@ -1177,6 +1034,7 @@ void make_sound_editipo(SpaceIpo *si) { EditIpo *ei; int a; + char *name; ei= si->editipo= MEM_callocN(SND_TOTIPO*sizeof(EditIpo), "editipo"); @@ -1184,7 +1042,8 @@ void make_sound_editipo(SpaceIpo *si) for(a=0; aname); + name = getname_snd_ei(snd_ar[a]); + strcpy(ei->name, name); ei->adrcode= snd_ar[a]; ei->col= ipo_rainbow(a, SND_TOTIPO); @@ -1253,6 +1112,12 @@ void make_editipo() make_lamp_editipo(G.sipo); } } + else if(G.sipo->blocktype==ID_TE) { + if (ob) { + ob->ipowin= ID_TE; + make_texture_editipo(G.sipo); + } + } else if(G.sipo->blocktype==ID_CA) { if (ob) { ob->ipowin= ID_CA; @@ -1319,6 +1184,12 @@ void make_editipo() G.v2d->cur.ymin= (float)-0.1; G.v2d->cur.ymax= (float)+1.1; } + else if(G.sipo->blocktype==ID_TE) { + G.v2d->cur.xmin= (float)-0.1; + G.v2d->cur.xmax= EFRA; + G.v2d->cur.ymin= (float)-0.1; + G.v2d->cur.ymax= (float)+1.1; + } else if(G.sipo->blocktype==ID_SEQ) { G.v2d->cur.xmin= -5.0; G.v2d->cur.xmax= 105.0; @@ -1903,6 +1774,7 @@ Ipo *get_ipo(ID *from, short type, int make) { Object *ob; Material *ma; + Tex *tex; Curve *cu; Sequence *seq; Key *key; @@ -1944,7 +1816,13 @@ Ipo *get_ipo(ID *from, short type, int make) if(make && ipo==0) ipo= ma->ipo= add_ipo("MatIpo", ID_MA); } - + else if( type==ID_TE) { + tex= (Tex *)from; + if(tex->id.lib) return 0; + ipo= tex->ipo; + + if(make && ipo==0) ipo= tex->ipo= add_ipo("TexIpo", ID_TE); + } else if( type==ID_SEQ) { seq= (Sequence *)from; diff --git a/source/blender/src/header_ipo.c b/source/blender/src/header_ipo.c index a51bae9d557..812ffcdda2f 100644 --- a/source/blender/src/header_ipo.c +++ b/source/blender/src/header_ipo.c @@ -71,6 +71,7 @@ #include "BKE_global.h" #include "BKE_main.h" #include "BKE_material.h" +#include "BKE_texture.h" #include "BKE_utildefines.h" #include "BLI_blenlib.h" #include "BSE_drawipo.h" @@ -624,6 +625,11 @@ static char *ipo_modeselect_pup(void) strcat(string,tmpstr); } + if(OBACT && give_current_texture(OBACT, OBACT->actcol)) { + sprintf(tmpstr,formatstring,"Texture",ID_TE, ICON_TEXTURE); + strcat(string,tmpstr); + } + if(OBACT){ if ELEM4(OBACT->type, OB_MESH, OB_CURVE, OB_SURF, OB_LATTICE) { sprintf(tmpstr,formatstring,"Vertex",ID_KE, ICON_EDIT); @@ -858,6 +864,8 @@ void ipo_buttons(void) icon = ICON_CONSTRAINT; else if (G.sipo->blocktype == ID_SEQ) icon = ICON_SEQUENCE; + else if(G.sipo->blocktype == ID_TE) + icon = ICON_TEXTURE; uiDefIconTextButS(block, MENU, B_IPOMAIN, icon, ipo_modeselect_pup(), xco,0,100,20, &(G.sipo->blocktype), 0, 0, 0, 0, "Display IPO type"); diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c index fb933c41d22..0e930263a3b 100644 --- a/source/blender/src/headerbuttons.c +++ b/source/blender/src/headerbuttons.c @@ -1040,6 +1040,7 @@ void do_global_buttons(unsigned short event) idtest= (ID *)add_ipo("ObIpo", nr); } else if(nr==ID_MA) idtest= (ID *)add_ipo("MatIpo", nr); + else if(nr==ID_TE) idtest= (ID *)add_ipo("TexIpo", nr); else if(nr==ID_SEQ) idtest= (ID *)add_ipo("MatSeq", nr); else if(nr==ID_CU) idtest= (ID *)add_ipo("CuIpo", nr); else if(nr==ID_KE) idtest= (ID *)add_ipo("KeyIpo", nr); @@ -1084,6 +1085,11 @@ void do_global_buttons(unsigned short event) id_us_plus(idtest); allqueue(REDRAWBUTSSHADING, 0); } + else if(ipo->blocktype==ID_TE) { + ( (Tex *)from)->ipo= ipo; + id_us_plus(idtest); + allqueue(REDRAWBUTSSHADING, 0); + } else if(ipo->blocktype==ID_SEQ) { seq= (Sequence *)from; if((seq->type & SEQ_EFFECT)||(seq->type == SEQ_SOUND)) { @@ -1142,6 +1148,7 @@ void do_global_buttons(unsigned short event) if(ipo->blocktype==ID_OB) ( (Object *)from)->ipo= 0; else if(ipo->blocktype==ID_MA) ( (Material *)from)->ipo= 0; + else if(ipo->blocktype==ID_TE) ( (Tex *)from)->ipo= 0; else if(ipo->blocktype==ID_SEQ) ( (Sequence *)from)->ipo= 0; else if(ipo->blocktype==ID_CU) ( (Curve *)from)->ipo= 0; else if(ipo->blocktype==ID_KE) ( (Key *)from)->ipo= 0; @@ -1949,6 +1956,7 @@ void do_global_buttons2(short event) if(okee("Single user")) { if(ipo->blocktype==ID_OB) ((Object *)idfrom)->ipo= copy_ipo(ipo); else if(ipo->blocktype==ID_MA) ((Material *)idfrom)->ipo= copy_ipo(ipo); + else if(ipo->blocktype==ID_TE) ((Tex *)idfrom)->ipo= copy_ipo(ipo); else if(ipo->blocktype==ID_SEQ) ((Sequence *)idfrom)->ipo= copy_ipo(ipo); else if(ipo->blocktype==ID_CU) ((Curve *)idfrom)->ipo= copy_ipo(ipo); else if(ipo->blocktype==ID_KE) ((Key *)idfrom)->ipo= copy_ipo(ipo); diff --git a/source/blender/src/space.c b/source/blender/src/space.c index 0f80a21c79a..6944de43c8b 100644 --- a/source/blender/src/space.c +++ b/source/blender/src/space.c @@ -154,7 +154,6 @@ extern void StartKetsjiShell(ScrArea *area, char* startscenename, struct Main* m */ void space_mipmap_button_function(int event); -unsigned short convert_for_nonumpad(unsigned short event); void free_soundspace(SpaceSound *ssound); /* *************************************** */ @@ -1679,7 +1678,7 @@ void winqreadipospace(ScrArea *sa, void *spacedata, BWinEvent *evt) switch(event) { case UI_BUT_EVENT: /* note: bad bad code, will be cleaned! is because event queues are all shattered */ - if(val>0 && val < 51) do_ipowin_buts(val-1); + if(val>0 && val < 65) do_ipowin_buts(val-1); else do_ipobuts(val); break;