Ansariel 2021-01-17 19:24:26 +01:00
commit 1461e9bbb0
107 changed files with 1352 additions and 244 deletions

View File

@ -2,7 +2,7 @@
* @file
* @brief
*
* $LicenseInfo:firstyear=2020&license=fsviewerlgpl$
* $LicenseInfo:firstyear=2021&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2020, The Phoenix Firestorm Project, Inc.
*

View File

@ -964,11 +964,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>fc2d285da5298b666fc3c54015a8669a</string>
<string>87c4984c2bddcdaf6ca403a06f22ce4e</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///opt/firestorm/fmodstudio-2.01.05-darwin-202981448.tar.bz2</string>
<string>file:///opt/firestorm/fmodstudio-2.01.07-darwin-210010951.tar.bz2</string>
</map>
<key>name</key>
<string>darwin</string>
@ -978,11 +978,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>ee3c5e3449e06bc3dbb1c9dc29aca53d</string>
<string>d33d848660ca7e4c2de789e325706d24</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///opt/firestorm/fmodstudio-2.01.05-linux64-202931144.tar.bz2</string>
<string>file:///opt/firestorm/fmodstudio-2.01.07-linux64-203630250.tar.bz2</string>
</map>
<key>name</key>
<string>linux64</string>
@ -992,11 +992,11 @@
<key>archive</key>
<map>
<key>hash</key>
<string>b88e70667efc230a00d6a2d982af8fc5</string>
<string>9e9f303912776014519c18a0205250ee</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.05-windows-202860859.tar.bz2</string>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.07-windows-203561745.tar.bz2</string>
</map>
<key>name</key>
<string>windows</string>
@ -1006,18 +1006,18 @@
<key>archive</key>
<map>
<key>hash</key>
<string>401829b65cac61a2f96179fadf7eb015</string>
<string>ae336fe814a6867f6449d0401ea7a9e4</string>
<key>hash_algorithm</key>
<string>md5</string>
<key>url</key>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.05-windows64-202860900.tar.bz2</string>
<string>file:///c:/cygwin/opt/firestorm/fmodstudio-2.01.07-windows64-203561747.tar.bz2</string>
</map>
<key>name</key>
<string>windows64</string>
</map>
</map>
<key>version</key>
<string>2.01.05</string>
<string>2.01.07</string>
</map>
<key>fontconfig</key>
<map>
@ -3709,7 +3709,7 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>canonical_repo</key>
<string>https://bitbucket.org/lindenlab/viewer</string>
<key>copyright</key>
<string>Copyright (c) 2020, The Phoenix Firestorm Project, Inc.</string>
<string>Copyright (c) 2021, The Phoenix Firestorm Project, Inc.</string>
<key>description</key>
<string>Firestorm Viewer</string>
<key>license</key>

View File

@ -1358,7 +1358,8 @@ Sovereign Engineer
MAINT-7343
SL-11079
OPEN-343
SL-11625
SL-11625
BUG-229030
SpacedOut Frye
VWR-34
VWR-45

View File

@ -392,6 +392,7 @@ void LLStreamingAudio_FMODSTUDIO::setGain(F32 vol)
Check_FMOD_Error(mFMODInternetStreamChannelp->setVolume(vol), "FMOD::Channel::setVolume");
}
}
// <DKO> Streamtitle display
// virtual
bool LLStreamingAudio_FMODSTUDIO::getNewMetadata(LLSD& metadata)
@ -404,14 +405,17 @@ bool LLStreamingAudio_FMODSTUDIO::getNewMetadata(LLSD& metadata)
mNewMetadata = false;
return true;
}
return mNewMetadata;
else
{
return false;
}
}
metadata = LLSD();
return false;
}
// </DKO>
///////////////////////////////////////////////////////
// manager of possibly-multiple internet audio streams

View File

@ -1208,7 +1208,9 @@ namespace
{
LLError::RecorderPtr r = *i;
if (!r->enabled())
// <FS:Ansariel> Crash fix
//if (!r->enabled())
if (!r || !r->enabled())
{
continue;
}

View File

@ -388,7 +388,7 @@ LLSingletonBase::vec_t LLSingletonBase::dep_sort()
// extracts just the first (key) element from each sorted_iterator, then
// uses vec_t's range constructor... but frankly this is more
// straightforward, as long as we remember the above reserve() call!
for (const SingletonDeps::sorted_iterator::value_type& pair : sdeps.sort())
for (const SingletonDeps::sorted_iterator::value_type pair : sdeps.sort())
{
ret.push_back(pair.first);
}

View File

@ -895,16 +895,24 @@ void LLPluginProcessParent::poll(F64 timeout)
{
// timed out with no incoming data. Just return.
}
else if(status == EBADF)
// <FS:Beq> better logging of poll issues
// else if(status == EBADF)
else if(APR_STATUS_IS_EBADF(status))
{
// This happens when one of the file descriptors in the pollset is destroyed, which happens whenever a plugin's socket is closed.
// The pollset has been or will be recreated, so just return.
LL_DEBUGS("PluginPoll") << "apr_pollset_poll returned EBADF" << LL_ENDL;
}
else if(status != APR_SUCCESS)
// <FS:Beq> better logging of poll issues
// else if(status != APR_SUCCESS)
// {
// LL_WARNS("PluginPoll") << "apr_pollset_poll failed with status " << status << LL_ENDL;
// }
else
{
LL_WARNS("PluginPoll") << "apr_pollset_poll failed with status " << status << LL_ENDL;
LL_WARNS("PluginPoll") << "apr_pollset_poll failed with status " << status << " (" << APR_TO_OS_ERROR(status) << ")" << LL_ENDL;
}
// </FS:Beq>
}
// Remove instances in the done state from the sInstances map.

View File

@ -874,10 +874,11 @@ void LLTexUnit::setTextureColorSpace(eTextureColorSpace space)
}
}
else
#endif
// #endif // <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
{
glTexParameteri(sGLTextureType[mCurrTexType], GL_TEXTURE_SRGB_DECODE_EXT, GL_SKIP_DECODE_EXT);
}
#endif // <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
}
LLLightState::LLLightState(S32 index)

View File

@ -4207,6 +4207,9 @@ void LLContextMenu::show(S32 x, S32 y, LLView* spawning_view)
{
y += height;
}
// <FS:Ansariel> FIRE-10883: Prevent context menu from going off screen
y = llmin(y, menu_region_rect.mTop);
}
// Open out to the left if menu extends past right edge
@ -4220,6 +4223,9 @@ void LLContextMenu::show(S32 x, S32 y, LLView* spawning_view)
{
x -= width;
}
// <FS:Ansariel> FIRE-10883: Prevent context menu from going off screen
x = llmax(x, menu_region_rect.mLeft);
}
S32 local_x, local_y;

View File

@ -932,6 +932,8 @@ BOOL LLScrollListCtrl::selectFirstItem()
// virtual
BOOL LLScrollListCtrl::selectNthItem( S32 target_index )
{
// <FS:Ansariel> FIRE-30571: Comboboxes select all items then pressing Page-Up
target_index = llclamp(target_index, 0, (S32)mItemList.size() - 1);
return selectItemRange(target_index, target_index);
}

View File

@ -971,6 +971,30 @@ std::string LLUrlEntryAgentRLVAnonymizedName::getName(const LLAvatarName& avatar
}
// [/RLVa:KB]
// <FS:Ansariel> FIRE-30611: "You" in transcript is underlined
///
/// FSUrlEntryAgentSelf Describes the agent's Second Life agent Url, e.g.,
/// secondlife:///app/agentself/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
FSUrlEntryAgentSelf::FSUrlEntryAgentSelf() : LLUrlEntryAgent()
// </FS:Ansariel>
{
mPattern = boost::regex(APP_HEADER_REGEX "/agentself/[\\da-f-]+/\\w+",
boost::regex::perl|boost::regex::icase);
}
std::string FSUrlEntryAgentSelf::getLabel(const std::string &url, const LLUrlLabelCallback &cb)
{
if (LLUI::getInstance()->mSettingGroups["config"]->getBOOL("FSChatHistoryShowYou"))
{
return LLTrans::getString("AgentNameSubst");
}
else
{
return LLUrlEntryAgent::getLabel(url, cb);
}
}
// </FS:Ansariel>
//
// LLUrlEntryGroup Describes a Second Life group Url, e.g.,
// secondlife:///app/group/00005ff3-4044-c79f-9de8-fb28ae0df991/about

View File

@ -350,6 +350,20 @@ private:
};
// [/RLVa:KB]
// <FS:Ansariel> FIRE-30611: "You" in transcript is underlined
///
/// FSUrlEntryAgentSelf Describes the agent's Second Life agent Url, e.g.,
/// secondlife:///app/agentself/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
class FSUrlEntryAgentSelf : public LLUrlEntryAgent
{
public:
FSUrlEntryAgentSelf();
private:
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
};
// </FS:Ansariel>
///
/// LLUrlEntryExperienceProfile Describes a Second Life experience profile Url, e.g.,
/// secondlife:///app/experience/0e346d8b-4433-4d66-a6b0-fd37083abc4c/profile

View File

@ -71,6 +71,7 @@ LLUrlRegistry::LLUrlRegistry()
// [RLVa:KB] - Checked: 2010-11-01 (RLVa-1.2.2a) | Added: RLVa-1.2.2a
registerUrl(new LLUrlEntryAgentRLVAnonymizedName());
// [/RLVa:KB]
registerUrl(new FSUrlEntryAgentSelf());// <FS:Ansariel> FIRE-30611: "You" in transcript is underlined
// LLUrlEntryAgent*Name must appear before LLUrlEntryAgent since
// LLUrlEntryAgent is a less specific (catchall for agent urls)
registerUrl(new LLUrlEntryAgent());

View File

