aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra/newview
diff options
context:
space:
mode:
authorArmin Weatherwax2011-01-29 15:50:28 +0100
committerArmin Weatherwax2011-01-29 17:31:32 +0100
commit76c8494525b8e2b17bbe61f0bde61645b825bb66 (patch)
treec19042985edbe2f7d278fe6e8787d61adfbfcf2f /linden/indra/newview
parentAdd an UI for Display name settings to prefs general, make the setting more i... (diff)
downloadmeta-impy-76c8494525b8e2b17bbe61f0bde61645b825bb66.zip
meta-impy-76c8494525b8e2b17bbe61f0bde61645b825bb66.tar.gz
meta-impy-76c8494525b8e2b17bbe61f0bde61645b825bb66.tar.bz2
meta-impy-76c8494525b8e2b17bbe61f0bde61645b825bb66.tar.xz
Update: Henri Beauchamp: Port of SG-2.0 alpha and tattoo layers v6->v9
issue tattoo tinting does not work
Diffstat (limited to 'linden/indra/newview')
-rw-r--r--linden/indra/newview/llagent.cpp2
-rw-r--r--linden/indra/newview/llfloatercustomize.cpp8
-rw-r--r--linden/indra/newview/lltexlayer.cpp45
-rw-r--r--linden/indra/newview/llvoavatar.cpp29
-rw-r--r--linden/indra/newview/llwearable.cpp14
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_customize.xml6
-rw-r--r--linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml4
7 files changed, 50 insertions, 58 deletions
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 5a1700a..515d588 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -7488,7 +7488,7 @@ void LLAgent::sendAgentSetAppearance()
7488 param; 7488 param;
7489 param = (LLViewerVisualParam*)mAvatarObject->getNextVisualParam()) 7489 param = (LLViewerVisualParam*)mAvatarObject->getNextVisualParam())
7490 { 7490 {
7491 if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) 7491 if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) // do not transmit params of group VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
7492 { 7492 {
7493 msg->nextBlockFast(_PREHASH_VisualParam ); 7493 msg->nextBlockFast(_PREHASH_VisualParam );
7494 7494
diff --git a/linden/indra/newview/llfloatercustomize.cpp b/linden/indra/newview/llfloatercustomize.cpp
index db51556..21dfc36 100644
--- a/linden/indra/newview/llfloatercustomize.cpp
+++ b/linden/indra/newview/llfloatercustomize.cpp
@@ -448,9 +448,7 @@ LLPanelEditWearable::LLPanelEditWearable( EWearableType type )
448BOOL LLPanelEditWearable::postBuild() 448BOOL LLPanelEditWearable::postBuild()
449{ 449{
450 LLAssetType::EType asset_type = LLWearable::typeToAssetType( mType ); 450 LLAssetType::EType asset_type = LLWearable::typeToAssetType( mType );
451 std::string icon_name = (asset_type == LLAssetType::AT_CLOTHING ? 451 std::string icon_name = get_item_icon_name(asset_type, LLInventoryType::IT_WEARABLE, mType, FALSE);
452 "inv_item_clothing.tga" :
453 "inv_item_skin.tga" );
454 childSetValue("icon", icon_name); 452 childSetValue("icon", icon_name);
455 453
456 childSetAction("Create New", LLPanelEditWearable::onBtnCreateNew, this ); 454 childSetAction("Create New", LLPanelEditWearable::onBtnCreateNew, this );
@@ -553,7 +551,7 @@ void LLPanelEditWearable::setSubpart( ESubpart subpart )
553 param = (LLViewerVisualParam *)avatar->getNextVisualParam()) 551 param = (LLViewerVisualParam *)avatar->getNextVisualParam())
554 { 552 {
555 if (param->getID() == -1 553 if (param->getID() == -1
556 || param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE 554 || !param->isTweakable()
557 || param->getEditGroup() != part->mEditGroup 555 || param->getEditGroup() != part->mEditGroup
558 || !(param->getSex() & avatar_sex)) 556 || !(param->getSex() & avatar_sex))
559 { 557 {
@@ -763,7 +761,6 @@ void LLPanelEditWearable::onColorCommit( LLUICtrl* ctrl, void* userdata )
763 } 761 }
764} 762}
765 763
766
767void LLPanelEditWearable::initPreviousTextureList() 764void LLPanelEditWearable::initPreviousTextureList()
768{ 765{
769 initPreviousTextureListEntry(TEX_LOWER_ALPHA); 766 initPreviousTextureListEntry(TEX_LOWER_ALPHA);
@@ -2338,6 +2335,7 @@ void LLFloaterCustomize::initWearablePanels()
2338 panel->addTextureDropTarget(TEX_HEAD_TATTOO, "Head Tattoo", 2335 panel->addTextureDropTarget(TEX_HEAD_TATTOO, "Head Tattoo",
2339 LLUUID::null, 2336 LLUUID::null,
2340 TRUE); 2337 TRUE);
2338 panel->addColorSwatch(TEX_LOWER_TATTOO, "Color/Tint");
2341 } 2339 }
2342} 2340}
2343 2341
diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp
index c8e1298..139b1b0 100644
--- a/linden/indra/newview/lltexlayer.cpp
+++ b/linden/indra/newview/lltexlayer.cpp
@@ -211,8 +211,9 @@ void LLTexLayerSetBuffer::popProjection()
211BOOL LLTexLayerSetBuffer::needsRender() 211BOOL LLTexLayerSetBuffer::needsRender()
212{ 212{
213 LLVOAvatar* avatar = mTexLayerSet->getAvatar(); 213 LLVOAvatar* avatar = mTexLayerSet->getAvatar();
214 BOOL upload_now = needsUploadNow(); 214 BOOL upload_now = mNeedsUpload && mTexLayerSet->isLocalTextureDataFinal() && gAgent.mNumPendingQueries == 0;
215 BOOL needs_update = (mNeedsUpdate || upload_now) && !avatar->mAppearanceAnimating; 215 BOOL needs_update = (mNeedsUpdate || upload_now) && !avatar->mAppearanceAnimating;
216
216 if (needs_update) 217 if (needs_update)
217 { 218 {
218 BOOL invalid_skirt = avatar->getBakedTE(mTexLayerSet) == TEX_SKIRT_BAKED && !avatar->isWearingWearableType(WT_SKIRT); 219 BOOL invalid_skirt = avatar->getBakedTE(mTexLayerSet) == TEX_SKIRT_BAKED && !avatar->isWearingWearableType(WT_SKIRT);
@@ -275,16 +276,14 @@ BOOL LLTexLayerSetBuffer::render()
275 } 276 }
276 else 277 else
277 { 278 {
278 // mUploadPending = FALSE;//see... 279 mUploadPending = FALSE;
279 // mNeedsUpload = FALSE;// ...below... 280 mNeedsUpload = FALSE;
280 LLVOAvatar* avatar = mTexLayerSet->getAvatar(); 281 LLVOAvatar* avatar = mTexLayerSet->getAvatar();
281 if (avatar) 282 if (avatar)
282 { 283 {
283 avatar->setNewBakedTexture(avatar->getBakedTE(mTexLayerSet), IMG_INVISIBLE); 284 avatar->setNewBakedTexture(avatar->getBakedTE(mTexLayerSet), IMG_INVISIBLE);
284 llinfos << "Invisible baked texture set for " << mTexLayerSet->getBodyRegion() << llendl; 285 llinfos << "Invisible baked texture set for " << mTexLayerSet->getBodyRegion() << llendl;
285 } 286 }
286 readBackAndUpload(); //... here: Opensim is not happy if we don't
287 //TODO: find out if SL is happy if we do
288 } 287 }
289 } 288 }
290 } 289 }
@@ -350,12 +349,11 @@ void LLTexLayerSetBuffer::readBackAndUpload()
350 // writes into baked_color_data 349 // writes into baked_color_data
351 const char* comment_text = NULL; 350 const char* comment_text = NULL;
352 351
353 S32 baked_image_components = 5; // red green blue bump clothing 352 S32 baked_image_components = 5; // red green blue bump clothing
354 LLPointer<LLImageRaw> baked_image = new LLImageRaw( mWidth, mHeight, baked_image_components ); 353 LLPointer<LLImageRaw> baked_image = new LLImageRaw( mWidth, mHeight, baked_image_components );
355 U8* baked_image_data = baked_image->getData(); 354 U8* baked_image_data = baked_image->getData();
356 355
357 comment_text = LINDEN_J2C_COMMENT_PREFIX "RGBHM"; // 5 channels: rgb, heightfield/alpha, mask 356 comment_text = LINDEN_J2C_COMMENT_PREFIX "RGBHM"; // 5 channels: rgb, heightfield/alpha, mask
358
359 S32 i = 0; 357 S32 i = 0;
360 for (S32 u = 0; u < mWidth; u++) 358 for (S32 u = 0; u < mWidth; u++)
361 { 359 {
@@ -458,7 +456,7 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid, void* user
458 456
459 LLVOAvatar* avatar = gAgent.getAvatarObject(); 457 LLVOAvatar* avatar = gAgent.getAvatarObject();
460 458
461 if (avatar && !avatar->isDead() && 459 if (0 == result && avatar && !avatar->isDead() &&
462 baked_upload_data && 460 baked_upload_data &&
463 baked_upload_data->mAvatar == avatar && // Sanity check: only the user's avatar should be uploading textures. 461 baked_upload_data->mAvatar == avatar && // Sanity check: only the user's avatar should be uploading textures.
464 baked_upload_data->mLayerSet->hasComposite()) 462 baked_upload_data->mLayerSet->hasComposite())
@@ -492,22 +490,11 @@ void LLTexLayerSetBuffer::onTextureUploadComplete(const LLUUID& uuid, void* user
492 avatar->setNewBakedTexture(baked_te, uuid); 490 avatar->setNewBakedTexture(baked_te, uuid);
493 } 491 }
494 else 492 else
495 { 493 {
496 ++failures; 494 // Avatar appearance is changing, ignore the upload results
497 llinfos << "Baked upload failed (attempt " << failures << "/" << MAX_BAKE_UPLOAD_ATTEMPTS << "), "; 495 llinfos << "Baked upload failed. Reason: " << result << llendl;
498 if (failures >= MAX_BAKE_UPLOAD_ATTEMPTS) 496 // *FIX: retry upload after n seconds, asset server could be busy
499 { 497 }
500 llcont << "giving up.";
501 }
502 else
503 {
504 const F32 delay = 5.f;
505 llcont << llformat("retrying in %.2f seconds.", delay);
506 layerset_buffer->mUploadFailCount = failures;
507 layerset_buffer->requestDelayedUpload((U64)(delay * 1000000));
508 }
509 llcont << llendl;
510 }
511 } 498 }
512 else 499 else
513 { 500 {
@@ -1412,7 +1399,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
1412 1399
1413 LLTexUnit::eTextureAddressMode old_mode = image_gl->getAddressMode(); 1400 LLTexUnit::eTextureAddressMode old_mode = image_gl->getAddressMode();
1414 1401
1415 gGL.getTexUnit(0)->bind(image_gl); 1402 gGL.getTexUnit(0)->bind(image_gl, TRUE);
1416 gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); 1403 gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
1417 1404
1418 gl_rect_2d_simple_tex( width, height ); 1405 gl_rect_2d_simple_tex( width, height );
@@ -1430,7 +1417,7 @@ BOOL LLTexLayer::render( S32 x, S32 y, S32 width, S32 height )
1430 LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask ); 1417 LLImageGL* image_gl = gTexStaticImageList.getImageGL( getInfo()->mStaticImageFileName, getInfo()->mStaticImageIsMask );
1431 if( image_gl ) 1418 if( image_gl )
1432 { 1419 {
1433 gGL.getTexUnit(0)->bind(image_gl); 1420 gGL.getTexUnit(0)->bind(image_gl, TRUE);
1434 gl_rect_2d_simple_tex( width, height ); 1421 gl_rect_2d_simple_tex( width, height );
1435 gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); 1422 gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
1436 } 1423 }
@@ -1656,7 +1643,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1656 1643
1657 LLTexUnit::eTextureAddressMode old_mode = image_gl->getAddressMode(); 1644 LLTexUnit::eTextureAddressMode old_mode = image_gl->getAddressMode();
1658 1645
1659 gGL.getTexUnit(0)->bind(image_gl); 1646 gGL.getTexUnit(0)->bind(image_gl, TRUE);
1660 gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP); 1647 gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
1661 1648
1662 gl_rect_2d_simple_tex( width, height ); 1649 gl_rect_2d_simple_tex( width, height );
@@ -1678,7 +1665,7 @@ BOOL LLTexLayer::renderAlphaMasks( S32 x, S32 y, S32 width, S32 height, LLColor4
1678 ( (image_gl->getComponents() == 1) && getInfo()->mStaticImageIsMask ) ) 1665 ( (image_gl->getComponents() == 1) && getInfo()->mStaticImageIsMask ) )
1679 { 1666 {
1680 LLGLSNoAlphaTest gls_no_alpha_test; 1667 LLGLSNoAlphaTest gls_no_alpha_test;
1681 gGL.getTexUnit(0)->bind(image_gl); 1668 gGL.getTexUnit(0)->bind(image_gl, TRUE);
1682 gl_rect_2d_simple_tex( width, height ); 1669 gl_rect_2d_simple_tex( width, height );
1683 gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); 1670 gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
1684 } 1671 }
@@ -2146,7 +2133,7 @@ BOOL LLTexLayerParamAlpha::render( S32 x, S32 y, S32 width, S32 height )
2146 } 2133 }
2147 2134
2148 LLGLSNoAlphaTest gls_no_alpha_test; 2135 LLGLSNoAlphaTest gls_no_alpha_test;
2149 gGL.getTexUnit(0)->bind(mCachedProcessedImageGL); 2136 gGL.getTexUnit(0)->bind(mCachedProcessedImageGL, TRUE);
2150 gl_rect_2d_simple_tex( width, height ); 2137 gl_rect_2d_simple_tex( width, height );
2151 gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); 2138 gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE);
2152 stop_glerror(); 2139 stop_glerror();
diff --git a/linden/indra/newview/llvoavatar.cpp b/linden/indra/newview/llvoavatar.cpp
index d68c587..90fb936 100644
--- a/linden/indra/newview/llvoavatar.cpp
+++ b/linden/indra/newview/llvoavatar.cpp
@@ -2890,7 +2890,7 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()
2890 param; 2890 param;
2891 param = getNextVisualParam()) 2891 param = getNextVisualParam())
2892 { 2892 {
2893 if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) 2893 if (param->isTweakable())
2894 { 2894 {
2895 param->stopAnimating(mAppearanceAnimSetByUser); 2895 param->stopAnimating(mAppearanceAnimSetByUser);
2896 } 2896 }
@@ -2922,7 +2922,7 @@ void LLVOAvatar::idleUpdateAppearanceAnimation()
2922 param; 2922 param;
2923 param = getNextVisualParam()) 2923 param = getNextVisualParam())
2924 { 2924 {
2925 if (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) 2925 if (param->isTweakable())
2926 { 2926 {
2927 // so boobs don't go spastic when a shape's changed, but still seems buggy 2927 // so boobs don't go spastic when a shape's changed, but still seems buggy
2928 //if(param->getID() != 507) 2928 //if(param->getID() != 507)
@@ -4875,6 +4875,7 @@ U32 LLVOAvatar::renderSkinned(EAvatarRenderPass pass)
4875 && !LLDrawPoolAlpha::sShowDebugAlpha // Don't alpha mask if "Highlight Transparent" checked 4875 && !LLDrawPoolAlpha::sShowDebugAlpha // Don't alpha mask if "Highlight Transparent" checked
4876 && !LLDrawPoolAvatar::sSkipTransparent; 4876 && !LLDrawPoolAvatar::sSkipTransparent;
4877 4877
4878
4878 LLGLState test(GL_ALPHA_TEST, should_alpha_mask); 4879 LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
4879 4880
4880 if (should_alpha_mask) 4881 if (should_alpha_mask)
@@ -4990,7 +4991,6 @@ U32 LLVOAvatar::renderRigid()
4990 && !LLDrawPoolAlpha::sShowDebugAlpha // Don't alpha mask if "Highlight Transparent" checked 4991 && !LLDrawPoolAlpha::sShowDebugAlpha // Don't alpha mask if "Highlight Transparent" checked
4991 && !LLDrawPoolAvatar::sSkipTransparent; 4992 && !LLDrawPoolAvatar::sSkipTransparent;
4992 4993
4993
4994 LLGLState test(GL_ALPHA_TEST, should_alpha_mask); 4994 LLGLState test(GL_ALPHA_TEST, should_alpha_mask);
4995 4995
4996 if (should_alpha_mask) 4996 if (should_alpha_mask)
@@ -8202,6 +8202,14 @@ BOOL LLVOAvatar::teToColorParams( ETextureIndex te, const char* param_name[3] )
8202 param_name[2] = "skirt_blue"; 8202 param_name[2] = "skirt_blue";
8203 break; 8203 break;
8204 8204
8205 case TEX_HEAD_TATTOO:
8206 case TEX_LOWER_TATTOO:
8207 case TEX_UPPER_TATTOO:
8208 param_name[0] = "tattoo_red";
8209 param_name[1] = "tattoo_green";
8210 param_name[2] = "tattoo_blue";
8211 break;
8212
8205 default: 8213 default:
8206 llassert(0); 8214 llassert(0);
8207 return FALSE; 8215 return FALSE;
@@ -8661,7 +8669,7 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
8661 { 8669 {
8662 for( S32 i = 0; i < num_blocks; i++ ) 8670 for( S32 i = 0; i < num_blocks; i++ )
8663 { 8671 {
8664 while( param && (param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE) ) 8672 while (param && (param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE)) // should not be any of group VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
8665 { 8673 {
8666 param = getNextVisualParam(); 8674 param = getNextVisualParam();
8667 } 8675 }
@@ -8710,14 +8718,10 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
8710 } 8718 }
8711 } 8719 }
8712 8720
8713 while( param && (param->getGroup() != VISUAL_PARAM_GROUP_TWEAKABLE) ) 8721 S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE); // don't worry about VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
8722 if (num_blocks != expected_tweakable_count)
8714 { 8723 {
8715 param = getNextVisualParam(); 8724 llinfos << "Number of params in AvatarAppearance msg (" << num_blocks << ") does not match number of tweakable params in avatar xml file (" << expected_tweakable_count << "). Processing what we can. Object: " << getID() << llendl;
8716 }
8717 if( param )
8718 {
8719 llwarns << "Number of params in AvatarAppearance msg does not match number of params in avatar xml file." << llendl;
8720 return;
8721 } 8725 }
8722 8726
8723 if (params_changed) 8727 if (params_changed)
@@ -8988,8 +8992,7 @@ void LLVOAvatar::dumpArchetypeXML( void* )
8988 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) 8992 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
8989 { 8993 {
8990 LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param; 8994 LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;
8991 if( (viewer_param->getWearableType() == type) && 8995 if (viewer_param->getWearableType() == type && viewer_param->isTweakable())
8992 (viewer_param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE) )
8993 { 8996 {
8994 apr_file_printf( file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n", 8997 apr_file_printf( file, "\t\t<param id=\"%d\" name=\"%s\" value=\"%.3f\"/>\n",
8995 viewer_param->getID(), viewer_param->getName().c_str(), viewer_param->getWeight() ); 8998 viewer_param->getID(), viewer_param->getName().c_str(), viewer_param->getWeight() );
diff --git a/linden/indra/newview/llwearable.cpp b/linden/indra/newview/llwearable.cpp
index b74ef02..f8123bb 100644
--- a/linden/indra/newview/llwearable.cpp
+++ b/linden/indra/newview/llwearable.cpp
@@ -535,7 +535,7 @@ BOOL LLWearable::isOldVersion()
535 param; 535 param;
536 param = (LLViewerVisualParam*) avatar->getNextVisualParam() ) 536 param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
537 { 537 {
538 if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) 538 if (param->getWearableType() == mType && param->isTweakable())
539 { 539 {
540 param_count++; 540 param_count++;
541 if( !is_in_map(mVisualParamMap, param->getID() ) ) 541 if( !is_in_map(mVisualParamMap, param->getID() ) )
@@ -591,7 +591,7 @@ BOOL LLWearable::isDirty()
591 param; 591 param;
592 param = (LLViewerVisualParam*) avatar->getNextVisualParam() ) 592 param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
593 { 593 {
594 if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) 594 if (param->getWearableType() == mType && param->isTweakable())
595 { 595 {
596 F32 weight = get_if_there(mVisualParamMap, param->getID(), param->getDefaultWeight()); 596 F32 weight = get_if_there(mVisualParamMap, param->getID(), param->getDefaultWeight());
597 weight = llclamp( weight, param->getMinWeight(), param->getMaxWeight() ); 597 weight = llclamp( weight, param->getMinWeight(), param->getMaxWeight() );
@@ -690,7 +690,7 @@ void LLWearable::setParamsToDefaults()
690 mVisualParamMap.clear(); 690 mVisualParamMap.clear();
691 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) 691 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
692 { 692 {
693 if( (((LLViewerVisualParam*)param)->getWearableType() == mType ) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) 693 if (((LLViewerVisualParam*)param)->getWearableType() == mType && param->isTweakable())
694 { 694 {
695 mVisualParamMap[param->getID()] = param->getDefaultWeight(); 695 mVisualParamMap[param->getID()] = param->getDefaultWeight();
696 } 696 }
@@ -724,7 +724,7 @@ void LLWearable::writeToAvatar( BOOL set_by_user )
724 // Pull params 724 // Pull params
725 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) 725 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
726 { 726 {
727 if( (((LLViewerVisualParam*)param)->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) 727 if (((LLViewerVisualParam*)param)->getWearableType() == mType && param->isTweakable())
728 { 728 {
729 S32 param_id = param->getID(); 729 S32 param_id = param->getID();
730 F32 weight = get_if_there(mVisualParamMap, param_id, param->getDefaultWeight()); 730 F32 weight = get_if_there(mVisualParamMap, param_id, param->getDefaultWeight());
@@ -825,7 +825,7 @@ void LLWearable::removeFromAvatar( EWearableType type, BOOL set_by_user )
825 // Pull params 825 // Pull params
826 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) 826 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
827 { 827 {
828 if( (((LLViewerVisualParam*)param)->getWearableType() == type) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) 828 if (((LLViewerVisualParam*)param)->getWearableType() == type && param->isTweakable())
829 { 829 {
830 S32 param_id = param->getID(); 830 S32 param_id = param->getID();
831 avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), set_by_user ); 831 avatar->setVisualParamWeight( param_id, param->getDefaultWeight(), set_by_user );
@@ -873,7 +873,7 @@ void LLWearable::readFromAvatar()
873 mVisualParamMap.clear(); 873 mVisualParamMap.clear();
874 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() ) 874 for( LLVisualParam* param = avatar->getFirstVisualParam(); param; param = avatar->getNextVisualParam() )
875 { 875 {
876 if( (((LLViewerVisualParam*)param)->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) 876 if (((LLViewerVisualParam*)param)->getWearableType() == mType && param->isTweakable())
877 { 877 {
878 878
879 //pretty sure is right 879 //pretty sure is right
@@ -938,7 +938,7 @@ void LLWearable::copyDataFrom( LLWearable* src )
938 param; 938 param;
939 param = (LLViewerVisualParam*) avatar->getNextVisualParam() ) 939 param = (LLViewerVisualParam*) avatar->getNextVisualParam() )
940 { 940 {
941 if( (param->getWearableType() == mType) && (param->getGroup() == VISUAL_PARAM_GROUP_TWEAKABLE ) ) 941 if (param->getWearableType() == mType && param->isTweakable())
942 { 942 {
943 S32 id = param->getID(); 943 S32 id = param->getID();
944 F32 weight = get_if_there(src->mVisualParamMap, id, param->getDefaultWeight() ); 944 F32 weight = get_if_there(src->mVisualParamMap, id, param->getDefaultWeight() );
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_customize.xml b/linden/indra/newview/skins/default/xui/en-us/floater_customize.xml
index a0dd938..d5b61a7 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_customize.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_customize.xml
@@ -1172,11 +1172,15 @@ scratch and wear it.
1172 <texture_picker name="Lower Tattoo" label="Lower Tattoo" tool_tip="Click to choose a picture" 1172 <texture_picker name="Lower Tattoo" label="Lower Tattoo" tool_tip="Click to choose a picture"
1173 can_apply_immediately="true" default_image_name="Default" allow_no_texture="true" 1173 can_apply_immediately="true" default_image_name="Default" allow_no_texture="true"
1174 follows="left|top" width="70" height="80" left="14" bottom="-325"/> 1174 follows="left|top" width="70" height="80" left="14" bottom="-325"/>
1175 <color_swatch border_color="0.45098 0.517647 0.607843 1" bottom="-415"
1176 can_apply_immediately="true" color="1 1 1 1" follows="left|top" height="80"
1177 label="Color/Tint" left="14" mouse_opaque="true" name="Color/Tint"
1178 tool_tip="Click to open Color Picker" width="70" />
1175 <button name="Create New" label="Create New Tattoo" label_selected="Create New Tattoo" 1179 <button name="Create New" label="Create New Tattoo" label_selected="Create New Tattoo"
1176 follows="left|top" halign="center" width="170" height="24" left="8" bottom="-128" 1180 follows="left|top" halign="center" width="170" height="24" left="8" bottom="-128"
1177 mouse_opaque="true" scale_image="true"/> 1181 mouse_opaque="true" scale_image="true"/>
1178 <button name="Take Off" label="Take Off" label_selected="Take Off" 1182 <button name="Take Off" label="Take Off" label_selected="Take Off"
1179 follows="left|top" width="82" height="20" left="8" bottom="-365"/> 1183 follows="left|top" width="82" height="20" left="8" bottom="-440"/>
1180 <button name="Save" label="Save" label_selected="Save" 1184 <button name="Save" label="Save" label_selected="Save"
1181 follows="right|bottom" width="82" height="20" left="123" bottom="-478"/> 1185 follows="right|bottom" width="82" height="20" left="123" bottom="-478"/>
1182 <button name="Save As" label="Save As..." label_selected="Save As..." 1186 <button name="Save As" label="Save As..." label_selected="Save As..."
diff --git a/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml b/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml
index 81dd05a..69e62f8 100644
--- a/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml
+++ b/linden/indra/newview/skins/default/xui/en-us/floater_new_outfit_dialog.xml
@@ -21,7 +21,7 @@
21 <check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall" 21 <check_box bottom="-276" enabled="true" follows="left|top" font="SansSerifSmall"
22 height="16" initial_value="false" label="Eyes" left="13" 22 height="16" initial_value="false" label="Eyes" left="13"
23 mouse_opaque="true" name="checkbox_Eyes" radio_style="false" width="100" /> 23 mouse_opaque="true" name="checkbox_Eyes" radio_style="false" width="100" />
24 <check_box bottom="-456" enabled="true" follows="left|top" font="SansSerifSmall" 24 <check_box bottom="-434" enabled="true" follows="left|top" font="SansSerifSmall"
25 height="16" initial_value="false" label="Rename Clothing To Folder Name" 25 height="16" initial_value="false" label="Rename Clothing To Folder Name"
26 left="13" mouse_opaque="true" name="rename" radio_style="false" width="210" /> 26 left="13" mouse_opaque="true" name="rename" radio_style="false" width="210" />
27 <check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall" 27 <check_box bottom="-216" enabled="true" follows="left|top" font="SansSerifSmall"
@@ -256,7 +256,7 @@ now wearing into it.
256 Attachments: 256 Attachments:
257 </text> 257 </text>
258 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 258 <text type="string" length="1" bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
259 bottom="-436" drop_shadow_visible="true" enabled="true" follows="left|top" 259 bottom="-414" drop_shadow_visible="true" enabled="true" follows="left|top"
260 font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13" 260 font="SansSerifSmall" h_pad="0" halign="left" height="14" left="13"
261 mouse_opaque="true" name="Options:" v_pad="0" width="100"> 261 mouse_opaque="true" name="Options:" v_pad="0" width="100">
262 Options: 262 Options: