diff options
Diffstat (limited to 'indra')
52 files changed, 389 insertions, 337 deletions
| diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index f98a5398c3..99c5412ae5 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@  const S32 LL_VERSION_MAJOR = 2;  const S32 LL_VERSION_MINOR = 8; -const S32 LL_VERSION_PATCH = 3; +const S32 LL_VERSION_PATCH = 4;  const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp index 349dbc3405..919364be63 100644 --- a/indra/llui/lltextbase.cpp +++ b/indra/llui/lltextbase.cpp @@ -2024,8 +2024,17 @@ S32 LLTextBase::getDocIndexFromLocalCoord( S32 local_x, S32 local_y, BOOL round,  		}  		else if (hit_past_end_of_line && segmentp->getEnd() >= line_iter->mDocIndexEnd)  		{ -			// segment wraps to next line, so just set doc pos to the end of the line -			pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength()); +			if (getLineNumFromDocIndex(line_iter->mDocIndexEnd - 1) == line_iter->mLineNum) +			{ +				// if segment wraps to the next line we should step one char back +				// to compensate for the space char between words +				// which is removed due to wrapping +				pos = llclamp(line_iter->mDocIndexEnd - 1, 0, getLength()); +			} +			else +			{ +				pos = llclamp(line_iter->mDocIndexEnd, 0, getLength()); +			}  			break;  		}  		start_x += text_width; diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 708bb60fca..954af8c84a 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -4863,7 +4863,7 @@        <key>Type</key>        <string>String</string>        <key>Value</key> -      <string>http://viewer-login.agni.lindenlab.com/</string> +      <string/>      </map>      <key>LosslessJ2CUpload</key>      <map> diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index 60082f40d6..d327216a0c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -270,72 +270,41 @@ void main()  	vec4 diffuse = texture2DRect(diffuseRect, tc);  	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); -	calcAtmospherics(pos.xyz, 1.0); +	vec3 col; +	float bloom = 0.0; +	if (diffuse.a < 0.9) +	{ +		calcAtmospherics(pos.xyz, 1.0); +	 +		col = atmosAmbient(vec3(0)); +		col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a)); -	vec3 col = atmosAmbient(vec3(0)); -	col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a)); +		col *= diffuse.rgb; -	col *= diffuse.rgb; +		if (spec.a > 0.0) // specular reflection +		{ +			// the old infinite-sky shiny reflection +			// +			vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); +			float sa = dot(refnormpersp, vary_light.xyz); +			vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a; +			 +			// add the two types of shiny together +			vec3 spec_contrib = dumbshiny * spec.rgb; +			bloom = dot(spec_contrib, spec_contrib); +			col += spec_contrib; +		} -	if (spec.a > 0.0) // specular reflection +		col = atmosLighting(col); +		col = scaleSoftClip(col); + +		col = mix(col.rgb, diffuse.rgb, diffuse.a); +	} +	else  	{ -		// the old infinite-sky shiny reflection -		// -		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); -		float sa = dot(refnormpersp, vary_light.xyz); -		vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a; - -		/* -		// screen-space cheap fakey reflection map -		// -		vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz)); -		depth -= 0.5; // unbias depth -		// first figure out where we'll make our 2D guess from -		vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth; -		// Offset the guess source a little according to a trivial -		// checkerboard dither function and spec.a. -		// This is meant to be similar to sampling a blurred version -		// of the diffuse map.  LOD would be better in that regard. -		// The goal of the blur is to soften reflections in surfaces -		// with low shinyness, and also to disguise our lameness. -		float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 -		float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5); -		ref2d += vec2(checkoffset, checkoffset); -		ref2d += tc.xy; // use as offset from destination -		// Get attributes from the 2D guess point. -		// We average two samples of diffuse (not of anything else) per -		// pixel to try to reduce aliasing some more. -		vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb + -				     texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb); -		float refdepth = texture2DRect(depthMap, ref2d).a; -		vec3 refpos = getPosition_d(ref2d, refdepth).xyz; -		vec3 refn = texture2DRect(normalMap, ref2d).rgb; -		refn = normalize(vec3((refn.xy-0.5)*2.0,refn.z)); // unpack norm -		// figure out how appropriate our guess actually was -		float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos))); -		// darken reflections from points which face away from the reflected ray - our guess was a back-face -		//refapprop *= step(dot(refnorm, refn), 0.0); -		refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant -		// get appropriate light strength for guess-point. -		// reflect light direction to increase the illusion that -		// these are reflections. -		vec3 reflight = reflect(lightnorm.xyz, norm.xyz); -		float reflit = max(dot(refn, reflight.xyz), 0.0); -		// apply sun color to guess-point, dampen according to inappropriateness of guess -		float refmod = min(refapprop, reflit); -		vec3 refprod = vary_SunlitColor * refcol.rgb * refmod; -		vec3 ssshiny = (refprod * spec.a); -		ssshiny *= 0.3; // dampen it even more -		*/ -		vec3 ssshiny = vec3(0,0,0); - -		// add the two types of shiny together -		col += (ssshiny + dumbshiny) * spec.rgb; +		col = diffuse.rgb;  	} -	 -	col = atmosLighting(col); -	col = scaleSoftClip(col); -		 +  	gl_FragColor.rgb = col; -	gl_FragColor.a = 0.0; +	gl_FragColor.a = bloom;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl index 9dfacfb520..2cce43e2bf 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightMSF.glsl @@ -266,7 +266,7 @@ void main()  	vec2 tc = vary_fragcoord.xy;  	ivec2 itc = ivec2(tc); -	vec3 fcol = vec3(0,0,0); +	vec4 fcol = vec4(0,0,0,0);  	for (int i = 0; i < samples; ++i)  	{ @@ -280,17 +280,16 @@ void main()  		float da = max(dot(norm.xyz, vary_light.xyz), 0.0);  		vec4 diffuse = texelFetch(diffuseRect, itc, i); -		if (diffuse.a >= 1.0) -		{ -			fcol += diffuse.rgb; -		} -		else +		vec3 col; +		float bloom = 0.0; + +		if (diffuse.a < 0.9)  		{  			vec4 spec = texelFetch(specularRect, itc, i);  			calcAtmospherics(pos.xyz, 1.0); -			vec3 col = atmosAmbient(vec3(0)); +			col = atmosAmbient(vec3(0));  			col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a));  			col *= diffuse.rgb; @@ -304,15 +303,22 @@ void main()  				vec3 dumbshiny = vary_SunlitColor*texture2D(lightFunc, vec2(sa, spec.a)).a;  				// add the two types of shiny together -				col += dumbshiny * spec.rgb; +				vec3 spec_contrib = dumbshiny * spec.rgb; +				bloom = dot(spec_contrib, spec_contrib); +				col += spec_contrib;  			}  			col = atmosLighting(col);  			col = scaleSoftClip(col); -			fcol += col; +			col = mix(col, diffuse.rgb, diffuse.a);  		} +		else +		{ +			col = diffuse.rgb; +		} + +		fcol += vec4(col, bloom);  	} -	gl_FragColor.rgb = fcol.rgb/samples; -	gl_FragColor.a = 0.0; +	gl_FragColor = fcol/samples;  } diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl index ae943cc438..5b7cc57574 100644 --- a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl +++ b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl @@ -9,7 +9,7 @@ uniform sampler2D tex0;  void main()   { -	float alpha = texture2D(tex0, gl_TexCoord[0].xy).a; +	float alpha = texture2D(tex0, gl_TexCoord[0].xy).a * gl_Color.a;  	gl_FragColor = vec4(gl_Color.rgb, alpha);  } diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl index f44a5ce32e..5283e80407 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl @@ -10,8 +10,6 @@  void calcAtmospherics(vec3 inPositionEye);  mat4 getObjectSkinnedTransform(); -attribute vec4 object_weight; -  void main()  {  	mat4 mat = getObjectSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl index e5dafa8c78..1db79791de 100644 --- a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl @@ -10,8 +10,6 @@  void calcAtmospherics(vec3 inPositionEye);  mat4 getObjectSkinnedTransform(); -attribute vec4 object_weight; -  void main()  {  	//transform vertex diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl index cd655f3bb5..eea41bb4f0 100644 --- a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl @@ -11,8 +11,6 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye);  mat4 getObjectSkinnedTransform(); -attribute vec4 object_weight; -  void main()  {  	mat4 mat = getObjectSkinnedTransform(); diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl index 900448035c..af92e5e002 100644 --- a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl +++ b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl @@ -11,8 +11,6 @@ vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);  void calcAtmospherics(vec3 inPositionEye);  mat4 getObjectSkinnedTransform(); -attribute vec4 object_weight; -  void main()  {  	//transform vertex diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index 66a1a8515f..f0c9b01671 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -267,34 +267,49 @@ void main()  	float da = max(dot(norm.xyz, vary_light.xyz), 0.0);  	vec4 diffuse = texture2DRect(diffuseRect, tc); -	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); -	 -	vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; -	float scol = max(scol_ambocc.r, diffuse.a);  -	float ambocc = scol_ambocc.g; + +	vec3 col; +	float bloom = 0.0; + +	if (diffuse.a < 0.9) +	{ +		vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); +		 +		vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; +		float scol = max(scol_ambocc.r, diffuse.a);  +		float ambocc = scol_ambocc.g; -	calcAtmospherics(pos.xyz, ambocc); +		calcAtmospherics(pos.xyz, ambocc); -	vec3 col = atmosAmbient(vec3(0)); -	col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); +		col = atmosAmbient(vec3(0)); +		col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); -	col *= diffuse.rgb; +		col *= diffuse.rgb; -	if (spec.a > 0.0) // specular reflection +		if (spec.a > 0.0) // specular reflection +		{ +			// the old infinite-sky shiny reflection +			// +			vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); +			float sa = dot(refnormpersp, vary_light.xyz); +			vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; + +			// add the two types of shiny together +			vec3 spec_contrib = dumbshiny * spec.rgb; +			bloom = dot(spec_contrib, spec_contrib); +			col += spec_contrib; +		} +			 +		col = atmosLighting(col); +		col = scaleSoftClip(col); + +		col = mix(col, diffuse.rgb, diffuse.a); +	} +	else  	{ -		// the old infinite-sky shiny reflection -		// -		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); -		float sa = dot(refnormpersp, vary_light.xyz); -		vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; - -		// add the two types of shiny together -		col += dumbshiny * spec.rgb; +		col = diffuse.rgb;  	} -	 -	col = atmosLighting(col); -	col = scaleSoftClip(col);  	gl_FragColor.rgb = col; -	gl_FragColor.a = 0.0; +	gl_FragColor.a = bloom;  } diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl index 0bae10ca7d..3b572320c3 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightMSF.glsl @@ -255,7 +255,7 @@ void main()  	vec2 tc = vary_fragcoord.xy;  	ivec2 itc = ivec2(tc); -	vec3 fcol = vec3(0,0,0); +	vec4 fcol = vec4(0,0,0,0);  	vec2 scol_ambocc = texture2DRect(lightMap, tc).rg;  	float ambocc = scol_ambocc.g; @@ -270,38 +270,50 @@ void main()  		float da = max(dot(norm.xyz, vary_light.xyz), 0.0);  		vec4 diffuse = texelFetch(diffuseRect, itc, i); -		vec4 spec = texelFetch(specularRect, itc, i); +		vec3 col; +		float bloom = 0.0; +		if (diffuse.a < 0.9) +		{ +			vec4 spec = texelFetch(specularRect, itc, i); -		float amb = 0; +			float amb = 0; -		float scol = max(scol_ambocc.r, diffuse.a);  -		amb += ambocc; +			float scol = max(scol_ambocc.r, diffuse.a);  +			amb += ambocc; -		calcAtmospherics(pos.xyz, ambocc); +			calcAtmospherics(pos.xyz, ambocc); +	 +			col = atmosAmbient(vec3(0)); +			col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); -		vec3 col = atmosAmbient(vec3(0)); -		col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); +			col *= diffuse.rgb; -		col *= diffuse.rgb; +			if (spec.a > 0.0) // specular reflection +			{ +				// the old infinite-sky shiny reflection +				// +				vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); +				float sa = dot(refnormpersp, vary_light.xyz); +				vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; + +				// add the two types of shiny together +				vec3 spec_contrib = dumbshiny * spec.rgb; +				bloom = dot(spec_contrib, spec_contrib); +				col += spec_contrib; +			} -		if (spec.a > 0.0) // specular reflection +			col = atmosLighting(col); +			col = scaleSoftClip(col); + +			col = mix(col, diffuse.rgb, diffuse.a); +		} +		else  		{ -			// the old infinite-sky shiny reflection -			// -			vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); -			float sa = dot(refnormpersp, vary_light.xyz); -			vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*texture2D(lightFunc, vec2(sa, spec.a)).a; - -			// add the two types of shiny together -			col += dumbshiny * spec.rgb; +			col = diffuse.rgb;  		} -	 -		col = atmosLighting(col); -		col = scaleSoftClip(col); -		fcol += col; +		fcol += vec4(col, bloom);  	} -	gl_FragColor.rgb = fcol/samples;  -	gl_FragColor.a = 0.0; +	gl_FragColor = fcol/samples;   } diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index d38d33cc21..1ae10a5faa 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -268,91 +268,50 @@ void main()  	float da = max(dot(norm.xyz, vary_light.xyz), 0.0);  	vec4 diffuse = texture2DRect(diffuseRect, tc); -	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); +	vec3 col; +	float bloom = 0.0; + +	if (diffuse.a < 0.9) +	{ +		vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy); -	da = texture2D(lightFunc, vec2(da, 0.0)).a; +		da = texture2D(lightFunc, vec2(da, 0.0)).a; -	vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; -	float scol = max(scol_ambocc.r, diffuse.a);  -	float ambocc = scol_ambocc.g; +		vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg; +		float scol = max(scol_ambocc.r, diffuse.a);  +		float ambocc = scol_ambocc.g; -	calcAtmospherics(pos.xyz, ambocc); +		calcAtmospherics(pos.xyz, ambocc); -	vec3 col = atmosAmbient(vec3(0)); -	col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); +		col = atmosAmbient(vec3(0)); +		col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a)); -	col *= diffuse.rgb; +		col *= diffuse.rgb; -	if (spec.a > 0.0) // specular reflection +		if (spec.a > 0.0) // specular reflection +		{ +			// the old infinite-sky shiny reflection +			// +			vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); +			float sa = dot(refnormpersp, vary_light.xyz); +			vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a; +		 +			// add the two types of shiny together +			vec3 spec_contrib = dumbshiny * spec.rgb; +			bloom = dot(spec_contrib, spec_contrib); +			col += spec_contrib;		 +		} +	 +		col = atmosLighting(col); +		col = scaleSoftClip(col); + +		col = mix(col, diffuse.rgb, diffuse.a); +	} +	else  	{ -		// the old infinite-sky shiny reflection -		// -		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz)); -		float sa = dot(refnormpersp, vary_light.xyz); -		vec3 dumbshiny = vary_SunlitColor*scol*texture2D(lightFunc, vec2(sa, spec.a)).a; - -		/* -		// screen-space cheap fakey reflection map -		// -		vec3 refnorm = normalize(reflect(vec3(0,0,-1), norm.xyz)); -		depth -= 0.5; // unbias depth -		// first figure out where we'll make our 2D guess from -		vec2 ref2d = (0.25 * screen_res.y) * (refnorm.xy) * abs(refnorm.z) / depth; -		// Offset the guess source a little according to a trivial -		// checkerboard dither function and spec.a. -		// This is meant to be similar to sampling a blurred version -		// of the diffuse map.  LOD would be better in that regard. -		// The goal of the blur is to soften reflections in surfaces -		// with low shinyness, and also to disguise our lameness. -		float checkerboard = floor(mod(tc.x+tc.y, 2.0)); // 0.0, 1.0 -		float checkoffset = (3.0 + (7.0*(1.0-spec.a)))*(checkerboard-0.5); - -		ref2d += vec2(checkoffset, checkoffset); -		ref2d += tc.xy; // use as offset from destination -		// Get attributes from the 2D guess point. -		// We average two samples of diffuse (not of anything else) per -		// pixel to try to reduce aliasing some more. -		vec3 refcol = 0.5 * (texture2DRect(diffuseRect, ref2d + vec2(0.0, -checkoffset)).rgb + -				     texture2DRect(diffuseRect, ref2d + vec2(-checkoffset, 0.0)).rgb); -		float refdepth = texture2DRect(depthMap, ref2d).a; -		vec3 refpos = getPosition_d(ref2d, refdepth).xyz; -		float refshad = texture2DRect(lightMap, ref2d).r; -		vec3 refn = texture2DRect(normalMap, ref2d).rgb; -		refn = vec3((refn.xy-0.5)*2.0,refn.z); // unpack norm -		refn = normalize(refn); -		// figure out how appropriate our guess actually was -		float refapprop = max(0.0, dot(-refnorm, normalize(pos - refpos))); -		// darken reflections from points which face away from the reflected ray - our guess was a back-face -		//refapprop *= step(dot(refnorm, refn), 0.0); -		refapprop = min(refapprop, max(0.0, -dot(refnorm, refn))); // more conservative variant -		// get appropriate light strength for guess-point. -		// reflect light direction to increase the illusion that -		// these are reflections. -		vec3 reflight = reflect(lightnorm.xyz, norm.xyz); -		float reflit = min(max(dot(refn, reflight.xyz), 0.0), refshad); -		// apply sun color to guess-point, dampen according to inappropriateness of guess -		float refmod = min(refapprop, reflit); -		vec3 refprod = vary_SunlitColor * refcol.rgb * refmod; -		vec3 ssshiny = (refprod * spec.a); -		ssshiny *= 0.3; // dampen it even more -		*/ -		vec3 ssshiny = vec3(0,0,0); - -		// add the two types of shiny together -		col += (ssshiny + dumbshiny) * spec.rgb; +		col = diffuse.rgb;  	} -	 -	col = atmosLighting(col); -	col = scaleSoftClip(col);  	gl_FragColor.rgb = col; -	 -	//gl_FragColor.rgb = gi_col.rgb; -	gl_FragColor.a = 0.0; -	 -	//gl_FragColor.rg = scol_ambocc.rg; -	//gl_FragColor.rgb = texture2DRect(lightMap, vary_fragcoord.xy).rgb; -	//gl_FragColor.rgb = norm.rgb*0.5+0.5; -	//gl_FragColor.rgb = vec3(ambocc); -	//gl_FragColor.rgb = vec3(scol); +	gl_FragColor.a = bloom;  } diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt index fa67ee547c..2690e8ec70 100644 --- a/indra/newview/featuretable_mac.txt +++ b/indra/newview/featuretable_mac.txt @@ -1,4 +1,4 @@ -version 29 +version 30  // NOTE: This is mostly identical to featuretable_mac.txt with a few differences  // Should be combined into one table diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp index 492cfe7c1b..642a1907f0 100755 --- a/indra/newview/llagent.cpp +++ b/indra/newview/llagent.cpp @@ -3356,8 +3356,8 @@ bool LLAgent::teleportCore(bool is_local)  	// hide the Region/Estate floater  	LLFloaterReg::hideInstance("region_info"); -	// hide the search floater (EXT-8276) -	LLFloaterReg::hideInstance("search"); +	// minimize the Search floater (STORM-1474) +	LLFloaterReg::getInstance("search")->setMinimized(TRUE);  	LLViewerParcelMgr::getInstance()->deselectLand();  	LLViewerMediaFocus::getInstance()->clearFocus(); diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index f9fd501072..a219386b53 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -62,13 +62,24 @@ LLDrawPoolWLSky::LLDrawPoolWLSky(void) :  		llerrs << "Error: Failed to load cloud noise image " << cloudNoiseFilename << llendl;  	} -	cloudNoiseFile->load(cloudNoiseFilename); - -	sCloudNoiseRawImage = new LLImageRaw(); +	if(cloudNoiseFile->load(cloudNoiseFilename)) +	{ +		sCloudNoiseRawImage = new LLImageRaw(); -	cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f); +		if(cloudNoiseFile->decode(sCloudNoiseRawImage, 0.0f)) +		{ +			//debug use			 +			lldebugs << "cloud noise raw image width: " << sCloudNoiseRawImage->getWidth() << " : height: " << sCloudNoiseRawImage->getHeight() << " : components: " <<  +				(S32)sCloudNoiseRawImage->getComponents() << " : data size: " << sCloudNoiseRawImage->getDataSize() << llendl ; +			llassert_always(sCloudNoiseRawImage->getData()) ; -	sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); +			sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); +		} +		else +		{ +			sCloudNoiseRawImage = NULL ; +		} +	}  	LLWLParamManager::getInstance()->propagateParameters();  } @@ -218,7 +229,7 @@ void LLDrawPoolWLSky::renderStars(void) const  void LLDrawPoolWLSky::renderSkyClouds(F32 camHeightLocal) const  { -	if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS)) +	if (gPipeline.canUseWindLightShaders() && gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_CLOUDS) && sCloudNoiseTexture.notNull())  	{  		LLGLEnable blend(GL_BLEND);  		gGL.setSceneBlendType(LLRender::BT_ALPHA); @@ -399,5 +410,8 @@ void LLDrawPoolWLSky::cleanupGL()  //static  void LLDrawPoolWLSky::restoreGL()  { -	sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); +	if(sCloudNoiseRawImage.notNull()) +	{ +		sCloudNoiseTexture = LLViewerTextureManager::getLocalTexture(sCloudNoiseRawImage.get(), TRUE); +	}  } diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp index 5501b8c2ac..2abfbf37ca 100644 --- a/indra/newview/llexpandabletextbox.cpp +++ b/indra/newview/llexpandabletextbox.cpp @@ -415,6 +415,15 @@ void LLExpandableTextBox::onTopLost()  	LLUICtrl::onTopLost();  } +void LLExpandableTextBox::updateTextShape() +{ +	// I guess this should be done on every reshape(), +	// but adding this code to reshape() currently triggers bug VWR-26455, +	// which makes the text virtually unreadable. +	llassert(!mExpanded); +	updateTextBoxRect(); +} +  void LLExpandableTextBox::setValue(const LLSD& value)  {  	collapseTextBox(); diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h index f75ef954ff..399e48bea2 100644 --- a/indra/newview/llexpandabletextbox.h +++ b/indra/newview/llexpandabletextbox.h @@ -143,6 +143,10 @@ public:  	 */  	/*virtual*/ void onTopLost(); +	/** +	 * *HACK: Update the inner textbox shape. +	 */ +	void updateTextShape();  	/**  	 * Draws text box, collapses text box if its expanded and its parent's position changed diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp index 610142b5a9..5cfdd69f7b 100644 --- a/indra/newview/llfloaterbuyland.cpp +++ b/indra/newview/llfloaterbuyland.cpp @@ -529,7 +529,7 @@ void LLFloaterBuyLandUI::updateCovenantInfo()  	LLTextBox* region_type = getChild<LLTextBox>("region_type_text");  	if (region_type)  	{ -		region_type->setText(region->getSimProductName()); +		region_type->setText(region->getLocalizedSimProductName());  	}  	LLTextBox* resellable_clause = getChild<LLTextBox>("resellable_clause"); diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 9b7593ce61..4746f93009 100644 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -566,10 +566,7 @@ void LLPanelLandGeneral::refresh()  		if (regionp)  		{  			insert_maturity_into_textbox(mContentRating, gFloaterView->getParentFloater(this), MATURITY); - -			std::string land_type; -			bool is_land_type_localized = LLTrans::findString(land_type, regionp->getSimProductName()); -			mLandType->setText(is_land_type_localized ? land_type : regionp->getSimProductName()); +			mLandType->setText(regionp->getLocalizedSimProductName());  		}  		// estate owner/manager cannot edit other parts of the parcel @@ -2883,13 +2880,7 @@ void LLPanelLandCovenant::refresh()  	}  	LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text"); -	if (region_landtype) -	{ -		std::string land_type; -		bool is_land_type_localized = LLTrans::findString(land_type, region->getSimProductName()); - -		region_landtype->setText(is_land_type_localized ? land_type : region->getSimProductName()); -	} +	region_landtype->setText(region->getLocalizedSimProductName());  	LLTextBox* region_maturity = getChild<LLTextBox>("region_maturity_text");  	if (region_maturity) diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp index 538c5e3b88..9a99417e93 100644 --- a/indra/newview/llfloaterregioninfo.cpp +++ b/indra/newview/llfloaterregioninfo.cpp @@ -336,7 +336,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)  	LLViewerRegion* region = gAgent.getRegion();  	BOOL allow_modify = gAgent.isGodlike() || (region && region->canManageEstate()); -	// *TODO: Replace parcing msg with accessing the region info model. +	// *TODO: Replace parsing msg with accessing the region info model.  	LLRegionInfoModel& region_info = LLRegionInfoModel::instance();  	// extract message @@ -368,6 +368,7 @@ void LLFloaterRegionInfo::processRegionInfo(LLMessageSystem* msg)  		msg->getSize("RegionInfo2", "ProductName") > 0)  	{  		msg->getString("RegionInfo2", "ProductName", sim_type); +		LLTrans::findString(sim_type, sim_type); // try localizing sim product name  	}  	// GENERAL PANEL @@ -2409,11 +2410,7 @@ bool LLPanelEstateCovenant::refreshFromRegion(LLViewerRegion* region)  	}  	LLTextBox* region_landtype = getChild<LLTextBox>("region_landtype_text"); -	if (region_landtype) -	{ -		region_landtype->setText(region->getSimProductName()); -	} -	 +	region_landtype->setText(region->getLocalizedSimProductName());  	// let the parent class handle the general data collection.   	bool rv = LLPanelRegionInfo::refreshFromRegion(region); diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp index 1e9ce58237..ce8057eead 100644 --- a/indra/newview/llpanelplaceprofile.cpp +++ b/indra/newview/llpanelplaceprofile.cpp @@ -32,6 +32,7 @@  #include "llparcel.h"  #include "message.h" +#include "llexpandabletextbox.h"  #include "lliconctrl.h"  #include "lllineeditor.h"  #include "lltextbox.h" @@ -227,6 +228,34 @@ void LLPanelPlaceProfile::setInfoType(EInfoType type)  	getChild<LLAccordionCtrl>("advanced_info_accordion")->setVisible(is_info_type_agent); +	// If we came from search we want larger description area, approx. 10 lines (see STORM-1311). +	// Don't use the maximum available space because that leads to nasty artifacts +	// in text editor and expandable text box. +	{ +		const S32 SEARCH_DESC_HEIGHT = 150; + +		// Remember original geometry (once). +		static const S32 sOrigDescVPad = getChildView("parcel_title")->getRect().mBottom - mDescEditor->getRect().mTop; +		static const S32 sOrigDescHeight = mDescEditor->getRect().getHeight(); +		static const S32 sOrigMRIconVPad = mDescEditor->getRect().mBottom - mMaturityRatingIcon->getRect().mTop; +		static const S32 sOrigMRTextVPad = mDescEditor->getRect().mBottom - mMaturityRatingText->getRect().mTop; + +		// Resize the description. +		const S32 desc_height = is_info_type_agent ? sOrigDescHeight : SEARCH_DESC_HEIGHT; +		const S32 desc_top = getChildView("parcel_title")->getRect().mBottom - sOrigDescVPad; +		LLRect desc_rect = mDescEditor->getRect(); +		desc_rect.setOriginAndSize(desc_rect.mLeft, desc_top - desc_height, desc_rect.getWidth(), desc_height); +		mDescEditor->reshape(desc_rect.getWidth(), desc_rect.getHeight()); +		mDescEditor->setRect(desc_rect); +		mDescEditor->updateTextShape(); + +		// Move the maturity rating icon/text accordingly. +		const S32 mr_icon_bottom = mDescEditor->getRect().mBottom - sOrigMRIconVPad - mMaturityRatingIcon->getRect().getHeight(); +		const S32 mr_text_bottom = mDescEditor->getRect().mBottom - sOrigMRTextVPad - mMaturityRatingText->getRect().getHeight(); +		mMaturityRatingIcon->setOrigin(mMaturityRatingIcon->getRect().mLeft, mr_icon_bottom); +		mMaturityRatingText->setOrigin(mMaturityRatingText->getRect().mLeft, mr_text_bottom); +	} +  	switch(type)  	{  		case AGENT: @@ -434,7 +463,7 @@ void LLPanelPlaceProfile::displaySelectedParcelInfo(LLParcel* parcel,  	}  	mRegionNameText->setText(region->getName()); -	mRegionTypeText->setText(region->getSimProductName()); +	mRegionTypeText->setText(region->getLocalizedSimProductName());  	// Determine parcel owner  	if (parcel->isPublic()) diff --git a/indra/newview/llpanelvoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp index 4a80bbbe5e..6be2ea6481 100644 --- a/indra/newview/llpanelvoicedevicesettings.cpp +++ b/indra/newview/llpanelvoicedevicesettings.cpp @@ -41,6 +41,7 @@  static LLRegisterPanelClassWrapper<LLPanelVoiceDeviceSettings> t_panel_group_general("panel_voice_device_settings"); +static const std::string DEFAULT_DEVICE("Default");  LLPanelVoiceDeviceSettings::LLPanelVoiceDeviceSettings() @@ -68,10 +69,17 @@ BOOL LLPanelVoiceDeviceSettings::postBuild()  	// set mic volume tuning slider based on last mic volume setting  	volume_slider->setValue(mMicVolume); -	getChild<LLComboBox>("voice_input_device")->setCommitCallback( +	mCtrlInputDevices = getChild<LLComboBox>("voice_input_device"); +	mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device"); + +	mCtrlInputDevices->setCommitCallback(  		boost::bind(&LLPanelVoiceDeviceSettings::onCommitInputDevice, this)); -	getChild<LLComboBox>("voice_output_device")->setCommitCallback( +	mCtrlOutputDevices->setCommitCallback(  		boost::bind(&LLPanelVoiceDeviceSettings::onCommitOutputDevice, this)); + +	mLocalizedDeviceNames[DEFAULT_DEVICE]				= getString("default_text"); +	mLocalizedDeviceNames["No Device"]					= getString("name_no_device"); +	mLocalizedDeviceNames["Default System Device"]		= getString("name_default_system_device");  	return TRUE;  } @@ -138,14 +146,14 @@ void LLPanelVoiceDeviceSettings::apply()  	std::string s;  	if(mCtrlInputDevices)  	{ -		s = mCtrlInputDevices->getSimple(); +		s = mCtrlInputDevices->getValue().asString();  		gSavedSettings.setString("VoiceInputAudioDevice", s);  		mInputDevice = s;  	}  	if(mCtrlOutputDevices)  	{ -		s = mCtrlOutputDevices->getSimple(); +		s = mCtrlOutputDevices->getValue().asString();  		gSavedSettings.setString("VoiceOutputAudioDevice", s);  		mOutputDevice = s;  	} @@ -166,10 +174,10 @@ void LLPanelVoiceDeviceSettings::cancel()  	gSavedSettings.setString("VoiceOutputAudioDevice", mOutputDevice);  	if(mCtrlInputDevices) -		mCtrlInputDevices->setSimple(mInputDevice); +		mCtrlInputDevices->setValue(mInputDevice);  	if(mCtrlOutputDevices) -		mCtrlOutputDevices->setSimple(mOutputDevice); +		mCtrlOutputDevices->setValue(mOutputDevice);  	gSavedSettings.setF32("AudioLevelMic", mMicVolume);  	LLSlider* volume_slider = getChild<LLSlider>("mic_volume_slider"); @@ -188,9 +196,6 @@ void LLPanelVoiceDeviceSettings::refresh()  	LLVoiceClient::getInstance()->tuningSetMicVolume(current_volume);  	// Fill in popup menus -	mCtrlInputDevices = getChild<LLComboBox>("voice_input_device"); -	mCtrlOutputDevices = getChild<LLComboBox>("voice_output_device"); -  	bool device_settings_available = LLVoiceClient::getInstance()->deviceSettingsAvailable();  	if (mCtrlInputDevices) @@ -212,14 +217,14 @@ void LLPanelVoiceDeviceSettings::refresh()  		if(mCtrlInputDevices)  		{  			mCtrlInputDevices->removeall(); -			mCtrlInputDevices->add( mInputDevice, ADD_BOTTOM ); -			mCtrlInputDevices->setSimple(mInputDevice); +			mCtrlInputDevices->add(getLocalizedDeviceName(mInputDevice), mInputDevice, ADD_BOTTOM); +			mCtrlInputDevices->setValue(mInputDevice);  		}  		if(mCtrlOutputDevices)  		{  			mCtrlOutputDevices->removeall(); -			mCtrlOutputDevices->add( mOutputDevice, ADD_BOTTOM ); -			mCtrlOutputDevices->setSimple(mOutputDevice); +			mCtrlOutputDevices->add(getLocalizedDeviceName(mOutputDevice), mOutputDevice, ADD_BOTTOM); +			mCtrlOutputDevices->setValue(mOutputDevice);  		}  		mDevicesUpdated = FALSE;  	} @@ -230,35 +235,41 @@ void LLPanelVoiceDeviceSettings::refresh()  		if(mCtrlInputDevices)  		{  			mCtrlInputDevices->removeall(); -			mCtrlInputDevices->add( getString("default_text"), ADD_BOTTOM ); +			mCtrlInputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM);  			for(iter=LLVoiceClient::getInstance()->getCaptureDevices().begin();   				iter != LLVoiceClient::getInstance()->getCaptureDevices().end();  				iter++)  			{ -				mCtrlInputDevices->add( *iter, ADD_BOTTOM ); +				mCtrlInputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM);  			} -			if(!mCtrlInputDevices->setSimple(mInputDevice)) +			// Fix invalid input audio device preference. +			if (!mCtrlInputDevices->setSelectedByValue(mInputDevice, TRUE))  			{ -				mCtrlInputDevices->setSimple(getString("default_text")); +				mCtrlInputDevices->setValue(DEFAULT_DEVICE); +				gSavedSettings.setString("VoiceInputAudioDevice", DEFAULT_DEVICE); +				mInputDevice = DEFAULT_DEVICE;  			}  		}  		if(mCtrlOutputDevices)  		{  			mCtrlOutputDevices->removeall(); -			mCtrlOutputDevices->add( getString("default_text"), ADD_BOTTOM ); +			mCtrlOutputDevices->add(getLocalizedDeviceName(DEFAULT_DEVICE), DEFAULT_DEVICE, ADD_BOTTOM);  			for(iter= LLVoiceClient::getInstance()->getRenderDevices().begin();   				iter !=  LLVoiceClient::getInstance()->getRenderDevices().end(); iter++)  			{ -				mCtrlOutputDevices->add( *iter, ADD_BOTTOM ); +				mCtrlOutputDevices->add(getLocalizedDeviceName(*iter), *iter, ADD_BOTTOM);  			} -			if(!mCtrlOutputDevices->setSimple(mOutputDevice)) +			// Fix invalid output audio device preference. +			if (!mCtrlOutputDevices->setSelectedByValue(mOutputDevice, TRUE))  			{ -				mCtrlOutputDevices->setSimple(getString("default_text")); +				mCtrlOutputDevices->setValue(DEFAULT_DEVICE); +				gSavedSettings.setString("VoiceOutputAudioDevice", DEFAULT_DEVICE); +				mOutputDevice = DEFAULT_DEVICE;  			}  		}  		mDevicesUpdated = TRUE; @@ -292,12 +303,19 @@ void LLPanelVoiceDeviceSettings::cleanup()  	}  } +// returns English name if no translation found +std::string LLPanelVoiceDeviceSettings::getLocalizedDeviceName(const std::string& en_dev_name) +{ +	std::map<std::string, std::string>::const_iterator it = mLocalizedDeviceNames.find(en_dev_name); +	return it != mLocalizedDeviceNames.end() ? it->second : en_dev_name; +} +  void LLPanelVoiceDeviceSettings::onCommitInputDevice()  {  	if(LLVoiceClient::getInstance())  	{  		LLVoiceClient::getInstance()->setCaptureDevice( -			getChild<LLComboBox>("voice_input_device")->getValue().asString()); +			mCtrlInputDevices->getValue().asString());  	}  } @@ -306,6 +324,6 @@ void LLPanelVoiceDeviceSettings::onCommitOutputDevice()  	if(LLVoiceClient::getInstance())  	{  		LLVoiceClient::getInstance()->setRenderDevice( -			getChild<LLComboBox>("voice_output_device")->getValue().asString()); +			mCtrlInputDevices->getValue().asString());  	}  } diff --git a/indra/newview/llpanelvoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h index d09476d469..ba3bcad0dc 100644 --- a/indra/newview/llpanelvoicedevicesettings.h +++ b/indra/newview/llpanelvoicedevicesettings.h @@ -49,6 +49,8 @@ public:  	void setUseTuningMode(bool use) { mUseTuningMode = use; };  protected: +	std::string getLocalizedDeviceName(const std::string& en_dev_name); +  	void onCommitInputDevice();  	void onCommitOutputDevice(); @@ -59,6 +61,7 @@ protected:  	class LLComboBox		*mCtrlOutputDevices;  	BOOL mDevicesUpdated;  	bool mUseTuningMode; +	std::map<std::string, std::string> mLocalizedDeviceNames;  };  #endif // LL_LLPANELVOICEDEVICESETTINGS_H diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp index 22666cec0d..c532346e6b 100644 --- a/indra/newview/llviewerinventory.cpp +++ b/indra/newview/llviewerinventory.cpp @@ -418,6 +418,9 @@ void LLViewerInventoryItem::fetchFromServer(void) const  BOOL LLViewerInventoryItem::unpackMessage(LLSD item)  {  	BOOL rv = LLInventoryItem::fromLLSD(item); + +	LLLocalizedInventoryItemsDictionary::getInstance()->localizeInventoryObjectName(mName); +  	mIsComplete = TRUE;  	return rv;  } diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp index bb7170e0f7..d4e0831c33 100644 --- a/indra/newview/llviewerregion.cpp +++ b/indra/newview/llviewerregion.cpp @@ -558,6 +558,11 @@ const std::string LLViewerRegion::getSimAccessString() const  	return accessToString(mSimAccess);  } +std::string LLViewerRegion::getLocalizedSimProductName() const +{ +	std::string localized_spn; +	return LLTrans::findString(localized_spn, mProductName) ? localized_spn : mProductName; +}  // static  std::string LLViewerRegion::regionFlagsToString(U32 flags) diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h index f68b51ea65..a105ff625d 100644 --- a/indra/newview/llviewerregion.h +++ b/indra/newview/llviewerregion.h @@ -192,7 +192,7 @@ public:  	S32 getSimCPURatio()                   const { return mCPURatio; }  	const std::string& getSimColoName()    const { return mColoName; }  	const std::string& getSimProductSKU()  const { return mProductSKU; } -	const std::string& getSimProductName() const { return mProductName; } +	std::string getLocalizedSimProductName() const;  	// Returns "Sandbox", "Expensive", etc.  	static std::string regionFlagsToString(U32 flags); diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index 66ba6249d3..ef21e7373e 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -755,6 +755,11 @@ void LLVOSky::calcSkyColorWLVert(LLVector3 & Pn, LLColor3 & vary_HazeColor, LLCo  	// project the direction ray onto the sky dome.  	F32 phi = acos(Pn[1]);  	F32 sinA = sin(F_PI - phi); +	if (fabsf(sinA) < 0.01f) +	{ //avoid division by zero +		sinA = 0.01f; +	} +  	F32 Plen = dome_radius * sin(F_PI + phi + asin(dome_offset_ratio * sinA)) / sinA;  	Pn *= Plen; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index dfcc7396ba..0abeed988c 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3741,52 +3741,55 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)  	LLVertexBuffer::unbind();  	LLGLState::checkStates(); -	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights"); - -	if (!sReflectionRender) +	if (!LLPipeline::sImpostorRender)  	{ -		renderHighlights(); -	} +		LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderHighlights"); -	// Contains a list of the faces of objects that are physical or -	// have touch-handlers. -	mHighlightFaces.clear(); +		if (!sReflectionRender) +		{ +			renderHighlights(); +		} -	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug"); +		// Contains a list of the faces of objects that are physical or +		// have touch-handlers. +		mHighlightFaces.clear(); + +		LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderDebug"); -	renderDebug(); +		renderDebug(); -	LLVertexBuffer::unbind(); +		LLVertexBuffer::unbind(); -	if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred) -	{ -		if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) +		if (!LLPipeline::sReflectionRender && !LLPipeline::sRenderDeferred)  		{ -			// Render debugging beacons. -			gObjectList.renderObjectBeacons(); -			gObjectList.resetObjectBeacons(); +			if (gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI)) +			{ +				// Render debugging beacons. +				gObjectList.renderObjectBeacons(); +				gObjectList.resetObjectBeacons(); +			} +			else +			{ +				// Make sure particle effects disappear +				LLHUDObject::renderAllForTimer(); +			}  		}  		else  		{  			// Make sure particle effects disappear  			LLHUDObject::renderAllForTimer();  		} -	} -	else -	{ -		// Make sure particle effects disappear -		LLHUDObject::renderAllForTimer(); -	} -	LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd"); +		LLAppViewer::instance()->pingMainloopTimeout("Pipeline:RenderGeomEnd"); -	//HACK: preserve/restore matrices around HUD render -	if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD)) -	{ -		for (U32 i = 0; i < 16; i++) +		//HACK: preserve/restore matrices around HUD render +		if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))  		{ -			gGLModelView[i] = saved_modelview[i]; -			gGLProjection[i] = saved_projection[i]; +			for (U32 i = 0; i < 16; i++) +			{ +				gGLModelView[i] = saved_modelview[i]; +				gGLProjection[i] = saved_projection[i]; +			}  		}  	} diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml index 4c0fbd280b..c3999501eb 100644 --- a/indra/newview/skins/default/xui/da/notifications.xml +++ b/indra/newview/skins/default/xui/da/notifications.xml @@ -454,6 +454,7 @@ Købsprisen for dette land er ikke refunderet til ejeren. Hvis en dedikeret parv  Dediker disse [AREA] m² land til gruppen '[GROUP_NAME]'?  	</notification>  	<notification name="ErrorMessage"> +		[ERROR_MESSAGE]  		<usetemplate name="okbutton" yestext="OK"/>  	</notification>  	<notification name="AvatarMovedDesired"> diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml index fe8ca69f34..c555f2fb09 100644 --- a/indra/newview/skins/default/xui/da/panel_places.xml +++ b/indra/newview/skins/default/xui/da/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button label="▼" name="overflow_btn" tool_tip="Vis flere valg"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="Profil" name="profile_btn" tool_tip="Vis profil for sted"/>  					</layout_panel> diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml index 632f414747..1af0492aa1 100644 --- a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml +++ b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml @@ -46,8 +46,8 @@  	</panel>  	<panel name="save_revert_button_bar">  		<layout_stack name="button_bar_ls"> -			<layout_panel name="save_btn_lp"> -				<button label="Speichern" name="save_btn"/> +			<layout_panel name="save_btn_lp" width="61"> +				<button label="Speichern" name="save_btn" width="60" />  			</layout_panel>  			<layout_panel name="revert_btn_lp">  				<button label="Änderungen rückgängig machen" name="revert_btn" tool_tip="Zur zuletzt gespeicherten Version zurückkehren"/> diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml index 36c77d4fe1..602ffff94d 100644 --- a/indra/newview/skins/default/xui/de/panel_places.xml +++ b/indra/newview/skins/default/xui/de/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button label="▼" name="overflow_btn" tool_tip="Zusätzliche Optionen anzeigen"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="Profil" name="profile_btn" tool_tip="Ortsprofil anzeigen"/>  					</layout_panel> diff --git a/indra/newview/skins/default/xui/en/floater_sound_devices.xml b/indra/newview/skins/default/xui/en/floater_sound_devices.xml index 304987c3d5..74e01f359c 100644 --- a/indra/newview/skins/default/xui/en/floater_sound_devices.xml +++ b/indra/newview/skins/default/xui/en/floater_sound_devices.xml @@ -15,14 +15,14 @@   layout="topleft"   name="floater_sound_devices"   title="Sound Devices" - width="315"> + width="490">    <panel      layout="topleft"      follows="all"      filename="panel_sound_devices.xml"      name="device_settings_panel"      width="400" -    left="2" +    left="10"      top="26"      class="panel_voice_device_settings"/>    <text diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml index daf571297f..b6b8a337a1 100644 --- a/indra/newview/skins/default/xui/en/panel_places.xml +++ b/indra/newview/skins/default/xui/en/panel_places.xml @@ -234,7 +234,7 @@ background_visible="true"  				height="23"  				layout="topleft"  				mouse_opaque="false" -				name="bottom_bar_ls3" +				name="bottom_bar_profile_ls"  				left="0"  				orientation="horizontal"  				top="0" diff --git a/indra/newview/skins/default/xui/en/panel_sound_devices.xml b/indra/newview/skins/default/xui/en/panel_sound_devices.xml index 0a20a4a965..46cbc1e87f 100644 --- a/indra/newview/skins/default/xui/en/panel_sound_devices.xml +++ b/indra/newview/skins/default/xui/en/panel_sound_devices.xml @@ -11,6 +11,14 @@        name="default_text">          Default      </panel.string> +    <string +     name="name_no_device"> +        No Device +    </string> +    <string +     name="name_default_system_device"> +        Default System Device +    </string>      <icon       follows="left|top"       height="18" diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml index 4c90a7e6b4..e9984b4512 100644 --- a/indra/newview/skins/default/xui/es/panel_places.xml +++ b/indra/newview/skins/default/xui/es/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button label="▼" name="overflow_btn" tool_tip="Ver más opciones"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="Perfil" name="profile_btn" tool_tip="Mostrar el perfil del lugar"/>  					</layout_panel> diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml index e252c224f8..509d167704 100644 --- a/indra/newview/skins/default/xui/fr/panel_places.xml +++ b/indra/newview/skins/default/xui/fr/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button label="▼" name="overflow_btn" tool_tip="Afficher d'autres options"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="Profil" name="profile_btn" tool_tip="Afficher le profil de l'endroit"/>  					</layout_panel> diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml index 61830f186f..69995fb5de 100644 --- a/indra/newview/skins/default/xui/it/panel_places.xml +++ b/indra/newview/skins/default/xui/it/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button label="▼" name="overflow_btn" tool_tip="Mostra ulteriori opzioni"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="Profilo" name="profile_btn" tool_tip="Mostra il profilo del luogo"/>  					</layout_panel> diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml index e19b86e552..9d3925afdc 100644 --- a/indra/newview/skins/default/xui/ja/panel_places.xml +++ b/indra/newview/skins/default/xui/ja/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button label="▼" name="overflow_btn" tool_tip="オプションを表示します"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="プロフィール" name="profile_btn" tool_tip="場所のプロフィールを表示"/>  					</layout_panel> diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml index 34c105225d..d69d137d23 100644 --- a/indra/newview/skins/default/xui/pl/panel_places.xml +++ b/indra/newview/skins/default/xui/pl/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button label="▼" name="overflow_btn" tool_tip="Pokaż opcje dodatkowe"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="Profil" name="profile_btn" tool_tip="Pokaż profil miejsca"/>  					</layout_panel> diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml index 828ef3e469..69f0baf65f 100644 --- a/indra/newview/skins/default/xui/pt/panel_places.xml +++ b/indra/newview/skins/default/xui/pt/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button label="▼" name="overflow_btn" tool_tip="Mostrar opções adicionais"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="Perfil" name="profile_btn" tool_tip="Mostrar perfil do lugar"/>  					</layout_panel> diff --git a/indra/newview/skins/default/xui/zh/panel_places.xml b/indra/newview/skins/default/xui/zh/panel_places.xml index c141201ab2..6434a7279c 100644 --- a/indra/newview/skins/default/xui/zh/panel_places.xml +++ b/indra/newview/skins/default/xui/zh/panel_places.xml @@ -24,7 +24,7 @@  						<menu_button name="overflow_btn" tool_tip="顯示額外選項"/>  					</layout_panel>  				</layout_stack> -				<layout_stack name="bottom_bar_ls3"> +				<layout_stack name="bottom_bar_profile_ls">  					<layout_panel name="profile_btn_lp">  						<button label="檔案" name="profile_btn" tool_tip="顯示地點檔案"/>  					</layout_panel> diff --git a/indra/newview/skins/minimal/xui/da/panel_people.xml b/indra/newview/skins/minimal/xui/da/panel_people.xml index 49cd2c71f2..8be4d695bd 100644 --- a/indra/newview/skins/minimal/xui/da/panel_people.xml +++ b/indra/newview/skins/minimal/xui/da/panel_people.xml @@ -66,16 +66,16 @@ Leder du efter personer at være sammen med? Prøv destinationsknappen nedenfor.  			<layout_panel name="view_profile_btn_lp">  				<button label="Profil" name="view_profile_btn" tool_tip="Vis billeder, grupper og anden beboer information"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="im_btn_lp">  				<button label="IM" name="im_btn" tool_tip="Åben session med privat besked (IM)"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="call_btn_lp">  				<button label="Opkald" name="call_btn" tool_tip="Kald til denne beboer"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="share_btn_lp">  				<button label="Del" name="share_btn" tool_tip="Del en genstand fra beholdning"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="teleport_btn_lp">  				<button label="Teleportér" name="teleport_btn" tool_tip="Tilbyd teleport"/>  			</layout_panel>  		</layout_stack> diff --git a/indra/newview/skins/minimal/xui/de/panel_people.xml b/indra/newview/skins/minimal/xui/de/panel_people.xml index 4f8f70ad17..a52557236f 100644 --- a/indra/newview/skins/minimal/xui/de/panel_people.xml +++ b/indra/newview/skins/minimal/xui/de/panel_people.xml @@ -48,13 +48,13 @@  			<layout_panel name="view_profile_btn_lp">  				<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="im_btn_lp">  				<button label="IM" name="im_btn" tool_tip="Instant Messenger öffnen"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="call_btn_lp">  				<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="teleport_btn_lp">  				<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>  			</layout_panel>  		</layout_stack> diff --git a/indra/newview/skins/minimal/xui/en/panel_people.xml b/indra/newview/skins/minimal/xui/en/panel_people.xml index 76baacb091..4739f86e95 100644 --- a/indra/newview/skins/minimal/xui/en/panel_people.xml +++ b/indra/newview/skins/minimal/xui/en/panel_people.xml @@ -428,7 +428,7 @@ Looking for people to hang out with? Try the Destinations button below.  			height="23"  			layout="bottomleft"  			left_pad="3" -			name="chat_btn_lp" +			name="im_btn_lp"  		    user_resize="false"   		    auto_resize="true"  			width="41"> @@ -449,7 +449,7 @@ Looking for people to hang out with? Try the Destinations button below.  			height="23"  			layout="bottomleft"  			left_pad="3" -			name="chat_btn_lp" +			name="call_btn_lp"  		    user_resize="false"   		    auto_resize="true"  			width="52"> @@ -470,7 +470,7 @@ Looking for people to hang out with? Try the Destinations button below.  			height="23"  			layout="bottomleft"  			left_pad="3" -			name="chat_btn_lp" +			name="teleport_btn_lp"  		    user_resize="false"   		    auto_resize="true"  			width="77"> diff --git a/indra/newview/skins/minimal/xui/es/panel_people.xml b/indra/newview/skins/minimal/xui/es/panel_people.xml index 1e1c3411ae..8d3d14fa89 100644 --- a/indra/newview/skins/minimal/xui/es/panel_people.xml +++ b/indra/newview/skins/minimal/xui/es/panel_people.xml @@ -49,13 +49,13 @@  			<layout_panel name="view_profile_btn_lp">  				<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="im_btn_lp">  				<button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="call_btn_lp">  				<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="teleport_btn_lp">  				<button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>  			</layout_panel>  		</layout_stack> diff --git a/indra/newview/skins/minimal/xui/fr/panel_people.xml b/indra/newview/skins/minimal/xui/fr/panel_people.xml index 72fb4d807f..4d6e31d9b5 100644 --- a/indra/newview/skins/minimal/xui/fr/panel_people.xml +++ b/indra/newview/skins/minimal/xui/fr/panel_people.xml @@ -49,13 +49,13 @@ Vous recherchez des résidents avec qui passer du temps ? Essayez avec le bouto  			<layout_panel name="view_profile_btn_lp">  				<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="im_btn_lp">  				<button label="IM" name="im_btn" tool_tip="Ouvrir une session IM"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="call_btn_lp">  				<button label="Appeler" name="call_btn" tool_tip="Appeler ce résident."/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="teleport_btn_lp">  				<button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation"/>  			</layout_panel>  		</layout_stack> diff --git a/indra/newview/skins/minimal/xui/it/panel_people.xml b/indra/newview/skins/minimal/xui/it/panel_people.xml index 068c8bb808..81e886acf0 100644 --- a/indra/newview/skins/minimal/xui/it/panel_people.xml +++ b/indra/newview/skins/minimal/xui/it/panel_people.xml @@ -66,16 +66,16 @@ Stai cercando persone da frequentare? Prova il pulsante Destinazioni in basso.  			<layout_panel name="view_profile_btn_lp">  				<button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="im_btn_lp">  				<button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="call_btn_lp">  				<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="share_btn_lp">  				<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell'inventario"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="teleport_btn_lp">  				<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>  			</layout_panel>  		</layout_stack> diff --git a/indra/newview/skins/minimal/xui/ja/panel_people.xml b/indra/newview/skins/minimal/xui/ja/panel_people.xml index 9eb45d9a80..5caeebc151 100644 --- a/indra/newview/skins/minimal/xui/ja/panel_people.xml +++ b/indra/newview/skins/minimal/xui/ja/panel_people.xml @@ -66,16 +66,16 @@  			<layout_panel name="view_profile_btn_lp">  				<button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="im_btn_lp">  				<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開きます"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="call_btn_lp">  				<button label="コール" name="call_btn" tool_tip="この住人にコールする"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="share_btn_lp">  				<button label="共有" name="share_btn" tool_tip="「持ち物」のアイテムを共有する"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="teleport_btn_lp">  				<button label="テレポート" name="teleport_btn" tool_tip="テレポートを送ります"/>  			</layout_panel>  		</layout_stack> diff --git a/indra/newview/skins/minimal/xui/pl/panel_people.xml b/indra/newview/skins/minimal/xui/pl/panel_people.xml index dbfee739f4..3b3aaa0987 100644 --- a/indra/newview/skins/minimal/xui/pl/panel_people.xml +++ b/indra/newview/skins/minimal/xui/pl/panel_people.xml @@ -66,16 +66,16 @@ Chcesz spotkać ludzi? Skorzystaj z przycisku "Atrakcje turystyczne" p  			<layout_panel name="view_profile_btn_lp">  				<button label="Profil" name="view_profile_btn" tool_tip="Pokaż zdjęcie, grupy i inne informacje o Rezydencie"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="im_btn_lp">  				<button label="IM" name="im_btn" tool_tip="Otwórz wiadomości IM"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="call_btn_lp">  				<button label="Dzwoń" name="call_btn" tool_tip="Zadzwoń do tego Rezydenta"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="share_btn_lp">  				<button label="Udostępnij" name="share_btn" tool_tip="Udostępnij obiekt z Szafy"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="teleport_btn_lp">  				<button label="Teleportuj" name="teleport_btn" tool_tip="Zaproponuj teleport"/>  			</layout_panel>  		</layout_stack> diff --git a/indra/newview/skins/minimal/xui/pt/panel_people.xml b/indra/newview/skins/minimal/xui/pt/panel_people.xml index d46c440eb9..0e98c586c6 100644 --- a/indra/newview/skins/minimal/xui/pt/panel_people.xml +++ b/indra/newview/skins/minimal/xui/pt/panel_people.xml @@ -49,13 +49,13 @@ Em busca de alguém para conversar? Confira o botão Destinos abaixo.  			<layout_panel name="view_profile_btn_lp">  				<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="im_btn_lp">  				<button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="call_btn_lp">  				<button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/>  			</layout_panel> -			<layout_panel name="chat_btn_lp"> +			<layout_panel name="teleport_btn_lp">  				<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>  			</layout_panel>  		</layout_stack> | 