@ -2642,7 +2642,7 @@ if (DARWIN)
set(MACOSX_BUNDLE_BUNDLE_NAME "Firestorm")
set(MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
set(MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}")
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2020 The Phoenix Firestorm Project, Inc.")
set(MACOSX_BUNDLE_COPYRIGHT "Copyright 2010-2021 The Phoenix Firestorm Project, Inc.")
set(MACOSX_BUNDLE_NSMAIN_NIB_FILE "Firestorm.nib")
set(MACOSX_BUNDLE_NSPRINCIPAL_CLASS "LLApplication")

View File

@ -3,4 +3,4 @@
CFBundleName = "Firestorm";
CFBundleShortVersionString = "Firestorm version %%VERSION%%";
CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2020 The Phoenix Firestorm Project, Inc.";
CFBundleGetInfoString = "Firestorm version %%VERSION%%, Copyright 2010-2021 The Phoenix Firestorm Project, Inc.";

View File

@ -278,10 +278,8 @@
icon="Command_View_Icon"
label_ref="Command_View_Label"
tooltip_ref="Command_View_Tooltip"
execute_function="Floater.Toggle"
execute_parameters="camera"
is_running_function="Floater.IsOpen"
is_running_parameters="camera"
execute_function="View.ToggleCameraFloater"
is_running_function="View.CheckCameraFloater"
/>
<command name="reporter"
available_in_toybox="true"

View File

@ -25590,5 +25590,16 @@ Change of this parameter will affect the layout of buttons in notification toast
<key>Value</key>
<integer>1</integer>
</map>
<key>FSUseSmallCameraFloater</key>
<map>
<key>Comment</key>
<string>If enabled, the camera floater will be smaller and not contain the camera preset controls.</string>
<key>Persist</key>
<integer>1</integer>
<key>Type</key>
<string>Boolean</string>
<key>Value</key>
<integer>0</integer>
</map>
</map>
</llsd>

View File

@ -40,6 +40,7 @@ uniform sampler2D specularMap;
VARYING vec2 vary_texcoord0;
vec3 linear_to_srgb(vec3 cl);// <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
void main()
{
vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
@ -52,6 +53,7 @@ void main()
vec4 norm = texture2D(normalMap, vary_texcoord0.xy);
vec4 spec = texture2D(specularMap, vary_texcoord0.xy);
col.rgb = linear_to_srgb(col.rgb);// <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
frag_data[0] = vec4(col.rgb, 0.0);
frag_data[1] = spec;
frag_data[2] = vec4(norm.xy,0,0);

View File

@ -405,6 +405,7 @@ void main()
vec3 npos = normalize(-pos.xyz);
vec3 light = vec3(0, 0, 0);
final_specular.rgb = srgb_to_linear(final_specular.rgb);// <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
#define LIGHT_LOOP(i) light.rgb += calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare, light_attenuation[i].w );

View File

@ -111,7 +111,10 @@ void main()
vec3 n = normalize((mat*vec4(normal.xyz+position.xyz,1.0)).xyz-pos.xyz);
#ifdef HAS_NORMAL_MAP
vec3 t = normalize((mat*vec4(tangent.xyz+position.xyz,1.0)).xyz-pos.xyz);
vec3 b = cross(n, t)*tangent.w;
// <FS:Beq> normalize the bitangent (cross product of two normalised vectors is not itself normalised)
// vec3 b = cross(n, t)*tangent.w;
vec3 b = normalize(cross(n, t)*tangent.w);
// </FS:Beq>
vary_mat0 = vec3(t.x, b.x, n.x);
vary_mat1 = vec3(t.y, b.y, n.y);
@ -122,11 +125,11 @@ vary_normal = n;
#else //HAS_SKIN
vec3 n = normalize(normal_matrix * normal);
#ifdef HAS_NORMAL_MAP
// <FS:Beq> tangents should not use the inv_transpose matrix
// vec3 t = normalize(normal_matrix * tangent.xyz);
vec3 t = normalize((modelview_projection_matrix * vec4(tangent.xyz,0)).xyz);
vec3 t = normalize(normal_matrix * tangent.xyz);
// <FS:Beq> normalize the bitangent (cross product of two normalised vectors is not itself normalised)
// vec3 b = cross(n,t)*tangent.w;
vec3 b = normalize(cross(n,t)*tangent.w);
// </FS:Beq>
vec3 b = cross(n,t)*tangent.w;
//vec3 t = cross(b,n) * binormal.w;
vary_mat0 = vec3(t.x, b.x, n.x);

View File

@ -33,10 +33,10 @@ out vec4 frag_color;
#define frag_color gl_FragColor
#endif
uniform sampler2DRect depthMap;
// uniform sampler2DRect depthMap; // <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
uniform sampler2DRect diffuseRect;
uniform sampler2DRect specularRect;
uniform samplerCube environmentMap;
// uniform samplerCube environmentMap;// <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
uniform sampler2D noiseMap;
uniform sampler2D lightFunc;
@ -73,10 +73,10 @@ void main()
vec3 norm = getNorm(frag.xy);
vec4 spec = texture2DRect(specularRect, frag.xy);
spec.rgb = srgb_to_linear(spec.rgb);
// spec.rgb = srgb_to_linear(spec.rgb);// <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
diff.rgb = srgb_to_linear(diff.rgb);
// diff.rgb = srgb_to_linear(diff.rgb);// <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
float noise = texture2D(noiseMap, frag.xy / 128.0).b;
vec3 npos = normalize(-pos);

View File

@ -40,9 +40,14 @@ out vec4 frag_color;
uniform sampler2DRect diffuseRect;
uniform sampler2DRect specularRect;
uniform sampler2DRect depthMap;
// <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye)
// uniform sampler2DRect depthMap;
// </FS:Beq>
uniform sampler2DRect normalMap;
uniform samplerCube environmentMap;
// <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye)
// uniform samplerCube environmentMap;
// </FS:Beq>
uniform sampler2D noiseMap;
uniform sampler2D projectionMap;
uniform sampler2D lightFunc;
@ -182,11 +187,12 @@ void main()
vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
// SL-12005 Projector light pops as we get closer, more objectionable than being in wrong color space.
// We can't switch to linear here unless we do it everywhere*
// *gbuffer is sRGB, convert to linear whenever sampling from it
diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
// <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye)
// // SL-12005 Projector light pops as we get closer, more objectionable than being in wrong color space.
// // We can't switch to linear here unless we do it everywhere*
// // *gbuffer is sRGB, convert to linear whenever sampling from it
// diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
// </FS:Beq>
vec3 dlit = vec3(0, 0, 0);

View File

@ -35,11 +35,13 @@ out vec4 frag_color;
uniform sampler2DRect diffuseRect;
uniform sampler2DRect specularRect;
uniform sampler2DRect normalMap;
uniform samplerCube environmentMap;
// <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye)
//uniform sampler2DRect normalMap;
//uniform samplerCube environmentMap;
// </FS:Beq>
uniform sampler2D noiseMap;
uniform sampler2D lightFunc;
uniform sampler2DRect depthMap;
//uniform sampler2DRect depthMap;// <FS:Beq/> Colour space and shader fixes for BUG-228586 (Rye)
uniform vec3 env_mat[3];
uniform float sun_wash;
@ -90,7 +92,7 @@ void main()
float noise = texture2D(noiseMap, frag.xy/128.0).b;
vec3 col = texture2DRect(diffuseRect, frag.xy).rgb;
col.rgb = srgb_to_linear(col.rgb);
// col.rgb = srgb_to_linear(col.rgb); // <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye)
float fa = falloff+1.0;
float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);

View File

@ -37,7 +37,8 @@ out vec4 frag_color;
uniform sampler2DRect diffuseRect;
uniform sampler2DRect specularRect;
uniform sampler2DRect normalMap;
uniform sampler2DRect lightMap;
// <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye)
// uniform sampler2DRect lightMap;
uniform sampler2DRect depthMap;
uniform samplerCube environmentMap;
uniform sampler2D lightFunc;
@ -90,7 +91,7 @@ void main()
vec4 diffuse = texture2DRect(diffuseRect, tc);
//convert to gamma space
//diffuse.rgb = linear_to_srgb(diffuse.rgb);
diffuse.rgb = linear_to_srgb(diffuse.rgb);// <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye) uniform sampler2DRect depthMap;
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec3 color = vec3(0);

View File

@ -177,8 +177,11 @@ void main()
float da = dot(norm, lv);
vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
//light shaders output linear and are gamma corrected later in postDeferredGammaCorrectF.glsl
diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
// <FS:Beq> Colour space and shader fixes for BUG-228586
// This makes the comment below incorrect, it will presumably be removed if/when the lab apply the proper changes)
// // light shaders output linear and are gamma corrected later in postDeferredGammaCorrectF.glsl
// diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
// </FS:Beq>
vec4 spec = texture2DRect(specularRect, frag.xy);

View File

@ -43,13 +43,13 @@ void default_lighting()
{
vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
color *= vertex_color;
if (color.a < minimum_alpha)
{
discard;
}
color *= vertex_color;
color.rgb = atmosLighting(color.rgb);
color.rgb = scaleSoftClip(color.rgb);

View File

@ -43,13 +43,13 @@ void fullbright_lighting_water()
{
vec4 color = diffuseLookup(vary_texcoord0.xy);
color.rgb *= vertex_color.rgb;
if (color.a < minimum_alpha)
{
discard;
}
color.rgb *= vertex_color.rgb;
color.rgb = fullbrightAtmosTransport(color.rgb);
frag_color = applyWaterFog(color);

View File

@ -41,13 +41,15 @@ VARYING vec2 vary_texcoord0;
void fullbright_lighting_water()
{
vec4 color = texture2D(diffuseMap, vary_texcoord0.xy) * vertex_color;
vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
if (color.a < minimum_alpha)
{
discard;
}
color.rgb *= vertex_color.rgb;
color.rgb = fullbrightAtmosTransport(color.rgb);
frag_color = applyWaterFog(color);

View File

@ -41,13 +41,13 @@ void default_lighting_water()
{
vec4 color = diffuseLookup(vary_texcoord0.xy);
color.rgb *= vertex_color.rgb;
if (color.a < minimum_alpha)
{
discard;
}
color.rgb *= vertex_color.rgb;
color.rgb = atmosLighting(color.rgb);
frag_color = applyWaterFog(color);

View File

@ -43,13 +43,13 @@ void default_lighting_water()
{
vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
color.rgb *= vertex_color.rgb;
if (color.a < minimum_alpha)
{
discard;
}
color.rgb *= vertex_color.rgb;
color.rgb = atmosLighting(color.rgb);
color = applyWaterFog(color);

View File

@ -191,11 +191,12 @@ void main()
float da = dot(norm, lv);
vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
// SL-12005 Projector light pops as we get closer, more objectionable than being in wrong color space.
// We can't switch to linear here unless we do it everywhere*
// *gbuffer IS sRGB, convert to linear since this shader outputs linear
diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
// <FS:Beq> Colour space and shader fixes for BUG-228586
// removing comments as colour space change
// // SL-12005 Projector light pops as we get closer, more objectionable than being in wrong color space.
// // We can't switch to linear here unless we do it everywhere*
// // *gbuffer IS sRGB, convert to linear since this shader outputs linear
// diff_tex.rgb = srgb_to_linear(diff_tex.rgb);
vec4 spec = texture2DRect(specularRect, frag.xy);
vec3 dlit = vec3(0, 0, 0);

View File

@ -88,6 +88,10 @@ void main()
da = pow(da, light_gamma);
vec4 diffuse = texture2DRect(diffuseRect, tc);
// <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye)
// convert to gamma space
diffuse.rgb = linear_to_srgb(diffuse.rgb);
// </FS:Beq>
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;

View File

@ -188,8 +188,10 @@ void main()
lv = proj_origin-pos.xyz;
lv = normalize(lv);
float da = dot(norm, lv);
vec3 diff_tex = srgb_to_linear(texture2DRect(diffuseRect, frag.xy).rgb);
// <FS:Beq> Colour space and shader fixes for BUG-228586 (Rye)
// vec3 diff_tex = srgb_to_linear(texture2DRect(diffuseRect, frag.xy).rgb);
vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
// </FS:Beq>
vec4 spec = texture2DRect(specularRect, frag.xy);
vec3 dlit = vec3(0, 0, 0);

View File

@ -1505,17 +1505,10 @@ void FSChatHistory::appendMessage(const LLChat& chat, const LLSD &args, const LL
}
name_params.use_default_link_style = false;
name_params.link_href = LLSLURL("agent", chat.mFromID, "inspect").getSLURLString();
name_params.link_href = LLSLURL(from_me ? "agentself" : "agent", chat.mFromID, "inspect").getSLURLString();
if (from_me && gSavedSettings.getBOOL("FSChatHistoryShowYou"))
{
appendText(LLTrans::getString("AgentNameSubst"), prependNewLineState, name_params);
}
else
{
// Add link to avatar's inspector and delimiter to message.
appendText(std::string(name_params.link_href), prependNewLineState, name_params);
}
// Add link to avatar's inspector and delimiter to message.
appendText(std::string(name_params.link_href), prependNewLineState, name_params);
prependNewLineState = false;

View File

@ -1323,6 +1323,38 @@ void LLAgentCamera::updateCamera()
gAgentCamera.getPanDownKey() > 0.f); // bottom
}
// <FS:Ansariel> Phototools camera
camera_floater = LLFloaterReg::findTypedInstance<LLFloaterCamera>("phototools_camera");
if (camera_floater)
{
camera_floater->mRotate->setToggleState(gAgentCamera.getOrbitRightKey() > 0.f, // left
gAgentCamera.getOrbitUpKey() > 0.f, // top
gAgentCamera.getOrbitLeftKey() > 0.f, // right
gAgentCamera.getOrbitDownKey() > 0.f); // bottom
camera_floater->mTrack->setToggleState(gAgentCamera.getPanLeftKey() > 0.f, // left
gAgentCamera.getPanUpKey() > 0.f, // top
gAgentCamera.getPanRightKey() > 0.f, // right
gAgentCamera.getPanDownKey() > 0.f); // bottom
}
// </FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
camera_floater = LLFloaterReg::findTypedInstance<LLFloaterCamera>("fs_camera_small");
if (camera_floater)
{
camera_floater->mRotate->setToggleState(gAgentCamera.getOrbitRightKey() > 0.f, // left
gAgentCamera.getOrbitUpKey() > 0.f, // top
gAgentCamera.getOrbitLeftKey() > 0.f, // right
gAgentCamera.getOrbitDownKey() > 0.f); // bottom
camera_floater->mTrack->setToggleState(gAgentCamera.getPanLeftKey() > 0.f, // left
gAgentCamera.getPanUpKey() > 0.f, // top
gAgentCamera.getPanRightKey() > 0.f, // right
gAgentCamera.getPanDownKey() > 0.f); // bottom
}
// </FS:Ansariel>
// Handle camera movement based on keyboard.
const F32 ORBIT_OVER_RATE = 90.f * DEG_TO_RAD; // radians per second
const F32 ORBIT_AROUND_RATE = 90.f * DEG_TO_RAD; // radians per second

View File

@ -268,6 +268,12 @@ void LLFloaterCamera::resetCameraMode()
if (!floater_camera) return;
floater_camera->switchMode(CAMERA_CTRL_MODE_PAN);
// <FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
floater_camera = LLFloaterCamera::findSmallInstance();
if (!floater_camera) return;
floater_camera->switchMode(CAMERA_CTRL_MODE_PAN);
// </FS:Ansariel>
}
void LLFloaterCamera::onAvatarEditingAppearance(bool editing)
@ -282,6 +288,12 @@ void LLFloaterCamera::onAvatarEditingAppearance(bool editing)
if (!floater_camera) return;
floater_camera->handleAvatarEditingAppearance(editing);
// <FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
floater_camera = LLFloaterCamera::findSmallInstance();
if (!floater_camera) return;
floater_camera->handleAvatarEditingAppearance(editing);
// <FS:Ansariel>
}
void LLFloaterCamera::handleAvatarEditingAppearance(bool editing)
@ -324,6 +336,18 @@ void LLFloaterCamera::toPrevMode()
}
}
// </FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
floater_camera = LLFloaterCamera::findSmallInstance();
if (floater_camera)
{
floater_camera->updateItemsSelection();
if(floater_camera->inFreeCameraMode())
{
activate_camera_tool();
}
}
// </FS:Ansariel>
}
LLFloaterCamera* LLFloaterCamera::findInstance()
@ -338,6 +362,13 @@ LLFloaterCamera* LLFloaterCamera::findPhototoolsInstance()
}
// </FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
LLFloaterCamera* LLFloaterCamera::findSmallInstance()
{
return LLFloaterReg::findTypedInstance<LLFloaterCamera>("fs_camera_small");
}
// </FS:Ansariel>
void LLFloaterCamera::onOpen(const LLSD& key)
{
LLFirstUse::viewPopup();
@ -353,7 +384,9 @@ void LLFloaterCamera::onOpen(const LLSD& key)
toPrevMode();
mClosed = FALSE;
populatePresetCombo();
// <FS:Ansariel> Optional small camera floater
if (mPresetCombo)
populatePresetCombo();
}
void LLFloaterCamera::onClose(bool app_quitting)
@ -381,7 +414,8 @@ LLFloaterCamera::LLFloaterCamera(const LLSD& val)
: LLFloater(val),
mClosed(FALSE),
mCurrMode(CAMERA_CTRL_MODE_PAN),
mPrevMode(CAMERA_CTRL_MODE_PAN)
mPrevMode(CAMERA_CTRL_MODE_PAN),
mPresetCombo(nullptr) // <FS:Ansariel> Optional small camera floater
{
LLHints::getInstance()->registerHintTarget("view_popup", getHandle());
mCommitCallbackRegistrar.add("CameraPresets.ChangeView", boost::bind(&LLFloaterCamera::onClickCameraItem, _2));
@ -395,7 +429,7 @@ BOOL LLFloaterCamera::postBuild()
mRotate = getChild<LLJoystickCameraRotate>(ORBIT);
mZoom = findChild<LLPanelCameraZoom>(ZOOM);
mTrack = getChild<LLJoystickCameraTrack>(PAN);
mPresetCombo = getChild<LLComboBox>("preset_combo");
mPresetCombo = findChild<LLComboBox>("preset_combo"); // <FS:Ansariel> Optional small camera floater
// <FS:Ansariel> Improved camera floater
//getChild<LLTextBox>("precise_ctrs_label")->setShowCursorHand(false);
@ -421,8 +455,15 @@ BOOL LLFloaterCamera::postBuild()
}
// </FS:Ansariel>
mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
// <FS:Ansariel> Optional small camera floater
//mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
//LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
if (mPresetCombo)
{
mPresetCombo->setCommitCallback(boost::bind(&LLFloaterCamera::onCustomPresetSelected, this));
LLPresetsManager::getInstance()->setPresetListChangeCameraCallback(boost::bind(&LLFloaterCamera::populatePresetCombo, this));
}
// </FS:Ansariel>
update();
@ -590,6 +631,19 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
camera_floater->updateItemsSelection();
}
// </FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
camera_floater = LLFloaterCamera::findSmallInstance();
if (camera_floater)
{
// <FS:Ansariel> FIRE-29950: Re-add weird legacy object view camera toggle
//camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
camera_floater->mCurrMode == CAMERA_CTRL_MODE_FREE_CAMERA ? camera_floater->switchMode(CAMERA_CTRL_MODE_PAN) : camera_floater->switchMode(CAMERA_CTRL_MODE_FREE_CAMERA);
// </FS:Ansariel>
camera_floater->updateItemsSelection();
camera_floater->fromFreeToPresets();
}
// </FS:Ansariel>
}
// <FS:Ansariel> Improved camera floater
else if ("reset_view" == name)
@ -604,6 +658,12 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
// </FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
camera_floater = LLFloaterCamera::findSmallInstance();
if (camera_floater)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
// </FS:Ansariel>
gAgentCamera.changeCameraToDefault();
switchToPreset("rear_view");
}
@ -620,6 +680,12 @@ void LLFloaterCamera::onClickCameraItem(const LLSD& param)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
// </FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
camera_floater = LLFloaterCamera::findSmallInstance();
if (camera_floater)
camera_floater->switchMode(CAMERA_CTRL_MODE_PAN);
// </FS:Ansariel>
switchToPreset(name);
}
}
@ -688,6 +754,15 @@ void LLFloaterCamera::switchToPreset(const std::string& name)
camera_floater->switchMode(CAMERA_CTRL_MODE_PRESETS);
}
// </FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
camera_floater = LLFloaterCamera::findSmallInstance();
if (camera_floater)
{
camera_floater->updateItemsSelection();
camera_floater->fromFreeToPresets();
}
// </FS:Ansariel>
}
void LLFloaterCamera::populatePresetCombo()

View File

@ -91,6 +91,8 @@ private:
static LLFloaterCamera* findInstance();
// <FS:Ansariel> Phototools camera
static LLFloaterCamera* findPhototoolsInstance();
// <FS:Ansariel> Optional small camera floater
static LLFloaterCamera* findSmallInstance();
/*virtual*/ BOOL postBuild();

View File

@ -102,11 +102,15 @@ BOOL LLFloaterConversationPreview::postBuild()
file = "chat";
}
mChatHistoryFileName = file;
// <FS:Ansariel> Obsolete because of https://bitbucket.org/lindenlab/viewer/commits/57b32eb01cd35bbac440569df885036eb24f2369
//if (mIsGroup && !LLStringUtil::endsWith(mChatHistoryFileName, GROUP_CHAT_SUFFIX))
//{
// mChatHistoryFileName += GROUP_CHAT_SUFFIX;
//}
// <FS:Ansariel> Broken version got removed in https://bitbucket.org/lindenlab/viewer/commits/57b32eb01cd35bbac440569df885036eb24f2369
// but this is actually needed in the fixed form: If a group chat
// log is stored in conversation.log without the suffix, the filename
// will not be updated until the conversation is removed from the log,
// resulting in the old chat log being displayed.
if (mIsGroup && !LLStringUtil::endsWith(mChatHistoryFileName, GROUP_CHAT_SUFFIX))
{
mChatHistoryFileName += GROUP_CHAT_SUFFIX;
}
// </FS:Ansariel>
LLStringUtil::format_map_t args;
args["[NAME]"] = name;

View File

@ -2513,7 +2513,6 @@ void LLFloaterPreference::disableUnavailableSettings()
LLComboBox* ctrl_reflections = getChild<LLComboBox>("Reflections");
LLCheckBoxCtrl* ctrl_avatar_vp = getChild<LLCheckBoxCtrl>("AvatarVertexProgram");
LLCheckBoxCtrl* ctrl_avatar_cloth = getChild<LLCheckBoxCtrl>("AvatarCloth");
LLCheckBoxCtrl* ctrl_shader_enable = getChild<LLCheckBoxCtrl>("BasicShaders");
LLCheckBoxCtrl* ctrl_wind_light = getChild<LLCheckBoxCtrl>("WindLightUseAtmosShaders");
LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");
LLComboBox* ctrl_shadows = getChild<LLComboBox>("ShadowDetail");
@ -2521,39 +2520,6 @@ void LLFloaterPreference::disableUnavailableSettings()
LLCheckBoxCtrl* ctrl_dof = getChild<LLCheckBoxCtrl>("UseDoF");
LLSliderCtrl* sky = getChild<LLSliderCtrl>("SkyMeshDetail");
// if vertex shaders off, disable all shader related products
if (!LLFeatureManager::getInstance()->isFeatureAvailable("VertexShaderEnable"))
{
ctrl_shader_enable->setEnabled(FALSE);
ctrl_shader_enable->setValue(FALSE);
ctrl_wind_light->setEnabled(FALSE);
ctrl_wind_light->setValue(FALSE);
sky->setEnabled(FALSE);
ctrl_reflections->setEnabled(FALSE);
ctrl_reflections->setValue(0);
ctrl_avatar_vp->setEnabled(FALSE);
ctrl_avatar_vp->setValue(FALSE);
ctrl_avatar_cloth->setEnabled(FALSE);
ctrl_avatar_cloth->setValue(FALSE);
ctrl_shadows->setEnabled(FALSE);
ctrl_shadows->setValue(0);
ctrl_ssao->setEnabled(FALSE);
ctrl_ssao->setValue(FALSE);
ctrl_dof->setEnabled(FALSE);
ctrl_dof->setValue(FALSE);
ctrl_deferred->setEnabled(FALSE);
ctrl_deferred->setValue(FALSE);
}
// disabled windlight
if (!LLFeatureManager::getInstance()->isFeatureAvailable("WindLightUseAtmosShaders"))
{

View File

@ -4392,7 +4392,9 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
}
// </FS:Ansariel>
// <FS:Ansariel> Fix "outfits" context menu
if (outfits_id == mUUID)
if (model->isObjectDescendentOf(mUUID, outfits_id) && getCategory() &&
(getCategory()->getPreferredType() == LLFolderType::FT_NONE ||
getCategory()->getPreferredType() == LLFolderType::FT_MY_OUTFITS))
{
items.push_back(std::string("New Outfit"));
}
@ -4498,17 +4500,17 @@ void LLFolderBridge::buildContextMenuOptions(U32 flags, menuentry_vec_t& items
// Not sure what the right thing is to do here.
if (!isCOFFolder() && cat && (cat->getPreferredType() != LLFolderType::FT_OUTFIT))
{
// <FS:Ansariel> Fix "outfits" context menu
//if (!isInboxFolder()) // don't allow creation in inbox
if (!isInboxFolder() && outfits_id != mUUID) // don't allow creation in inbox
// </FS:Ansariel>
if (!isInboxFolder()) // don't allow creation in inbox
{
// Do not allow to create 2-level subfolder in the Calling Card/Friends folder. EXT-694.
if (!LLFriendCardsManager::instance().isCategoryInFriendFolder(cat))
{
items.push_back(std::string("New Folder"));
}
if (!isMarketplaceListingsFolder())
// <FS:Ansariel> Fix "outfits" context menu
//if (!isMarketplaceListingsFolder())
if (!isMarketplaceListingsFolder() && !model->isObjectDescendentOf(mUUID, outfits_id))
// </FS:Ansariel>
{
items.push_back(std::string("New Script"));
items.push_back(std::string("New Note"));

View File

@ -492,7 +492,13 @@ void LLLogChat::loadChatHistory(const std::string& file_name, std::list<LLSD>& m
if (is_group)
{
std::string old_name(file_name);
old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
// <FS:Ansariel> FIRE-30582: Fix out of range crash
//old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
if (LLStringUtil::endsWith(old_name, GROUP_CHAT_SUFFIX))
{
old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
}
// </FS:Ansariel>
fptr = LLFile::fopen(LLLogChat::makeLogFileName(old_name), "r");
if (fptr)
{
@ -1256,7 +1262,13 @@ void LLLoadHistoryThread::loadHistory(const std::string& file_name, std::list<LL
if (is_group)
{
std::string old_name(file_name);
old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
// <FS:Ansariel> FIRE-30582: Fix out of range crash
//old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
if (LLStringUtil::endsWith(old_name, GROUP_CHAT_SUFFIX))
{
old_name.erase(old_name.size() - GROUP_CHAT_SUFFIX.size());
}
// </FS:Ansariel>
fptr = LLFile::fopen(LLLogChat::makeLogFileName(old_name), "r");
if (fptr)
{

View File

@ -182,6 +182,7 @@ LLPanelMainInventory::LLPanelMainInventory(const LLPanel::Params& p)
mFilterMap["filter_type_textures"] = 0x01 << LLInventoryType::IT_TEXTURE;
mFilterMap["filter_type_snapshots"] = 0x01 << LLInventoryType::IT_SNAPSHOT;
mFilterMap["filter_type_meshes"] = 0x01 << LLInventoryType::IT_MESH;
mFilterMap["filter_type_settings"] = 0x01 << LLInventoryType::IT_SETTINGS;
// initialize empty filter mask
mFilterMask = 0;

View File

@ -146,5 +146,9 @@ void LLPanelPresetsCameraPulldown::onViewButtonClick(const LLSD& user_data)
// close the minicontrol, we're bringing up the big one
setVisible(FALSE);
LLFloaterReg::toggleInstanceOrBringToFront("camera");
// <FS:Ansariel> Optional small camera floater
//LLFloaterReg::toggleInstanceOrBringToFront("camera");
std::string floater_name = gSavedSettings.getBOOL("FSUseSmallCameraFloater") ? "fs_camera_small" : "camera";
LLFloaterReg::toggleInstanceOrBringToFront(floater_name);
// </FS:Ansariel>
}

View File

@ -213,6 +213,20 @@ public:
};
LLAgentHandler gAgentHandler;
// <FS:Ansariel> FIRE-30611: "You" in transcript is underlined
class FSAgentSelfHandler : public LLCommandHandler
{
public:
// requires trusted browser to trigger
FSAgentSelfHandler() : LLCommandHandler("agentself", UNTRUSTED_THROTTLE) { }
bool handle(const LLSD& params, const LLSD& query_map, LLMediaCtrl* web)
{
return gAgentHandler.handle(params, query_map, web);
}
};
FSAgentSelfHandler gAgentSelfHandler;
// </FS:Ansariel>
//-- LLPanelProfile::ChildStack begins ----------------------------------------
LLPanelProfile::ChildStack::ChildStack()

View File

@ -1162,7 +1162,9 @@ LLVector3d LLToolGrabBase::getGrabPointGlobal()
void send_ObjectGrab_message(LLViewerObject* object, const LLPickInfo & pick, const LLVector3 &grab_offset)
{
if (!object) return;
// <FS:Ansariel> Crash fix
//if (!object) return;
if (!object || !object->getRegion()) return;
LLMessageSystem *msg = gMessageSystem;
@ -1199,7 +1201,9 @@ void send_ObjectGrab_message(LLViewerObject* object, const LLPickInfo & pick, co
void send_ObjectDeGrab_message(LLViewerObject* object, const LLPickInfo & pick)
{
if (!object) return;
// <FS:Ansariel> Crash fix
//if (!object) return;
if (!object || !object->getRegion()) return;
LLMessageSystem *msg = gMessageSystem;

View File

@ -1019,6 +1019,20 @@ void handleRenderHiDPIChanged(const LLSD& newvalue)
}
// </FS:TS> FIRE-24081
// <FS:Ansariel> Optional small camera floater
void handleSmallCameraFloaterChanged(const LLSD& newValue)
{
std::string old_floater_name = newValue.asBoolean() ? "camera" : "fs_camera_small";
std::string new_floater_name = newValue.asBoolean() ? "fs_camera_small" : "camera";
if (LLFloaterReg::instanceVisible(old_floater_name))
{
LLFloaterReg::hideInstance(old_floater_name);
LLFloaterReg::showInstance(new_floater_name);
}
}
// </FS:Ansariel>
////////////////////////////////////////////////////////////////////////////
void settings_setup_listeners()
@ -1263,6 +1277,9 @@ void settings_setup_listeners()
// <FS:Ansariel> Dynamic texture memory calculation
gSavedSettings.getControl("FSDynamicTextureMemory")->getSignal()->connect(boost::bind(&handleDynamicTextureMemoryChanged, _2));
// <FS:Ansariel> Optional small camera floater
gSavedSettings.getControl("FSUseSmallCameraFloater")->getSignal()->connect(boost::bind(&handleSmallCameraFloaterChanged, _2));
}
#if TEST_CACHED_CONTROL

View File

@ -265,6 +265,8 @@ void LLViewerFloaterReg::registerFloaters()
LLFloaterReg::add("bumps", "floater_bumps.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterBump>);
LLFloaterReg::add("camera", "floater_camera.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCamera>);
// <FS:Ansariel> Optional small camera floater
LLFloaterReg::add("fs_camera_small", "floater_fs_camera_small.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCamera>);
LLFloaterReg::add("camera_presets", "floater_camera_presets.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterCameraPresets>);
LLFloaterReg::add("chat_voice", "floater_voice_chat_volume.xml", (LLFloaterBuildFunc)&LLFloaterReg::build<LLFloaterChatVoiceVolume>);
// <FS:Ansariel> [FS communication UI]

View File

@ -11367,6 +11367,27 @@ bool use_http_textures()
}
// <FS:Ansariel>
// <FS:Ansariel> Optional small camera floater
class FSToggleCameraFloater : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
std::string floater_name = gSavedSettings.getBOOL("FSUseSmallCameraFloater") ? "fs_camera_small" : "camera";
LLFloaterReg::toggleInstance(floater_name);
return true;
}
};
class FSCheckCameraFloater : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
static LLCachedControl<bool> fsUseSmallCameraFloater(gSavedSettings, "FSUseSmallCameraFloater");
return LLFloaterReg::instanceVisible(fsUseSmallCameraFloater ? "fs_camera_small" : "camera");
}
};
// <FS:Ansariel>
void initialize_menus()
{
// A parameterized event handler used as ctrl-8/9/0 zoom controls below.
@ -11462,7 +11483,11 @@ void initialize_menus()
// <FS:Zi> Add reset camera angles menu
view_listener_t::addMenu(new LLViewResetCameraAngles(), "View.ResetCameraAngles");
// </FS:Zi>
// <FS:Ansariel> Optional small camera floater
view_listener_t::addMenu(new FSToggleCameraFloater(), "View.ToggleCameraFloater");
view_listener_t::addMenu(new FSCheckCameraFloater(), "View.CheckCameraFloater");
// </FS:Ansariel>
// Me > Movement
view_listener_t::addMenu(new LLAdvancedAgentFlyingInfo(), "Agent.getFlying");

View File

@ -84,6 +84,10 @@
#include "llviewernetwork.h"
// <FS:Ansariel> FIRE-30632: Bulk Windlight import
#include "llenvironment.h"
#include "llsettingsvo.h"
class LLFileEnableUpload : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
@ -1032,6 +1036,100 @@ void upload_new_resource(
}
}
// <FS:Ansariel> FIRE-30632: Bulk Windlight import
static std::set<std::string> windlight_filenames;
static bool bulk_windlight_import_active = false;
void on_windlight_imported(LLUUID inventory_id, LLSD results, const std::string& name)
{
if (inventory_id.isNull() || !results["success"].asBoolean())
{
LLSD args;
args["NAME"] = name;
LLNotificationsUtil::add("CantCreateInventoryName", args);
}
windlight_filenames.erase(name);
if (windlight_filenames.empty())
{
bulk_windlight_import_active = false;
LLUploadDialog::modalUploadFinished();
LLNotificationsUtil::add("WindlightBulkImportFinished");
}
}
const void import_windlight_bulk(const std::vector<std::string>& filenames, LLFilePicker::ELoadFilter filter_type, LLSettingsType::type_e settings_type)
{
LLSD messages;
LLSettingsBase::ptr_t settings;
if (filenames.size() < 1) return;
bulk_windlight_import_active = true;
LLUploadDialog::modalUploadDialog(LLTrans::getString("ImportingWindlightBulk"));
const LLUUID parent_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_SETTINGS);
windlight_filenames.clear();
windlight_filenames.insert(filenames.begin(), filenames.end());
for (auto& filename : filenames)
{
switch (settings_type)
{
case LLSettingsType::ST_SKY:
settings = LLEnvironment::createSkyFromLegacyPreset(filename, messages);
break;
case LLSettingsType::ST_WATER:
settings = LLEnvironment::createWaterFromLegacyPreset(filename, messages);
break;
case LLSettingsType::ST_DAYCYCLE:
settings = LLEnvironment::createDayCycleFromLegacyPreset(filename, messages);
break;
default:
settings.reset();
break;
}
if (settings)
{
LLSettingsVOBase::createInventoryItem(settings, parent_id, LLURI::unescape(gDirUtilp->getBaseFileName(filename, true)),
[filename](LLUUID asset_id, LLUUID inventory_id, LLUUID, LLSD results) { on_windlight_imported(inventory_id, results, filename); });
}
else
{
LLNotificationsUtil::add("WLImportFail", messages);
windlight_filenames.erase(filename);
}
}
// For error cases
if (windlight_filenames.empty())
{
bulk_windlight_import_active = false;
LLUploadDialog::modalUploadFinished();
LLNotificationsUtil::add("WindlightBulkImportFinished");
}
}
class FSFileImportWindlightBulk : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
LLSettingsType::type_e settings_type = (LLSettingsType::type_e)userdata.asInteger();
(new LLFilePickerReplyThread(boost::bind(&import_windlight_bulk, _1, _2, settings_type), LLFilePicker::FFLOAD_XML, true))->getFile();
return true;
}
};
class FSFileEnableImportWindlightBulk : public view_listener_t
{
bool handleEvent(const LLSD& userdata)
{
return !bulk_windlight_import_active;
}
};
// </FS:Ansariel>
void init_menu_file()
{
@ -1053,5 +1151,10 @@ void init_menu_file()
view_listener_t::addMenu(new LLMeshUploadVisible(), "File.VisibleUploadModel");
view_listener_t::addCommit(new FSFileImportLinkset(), "File.ImportLinkset"); // <FS:CR> Import linkset item
// <FS:Ansariel> FIRE-30632: Bulk Windlight import
view_listener_t::addCommit(new FSFileImportWindlightBulk(), "File.ImportWindlightBulk");
view_listener_t::addEnable(new FSFileEnableImportWindlightBulk(), "File.EnableImportWindlightBulk");
// </FS:Ansariel>
// "File.SaveTexture" moved to llpanelmaininventory so that it can be properly handled.
}

View File

@ -61,12 +61,17 @@
class FSSettingsCollector : public LLInventoryCollectFunctor
{
public:
FSSettingsCollector() {}
FSSettingsCollector()
{
mMarketplaceFolderUUID = gInventory.findCategoryUUIDForType(LLFolderType::FT_MARKETPLACE_LISTINGS, false);
}
virtual ~FSSettingsCollector() {}
bool operator()(LLInventoryCategory* cat, LLInventoryItem* item)
{
if (item && item->getType() == LLAssetType::AT_SETTINGS &&
!gInventory.isObjectDescendentOf(item->getUUID(), mMarketplaceFolderUUID) &&
mSeen.find(item->getAssetUUID()) == mSeen.end())
{
mSeen.insert(item->getAssetUUID());
@ -79,6 +84,7 @@ public:
}
protected:
LLUUID mMarketplaceFolderUUID;
std::set<LLUUID> mSeen;
};

View File

@ -160,7 +160,7 @@ BEGIN
VALUE "FileDescription", "Firestorm"
VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
VALUE "InternalName", "Firestorm"
VALUE "LegalCopyright", "Copyright \251 2010-2020, The Phoenix Firestorm Project, Inc."
VALUE "LegalCopyright", "Copyright \251 2010-2021, The Phoenix Firestorm Project, Inc."
VALUE "OriginalFilename", "Firestorm.exe"
VALUE "ProductName", "Firestorm"
VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 405 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 331 B

View File

@ -93,7 +93,8 @@
<combo_box.item value="filter_type_textures" label="Texturen" />
<combo_box.item value="filter_type_snapshots" label="Fotos" />
<combo_box.item value="filter_type_meshes" label="Meshes" />
<combo_box.item value="filter_separator" label="------------" enabled="false" />
<combo_box.item value="filter_type_settings" label="Einstellungen" />
<combo_box.item value="filter_separator" label="------------" />
<combo_box.item value="filter_type_custom" label="Benutzerdefiniert..." />
</combo_box>
<tab_container name="inventory filter tabs">

View File

@ -170,7 +170,6 @@
left_pad="2">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
tool_tip="Rear View"
parameter="Rear View" />
<panel_camera_item.picture
image_name="Cam_Preset_Back_Off" />

View File

@ -522,6 +522,7 @@
<combo_box.item value="filter_type_textures" label="Textures" />
<combo_box.item value="filter_type_snapshots" label="Snapshots" />
<combo_box.item value="filter_type_meshes" label="Meshes" />
<combo_box.item value="filter_type_settings" label="Settings" />
<combo_box.item value="filter_separator" label="------------" enabled="false" />
<combo_box.item value="filter_type_custom" label="Custom..." />

View File

@ -92,6 +92,7 @@
<combo_box.item value="filter_type_textures" label="Tekstury" />
<combo_box.item value="filter_type_snapshots" label="Zdjęcia" />
<combo_box.item value="filter_type_meshes" label="Mesze" />
<combo_box.item value="filter_type_settings" label="Otoczenia" />
<combo_box.item value="filter_type_custom" label="Własny filtr..." />
</combo_box>
<tab_container name="inventory filter tabs">

View File

@ -89,6 +89,7 @@
<combo_box.item value="filter_type_textures" label="Текстуры" />
<combo_box.item value="filter_type_snapshots" label="Снимки" />
<combo_box.item value="filter_type_meshes" label="Меш" />
<combo_box.item value="filter_type_settings" label="Настройки" />
<combo_box.item value="filter_type_custom" label="Другое..." />
</combo_box>
<tab_container name="inventory filter tabs">

View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="fs_camera_floater_small" title="Kamerasteuerungen">
<floater.string name="rotate_tooltip">
Kamera um Fokus drehen
</floater.string>
<floater.string name="zoom_tooltip">
Kamera auf Fokus zoomen
</floater.string>
<floater.string name="move_tooltip">
Kamera nach oben, unten, links und rechts bewegen
</floater.string>
<floater.string name="free_mode_title">
Objekt ansehen
</floater.string>
<panel name="zoom">
<layout_stack name="camera_view_layout_stack">
<layout_panel name="camera_rotate_layout_panel">
<joystick_rotate name="cam_rotate_stick" tool_tip="Kamera um Fokus kreisen"/>
</layout_panel>
<layout_panel name="camera_zoom_layout_panel">
<slider_bar name="zoom_slider" tool_tip="Kamera auf Fokus zoomen"/>
</layout_panel>
<layout_panel name="panel_track">
<joystick_track name="cam_track_stick" tool_tip="Kamera nach oben, unten, links und rechts bewegen"/>
</layout_panel>
</layout_stack>
</panel>
<panel name="buttons_view">
<panel_camera_item name="front_view" tool_tip="Frontalansicht">
<panel_camera_item.text name="front_view_text">
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="group_view" tool_tip="Seitenansicht">
<panel_camera_item.text name="side_view_text">
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="rear_view" tool_tip="Rückansicht">
<panel_camera_item.text name="rear_view_text">
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel name="buttons">
<panel_camera_item name="object_view" tool_tip="Objekt-Ansicht">
<panel_camera_item.text name="object_view_text">
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="mouselook_view" tool_tip="Mouselook">
<panel_camera_item.text name="mouselook_view_text">
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="reset_view" tool_tip="Ansicht zurücksetzen">
<panel_camera_item.text name="reset_view_text">
</panel_camera_item.text>
</panel_camera_item>
</panel>
</floater>

View File

@ -122,6 +122,11 @@
<menu_item_call label="Meine Umgebungen..." name="my_environs"/>
<menu_item_call label="Persönliche Beleuchtung..." name="adjustment_tool"/>
<menu_item_check label="Wolken pausieren" name="pause_clouds"/>
<menu label="Mehrfach-Import" name="WL Bulk Import">
<menu_item_call label="Tage..." name="WL Bulk Import Days"/>
<menu_item_call label="Himmel..." name="WL Bulk Import Skies"/>
<menu_item_call label="Wasser..." name="WL Bulk Import Water"/>
</menu>
</menu>
<menu label="Foto und Video" name="photo_and_video">
<menu_item_call label="Fototools" name="phototools_item_call"/>

View File

@ -5478,4 +5478,10 @@ Falls Sie diesen Nutzungsbestimmungen nicht zustimmen, sollten keinerlei finanzi
<notification name="EnableHiDPI">
HiDPI kann negative Effekte aufweisen und die Leistung beeinträchtigen.
</notification>
<notification name="CantCreateInventoryName">
Dieses Inventar kann nicht erstellt werden: [NAME]
</notification>
<notification name="WindlightBulkImportFinished">
Mehrfach-Import von Windlight abgeschlossen.
</notification>
</notifications>

View File

@ -28,7 +28,8 @@
<combo_box.item value="filter_type_textures" label="Texturen" />
<combo_box.item value="filter_type_snapshots" label="Fotos" />
<combo_box.item value="filter_type_meshes" label="Meshes" />
<combo_box.item value="filter_separator" label="------------" enabled="false" />
<combo_box.item value="filter_type_settings" label="Einstellungen" />
<combo_box.item value="filter_separator" label="------------" />
<combo_box.item value="filter_type_custom" label="Benutzerdefiniert..." />
</combo_box>
<tab_container name="inventory filter tabs">

View File

@ -119,6 +119,7 @@
<check_box label="Deaktiviere automatisches Öffnen der Blockierliste" name="FSDisableBlockListAutoOpen" tool_tip="Deaktiviert das automatische Öffnen der Blockierliste, wenn Avatare oder Objekte geblockt werden."/>
<check_box label="„Freunde“ und „Gruppen“ im Menü „Unterhalten“ öffnen die [SHORT_VIEWER_GENERATION]-Version" name="FSUseV2Friends" tool_tip="Falls aktiviert, werden Freunde bzw. Gruppen im „Leute“-Fenster geöffnet - ansonsten im Fenster „Kontakte“."/>
<check_box label="Ursprüngliche Version des Objekteigenschaften-Fensters verwenden" name="FSUseLegacyObjectProperties" tool_tip="Falls aktiviert, wird die ursprüngliche Version im Viewer-1-Stil des Eigenschaften-Fensters für Objekte verwendet."/>
<check_box label="Kleineres Fenster für Kamerasteuerung verwenden" name="FSUseSmallCameraFloater" tool_tip="Falls aktiviert, wird die ursprüngliche, kleinere Version des Fensters für die Kamerasteuerung ohne die Kontrollen für die Kamera-Voreinstellungen verwendet."/>
<text name="standalone_textbox">
Eigene Fenster verwenden für:
</text>

View File

@ -7147,4 +7147,7 @@ Ihre aktuelle Position: [AVATAR_POS]
<string name="FSAreaSearch_Cost_Label">
[COST] L$
</string>
<string name="ImportingWindlightBulk">
Importiere Windlight...
</string>
</strings>

View File

@ -74,7 +74,6 @@
left_pad="2">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
tool_tip="Rear View"
parameter="Rear View" />
<panel_camera_item.picture image_name="Cam_Preset_Back_Off" />
<panel_camera_item.selected_picture image_name="Cam_Preset_Back_On" />

View File

@ -0,0 +1,413 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<!-- header_height="0"-->
<floater
legacy_header_height="0"
header_height="0"
bg_alpha_image_overlay="LtGray_50"
can_dock="false"
can_minimize="false"
can_resize="true"
can_close="false"
chrome="true"
follows="bottom"
height="77"
min_height="77"
layout="topleft"
name="fs_camera_floater_small"
help_topic="camera_floater_small"
save_rect="true"
save_visibility="true"
save_dock_state="false"
single_instance="true"
width="155"
min_width="155">
<floater.string
name="rotate_tooltip">
Rotate Camera Around Focus
</floater.string>
<floater.string
name="zoom_tooltip">
Zoom Camera Towards Focus
</floater.string>
<floater.string
name="move_tooltip">
Move Camera Up and Down, Left and Right
</floater.string>
<floater.string
name="camera_modes_title">
camera_modes_title
</floater.string>
<floater.string
name="pan_mode_title">
pan_mode_title
</floater.string>
<floater.string
name="presets_mode_title">
presets_mode_title
</floater.string>
<floater.string
name="free_mode_title">
free_mode_title
</floater.string>
<panel
border="false"
class="camera_zoom_panel"
height="50"
layout="topleft"
left="2"
mouse_opaque="false"
name="zoom"
follows="all"
top="25"
width="150">
<layout_stack
top="0"
enabled="true"
height="50"
left="0"
mouse_opaque="true"
name="camera_view_layout_stack"
orientation="horizontal"
width="150"
follows="all">
<layout_panel
name="camera_rotate_layout_panel"
user_resize="false"
height="80"
width="80">
<joystick_rotate
follows="all"
height="80"
width="80"
image_selected="Cam_Rotate_In"
image_unselected="Cam_Rotate_Out"
layout="topleft"
left="0"
mouse_opaque="false"
name="cam_rotate_stick"
quadrant="left"
scale_image="true"
sound_flags="3"
visible="true"
tool_tip="Orbit camera around focus"
held_down_delay.seconds="0.0"
top="0" />
</layout_panel>
<layout_panel
name="camera_zoom_layout_panel"
auto_resize="false"
user_resize="false"
height="70"
width="16">
<button
follows="top|left"
height="16"
image_disabled="AddItem_Disabled"
image_selected="AddItem_Press"
image_unselected="AddItem_Off"
layout="topleft"
left_delta="-2"
name="zoom_plus_btn"
scale_image="false"
width="16"
top="0">
<commit_callback
function="Zoom.plus" />
<mouse_held_callback
function="Zoom.plus" />
</button>
<slider_bar
height="48"
layout="topleft"
name="zoom_slider"
orientation="vertical"
follows="top|left|bottom"
tool_tip="Zoom camera toward focus"
top_delta="13"
left_delta="1"
min_val="0"
max_val="1"
width="16">
<commit_callback function="Slider.value_changed"/>
</slider_bar>
<button
follows="bottom|left"
height="16"
image_disabled="MinusItem_Disabled"
image_selected="MinusItem_Press"
image_unselected="MinusItem_Off"
layout="topleft"
name="zoom_minus_btn"
scale_image="true"
top_delta="44"
left_delta="0"
width="16">
<commit_callback
function="Zoom.minus" />
<mouse_held_callback
function="Zoom.minus" />
</button>
</layout_panel>
<layout_panel
name="panel_track"
user_resize="false"
height="80"
width="80">
<joystick_track
follows="all"
height="80"
width="80"
image_selected="Cam_Tracking_In"
image_unselected="Cam_Tracking_Out"
layout="topleft"
left_delta="0"
name="cam_track_stick"
quadrant="left"
scale_image="true"
sound_flags="3"
tool_tip="Move camera up and down, left and right"
top="0"/>
</layout_panel>
</layout_stack>
</panel>
<panel
border="false"
height="22"
layout="topleft"
left="5"
top="0"
follows="top|left"
name="buttons_view"
width="56">
<panel_camera_item
name="front_view"
tool_tip="Front view"
width="18"
height="18"
layout="topleft"
left="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="Front View" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Front_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Front_On" />
<panel_camera_item.text
width="0"
name="front_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item
name="group_view"
tool_tip="Side view"
width="18"
height="18"
layout="topleft"
left_delta="20"
top_delta="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="Side View" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Side_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Side_On" />
<panel_camera_item.text
width="0"
name="group_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item
name="rear_view"
tool_tip="Rear view"
width="18"
height="18"
layout="topleft"
left_delta="20"
top_delta="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="Rear View" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Back_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="Cam_Preset_Back_On" />
<panel_camera_item.text
width="0"
name="rear_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
</panel>
<panel
border="false"
height="22"
layout="topleft"
follows="top|left"
left_pad="4"
top="0"
name="buttons"
width="58">
<panel_camera_item
name="object_view"
tool_tip="Object view"
width="18"
height="18"
layout="topleft"
left_delta="0"
top_pad="4">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="object_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="Object_View_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="Object_View_On" />
<panel_camera_item.text
width="0"
name="object_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item
name="mouselook_view"
tool_tip="Mouselook view"
width="18"
height="18"
layout="topleft"
left_delta="20"
top_delta="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="mouselook_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="MouseLook_View_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="MouseLook_View_On" />
<panel_camera_item.text
width="0"
name="mouselook_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item
name="reset_view"
tool_tip="Reset view"
width="18"
height="18"
layout="topleft"
left_delta="20"
top_delta="0">
<panel_camera_item.mousedown_callback
function="CameraPresets.ChangeView"
parameter="reset_view" />
<panel_camera_item.icon_over
top="18"
height="18"
width="18" />
<panel_camera_item.icon_selected
top="18"
height="18"
width="18" />
<panel_camera_item.picture
top="18"
height="18"
width="18"
image_name="StopReload_Off" />
<panel_camera_item.selected_picture
top="18"
height="18"
width="18"
image_name="StopReload_Over" />
<panel_camera_item.text
width="0"
name="reset_view_text">
""
</panel_camera_item.text>
</panel_camera_item>
</panel>
</floater>

View File

@ -1461,7 +1461,7 @@
label="Depth of Field focus follows pointer"
layout="topleft"
name="FSFocusPointFollowsPointer"
tool_tip="Depth of Field focus will follow your mouse, this behaviour matches that seen when using flycam. Use in conjunction with lock"
tool_tip="Depth of Field (DoF) focus will follow your mouse, this behaviour matches that seen when using flycam. Use in conjunction with DoF focus lock"
top_pad="4"
width="256"/>
<check_box

View File

@ -238,11 +238,9 @@
label="Camera Controls"
name="Camera Controls">
<menu_item_check.on_check
function="Floater.Visible"
parameter="camera" />
function="View.CheckCameraFloater" />
<menu_item_check.on_click
function="Floater.Toggle"
parameter="camera" />
function="View.ToggleCameraFloater" />
</menu_item_check>
<menu_item_separator/>
@ -1115,7 +1113,38 @@
function="RLV.EnableIfNot"
parameter="setenv" />
</menu_item_check>
<menu_item_separator/>
<menu
label="Bulk Import"
name="WL Bulk Import">
<menu_item_call
label="Days..."
name="WL Bulk Import Days">
<menu_item_call.on_click
function="File.ImportWindlightBulk"
parameter="2"/>
<menu_item_call.on_enable
function="File.EnableImportWindlightBulk"/>
</menu_item_call>
<menu_item_call
label="Skies..."
name="WL Bulk Import Skies">
<menu_item_call.on_click
function="File.ImportWindlightBulk"
parameter="0"/>
<menu_item_call.on_enable
function="File.EnableImportWindlightBulk"/>
</menu_item_call>
<menu_item_call
label="Water..."
name="WL Bulk Import Water">
<menu_item_call.on_click
function="File.ImportWindlightBulk"
parameter="1"/>
<menu_item_call.on_enable
function="File.EnableImportWindlightBulk"/>
</menu_item_call>
</menu>
</menu>
<!--

View File

@ -13595,5 +13595,19 @@ No valid environment setting selected.
Please note that "Shared Environment" and "Day cycle based" cannot be selected!
<tag>fail</tag>
</notification>
<notification
icon="alertmodal.tga"
name="CantCreateInventoryName"
type="notify">
<tag>fail</tag>
Cannot create inventory item: [NAME]
</notification>
<notification
icon="notifytip.tga"
name="WindlightBulkImportFinished"
type="notifytip">
Bulk import of Windlights has finished.
</notification>
</notifications>

View File

@ -86,6 +86,7 @@
<combo_box.item value="filter_type_textures" label="Textures" />
<combo_box.item value="filter_type_snapshots" label="Snapshots" />
<combo_box.item value="filter_type_meshes" label="Meshes" />
<combo_box.item value="filter_type_settings" label="Settings" />
<combo_box.item value="filter_separator" label="------------" enabled="false" />
<combo_box.item value="filter_type_custom" label="Custom..." />

View File

@ -783,11 +783,11 @@
name="FSInspectAvatarSlurlOpensProfile"
tool_tip="If enabled, Firestorm will open the profile of an avatar directly when clicking on a link with its name"
initial_value="true"
top_pad="8"
top_pad="6"
left="10"
width="250" />
<check_box
top_pad="2"
top_pad="0"
follows="left|top"
height="16"
label="Use web profiles by default"
@ -796,7 +796,7 @@
control_name="FSUseWebProfiles"
tool_tip="Shows profiles as a web page instead of a v1-style panel."/>
<check_box
top_pad="2"
top_pad="0"
follows="left|top"
height="16"
label="Disable automatic opening of block list"
@ -805,7 +805,7 @@
control_name="FSDisableBlockListAutoOpen"
tool_tip="Disables the automatic opening of the block list when blocking avatars or objects."/>
<check_box
top_pad="2"
top_pad="0"
follows="left|top"
height="16"
label="'Friends' and 'Groups' in 'Comm' menu opens the [SHORT_VIEWER_GENERATION] based windows"
@ -814,7 +814,7 @@
control_name="FSUseV2Friends"
tool_tip="If enabled, Friends / Groups will open through the People panel - otherwise they will open in the Contacts panel."/>
<check_box
top_pad="2"
top_pad="0"
follows="left|top"
height="16"
label="Use legacy object properties"
@ -822,6 +822,15 @@
width="270"
control_name="FSUseLegacyObjectProperties"
tool_tip="If enabled, the legacy object profile window will be used when opening object properties."/>
<check_box
top_pad="0"
follows="left|top"
height="16"
label="Use small camera window"
name="FSUseSmallCameraFloater"
width="270"
control_name="FSUseSmallCameraFloater"
tool_tip="If enabled, the smaller, legacy camera window without camera preset controls will be used."/>
<text
type="string"

View File

@ -3199,4 +3199,6 @@ Your current position: [AVATAR_POS]
<string name="TexturePickerOutfitHeader">Picture for Outfit</string>
<string name="unknown_script">(Unknown script)</string>
<string name="FSAreaSearch_Cost_Label">L$[COST]</string>
<string name="ImportingWindlightBulk">Importing Windlights...</string>
</strings>

View File

@ -13,7 +13,7 @@
draw_stripes="true"
scroll_bar_bg_visible="false"
scroll_bar_bg_color="black"
mouse_wheel_opaque="false"
mouse_wheel_opaque="true"
mouse_opaque="true"
background_visible="true"
heading_height="23"

View File

@ -235,7 +235,6 @@
<text name="scale_label">
Échelle (1 = aucune) :
</text>
<spinner name="import_scale" value="1.0"/>
<text name="dimensions_label">
Dimensions :
</text>
@ -243,38 +242,140 @@
[X] X [Y] X [Z]
</text>
<check_box label="Inclure les textures" name="upload_textures"/>
<text name="include_label">
Modèles d&apos;avatar uniquement :
</text>
</panel>
<panel label="Outrepasser" title="Avatar" name="rigging_panel">
<check_box label="Inclure pondération de la peau :" name="upload_skin"/>
<check_box label="Inclure position des articulations :" name="upload_joints"/>
<check_box label="Verrouiller léchelle si la position des articulations est définie" name="lock_scale_if_joint_position"/>
<text name="pelvis_offset_label">
Décalage Z (élever/abaisser l&apos;avatar) :
</text>
<spinner name="pelvis_offset" value="0.0"/>
<text name="skin_too_many_joints">
Trop d'articulations texturées
</text>
<text name="skin_unknown_joint">
Le modèle a des articulations inconnues
</text>
<text name="joints_descr">
Articulations :
</text>
<text name="conflicts_description">
[CONFLICTS] Conflits dans la/les articulations [JOINTS_COUNT]
</text>
<text name="pos_overrides_descr">
Position annulée pour l'articulation '[JOINT]':
</text>
<scroll_list name="pos_overrides_list">
<scroll_list.columns label="Modèle" name="model_name"/>
<scroll_list.columns label="X" name="axis_x"/>
<scroll_list.columns label="Y" name="axis_y"/>
<scroll_list.columns label="Z" name="axis_z"/>
</scroll_list>
</panel>
<panel label="Journal" name="logs_panel">
<check_box label="Afficher le journal détaillé" name="verbose_logging"/>
</panel>
<panel label="Réglages aperçu" name="mesh_preview_settings_panel">
<text name="mesh_upload_behaviour_label">
Chargement des modèles :
</text>
<check_box label="Activation automatique des poids" tool_tip="Régler automatiquement le poids des mesh avec les informations de rigging" name="mesh_preview_auto_weights"/>
<check_box label="Visualisation automatique des poids" tool_tip="Visualiser automatiquement les poids dans l'aperçu des meshes avec les info de rigging" name="mesh_preview_auto_show_weights"/>
<text name="mesh_preview_colors_label">
Couleurs de l'aperçu des modèles :
</text>
<text name="user_label">
Général :
</text>
<color_swatch label="Arrière-plan" tool_tip="Couleur d'arrière-plan pour l'uploader" name="mesh_preview_canvas_color"/>
<color_swatch label="Arêtes du modèle" tool_tip="Couleur des arêtes du modèle dans l'aperçu de l'uploader" name="mesh_preview_edge_color"/>
<text name="physics_settings_label">
Physiques :
</text>
<color_swatch label="Arêtes du physique" tool_tip="Couleur des arêtes pour les triangles du physique dans l'aperçu de l'uploader" name="mesh_preview_physics_edge_color"/>
<color_swatch label="Physique" tool_tip="Couleur de remplissage pour les physiques dans l'aperçu de l'uploader" name="mesh_preview_physics_fill_color"/>
<text name="physics_issues_setting_label">
Pb des physiques :
</text>
<color_swatch label="Mauvaises arêtes" tool_tip="Couleur des arêtes pour les triangles dégénérés (fin) dans l'aperçu de l'uploader" name="mesh_preview_degenerate_edge_color"/>
<color_swatch label="Mauvais triangles" tool_tip="Couleur de remplissage pour les triangles dégénérés (fin) dans l'aperçu de l'uploader" name="mesh_degenerate_fill_color"/>
</panel>
</tab_container>
<panel name="weights_and_warning_panel">
<button label="Calculer les poids et les frais" name="calculate_btn" tool_tip="Calculer les poids et les frais."/>
<button label="Annuler" name="cancel_btn"/>
<button label="Charger le modèle" name="ok_btn" tool_tip="Charger dans le simulateur"/>
<button label="Effacer les paramètres / réinitialiser le formulaire" name="reset_btn"/>
<button label="Charger" name="ok_btn" tool_tip="Charger dans le simulateur"/>
<button label="Effacer les paramètres / réinitialiser" name="reset_btn"/>
<text name="upload_fee">
Frais de chargement : [FEE] L$
Frais de chargt : [FEE] L$
</text>
<text name="prim_weight">
Impact sur le terrain : [EQ]
Impact terrain : [EQ]
</text>
<text name="download_weight">
Téléchargement : [ST]
Chargement : [ST]
</text>
<text name="physics_weight">
Propriétés physiques : [PH]
Physique : [PH]
</text>
<text name="server_weight">
Serveur : [SIM]
</text>
<panel name="price_breakdown_panel">
<text name="price_breakdown_title">
Répartition des coûts
</text>
<text name="price_breakdown_labels">
Chargement :
Physique :
Instances :
Textures :
Modèle :
</text>
</panel>
<!--
<text name="streaming_breakdown_labels">
Streaming/Téléchargement :
Élevé :
Moyen :
Bas :
Le plus bas :
</text>
-->
<panel name="physics_costs_panel">
<text name="physics_breakdown_title">
Coûts du physique
</text>
<text name="physics_breakdown_labels">
Enveloppe :
Maillage :
Analysé :
</text>
</panel>
<panel name="preview_controls_panel">
<panel name="preview_controls_inner_panel">
<text name="preview_controls_title">
Contrôles de l'aperçu
</text>
<combo_box name="preview_lod_combo" tool_tip="Dargestelltes LOD in der Vorschau">
<combo_item name="high">Élevé</combo_item>
<combo_item name="medium">Moyen</combo_item>
<combo_item name="low">Faible</combo_item>
<combo_item name="lowest">Le plus faible</combo_item>
</combo_box>
</panel>
<check_box label="Arêtes" name="show_edges"/>
<check_box label="Textures" name="show_textures"/>
<check_box label="Guide UV" name="show_uv_guide"/>
<check_box label="Physique" name="show_physics"/>
<text name="exploder_label" width="105">
Aperçu :
</text>
<slider name="physics_explode" width="75" />
<check_box label="Poids" name="show_skin_weight"/>
<check_box label="Positions articul." name="show_joint_positions"/>
<check_box label="Surcharge pos. articulations" name="show_joint_overrides"/>
</panel>
<text name="warning_title">
Remarque :
</text>
@ -287,33 +388,6 @@
</panel>
</panel>
<text name="lod_label">
Aperçu :
Aperçu :
</text>
<panel name="right_panel">
<combo_box name="preview_lod_combo" tool_tip="Niveau de détail à afficher en rendu d&apos;aperçu.">
<combo_item name="high">
Élevé
</combo_item>
<combo_item name="medium">
Moyen
</combo_item>
<combo_item name="low">
Faible
</combo_item>
<combo_item name="lowest">
Le plus faible
</combo_item>
</combo_box>
<text name="label_display">
Afficher...
</text>
<check_box label="Coins" name="show_edges"/>
<check_box label="Propriétés physiques" name="show_physics"/>
<check_box label="Textures" name="show_textures"/>
<check_box label="Pondération de la peau" name="show_skin_weight"/>
<check_box label="Articulations" name="show_joint_positions"/>
<text name="physics_explode_label">
Décomposition de l&apos;aperçu :
</text>
</panel>
</floater>

View File

@ -27,7 +27,7 @@
Vista laterale
</panel_camera_item.text>
</panel_camera_item>
<panel_camera_item name="rear_view">/>
<panel_camera_item name="rear_view">
<panel_camera_item.text name="rear_view_text">
Vista retro
</panel_camera_item.text>

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="fs_camera_floater_small" title="Sterowanie kamerą">
<floater.string name="rotate_tooltip">
Obróć kamerę wokół punktu skupienia
</floater.string>
<floater.string name="zoom_tooltip">
Przybliż kamerę do punktu skupienia
</floater.string>
<floater.string name="move_tooltip">
Poruszaj kamerą w górę, w dół, w lewo i w prawo
</floater.string>
<floater.string name="free_mode_title">
Pokaż obiekt
</floater.string>
<panel name="zoom">
<layout_stack name="camera_view_layout_stack">
<layout_panel name="camera_rotate_layout_panel">
<joystick_rotate name="cam_rotate_stick" tool_tip="Obróć kamerę wokół punktu skupienia" />
</layout_panel>
<layout_panel name="camera_zoom_layout_panel">
<slider_bar name="zoom_slider" tool_tip="Przybliż kamerę do punktu skupienia" />
</layout_panel>
<layout_panel name="panel_track">
<joystick_track name="cam_track_stick" tool_tip="Poruszaj kamerą w górę, w dół, w lewo i w prawo" />
</layout_panel>
</layout_stack>
</panel>
<panel name="buttons_view">
<panel_camera_item name="front_view" tool_tip="Widok od przodu" />
<panel_camera_item name="group_view" tool_tip="Widok ponad ramieniem" />
<panel_camera_item name="rear_view" tool_tip="Widok od tyłu" />
</panel>
<panel name="buttons">
<panel_camera_item name="object_view" tool_tip="Pokazywanie obiektu" />
<panel_camera_item name="mouselook_view" tool_tip="Widok pierwszoosobowy" />
<panel_camera_item name="reset_view" tool_tip="Resetuj widok" />
</panel>
</floater>

View File

@ -198,7 +198,7 @@
<check_box label="Auto-włączanie wag" tool_tip="Automatycznie włącz wagi dla meszy z informacjami o riggowaniu" name="mesh_preview_auto_weights" />
<check_box label="Auto-podgląd wag" tool_tip="Automatycznie wyświetlaj wagi w podglądzie dla meszy z informacjami o riggowaniu" name="mesh_preview_auto_show_weights" />
<text name="mesh_preview_colors_label">
Kolory podglądu przesyłania:
Kolory podglądu przesyłania:
</text>
<text name="user_label">
Ogólne:
@ -249,13 +249,13 @@ Tekstury:
Model:
</text>
</panel>
<text name="streaming_breakdown_labels">
<!-- <text name="streaming_breakdown_labels">
Streaming:
Wysokie:
Średnie:
Niskie:
Najniższe:
</text>
</text> -->
<panel name="physics_costs_panel">
<text name="physics_breakdown_title">
Koszty fizyki

View File

@ -166,6 +166,7 @@
<panel name="P_DoF_Settings">
<check_box label="Włącz głębię ostrości" name="UseDepthofField" tool_tip="Ta opcja włączy głębię ostrości, która służy do 'określania zakresu odległości, w którym obiekty obserwowane przez urządzenie optyczne sprawiają wrażenie ostrych' (Wikipedia). Jeśli nie korzystasz z tej funkcji - wyłącz ją, przyspieszy to wyświetlanie obrazu. Jeśli nie możesz włączyć tej funkcji lub zobaczyć żadnego z jej efektów włącz 'Zaawansowane oświetlenie' w karcie 'Światła'."/>
<check_box label="Włącz również pod wodą" tool_tip="Domyślnie głębia ostrości jest wyłączona pod wodą nawet z opcją powyżej zaznaczoną jako włączoną. To ustawienie usuwa to ograniczenie. Pamiętaj, że prawdopodobnie będzie trzeba ręcznie ustawiać punkt skupienia Twojej kamery na obserwowanych obiektach pod wodą za pomocą klikania na nich z klawiszem ALT." name="UseDoFUnderwater"/>
<check_box label="Głębia ostrości podąża za kursorem" name="FSFocusPointFollowsPointer" tool_tip="Głębia ostrości (DoF) będzie podążać za kursorem myszy - to zachowanie jest zgodne z tym, co widać podczas korzystania z Flycam. Używaj w połączeniu z blokadą ostrości DoF." />
<check_box label="Pokazuj pole widzenia w przeglądarce" name="MIC_Show_FOV" tool_tip="Ta opcja pokazuje pionowe pole widzenia kamery. W SL jest możliwe, aby zmienić długość ogniskowej tak, jak w realnym życiu - im mniejsze pole widzenia, tym większa ogniskowa obiektywu. Ogniskowa 50mm ma pole widzenia 27.0 stopni. Aby ustawić pole widzenia użyj suwaka poniżej. Zobacz: 'pl.wikipedia.org/wiki/Kąt_widzenia', aby wyświetlić tabelkę prezentującą stosunek pomiędzy polem widzenia, a ogniskową (mm). WYŁĄCZ TĘ FUNKCJĘ PRZED ROBIENIEM ZDJĘĆ, ALBO BĘDZIE ONA WIDOCZNA NA OBRAZIE!"/>
</panel>
<panel name="P_Zoom">

View File

@ -114,6 +114,11 @@
<menu_item_call label="Moje otoczenia..." name="my_environs" />
<menu_item_call label="Własne oświetlenie..." name="adjustment_tool" />
<menu_item_check label="Pauzuj chmury" name="pause_clouds" />
<menu label="Import wielu plików" name="WL Bulk Import">
<menu_item_call label="Dni..." name="WL Bulk Import Days" />
<menu_item_call label="Nieba..." name="WL Bulk Import Skies" />
<menu_item_call label="Woda..." name="WL Bulk Import Water" />
</menu>
</menu>
<!-- <menu label="Edytor otoczenia" name="Environment Editor">
<menu_item_call label="Ustawienia otoczenia" name="Environment Settings"/>
@ -133,6 +138,7 @@
<menu name="photo_and_video" label="Foto i Wideo">
<menu_item_call label="Narzędzia fotograficzne" name="phototools_item_call"/>
<menu_item_call label="Fotograf: kamera" name="cameratools_item_call"/>
<menu_item_check label="Blokada głębi ostrości dla skupienia" name="lock_focus_point" />
</menu>
<menu_item_call label="Przeszukiwanie obszaru" name="area_search"/>
<menu_item_call label="Eksplorator dźwięków" name="Sound Explorer"/>

View File

@ -5102,4 +5102,10 @@ Skopiuj do własnej szafy i spróbuj ponownie.
Pamiętaj, że nie można wybrać "otoczenia współdzielonego" i "bazowanego na cyklu dnia"!
</notification>
<notification name="CantCreateInventoryName">
Nie można utworzyć: [NAME]
</notification>
<notification name="WindlightBulkImportFinished">
Zakończył się zbiorowy import Windlightów.
</notification>
</notifications>

View File

@ -30,6 +30,7 @@
<combo_box.item value="filter_type_textures" label="Tekstury" />
<combo_box.item value="filter_type_snapshots" label="Zdjęcia" />
<combo_box.item value="filter_type_meshes" label="Mesze" />
<combo_box.item value="filter_type_settings" label="Otoczenia" />
<combo_box.item value="filter_type_custom" label="Własny filtr..." />
</combo_box>
<tab_container name="inventory filter tabs">

View File

@ -111,6 +111,7 @@
<check_box label="Wyłącz automatyczne otwieranie listy zablokowanych" name="FSDisableBlockListAutoOpen" tool_tip="Wyłącza automatyczne otwieranie listy zablokowanych podczas blokowania awatarów lub obiektów." />
<check_box label="'Znajomi' oraz 'Grupy' w menu 'Komunikacja' otwierają okna w stylu [SHORT_VIEWER_GENERATION]" name="FSUseV2Friends" tool_tip="Gdy włączysz tą opcję, to Znajomi / Grupy będą się otwierać poprzez okno Ludzie - w przeciwnym wypadku będzie się to odbywać w oknie Kontaktów." />
<check_box label="Stary sposób wyświetlania właściwości obiektu" name="FSUseLegacyObjectProperties" tool_tip="Gdy włączysz tą opcję, to stare okno właściwości obiektu będzie używane zamiast nowego."/>
<check_box label="Użyj małego okna kamery" name="FSUseSmallCameraFloater" tool_tip="Jeśli ta opcja jest włączona, to zostanie użyte mniejsze, starsze okno kamery bez elementów sterujących wstępnymi ustawieniami." />
<text name="standalone_textbox">
Używaj osobnych okien dla:
</text>

View File

@ -168,6 +168,7 @@
<check_box label="Włącz głębię ostrości (rozmywaj widok z wyjątkiem miejsca, gdzie skupiona jest kamera)" name="UseDoF"/>
<check_box label="Włączaj w trybie budowania" name="RenderDepthOfFieldInEditMode"/>
<check_box label="Włączaj pod wodą" name="FSRenderDoFUnderwater"/>
<check_box label="Głębia ostrości podąża za kursorem" name="FSFocusPointFollowsPointer" tool_tip="Głębia ostrości (DoF) będzie podążać za kursorem myszy - to zachowanie jest zgodne z tym, co widać podczas korzystania z Flycam. Używaj w połączeniu z blokadą ostrości DoF." />
<slider label="Wartość F kamery:" name="CameraFNum" tool_tip="Wartość F kamery dla głębi ostrości"/>
<slider label="Ogniskowa (mm):" name="CameraFocal" tool_tip="Ogniskowa dla głębi ostrości (w milimetrach)"/>
<slider label="Pole widzenia (°):" name="Camera FOV" tool_tip="Pionowy kąt pola widzenia kamery dla głębi ostrości (w stopniach)"/>

View File

@ -6416,4 +6416,7 @@ Twoja aktualna pozycja: [AVATAR_POS]
<string name="FSAreaSearch_Cost_Label">
[COST]L$
</string>
<string name="ImportingWindlightBulk">
Importowanie Windlightów...
</string>
</strings>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="fs_camera_floater_small">
<floater.string name="rotate_tooltip">
Вращать камеру вокруг точки фокуса
</floater.string>
<floater.string name="zoom_tooltip">
Масштаб камеры к точке фокуса
</floater.string>
<floater.string name="move_tooltip">
Двигать камеру вверх/вниз, влево/вправо
</floater.string>
<panel name="zoom">
<layout_stack name="camera_view_layout_stack">
<layout_panel name="camera_rotate_layout_panel">
<joystick_rotate name="cam_rotate_stick" tool_tip="Вращение камеры вокруг точки фокусировки"/>
</layout_panel>
<layout_panel name="camera_zoom_layout_panel">
<slider_bar name="zoom_slider" tool_tip="Приблизить/отдалить камеру к/от точки фокусировки"/>
</layout_panel>
<layout_panel name="panel_track">
<joystick_track name="cam_track_stick" tool_tip="Двигать камеру вверх и вниз, влево и вправо"/>
</layout_panel>
</layout_stack>
</panel>
<panel name="buttons_view">
<panel_camera_item name="front_view" tool_tip="Вид спереди"/>
<panel_camera_item name="group_view" tool_tip="Вид сбоку"/>
<panel_camera_item name="rear_view" tool_tip="Вид сзади"/>
</panel>
<panel name="buttons">
<panel_camera_item name="object_view" tool_tip="Вид на объект"/>
<panel_camera_item name="mouselook_view" tool_tip="Вид от первого лица"/>
<panel_camera_item name="reset_view" tool_tip="Сбросить вид"/>
</panel>
</floater>

View File

@ -193,6 +193,8 @@
tool_tip="Это включит Глубину Резкости, которая «определит расстояние между ближайшими и самыми дальними объектами в сцене, которые выглядят приемлемо резкими в изображении» (Википедия). Если вы не используете его, отключите его, и это ускорит частоту кадров. Если вы не можете включить эту функцию или не видите ее эффекта, включите «Расширенная модель освещения» на вкладке «Свет»." />
<check_box name="UseDoFUnderwater" label="Включить Глубину Резкости под водой"
tool_tip="Как правило, глубина резкости отключается под водой, даже с указанным выше флажком. Этот параметр устранит это ограничение. Обратите внимание, что вам, возможно, придется вручную переориентировать камеру на нужные объекты, нажав на них, когда вы находитесь под водой." />
<check_box label="Фокус ГР следует за указателем" name="FSFocusPointFollowsPointer"
tool_tip="Фокус глубины резкости (DoF) будет следовать за курсором мыши, это поведение соответствует тому, что наблюдается при использовании летающей камеры. Используйте вместе с блокировкой фокуса Глубины резкости"/>
<check_box name="MIC_Show_FOV" label="Показать Угол Обзора (FOV) на экране"
tool_tip="Это покажет вам Угол Обзора камеры. Внутри вьювера можно изменить длину объектива так же, как в реальной жизни. Чем меньше значение Угол Обзора, тем длиннее объектив камеры. 50-мм объектив имеет Угол Обзора 27,0 градусов. Для настройки Угол Обзора используйте панель «Зум» ниже. См.'http://en.wikipedia.org/wiki/Angle_of_view' для таблицы, показывающей взаимосвязь между Угол Обзора и фокусным расстоянием объектива (мм). ВЫКЛЮЧИТЕ ПЕРЕД НАЧАЛОМ СЪЕМКИ ИЛИ ЭТО БУДЕТ НА ИЗОБРАЖЕНИИ!"/>
</panel>

View File

@ -128,6 +128,11 @@
<menu_item_call label="Моя Окружающая среда..." name="my_environs"/>
<menu_item_call label="Личное Освещение..." name="adjustment_tool"/>
<menu_item_check label="Пауза Облаков" name="pause_clouds"/>
<menu label="Массовый импорт" name="WL Bulk Import">
<menu_item_call label="Дни..." name="WL Bulk Import Days"/>
<menu_item_call label="Небеса..." name="WL Bulk Import Skies"/>
<menu_item_call label="Вода..." name="WL Bulk Import Water"/>
</menu>
</menu>
<!-- <menu label="Положение солнца" name="Environment Settings">
@ -159,6 +164,7 @@
<menu name="photo_and_video" label="Фото и Видео">
<menu_item_call label="Инструменты фото" name="phototools_item_call"/>
<menu_item_call label="Инструменты камеры" name="cameratools_item_call"/>
<menu_item_check label="Блокировка фокуса Глубины резкости" name="lock_focus_point"/>
</menu>
<menu_item_call label="Поиск вокруг" name="area_search"/>
<menu_item_call label="Проводник звуков" name="Sound Explorer"/>
@ -344,6 +350,7 @@
<menu label="Всплывающие подсказки" name="Hover Tips">
<menu_item_check label="Показывать Подсказки" name="Show Tips"/>
<menu_item_check label="Подсказки о земле" name="Land Tips"/>
<menu_item_check label="Подсказки на все объекты" name="Tips On All Objects"/>
</menu>
</menu>
<menu label="Типы визуализации" name="Rendering Types">

View File

@ -5218,4 +5218,10 @@ URL: [AUDIOURL]
Обратите внимание, что нельзя выбрать «Общая среда» и «Дневной цикл»!
</notification>
<notification name="CantCreateInventoryName">
Невозможно создать элемент инвентаря: [NAME]
</notification>
<notification name="WindlightBulkImportFinished">
Массовый импорт Окружающей среды завершен.
</notification>
</notifications>

View File

@ -30,6 +30,7 @@
<combo_box.item value="filter_type_textures" label="Текстуры" />
<combo_box.item value="filter_type_snapshots" label="Снимки" />
<combo_box.item value="filter_type_meshes" label="Меш" />
<combo_box.item value="filter_type_settings" label="Настройки" />
<combo_box.item value="filter_type_custom" label="Другое..." />
</combo_box>
<tab_container name="inventory filter tabs">

View File

@ -117,6 +117,7 @@
<check_box label="Отключить автоматическое открытие списка заблокированного" name="FSDisableBlockListAutoOpen" tool_tip="Отключить автоматическое открытие списка заблокированного, юкогда вы блокируете аватара или объект" />
<check_box label="Открывать окна в стиле [SHORT_VIEWER_GENERATION] для 'Друзья' и 'Группы'" name="FSUseV2Friends" tool_tip="Когда вы включите эту опцию, друзья / группы будут открыты в окнах - в противном случае, это будет сделано в Контактах." />
<check_box label="Использовать устаревшие окно свойства объектов" name="FSUseLegacyObjectProperties" tool_tip="Если включено, при открытии свойств объекта будет использоваться старое окно свойств."/>
<check_box label="Использовать маленькое окно камеры" name="FSUseSmallCameraFloater" tool_tip="Если этот параметр включен, будет использоваться меньшее, устаревшее окно камеры без элементов управления предустановками камеры."/>
<text name="standalone_textbox">
Использовать отдельные окна для:
</text>

View File

@ -171,6 +171,7 @@
<check_box label="Включить глубину резкости (Это размоет вид за исключением фокусировки камеры.)" name="UseDoF"/>
<check_box label="Включить в режиме редактирования" name="RenderDepthOfFieldInEditMode"/>
<check_box label="Разрешить когда под водой" name="FSRenderDoFUnderwater"/>
<check_box label="Фокус ГР следует за указателем" name="FSFocusPointFollowsPointer" tool_tip="Фокус глубины резкости (DoF) будет следовать за курсором мыши, это поведение соответствует тому, что наблюдается при использовании летающей камеры. Используйте вместе с блокировкой фокуса Глубины резкости"/>
<slider label="Номер фокуса камеры:" name="CameraFNum" tool_tip="Номер фокуса камеры - значение для эффекта глубины резкости"/>
<slider label="Фокусное расстояние (мм):" name="CameraFocal" tool_tip="Фокусное расстояние камеры для эффекта глубины резкости (в миллиметрах)"/>
<slider label="Угол зрения камеры (град.):" name="Camera FOV" tool_tip="Вертикальный угол зрения камеры для эффекта глубины резкости (в градусах)"/>

View File

@ -7025,4 +7025,7 @@ ID объекта: [INSPECTING_KEY]
<string name="unknown_script">
(Неизвестный скрипт)
</string>
<string name="ImportingWindlightBulk">
Импорт окружающей среды ...
</string>
</strings>

View File

@ -75,6 +75,7 @@
<combo_box.item value="filter_type_textures" label="Textures" />
<combo_box.item value="filter_type_snapshots" label="Snapshots" />
<combo_box.item value="filter_type_meshes" label="Meshes" />
<combo_box.item value="filter_type_settings" label="Settings" />
<combo_box.item value="filter_separator" label="------------" enabled="false" />
<combo_box.item value="filter_type_custom" label="Custom..." />

View File

@ -212,7 +212,7 @@ https://accounts.secondlife.com/change_email/
<panel
class="panel_preference_backup"
filename="panel_preferences_backup.xml"
label="Backup"
label="Backup &amp; Restore"
layout="topleft"
help_topic="preferences_backup_tab"
name="backup" />

Some files were not shown because too many files have changed in this diff Show More