Merge branch 'master' of https://github.com/FirestormViewer/phoenix-firestorm
commit
41b3ac04b3
|
|
@ -45,7 +45,7 @@ jobs:
|
|||
run: pip install discord-webhook
|
||||
|
||||
- name: Download Build Artifacts
|
||||
uses: dawidd6/action-download-artifact@v7
|
||||
uses: dawidd6/action-download-artifact@v8
|
||||
id: download
|
||||
with:
|
||||
workflow: build_viewer.yml
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ jobs:
|
|||
setup_files: ${{ steps.get-files.outputs.setup_files }}
|
||||
steps:
|
||||
- name: Download Build Artifacts
|
||||
uses: dawidd6/action-download-artifact@v7
|
||||
uses: dawidd6/action-download-artifact@v8
|
||||
id: download
|
||||
with:
|
||||
workflow: build_viewer.yml
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ jobs:
|
|||
echo "build_run_number=${{ github.event.inputs.build_run_number }}" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
- name: Download Build Artifacts
|
||||
uses: dawidd6/action-download-artifact@v7
|
||||
uses: dawidd6/action-download-artifact@v8
|
||||
id: download_build_info
|
||||
with:
|
||||
workflow: build_viewer.yml
|
||||
|
|
|
|||
|
|
@ -1509,6 +1509,14 @@ void LLShaderMgr::initAttribsAndUniforms()
|
|||
mReservedUniforms.push_back("areaTex");
|
||||
mReservedUniforms.push_back("searchTex");
|
||||
mReservedUniforms.push_back("blendTex");
|
||||
// <FS:Beq> reserved uniforms for snapshot frame
|
||||
mReservedUniforms.push_back("border_color");
|
||||
mReservedUniforms.push_back("border_thickness");
|
||||
mReservedUniforms.push_back("guide_color");
|
||||
mReservedUniforms.push_back("guide_thickness");
|
||||
mReservedUniforms.push_back("guide_style");
|
||||
mReservedUniforms.push_back("frame_rect");
|
||||
// </FS:Beq>
|
||||
|
||||
llassert(mReservedUniforms.size() == END_RESERVED_UNIFORMS);
|
||||
|
||||
|
|
|
|||
|
|
@ -351,6 +351,14 @@ public:
|
|||
SMAA_SEARCH_TEX, // "searchTex"
|
||||
SMAA_BLEND_TEX, // "blendTex"
|
||||
|
||||
// <FS:Beq> Uniforms for snapshot frame
|
||||
SNAPSHOT_BORDER_COLOR, // "border_color"
|
||||
SNAPSHOT_BORDER_THICKNESS, // "border_thickness"
|
||||
SNAPSHOT_GUIDE_COLOR, // "guide_color"
|
||||
SNAPSHOT_GUIDE_THICKNESS, // "guide_thickness"
|
||||
SNAPSHOT_GUIDE_STYLE, // "guide_style"
|
||||
SNAPSHOT_FRAME_RECT, // "frame_rect"
|
||||
// </FS:Beq>
|
||||
END_RESERVED_UNIFORMS
|
||||
} eGLSLReservedUniforms;
|
||||
// clang-format on
|
||||
|
|
|
|||
|
|
@ -282,6 +282,10 @@ bool FloaterAO::postBuild()
|
|||
mPreviousButtonSmall->setCommitCallback(boost::bind(&FloaterAO::onClickPrevious, this));
|
||||
mNextButtonSmall->setCommitCallback(boost::bind(&FloaterAO::onClickNext, this));
|
||||
|
||||
// <AS:Chanayane> Double click on animation in AO
|
||||
mAnimationList->setDoubleClickCallback(boost::bind(&FloaterAO::onDoubleClick, this));
|
||||
// </AS:Chanayane>
|
||||
|
||||
updateSmart();
|
||||
|
||||
AOEngine::instance().setReloadCallback(boost::bind(&FloaterAO::updateList, this));
|
||||
|
|
@ -780,6 +784,40 @@ void FloaterAO::onClickNext()
|
|||
AOEngine::instance().cycle(AOEngine::CycleNext);
|
||||
}
|
||||
|
||||
// <AS:Chanayane> Double click on animation in AO
|
||||
void FloaterAO::onDoubleClick()
|
||||
{
|
||||
LLScrollListItem* item = mAnimationList->getFirstSelected();
|
||||
if (!item)
|
||||
{
|
||||
return;
|
||||
}
|
||||
LLUUID* animUUID = (LLUUID*)item->getUserdata();
|
||||
if (!animUUID)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// do nothing if animation is for a different state than the active state
|
||||
if (mSelectedState != AOEngine::instance().getCurrentState())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// activate AO set if necessary
|
||||
if (AOEngine::instance().getCurrentSet() != mSelectedSet)
|
||||
{
|
||||
// sync small set selector with main set selector
|
||||
mSetSelectorSmall->selectNthItem(mSetSelector->getCurrentIndex());
|
||||
|
||||
LL_DEBUGS("AOEngine") << "Set activated: " << mSetSelector->getSelectedItemLabel() << LL_ENDL;
|
||||
AOEngine::instance().selectSet(mSelectedSet);
|
||||
}
|
||||
|
||||
AOEngine::instance().playAnimation(*animUUID);
|
||||
}
|
||||
// </AS:Chanayane>
|
||||
|
||||
void FloaterAO::onClickMore()
|
||||
{
|
||||
LLRect fullSize = gSavedPerAccountSettings.getRect("floater_rect_animation_overrider_full");
|
||||
|
|
|
|||
|
|
@ -91,6 +91,10 @@ class FloaterAO
|
|||
void onClickMore();
|
||||
void onClickLess();
|
||||
|
||||
// <AS:Chanayane> Double click on animation in AO
|
||||
void onDoubleClick();
|
||||
// </AS:Chanayane>
|
||||
|
||||
void onAnimationChanged(const LLUUID& animation);
|
||||
|
||||
void reloading(bool reload);
|
||||
|
|
|
|||
|
|
@ -960,6 +960,115 @@ void AOEngine::cycle(eCycleMode cycleMode)
|
|||
}
|
||||
}
|
||||
|
||||
// <AS:Chanayane> Double click on animation in AO
|
||||
void AOEngine::playAnimation(const LLUUID& animation)
|
||||
{
|
||||
if (!mEnabled)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (!mCurrentSet)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "cycle without set." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// do not cycle if we're sitting and sit-override is off
|
||||
if (mLastMotion == ANIM_AGENT_SIT && !mCurrentSet->getSitOverride())
|
||||
{
|
||||
return;
|
||||
}
|
||||
// do not cycle if we're standing and mouselook stand override is disabled while being in mouselook
|
||||
else if (mLastMotion == ANIM_AGENT_STAND && mCurrentSet->getMouselookStandDisable() && mInMouselook)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AOSet::AOState* state = mCurrentSet->getStateByRemapID(mLastMotion);
|
||||
if (!state)
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "cycle without state." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!state->mAnimations.size())
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "cycle without animations in state." << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
LLViewerInventoryItem* item = gInventory.getItem(animation);
|
||||
AOSet::AOAnimation anim;
|
||||
anim.mName = item->LLInventoryItem::getName();
|
||||
anim.mInventoryUUID = item->getUUID();
|
||||
anim.mOriginalUUID = item->getLinkedUUID();
|
||||
anim.mAssetUUID = LLUUID::null;
|
||||
|
||||
// if we can find the original animation already right here, save its asset ID, otherwise this will
|
||||
// be tried again in AOSet::getAnimationForState() and/or AOEngine::cycle()
|
||||
if (item->getLinkedItem())
|
||||
{
|
||||
anim.mAssetUUID = item->getAssetUUID();
|
||||
}
|
||||
|
||||
LLUUID newAnimation = anim.mAssetUUID;
|
||||
LLUUID oldAnimation = state->mCurrentAnimationID;
|
||||
|
||||
// don't do anything if the animation didn't change
|
||||
if (newAnimation == oldAnimation)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mAnimationChangedSignal(LLUUID::null);
|
||||
|
||||
// Searches for the index of the animation
|
||||
U32 idx = -1;
|
||||
for (U32 i = 0; i < state->mAnimations.size(); i++)
|
||||
{
|
||||
if (state->mAnimations[i].mAssetUUID == newAnimation)
|
||||
{
|
||||
idx = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (idx < 0)
|
||||
{
|
||||
idx = 0;
|
||||
}
|
||||
|
||||
state->mCurrentAnimation = idx;
|
||||
state->mCurrentAnimationID = newAnimation;
|
||||
if (newAnimation.notNull())
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "requesting animation start for motion " << gAnimLibrary.animationName(mLastMotion) << ": " << newAnimation << LL_ENDL;
|
||||
gAgent.sendAnimationRequest(newAnimation, ANIM_REQUEST_START);
|
||||
mAnimationChangedSignal(state->mAnimations[state->mCurrentAnimation].mInventoryUUID);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "overrider came back with NULL animation for motion " << gAnimLibrary.animationName(mLastMotion) << "." << LL_ENDL;
|
||||
}
|
||||
|
||||
if (oldAnimation.notNull())
|
||||
{
|
||||
LL_DEBUGS("AOEngine") << "Cycling state " << state->mName << " - stopping animation " << oldAnimation << LL_ENDL;
|
||||
gAgent.sendAnimationRequest(oldAnimation, ANIM_REQUEST_STOP);
|
||||
gAgentAvatarp->LLCharacter::stopMotion(oldAnimation);
|
||||
}
|
||||
}
|
||||
|
||||
const AOSet* AOEngine::getCurrentSet() const
|
||||
{
|
||||
return mCurrentSet;
|
||||
}
|
||||
const AOSet::AOState* AOEngine::getCurrentState() const
|
||||
{
|
||||
return mCurrentSet->getStateByRemapID(mLastMotion);
|
||||
}
|
||||
// </AS:Chanayane>
|
||||
|
||||
void AOEngine::updateSortOrder(AOSet::AOState* state)
|
||||
{
|
||||
for (U32 index = 0; index < state->mAnimations.size(); ++index)
|
||||
|
|
|
|||
|
|
@ -123,6 +123,12 @@ class AOEngine
|
|||
void cycleTimeout(const AOSet* set);
|
||||
void cycle(eCycleMode cycleMode);
|
||||
|
||||
// <AS:Chanayane> Double click on animation in AO
|
||||
void playAnimation(const LLUUID& animation);
|
||||
const AOSet* getCurrentSet() const;
|
||||
const AOSet::AOState* getCurrentState() const;
|
||||
// </AS:Chanayane>
|
||||
|
||||
void inMouselook(bool mouselook);
|
||||
void selectSet(AOSet* set);
|
||||
AOSet* selectSetByName(const std::string& name);
|
||||
|
|
|
|||
|
|
@ -26124,5 +26124,68 @@ Change of this parameter will affect the layout of buttons in notification toast
|
|||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSSnapshotShowCaptureFrame</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>If enabled, masks the main screen according to the capture frame.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FSSnapshotFrameBorderColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>The color of the border for the Snapshot frame</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>0.0</real>
|
||||
<real>0.0</real>
|
||||
<real>0.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>FSSnapshotFrameGuideColor</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>The color of the Snapshot composition guides</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Color3</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<real>1.0</real>
|
||||
<real>1.0</real>
|
||||
<real>0.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>FSSnapshotFrameBorderWidth</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>The thickness of the line drawn around the snapshot frame</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>2.0</real>
|
||||
</map>
|
||||
<key>FSSnapshotFrameGuideWidth</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>The thickness of the lines drawn for the composition guides</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
</map>
|
||||
</llsd>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,78 @@
|
|||
#extension GL_ARB_texture_rectangle : enable
|
||||
|
||||
out vec4 frag_color;
|
||||
|
||||
uniform sampler2D diffuseRect;
|
||||
uniform vec2 screen_res;
|
||||
uniform vec4 frame_rect; // x, y, width, height (normalized 0->1)
|
||||
uniform vec3 border_color;
|
||||
uniform float border_thickness; // in pixels
|
||||
uniform vec3 guide_color;
|
||||
uniform float guide_thickness; // in pixels
|
||||
uniform float guide_style; // 0: no guide, 1: rule of thirds, 2: golden spiral
|
||||
|
||||
in vec2 vary_fragcoord;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 diff = texture(diffuseRect, vary_fragcoord);
|
||||
vec2 tc = vary_fragcoord * screen_res;
|
||||
|
||||
// Convert normalized frame_rect to pixel values
|
||||
vec4 frame_rect_px = vec4(frame_rect.x * screen_res.x, frame_rect.y * screen_res.y, frame_rect.z * screen_res.x, frame_rect.w * screen_res.y);
|
||||
vec4 border_rect_px = vec4(
|
||||
(frame_rect.x * screen_res.x) - border_thickness,
|
||||
(frame_rect.y * screen_res.y) - border_thickness,
|
||||
(frame_rect.z * screen_res.x) + border_thickness,
|
||||
(frame_rect.w * screen_res.y) + border_thickness);
|
||||
|
||||
// Desaturate fragments outside the snapshot frame
|
||||
if (tc.x < border_rect_px.x || tc.x > border_rect_px.z ||
|
||||
tc.y < border_rect_px.y || tc.y > border_rect_px.w)
|
||||
{
|
||||
// Simple box blur
|
||||
vec3 blur_color = vec3(0.0);
|
||||
float blur_size = 2;
|
||||
int blur_samples = 9;
|
||||
|
||||
for (int x = -1; x <= 1; ++x)
|
||||
{
|
||||
for (int y = -1; y <= 1; ++y)
|
||||
{
|
||||
vec2 offset = vec2(x, y) * blur_size / screen_res;
|
||||
blur_color += texture(diffuseRect, vary_fragcoord + offset).rgb;
|
||||
}
|
||||
}
|
||||
|
||||
blur_color /= float(blur_samples);
|
||||
float gray = dot(blur_color, vec3(0.299, 0.587, 0.114));
|
||||
diff.rgb = vec3(gray);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Draw border around the snapshot frame
|
||||
if ((tc.x >= border_rect_px.x && tc.x < frame_rect_px.x) ||
|
||||
(tc.x <= border_rect_px.z && tc.x > frame_rect_px.z) ||
|
||||
(tc.y >= border_rect_px.y && tc.y < frame_rect_px.y) ||
|
||||
(tc.y <= border_rect_px.w && tc.y > frame_rect_px.w))
|
||||
{
|
||||
diff.rgb = mix(diff.rgb, border_color, 0.5);
|
||||
}
|
||||
|
||||
// Draw guide based on guide_style
|
||||
if (guide_style == 1)
|
||||
{
|
||||
// Draw rule of thirds guide
|
||||
float third_x = (frame_rect_px.z - frame_rect_px.x) / 3.0;
|
||||
float third_y = (frame_rect_px.w - frame_rect_px.y) / 3.0;
|
||||
if ((tc.x > frame_rect_px.x + third_x - guide_thickness && tc.x < frame_rect_px.x + third_x + guide_thickness) ||
|
||||
(tc.x > frame_rect_px.x + 2.0 * third_x - guide_thickness && tc.x < frame_rect_px.x + 2.0 * third_x + guide_thickness) ||
|
||||
(tc.y > frame_rect_px.y + third_y - guide_thickness && tc.y < frame_rect_px.y + third_y + guide_thickness) ||
|
||||
(tc.y > frame_rect_px.y + 2.0 * third_y - guide_thickness && tc.y < frame_rect_px.y + 2.0 * third_y + guide_thickness))
|
||||
{
|
||||
diff.rgb = mix(diff.rgb, guide_color, 0.05);
|
||||
}
|
||||
}
|
||||
}
|
||||
frag_color = diff;
|
||||
}
|
||||
|
|
@ -105,6 +105,9 @@ FSFloaterPoser::FSFloaterPoser(const LLSD& key) : LLFloater(key)
|
|||
mCommitCallbackRegistrar.add("Poser.RecaptureSelectedBones", [this](LLUICtrl*, const LLSD&) { onClickRecaptureSelectedBones(); });
|
||||
mCommitCallbackRegistrar.add("Poser.TogglePosingSelectedBones", [this](LLUICtrl*, const LLSD&) { onClickToggleSelectedBoneEnabled(); });
|
||||
mCommitCallbackRegistrar.add("Poser.PoseJointsReset", [this](LLUICtrl*, const LLSD&) { onPoseJointsReset(); });
|
||||
|
||||
//mCommitCallbackRegistrar.add("Poser.CommitSpinner", [this](LLUICtrl* spinnerControl, const LLSD&) { onCommitSpinner(spinnerControl); });
|
||||
mCommitCallbackRegistrar.add("Poser.CommitSpinner", boost::bind(&FSFloaterPoser::onCommitSpinner, this, _1, _2));
|
||||
}
|
||||
|
||||
bool FSFloaterPoser::postBuild()
|
||||
|
|
@ -164,7 +167,6 @@ bool FSFloaterPoser::postBuild()
|
|||
mToggleAdvancedPanelBtn->setValue(true);
|
||||
|
||||
mTrackpadSensitivitySlider = getChild<LLSliderCtrl>("trackpad_sensitivity_slider");
|
||||
mTrackpadSensitivitySlider->setValue(gSavedSettings.getF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY));
|
||||
|
||||
mPoseSaveNameEditor = getChild<LLLineEditor>("pose_save_name");
|
||||
mPoseSaveNameEditor->setPrevalidate(&LLTextValidate::validateASCIIPrintableNoPipe);
|
||||
|
|
@ -216,6 +218,20 @@ bool FSFloaterPoser::postBuild()
|
|||
mResetBaseRotCbx = getChild<LLCheckBoxCtrl>("reset_base_rotation_on_edit_checkbox");
|
||||
mResetBaseRotCbx->setCommitCallback([this](LLUICtrl*, const LLSD&) { onClickSetBaseRotZero(); });
|
||||
|
||||
mTrackpadSensitivitySpnr = getChild<LLUICtrl>("trackpad_sensitivity_spinner");
|
||||
mYawSpnr = getChild<LLUICtrl>("limb_yaw_spinner");
|
||||
mPitchSpnr = getChild<LLUICtrl>("limb_pitch_spinner");
|
||||
mRollSpnr = getChild<LLUICtrl>("limb_roll_spinner");
|
||||
mUpDownSpnr = getChild<LLUICtrl>("av_position_updown_spinner");
|
||||
mLeftRightSpnr = getChild<LLUICtrl>("av_position_leftright_spinner");
|
||||
mInOutSpnr = getChild<LLUICtrl>("av_position_inout_spinner");
|
||||
mAdvPosXSpnr = getChild<LLUICtrl>("adv_posx_spinner");
|
||||
mAdvPosYSpnr = getChild<LLUICtrl>("adv_posy_spinner");
|
||||
mAdvPosZSpnr = getChild<LLUICtrl>("adv_posz_spinner");
|
||||
mScaleXSpnr = getChild<LLUICtrl>("adv_scalex_spinner");
|
||||
mScaleYSpnr = getChild<LLUICtrl>("adv_scaley_spinner");
|
||||
mScaleZSpnr = getChild<LLUICtrl>("adv_scalez_spinner");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -238,7 +254,7 @@ void FSFloaterPoser::onClose(bool app_quitting)
|
|||
gSavedSettings.setBOOL(POSER_ADVANCEDWINDOWSTATE_SAVE_KEY, mToggleAdvancedPanelBtn->getValue().asBoolean());
|
||||
|
||||
if (gSavedSettings.getBOOL(POSER_STOPPOSINGWHENCLOSED_SAVE_KEY))
|
||||
stopPosingSelf();
|
||||
stopPosingAllAvatars();
|
||||
|
||||
LLFloater::onClose(app_quitting);
|
||||
}
|
||||
|
|
@ -467,7 +483,7 @@ void FSFloaterPoser::onClickToggleSelectedBoneEnabled()
|
|||
mPoserAnimator.setPosingAvatarJoint(avatar, *item, !currentlyPosing);
|
||||
}
|
||||
|
||||
refreshRotationSliders();
|
||||
refreshRotationSlidersAndSpinners();
|
||||
refreshTrackpadCursor();
|
||||
refreshTextHighlightingOnJointScrollLists();
|
||||
}
|
||||
|
|
@ -511,7 +527,7 @@ void FSFloaterPoser::onClickFlipSelectedJoints()
|
|||
mPoserAnimator.reflectJoint(avatar, item);
|
||||
}
|
||||
|
||||
refreshRotationSliders();
|
||||
refreshRotationSlidersAndSpinners();
|
||||
refreshTrackpadCursor();
|
||||
}
|
||||
|
||||
|
|
@ -526,7 +542,7 @@ void FSFloaterPoser::onClickFlipPose()
|
|||
|
||||
mPoserAnimator.flipEntirePose(avatar);
|
||||
|
||||
refreshRotationSliders();
|
||||
refreshRotationSlidersAndSpinners();
|
||||
refreshTrackpadCursor();
|
||||
}
|
||||
|
||||
|
|
@ -553,7 +569,7 @@ void FSFloaterPoser::onClickRecaptureSelectedBones()
|
|||
}
|
||||
|
||||
setSavePosesButtonText(true);
|
||||
refreshRotationSliders();
|
||||
refreshRotationSlidersAndSpinners();
|
||||
refreshTrackpadCursor();
|
||||
refreshTextHighlightingOnJointScrollLists();
|
||||
}
|
||||
|
|
@ -566,6 +582,114 @@ void FSFloaterPoser::onClickBrowsePoseCache()
|
|||
gViewerWindow->getWindow()->openFile(pathname);
|
||||
}
|
||||
|
||||
//void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner)
|
||||
// Pass in an ID as a parameter, so you can use a switch statement
|
||||
void FSFloaterPoser::onCommitSpinner(LLUICtrl* spinner, S32 id)
|
||||
{
|
||||
if (!spinner)
|
||||
return;
|
||||
|
||||
auto activeTab = mJointsTabs->getCurrentPanel();
|
||||
if (!activeTab)
|
||||
return;
|
||||
|
||||
bool changingBodyPosition = activeTab == mPositionRotationPnl;
|
||||
|
||||
F32 value = (F32)spinner->getValue().asReal();
|
||||
|
||||
// Use the ID passed in to perform a switch statment
|
||||
// which should make each action take the same amount of time.
|
||||
switch (id)
|
||||
{
|
||||
case 0: // av_position_updown_spinner
|
||||
{
|
||||
mPosZSlider->setValue(value);
|
||||
onAvatarPositionSet();
|
||||
break;
|
||||
}
|
||||
case 1: // av_position_leftright
|
||||
{
|
||||
mPosYSlider->setValue(value);
|
||||
onAvatarPositionSet();
|
||||
break;
|
||||
}
|
||||
case 2: // av_position_inout_spinner
|
||||
{
|
||||
mPosXSlider->setValue(value);
|
||||
onAvatarPositionSet();
|
||||
break;
|
||||
}
|
||||
case 3: // trackpad_sensitivity_spinner
|
||||
{
|
||||
onAdjustTrackpadSensitivity();
|
||||
break;
|
||||
}
|
||||
case 4: // limb_pitch_spinner
|
||||
{
|
||||
mLimbPitchSlider->setValue(value);
|
||||
onYawPitchRollSliderChanged();
|
||||
break;
|
||||
}
|
||||
case 5: // limb_yaw_spinner
|
||||
{
|
||||
mLimbYawSlider->setValue(value);
|
||||
onYawPitchRollSliderChanged();
|
||||
break;
|
||||
}
|
||||
case 6: // limb_roll_spinner
|
||||
{
|
||||
mLimbRollSlider->setValue(value);
|
||||
onYawPitchRollSliderChanged();
|
||||
break;
|
||||
}
|
||||
case 7: // adv_posx_spinner
|
||||
{
|
||||
if (changingBodyPosition)
|
||||
mPosXSlider->setValue(value);
|
||||
|
||||
mAdvPosXSlider->setValue(value);
|
||||
onAdvancedPositionSet();
|
||||
break;
|
||||
}
|
||||
case 8: // adv_posy_spinner
|
||||
{
|
||||
if (changingBodyPosition)
|
||||
mPosYSlider->setValue(value);
|
||||
|
||||
mAdvPosYSlider->setValue(value);
|
||||
onAdvancedPositionSet();
|
||||
break;
|
||||
}
|
||||
case 9: // adv_posz_spinner
|
||||
{
|
||||
if (changingBodyPosition)
|
||||
mPosZSlider->setValue(value);
|
||||
|
||||
mAdvPosZSlider->setValue(value);
|
||||
onAdvancedPositionSet();
|
||||
break;
|
||||
}
|
||||
case 10: // adv_scalex_spinner
|
||||
{
|
||||
mAdvScaleXSlider->setValue(value);
|
||||
onAdvancedScaleSet();
|
||||
break;
|
||||
}
|
||||
case 11: // adv_scaley_spinner
|
||||
{
|
||||
mAdvScaleYSlider->setValue(value);
|
||||
onAdvancedScaleSet();
|
||||
break;
|
||||
}
|
||||
case 12: // adv_scalez_spinner
|
||||
{
|
||||
mAdvScaleZSlider->setValue(value);
|
||||
onAdvancedScaleSet();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onPoseJointsReset()
|
||||
{
|
||||
if (notDoubleClicked())
|
||||
|
|
@ -589,9 +713,9 @@ void FSFloaterPoser::onPoseJointsReset()
|
|||
mPoserAnimator.resetAvatarJoint(avatar, *item);
|
||||
}
|
||||
|
||||
refreshRotationSliders();
|
||||
refreshRotationSlidersAndSpinners();
|
||||
refreshTrackpadCursor();
|
||||
refreshAvatarPositionSliders();
|
||||
refreshAvatarPositionSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onPoseMenuAction(const LLSD& param)
|
||||
|
|
@ -892,20 +1016,24 @@ void FSFloaterPoser::startPosingSelf()
|
|||
onAvatarSelect();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::stopPosingSelf()
|
||||
void FSFloaterPoser::stopPosingAllAvatars()
|
||||
{
|
||||
if (!gAgentAvatarp || gAgentAvatarp.isNull())
|
||||
return;
|
||||
|
||||
LLVOAvatar* avatar = getAvatarByUuid(gAgentAvatarp->getID());
|
||||
if (!avatar)
|
||||
return;
|
||||
for (auto listItem : mAvatarSelectionScrollList->getAllData())
|
||||
{
|
||||
LLScrollListCell* cell = listItem->getColumn(COL_UUID);
|
||||
if (!cell)
|
||||
continue;
|
||||
|
||||
bool arePosingSelected = mPoserAnimator.isPosingAvatar(avatar);
|
||||
if (!arePosingSelected)
|
||||
return;
|
||||
LLUUID selectedAvatarId = cell->getValue().asUUID();
|
||||
LLVOAvatar* listAvatar = getAvatarByUuid(selectedAvatarId);
|
||||
|
||||
if (mPoserAnimator.isPosingAvatar(listAvatar))
|
||||
mPoserAnimator.stopPosingAvatar(listAvatar);
|
||||
}
|
||||
|
||||
mPoserAnimator.stopPosingAvatar(avatar);
|
||||
onAvatarSelect();
|
||||
}
|
||||
|
||||
|
|
@ -1145,7 +1273,7 @@ void FSFloaterPoser::onUndoLastRotation()
|
|||
}
|
||||
|
||||
enableOrDisableRedoButton();
|
||||
refreshRotationSliders();
|
||||
refreshRotationSlidersAndSpinners();
|
||||
refreshTrackpadCursor();
|
||||
}
|
||||
|
||||
|
|
@ -1169,8 +1297,8 @@ void FSFloaterPoser::onUndoLastPosition()
|
|||
mPoserAnimator.undoLastJointPosition(avatar, *item, getUiSelectedBoneDeflectionStyle());
|
||||
}
|
||||
|
||||
refreshAdvancedPositionSliders();
|
||||
refreshAvatarPositionSliders();
|
||||
refreshAdvancedPositionSlidersAndSpinners();
|
||||
refreshAvatarPositionSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onUndoLastScale()
|
||||
|
|
@ -1193,7 +1321,7 @@ void FSFloaterPoser::onUndoLastScale()
|
|||
mPoserAnimator.undoLastJointScale(avatar, *item, getUiSelectedBoneDeflectionStyle());
|
||||
}
|
||||
|
||||
refreshAdvancedScaleSliders();
|
||||
refreshAdvancedScaleSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onSetAvatarToTpose()
|
||||
|
|
@ -1233,8 +1361,8 @@ void FSFloaterPoser::onResetPosition()
|
|||
mPoserAnimator.resetJointPosition(avatar, *item, getUiSelectedBoneDeflectionStyle());
|
||||
}
|
||||
|
||||
refreshAdvancedPositionSliders();
|
||||
refreshAvatarPositionSliders();
|
||||
refreshAdvancedPositionSlidersAndSpinners();
|
||||
refreshAvatarPositionSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onResetScale()
|
||||
|
|
@ -1260,7 +1388,7 @@ void FSFloaterPoser::onResetScale()
|
|||
mPoserAnimator.resetJointScale(avatar, *item, getUiSelectedBoneDeflectionStyle());
|
||||
}
|
||||
|
||||
refreshAdvancedScaleSliders();
|
||||
refreshAdvancedScaleSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onRedoLastRotation()
|
||||
|
|
@ -1284,7 +1412,7 @@ void FSFloaterPoser::onRedoLastRotation()
|
|||
}
|
||||
|
||||
enableOrDisableRedoButton();
|
||||
refreshRotationSliders();
|
||||
refreshRotationSlidersAndSpinners();
|
||||
refreshTrackpadCursor();
|
||||
}
|
||||
|
||||
|
|
@ -1308,8 +1436,8 @@ void FSFloaterPoser::onRedoLastPosition()
|
|||
mPoserAnimator.redoLastJointPosition(avatar, *item, getUiSelectedBoneDeflectionStyle());
|
||||
}
|
||||
|
||||
refreshAdvancedPositionSliders();
|
||||
refreshAvatarPositionSliders();
|
||||
refreshAdvancedPositionSlidersAndSpinners();
|
||||
refreshAvatarPositionSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onRedoLastScale()
|
||||
|
|
@ -1332,7 +1460,7 @@ void FSFloaterPoser::onRedoLastScale()
|
|||
mPoserAnimator.redoLastJointScale(avatar, *item, getUiSelectedBoneDeflectionStyle());
|
||||
}
|
||||
|
||||
refreshAdvancedScaleSliders();
|
||||
refreshAdvancedScaleSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::enableOrDisableRedoButton()
|
||||
|
|
@ -1565,8 +1693,15 @@ void FSFloaterPoser::onAdvancedPositionSet()
|
|||
F32 posY = mAdvPosYSlider->getValueF32();
|
||||
F32 posZ = mAdvPosZSlider->getValueF32();
|
||||
|
||||
mAdvPosXSpnr->setValue(posX);
|
||||
mInOutSpnr->setValue(posX);
|
||||
mAdvPosYSpnr->setValue(posY);
|
||||
mLeftRightSpnr->setValue(posY);
|
||||
mAdvPosZSpnr->setValue(posZ);
|
||||
mUpDownSpnr->setValue(posZ);
|
||||
|
||||
setSelectedJointsPosition(posX, posY, posZ);
|
||||
refreshAvatarPositionSliders();
|
||||
refreshAvatarPositionSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onAdvancedScaleSet()
|
||||
|
|
@ -1575,6 +1710,10 @@ void FSFloaterPoser::onAdvancedScaleSet()
|
|||
F32 scY = mAdvScaleYSlider->getValueF32();
|
||||
F32 scZ = mAdvScaleZSlider->getValueF32();
|
||||
|
||||
mScaleXSpnr->setValue(scX);
|
||||
mScaleYSpnr->setValue(scY);
|
||||
mScaleZSpnr->setValue(scZ);
|
||||
|
||||
setSelectedJointsScale(scX, scY, scZ);
|
||||
}
|
||||
|
||||
|
|
@ -1584,8 +1723,15 @@ void FSFloaterPoser::onAvatarPositionSet()
|
|||
F32 posY = mPosYSlider->getValueF32();
|
||||
F32 posZ = mPosZSlider->getValueF32();
|
||||
|
||||
mAdvPosXSpnr->setValue(posX);
|
||||
mInOutSpnr->setValue(posX);
|
||||
mAdvPosYSpnr->setValue(posY);
|
||||
mLeftRightSpnr->setValue(posY);
|
||||
mAdvPosZSpnr->setValue(posZ);
|
||||
mUpDownSpnr->setValue(posZ);
|
||||
|
||||
setSelectedJointsPosition(posX, posY, posZ);
|
||||
refreshAdvancedPositionSliders();
|
||||
refreshAdvancedPositionSlidersAndSpinners();
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onLimbTrackballChanged()
|
||||
|
|
@ -1624,6 +1770,10 @@ void FSFloaterPoser::onLimbTrackballChanged()
|
|||
mLimbYawSlider->setValue(trackPadPos.mV[VX] *= RAD_TO_DEG);
|
||||
mLimbPitchSlider->setValue(trackPadPos.mV[VY] *= RAD_TO_DEG);
|
||||
mLimbRollSlider->setValue(trackPadPos.mV[VZ] *= RAD_TO_DEG);
|
||||
|
||||
mYawSpnr->setValue(mLimbYawSlider->getValueF32());
|
||||
mPitchSpnr->setValue(mLimbPitchSlider->getValueF32());
|
||||
mRollSpnr->setValue(mLimbRollSlider->getValueF32());
|
||||
}
|
||||
|
||||
F32 FSFloaterPoser::unWrapScale(F32 scale)
|
||||
|
|
@ -1665,11 +1815,14 @@ void FSFloaterPoser::onYawPitchRollSliderChanged()
|
|||
absoluteRotation.mV[VZ] /= NormalTrackpadRangeInRads;
|
||||
|
||||
mAvatarTrackball->setValue(absoluteRotation.getValue());
|
||||
|
||||
mYawSpnr->setValue(mLimbYawSlider->getValueF32());
|
||||
mPitchSpnr->setValue(mLimbPitchSlider->getValueF32());
|
||||
mRollSpnr->setValue(mLimbRollSlider->getValueF32());
|
||||
}
|
||||
|
||||
void FSFloaterPoser::onAdjustTrackpadSensitivity()
|
||||
{
|
||||
gSavedSettings.setF32(POSER_TRACKPAD_SENSITIVITY_SAVE_KEY, mTrackpadSensitivitySlider->getValueF32());
|
||||
refreshTrackpadCursor();
|
||||
}
|
||||
|
||||
|
|
@ -1689,7 +1842,7 @@ void FSFloaterPoser::refreshTrackpadCursor()
|
|||
/// <summary>
|
||||
/// This only sets the position sliders of the 'basic' view (not the advanced sliders).
|
||||
/// </summary>
|
||||
void FSFloaterPoser::refreshAvatarPositionSliders()
|
||||
void FSFloaterPoser::refreshAvatarPositionSlidersAndSpinners()
|
||||
{
|
||||
auto activeTab = mJointsTabs->getCurrentPanel();
|
||||
if (!activeTab)
|
||||
|
|
@ -1700,36 +1853,48 @@ void FSFloaterPoser::refreshAvatarPositionSliders()
|
|||
|
||||
LLVector3 position = getPositionOfFirstSelectedJoint();
|
||||
mPosXSlider->setValue(position.mV[VX]);
|
||||
mInOutSpnr->setValue(position.mV[VX]);
|
||||
mPosYSlider->setValue(position.mV[VY]);
|
||||
mLeftRightSpnr->setValue(position.mV[VY]);
|
||||
mPosZSlider->setValue(position.mV[VZ]);
|
||||
mUpDownSpnr->setValue(position.mV[VZ]);
|
||||
}
|
||||
|
||||
void FSFloaterPoser::refreshRotationSliders()
|
||||
void FSFloaterPoser::refreshRotationSlidersAndSpinners()
|
||||
{
|
||||
LLVector3 rotation = getRotationOfFirstSelectedJoint();
|
||||
|
||||
mLastSliderRotation = rotation;
|
||||
mLimbYawSlider->setValue(rotation.mV[VX] *= RAD_TO_DEG);
|
||||
mYawSpnr->setValue(rotation.mV[VX]);
|
||||
mLimbPitchSlider->setValue(rotation.mV[VY] *= RAD_TO_DEG);
|
||||
mPitchSpnr->setValue(rotation.mV[VY]);
|
||||
mLimbRollSlider->setValue(rotation.mV[VZ] *= RAD_TO_DEG);
|
||||
mRollSpnr->setValue(rotation.mV[VZ]);
|
||||
}
|
||||
|
||||
void FSFloaterPoser::refreshAdvancedPositionSliders()
|
||||
void FSFloaterPoser::refreshAdvancedPositionSlidersAndSpinners()
|
||||
{
|
||||
LLVector3 position = getPositionOfFirstSelectedJoint();
|
||||
|
||||
mAdvPosXSlider->setValue(position.mV[VX]);
|
||||
mAdvPosXSpnr->setValue(position.mV[VX]);
|
||||
mAdvPosYSlider->setValue(position.mV[VY]);
|
||||
mAdvPosYSpnr->setValue(position.mV[VY]);
|
||||
mAdvPosZSlider->setValue(position.mV[VZ]);
|
||||
mAdvPosZSpnr->setValue(position.mV[VZ]);
|
||||
}
|
||||
|
||||
void FSFloaterPoser::refreshAdvancedScaleSliders()
|
||||
void FSFloaterPoser::refreshAdvancedScaleSlidersAndSpinners()
|
||||
{
|
||||
LLVector3 rotation = getScaleOfFirstSelectedJoint();
|
||||
|
||||
mAdvScaleXSlider->setValue(rotation.mV[VX]);
|
||||
mScaleXSpnr->setValue(rotation.mV[VX]);
|
||||
mAdvScaleYSlider->setValue(rotation.mV[VY]);
|
||||
mScaleYSpnr->setValue(rotation.mV[VY]);
|
||||
mAdvScaleZSlider->setValue(rotation.mV[VZ]);
|
||||
mScaleZSpnr->setValue(rotation.mV[VZ]);
|
||||
}
|
||||
|
||||
void FSFloaterPoser::setSelectedJointsPosition(F32 x, F32 y, F32 z)
|
||||
|
|
@ -1873,16 +2038,16 @@ LLVector3 FSFloaterPoser::getScaleOfFirstSelectedJoint() const
|
|||
|
||||
void FSFloaterPoser::onJointTabSelect()
|
||||
{
|
||||
refreshAvatarPositionSliders();
|
||||
refreshRotationSliders();
|
||||
refreshAvatarPositionSlidersAndSpinners();
|
||||
refreshRotationSlidersAndSpinners();
|
||||
refreshTrackpadCursor();
|
||||
enableOrDisableRedoButton();
|
||||
onClickSetBaseRotZero();
|
||||
|
||||
if (mToggleAdvancedPanelBtn->getValue().asBoolean())
|
||||
{
|
||||
refreshAdvancedPositionSliders();
|
||||
refreshAdvancedScaleSliders();
|
||||
refreshAdvancedPositionSlidersAndSpinners();
|
||||
refreshAdvancedScaleSlidersAndSpinners();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2074,7 +2239,7 @@ void FSFloaterPoser::onAvatarsRefresh()
|
|||
LLAvatarName av_name;
|
||||
std::string animeshName = getControlAvatarName(avatar);
|
||||
if (animeshName.empty())
|
||||
animeshName = avatar->getFullname();
|
||||
continue;
|
||||
|
||||
LLSD row;
|
||||
row["columns"][COL_ICON]["column"] = "icon";
|
||||
|
|
@ -2109,6 +2274,9 @@ std::string FSFloaterPoser::getControlAvatarName(const LLControlAvatar* avatar)
|
|||
if (attachedItem)
|
||||
return attachedItem->getName();
|
||||
|
||||
if (rootEditObject->permYouOwner())
|
||||
return avatar->getFullname();
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
|
|
@ -2146,24 +2314,6 @@ void FSFloaterPoser::setSavePosesButtonText(bool setAsSaveDiff)
|
|||
setAsSaveDiff ? mSavePosesBtn->setLabel("Save Diff") : mSavePosesBtn->setLabel("Save Pose");
|
||||
}
|
||||
|
||||
bool FSFloaterPoser::posingAnyoneOnScrollList()
|
||||
{
|
||||
for (auto listItem : mAvatarSelectionScrollList->getAllData())
|
||||
{
|
||||
LLScrollListCell* cell = listItem->getColumn(COL_UUID);
|
||||
if (!cell)
|
||||
continue;
|
||||
|
||||
LLUUID selectedAvatarId = cell->getValue().asUUID();
|
||||
LLVOAvatar* listAvatar = getAvatarByUuid(selectedAvatarId);
|
||||
|
||||
if (mPoserAnimator.isPosingAvatar(listAvatar))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
void FSFloaterPoser::addBoldToScrollList(LLScrollListCtrl* list, LLVOAvatar* avatar)
|
||||
{
|
||||
if (!avatar)
|
||||
|
|
|
|||
|
|
@ -236,7 +236,7 @@ class FSFloaterPoser : public LLFloater
|
|||
void enableOrDisableRedoButton();
|
||||
void onPoseStartStop();
|
||||
void startPosingSelf();
|
||||
void stopPosingSelf();
|
||||
void stopPosingAllAvatars();
|
||||
void onLimbTrackballChanged();
|
||||
void onYawPitchRollSliderChanged();
|
||||
void onAvatarPositionSet();
|
||||
|
|
@ -253,13 +253,15 @@ class FSFloaterPoser : public LLFloater
|
|||
void onClickLoadRightHandPose();
|
||||
void onClickLoadHandPose(bool isRightHand);
|
||||
void onClickSetBaseRotZero();
|
||||
//void onCommitSpinner(LLUICtrl* spinner);
|
||||
void onCommitSpinner(LLUICtrl* spinner, S32 ID);
|
||||
|
||||
// UI Refreshments
|
||||
void refreshRotationSliders();
|
||||
void refreshAvatarPositionSliders();
|
||||
void refreshRotationSlidersAndSpinners();
|
||||
void refreshAvatarPositionSlidersAndSpinners();
|
||||
void refreshTrackpadCursor();
|
||||
void refreshAdvancedPositionSliders();
|
||||
void refreshAdvancedScaleSliders();
|
||||
void refreshAdvancedPositionSlidersAndSpinners();
|
||||
void refreshAdvancedScaleSlidersAndSpinners();
|
||||
|
||||
/// <summary>
|
||||
/// Determines if we have permission to animate the supplied avatar.
|
||||
|
|
@ -328,11 +330,6 @@ class FSFloaterPoser : public LLFloater
|
|||
/// <param name="setAsSaveDiff">Whether to indicate a diff will be saved, instead of a pose.</param>
|
||||
void setSavePosesButtonText(bool setAsSaveDiff);
|
||||
|
||||
/// <summary>
|
||||
/// Gets whether any avatar know by the UI is being posed.
|
||||
/// </summary>
|
||||
bool posingAnyoneOnScrollList();
|
||||
|
||||
/// <summary>
|
||||
/// Applies the appropriate font-face (such as bold) to the text of the supplied list, to indicate use.
|
||||
/// </summary>
|
||||
|
|
@ -501,6 +498,20 @@ class FSFloaterPoser : public LLFloater
|
|||
|
||||
LLCheckBoxCtrl* mResetBaseRotCbx{ nullptr };
|
||||
LLCheckBoxCtrl* mAlsoSaveBvhCbx{ nullptr };
|
||||
|
||||
LLUICtrl* mTrackpadSensitivitySpnr{ nullptr };
|
||||
LLUICtrl* mYawSpnr{ nullptr };
|
||||
LLUICtrl* mPitchSpnr{ nullptr };
|
||||
LLUICtrl* mRollSpnr{ nullptr };
|
||||
LLUICtrl* mUpDownSpnr{ nullptr };
|
||||
LLUICtrl* mLeftRightSpnr{ nullptr };
|
||||
LLUICtrl* mInOutSpnr{ nullptr };
|
||||
LLUICtrl* mAdvPosXSpnr{ nullptr };
|
||||
LLUICtrl* mAdvPosYSpnr{ nullptr };
|
||||
LLUICtrl* mAdvPosZSpnr{ nullptr };
|
||||
LLUICtrl* mScaleXSpnr{ nullptr };
|
||||
LLUICtrl* mScaleYSpnr{ nullptr };
|
||||
LLUICtrl* mScaleZSpnr{ nullptr };
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -28,11 +28,35 @@ if [[ -f "$CONFIG_FILE" ]]; then
|
|||
echo "Notarized with id: [$match]"
|
||||
else
|
||||
echo "No match found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# if [[ ! $match -eq 0 ]]; then
|
||||
echo "Running Stapler"
|
||||
xcrun stapler staple "$app_file"
|
||||
# --- WAIT / RETRY LOGIC FOR STAPLER ---
|
||||
# Try stapler up to 5 times with a 5-second delay in between attempts
|
||||
max_attempts=5
|
||||
sleep_seconds=5
|
||||
attempt=1
|
||||
|
||||
while [[ $attempt -le $max_attempts ]]; do
|
||||
echo "Running stapler (attempt $attempt of $max_attempts)..."
|
||||
xcrun stapler staple "$app_file"
|
||||
ret=$?
|
||||
|
||||
if [[ $ret -eq 0 ]]; then
|
||||
echo "Stapling succeeded on attempt $attempt"
|
||||
break
|
||||
else
|
||||
if [[ $attempt -lt $max_attempts ]]; then
|
||||
echo "Stapling failed (Error $ret). Waiting $sleep_seconds seconds before retry..."
|
||||
sleep $sleep_seconds
|
||||
else
|
||||
echo "Stapling failed after $max_attempts attempts, giving up."
|
||||
exit 65
|
||||
fi
|
||||
fi
|
||||
attempt=$((attempt + 1))
|
||||
done
|
||||
|
||||
# Delete the zip file to stop it being packed in the dmg
|
||||
rm -f "$zip_file"
|
||||
if [[ $? -eq 0 ]]; then
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -103,6 +103,10 @@ echo "LIBGL_DRIVERS_PATH is ${LIBGL_DRIVERS_PATH}"
|
|||
if [ "$GTK_IM_MODULE" = "scim" ]; then
|
||||
export GTK_IM_MODULE=xim
|
||||
fi
|
||||
if [ "$XMODIFIERS" = "" ]; then
|
||||
## IME is valid only for fcitx, not when using ibus
|
||||
export XMODIFIERS="@im=fcitx"
|
||||
fi
|
||||
|
||||
## - Automatically work around the ATI mouse cursor crash bug:
|
||||
## (this workaround is disabled as most fglrx users do not see the bug)
|
||||
|
|
|
|||
|
|
@ -1098,15 +1098,20 @@ void LLAgentWearables::setWearableOutfit(const LLInventoryItem::item_array_t& it
|
|||
|
||||
const LLWearableType::EType type = new_wearable->getType();
|
||||
//<FS:Beq> BOM fallback legacy opensim
|
||||
if(!gAgent.getRegion()->bakesOnMeshEnabled())
|
||||
#ifdef OPENSIM
|
||||
if (!LLGridManager::getInstance()->isInSecondLife())
|
||||
{
|
||||
if(type == LLWearableType::WT_UNIVERSAL)
|
||||
if(!gAgent.getRegion()->bakesOnMeshEnabled())
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "Universal wearable not supported on this region - ignoring." << LL_ENDL;
|
||||
mismatched++;
|
||||
continue;
|
||||
if(type == LLWearableType::WT_UNIVERSAL)
|
||||
{
|
||||
LL_DEBUGS("Avatar") << "Universal wearable not supported on this region - ignoring." << LL_ENDL;
|
||||
mismatched++;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
//</FS:Beq>
|
||||
if (type < 0 || type>=LLWearableType::WT_COUNT)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -966,3 +966,13 @@ void LLFloaterFlickr::onOpen(const LLSD& key)
|
|||
mFlickrPhotoPanel->onOpen(key);
|
||||
}
|
||||
// </FS:Ansariel>
|
||||
//<FS:Beq> Add snapshot frame support to flickr
|
||||
LLSnapshotLivePreview* LLFloaterFlickr::getPreviewView()
|
||||
{
|
||||
if(mFlickrPhotoPanel)
|
||||
{
|
||||
return mFlickrPhotoPanel->getPreviewView();
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
//</FS:Beq>
|
||||
|
|
@ -134,6 +134,7 @@ public:
|
|||
|
||||
// <FS:Ansariel> Exodus' flickr upload
|
||||
void onOpen(const LLSD& key);
|
||||
LLSnapshotLivePreview* getPreviewView(); // <FS:Beq/> Required for snapshot frame rendering
|
||||
|
||||
private:
|
||||
LLFlickrPhotoPanel* mFlickrPhotoPanel;
|
||||
|
|
|
|||
|
|
@ -1480,12 +1480,14 @@ bool LLFloaterSnapshot::isWaitingState()
|
|||
return (impl->getStatus() == ImplBase::STATUS_WORKING);
|
||||
}
|
||||
|
||||
bool LLFloaterSnapshotBase::ImplBase::updatePreviewList(bool initialized)
|
||||
// <FS:Beq> FIRE-35002 - Post to flickr broken, improved solution
|
||||
// bool LLFloaterSnapshotBase::ImplBase::updatePreviewList(bool initialized)
|
||||
bool LLFloaterSnapshotBase::ImplBase::updatePreviewList(bool initialized, bool have_flickr)
|
||||
// </FS:Beq>
|
||||
{
|
||||
// <FS:Ansariel> Share to Flickr
|
||||
//if (!initialized)
|
||||
LLFloaterFlickr* floater_flickr = LLFloaterReg::findTypedInstance<LLFloaterFlickr>("flickr");
|
||||
if (!initialized && !floater_flickr)
|
||||
if (!initialized && !have_flickr)
|
||||
// </FS:Ansariel>
|
||||
return false;
|
||||
|
||||
|
|
@ -1504,8 +1506,11 @@ void LLFloaterSnapshotBase::ImplBase::updateLivePreview()
|
|||
{
|
||||
// don't update preview for hidden floater
|
||||
// <FS:Beq> FIRE-35002 - Post to flickr broken
|
||||
// if (mFloater && mFloater->isInVisibleChain() && ImplBase::updatePreviewList(true))
|
||||
if (ImplBase::updatePreviewList(true) && mFloater)
|
||||
LLFloaterFlickr* floater_flickr = LLFloaterReg::findTypedInstance<LLFloaterFlickr>("flickr");
|
||||
auto have_flickr = floater_flickr != nullptr;
|
||||
if ( ((mFloater && mFloater->isInVisibleChain()) ||
|
||||
have_flickr) &&
|
||||
ImplBase::updatePreviewList(true, have_flickr))
|
||||
// </FS:Beq>
|
||||
{
|
||||
LL_DEBUGS() << "changed" << LL_ENDL;
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ public:
|
|||
virtual EStatus getStatus() const { return mStatus; }
|
||||
virtual void setNeedRefresh(bool need);
|
||||
|
||||
static bool updatePreviewList(bool initialized);
|
||||
static bool updatePreviewList(bool initialized, bool have_flickr = false); // <FS:Beq/> FIRE-35002 - Post to flickr broken, improved solution
|
||||
|
||||
void setAdvanced(bool advanced) { mAdvanced = advanced; }
|
||||
void setSkipReshaping(bool skip) { mSkipReshaping = skip; }
|
||||
|
|
|
|||
|
|
@ -129,16 +129,12 @@ void LLHUDText::render()
|
|||
// If the current text object is highighed and the use hover highlight feature is enabled, then
|
||||
// disable writing to the depth buffer
|
||||
static LLCachedControl<bool> mbUseHoverHighlight(gSavedSettings, "FSHudTextUseHoverHighlight");
|
||||
if (mbUseHoverHighlight && mbIsHighlighted)
|
||||
{
|
||||
LLGLDepthTest gls_depth(GL_FALSE, GL_FALSE);
|
||||
}
|
||||
//Else, use the standard method of writing to the depth buffer for all other non-highlighted text objects
|
||||
else
|
||||
{
|
||||
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
|
||||
}
|
||||
// </FS:minerjr> [FIRE-35019]
|
||||
// <FS:minerjr> [FIRE-35102] - Hover text appearing through walls in Beta 7.1.12.7737
|
||||
// So it turns out when the LLGLDepthTest object goes out of scope, it reverts back
|
||||
// to the previous state. So by having the LLGLDepthTest in the if statements, they were
|
||||
// never applied.
|
||||
LLGLDepthTest gls_depth(mbUseHoverHighlight && mbIsHighlighted ? GL_FALSE : GL_TRUE, GL_FALSE);
|
||||
// </FS:minerjr> [FIRE-35019] </FS:minerjr> [FIRE-35102]
|
||||
//LLGLDisable gls_stencil(GL_STENCIL_TEST);
|
||||
renderText();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3978,7 +3978,7 @@ bool LLViewerRegion::meshUploadEnabled() const
|
|||
|
||||
bool LLViewerRegion::bakesOnMeshEnabled() const
|
||||
{
|
||||
return (mSimulatorFeatures.has("BakesOnMeshEnabled") &&
|
||||
return (mSimulatorFeaturesReceived && mSimulatorFeatures.has("BakesOnMeshEnabled") && // FIRE-35111 (bugsplat) checking bakes on mesh feature before features received.
|
||||
mSimulatorFeatures["BakesOnMeshEnabled"].asBoolean());
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -137,6 +137,7 @@ LLGLSLShader gGlowProgram;
|
|||
LLGLSLShader gGlowExtractProgram;
|
||||
LLGLSLShader gPostScreenSpaceReflectionProgram;
|
||||
LLGLSLShader gPostVignetteProgram; // <FS:CR> Import Vignette from Exodus
|
||||
LLGLSLShader gPostSnapshotFrameProgram; // <FS:Beq/> Add Snapshot frame guide
|
||||
|
||||
// Deferred rendering shaders
|
||||
LLGLSLShader gDeferredImpostorProgram;
|
||||
|
|
@ -1033,6 +1034,7 @@ bool LLViewerShaderMgr::loadShadersEffects()
|
|||
gGlowProgram.unload();
|
||||
gGlowExtractProgram.unload();
|
||||
gPostVignetteProgram.unload(); // <FS:Ansariel> Import Vignette from Exodus
|
||||
gPostSnapshotFrameProgram.unload(); // <FS:Beq/> Add Snapshot framing shader
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1084,6 +1086,17 @@ bool LLViewerShaderMgr::loadShadersEffects()
|
|||
success = gPostVignetteProgram.createShader();
|
||||
}
|
||||
// </FS:CR>
|
||||
// <FS:Beq> Add Snapshot framing shader
|
||||
if (success)
|
||||
{
|
||||
gPostSnapshotFrameProgram.mName = "Snapshot Frame Post";
|
||||
gPostSnapshotFrameProgram.mShaderFiles.clear();
|
||||
gPostSnapshotFrameProgram.mShaderFiles.push_back(make_pair("post/exoPostBaseV.glsl", GL_VERTEX_SHADER));
|
||||
gPostSnapshotFrameProgram.mShaderFiles.push_back(make_pair("post/snapshotFrameF.glsl", GL_FRAGMENT_SHADER));
|
||||
gPostSnapshotFrameProgram.mShaderLevel = mShaderLevel[SHADER_EFFECT];
|
||||
success = gPostSnapshotFrameProgram.createShader();
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
return success;
|
||||
|
||||
|
|
|
|||
|
|
@ -214,6 +214,7 @@ extern LLGLSLShader gImpostorProgram;
|
|||
// Post Process Shaders
|
||||
extern LLGLSLShader gPostScreenSpaceReflectionProgram;
|
||||
extern LLGLSLShader gPostVignetteProgram; // <FS:CR> Import Vignette from Exodus
|
||||
extern LLGLSLShader gPostSnapshotFrameProgram; // <FS:Beq/> Snapshot Frame overlay
|
||||
|
||||
// Deferred rendering shaders
|
||||
extern LLGLSLShader gDeferredImpostorProgram;
|
||||
|
|
|
|||
|
|
@ -109,6 +109,9 @@
|
|||
#include "llfloaterpathfindingconsole.h"
|
||||
#include "llfloaterpathfindingcharacters.h"
|
||||
#include "llfloatertools.h"
|
||||
#include "llfloatersnapshot.h" // <FS:Beq/> for snapshotFrame
|
||||
#include "llfloaterflickr.h" // <FS:Beq/> for snapshotFrame
|
||||
#include "llsnapshotlivepreview.h" // <FS:Beq/> for snapshotFrame
|
||||
// #include "llpanelface.h" // <FS:Zi> switchable edit texture/materials panel - include not needed
|
||||
#include "llpathfindingpathtool.h"
|
||||
#include "llscenemonitor.h"
|
||||
|
|
@ -7872,7 +7875,7 @@ void LLPipeline::combineGlow(LLRenderTarget* src, LLRenderTarget* dst)
|
|||
}
|
||||
|
||||
// <FS:Beq> updated Vignette code (based on original Exo Vignette)
|
||||
void LLPipeline::renderVignette(LLRenderTarget* src, LLRenderTarget* dst)
|
||||
bool LLPipeline::renderVignette(LLRenderTarget* src, LLRenderTarget* dst)
|
||||
{
|
||||
if (RenderVignette.mV[0] > 0.f)
|
||||
{
|
||||
|
|
@ -7909,14 +7912,166 @@ void LLPipeline::renderVignette(LLRenderTarget* src, LLRenderTarget* dst)
|
|||
shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
|
||||
shader->unbind();
|
||||
dst->flush();
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
copyRenderTarget(src, dst);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
// <FS:Beq> Render Snapshot frame oerlay
|
||||
bool LLPipeline::renderSnapshotFrame(LLRenderTarget* src, LLRenderTarget* dst)
|
||||
{
|
||||
static LLCachedControl<bool> show_frame(gSavedSettings, "FSSnapshotShowCaptureFrame", false);
|
||||
static LLCachedControl<bool> show_guides(gSavedSettings, "FSSnapshotShowGuides", false);
|
||||
|
||||
float left = 0.f;
|
||||
float top = 0.f;
|
||||
float right = 1.f;
|
||||
float bottom = 1.f;
|
||||
|
||||
// TODO - add debug settings to control the appearance of the snapshot frameand guides
|
||||
static LLCachedControl<LLColor3> border_color(gSavedSettings, "FSSnapshotFrameBorderColor", LLColor3(1.f, 0.f, 0.f));
|
||||
static LLCachedControl<LLColor3> guide_color(gSavedSettings, "FSSnapshotFrameGuideColor", LLColor3(1.f, 1.f, 0.f));
|
||||
static LLCachedControl<F32> border_thickness(gSavedSettings, "FSSnapshotFrameBorderWidth", 2.0f);
|
||||
static LLCachedControl<F32> guide_thickness(gSavedSettings, "FSSnapshotFrameGuideWidth", 2.0f);
|
||||
|
||||
F32 guide_style = 1.f; // 0:off, 1:rule_of_thirds, others maybe in the future
|
||||
if (!show_guides)
|
||||
{
|
||||
guide_style = 0.f;
|
||||
}
|
||||
const bool simple_snapshot_visible = LLFloaterReg::instanceVisible("simple_snapshot");
|
||||
const bool flickr_snapshot_visible = LLFloaterReg::instanceVisible("flickr");
|
||||
const bool snapshot_visible = LLFloaterReg::instanceVisible("snapshot");
|
||||
const bool any_snapshot_visible = simple_snapshot_visible || flickr_snapshot_visible || snapshot_visible;
|
||||
if (!show_frame || !any_snapshot_visible || !gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))
|
||||
{
|
||||
return false;
|
||||
|
||||
}
|
||||
LLSnapshotLivePreview * previewView = nullptr;
|
||||
if (snapshot_visible)
|
||||
{
|
||||
auto * floater =dynamic_cast<LLFloaterSnapshotBase*>(LLFloaterReg::findInstance("snapshot"));
|
||||
previewView = floater->impl->getPreviewView();
|
||||
}
|
||||
// Note: simple_snapshot not supported as there can be more than one active and more complex selection is required
|
||||
if (flickr_snapshot_visible && !previewView)
|
||||
{
|
||||
auto * floater = dynamic_cast<LLFloaterFlickr*>(LLFloaterReg::findInstance("flickr"));
|
||||
previewView = floater->getPreviewView();
|
||||
}
|
||||
if(!previewView)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static LLCachedControl<bool> keep_aspect(gSavedSettings, "KeepAspectForSnapshot", false);
|
||||
|
||||
S32 snapshot_width;
|
||||
S32 snapshot_height;
|
||||
previewView->getSize(snapshot_width, snapshot_height);
|
||||
F32 screen_aspect = float(gViewerWindow->getWindowWidthRaw()) / float(gViewerWindow->getWindowHeightRaw());
|
||||
F32 snapshot_aspect = float(snapshot_width) / float(snapshot_height);
|
||||
|
||||
if (keep_aspect || (std::fabs(screen_aspect - snapshot_aspect) < 1e-6f) )
|
||||
{
|
||||
top = 0.0f;
|
||||
left = 0.0f;
|
||||
bottom = 1.0f;
|
||||
right = 1.0f;
|
||||
}
|
||||
|
||||
float w = screen_aspect;
|
||||
float h = 1.0;
|
||||
if (snapshot_aspect > screen_aspect)
|
||||
{
|
||||
float frame_width = w;
|
||||
float frame_height = frame_width / snapshot_aspect;
|
||||
// Centre this box in [0..1]×[0..1]
|
||||
float y_offset = 0.5f * (h - frame_height);
|
||||
left = 0.f;
|
||||
top = y_offset / h;
|
||||
right = 1.f;
|
||||
bottom = (y_offset + frame_height) / h;
|
||||
}
|
||||
else
|
||||
{
|
||||
float frame_height = h;
|
||||
float frame_width = h * snapshot_aspect;
|
||||
// Centre this box in [0..1]×[0..1]
|
||||
float x_offset = 0.5f * (w - frame_width);
|
||||
left = x_offset / w;
|
||||
top = 0.f;
|
||||
right = (x_offset + frame_width) / w;
|
||||
bottom = 1.f;
|
||||
|
||||
}
|
||||
LL_PROFILE_GPU_ZONE("Snapshot Frame");
|
||||
dst->bindTarget();
|
||||
LLGLSLShader *shader = &gPostSnapshotFrameProgram;
|
||||
|
||||
// bind the program and output to screentriangle VBO
|
||||
shader->bind();
|
||||
|
||||
S32 channel = shader->enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
|
||||
if (channel > -1)
|
||||
{
|
||||
src->bindTexture(0, channel, LLTexUnit::TFO_POINT);
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_ERRS("snapshot_frame") << "Failed to bind diffuse texture" << LL_ENDL;
|
||||
}
|
||||
|
||||
shader->uniform2f(
|
||||
LLShaderMgr::DEFERRED_SCREEN_RES,
|
||||
(GLfloat)dst->getWidth(),
|
||||
(GLfloat)dst->getHeight());
|
||||
|
||||
// Assuming frame_rect is a static or accessible variable containing the frame dimensions
|
||||
shader->uniform4f(
|
||||
LLShaderMgr::SNAPSHOT_FRAME_RECT,
|
||||
(GLfloat)left,
|
||||
(GLfloat)top,
|
||||
(GLfloat)right,
|
||||
(GLfloat)bottom);
|
||||
|
||||
shader->uniform3fv(
|
||||
LLShaderMgr::SNAPSHOT_BORDER_COLOR,
|
||||
1,
|
||||
border_color().mV);
|
||||
|
||||
shader->uniform1f(
|
||||
LLShaderMgr::SNAPSHOT_BORDER_THICKNESS,
|
||||
(GLfloat)border_thickness);
|
||||
|
||||
shader->uniform3fv(
|
||||
LLShaderMgr::SNAPSHOT_GUIDE_COLOR,
|
||||
1,
|
||||
guide_color().mV);
|
||||
|
||||
shader->uniform1f(
|
||||
LLShaderMgr::SNAPSHOT_GUIDE_THICKNESS,
|
||||
(GLfloat)guide_thickness);
|
||||
shader->uniform1f(
|
||||
LLShaderMgr::SNAPSHOT_GUIDE_STYLE,
|
||||
(GLfloat)guide_style);
|
||||
|
||||
mScreenTriangleVB->setBuffer();
|
||||
mScreenTriangleVB->drawArrays(LLRender::TRIANGLES, 0, 3);
|
||||
stop_glerror();
|
||||
|
||||
shader->disableTexture(LLShaderMgr::DEFERRED_DIFFUSE, src->getUsage());
|
||||
shader->unbind();
|
||||
dst->flush();
|
||||
return true;
|
||||
}
|
||||
// </FS:Beq>
|
||||
|
||||
void LLPipeline::renderDoF(LLRenderTarget* src, LLRenderTarget* dst)
|
||||
{
|
||||
{
|
||||
|
|
@ -8217,8 +8372,23 @@ void LLPipeline::renderFinalize()
|
|||
targetBuffer = params.m_pSrcBuffer;
|
||||
}
|
||||
// [/RLVa:KB]
|
||||
renderVignette(activeBuffer, targetBuffer);
|
||||
finalBuffer = targetBuffer;
|
||||
|
||||
if (renderVignette(activeBuffer, targetBuffer))
|
||||
{
|
||||
auto prevActiveBuffer = activeBuffer;
|
||||
activeBuffer = targetBuffer;
|
||||
targetBuffer = prevActiveBuffer;
|
||||
};
|
||||
// </FS:Beq>
|
||||
// <FS:Beq> new shader for snapshot frame helper
|
||||
if (renderSnapshotFrame(targetBuffer, activeBuffer))
|
||||
{
|
||||
auto prevActiveBuffer = activeBuffer;
|
||||
activeBuffer = targetBuffer;
|
||||
targetBuffer = prevActiveBuffer;
|
||||
};
|
||||
|
||||
finalBuffer = activeBuffer;
|
||||
// </FS:Beq>
|
||||
if (RenderBufferVisualization > -1)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -348,7 +348,8 @@ public:
|
|||
void renderShadow(const glm::mat4& view, const glm::mat4& proj, LLCamera& camera, LLCullResult& result, bool depth_clamp);
|
||||
void renderSelectedFaces(const LLColor4& color);
|
||||
void renderHighlights();
|
||||
void renderVignette(LLRenderTarget* src, LLRenderTarget* dst);
|
||||
bool renderVignette(LLRenderTarget* src, LLRenderTarget* dst);
|
||||
bool renderSnapshotFrame(LLRenderTarget* src, LLRenderTarget* dst); // <FS:Beq/> Add snapshot frame rendering
|
||||
void renderDebug();
|
||||
void renderPhysicsDisplay();
|
||||
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@
|
|||
<panel name="trackball_button_panel">
|
||||
<button name="undo_change" tool_tip="Letzte Rotationsänderung rückgängig machen"/>
|
||||
<button name="button_redo_change" tool_tip="Letzte Rotationsänderung wiederherstellen"/>
|
||||
<button name="refresh_avatars" tool_tip="Doppelklicken, um alle ausgewählten Körperteile auf die Ursprungswerte zurückzusetzen."/>
|
||||
<button name="poser_joint_reset" tool_tip="Doppelklicken, um alle ausgewählten Körperteile auf die Ursprungswerte zurückzusetzen."/>
|
||||
<button name="delta_mode_toggle" tool_tip="Falls mehrere Gelenke geändert werden, diese um denselben Wert ändern anstatt in dieselbe Rotation zu versetzen. Wird auch zur Verhinderung von Gimbal Lock verwendet."/>
|
||||
<button label="Spieg." name="button_toggleMirrorRotation" tool_tip="Änderungen an gegenüberliegendem Gelenk spiegeln."/>
|
||||
<button label="Sym." name="button_toggleSympatheticRotation" tool_tip="Gegenüberliegendes Gelenk gleichermaßen anpassen."/>
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@
|
|||
<combo_box.item label="Tiefe" name="Depth"/>
|
||||
<combo_box.item label="Tiefe (24 Bit)" name="Depth24"/>
|
||||
</combo_box>
|
||||
<check_box label="Aufnahmerahmen anzeigen" name="show_frame" tool_tip="Zeigt einen Rahmen um den Bereich der Aufnahme an. Teile der Szene, die außerhalb des Aufnahmebereichs liegen, werden entsättigt und leicht verschwommen dargestellt."/>
|
||||
<check_box label="Aufnahme-Guide anzeigen" name="show_guides" tool_tip="Zeigt Aufnahme-Guide (Drittel-Regel) innerhalb des Aufnahmebereichs an."/>
|
||||
<check_box label="Benutzeroberfläche" name="ui_check"/>
|
||||
<check_box label="L$-Kontostand" name="currency_check"/>
|
||||
<check_box label="HUDs" name="hud_check"/>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@
|
|||
<text name="working_lbl">
|
||||
Aktualisiere...
|
||||
</text>
|
||||
<check_box label="Rahmen anzeigen" name="show_frame" tool_tip="Zeigt einen Rahmen um den Bereich der Aufnahme an. Teile der Szene, die außerhalb des Aufnahmebereichs liegen, werden entsättigt und leicht verschwommen dargestellt."/>
|
||||
<check_box label="Guide anzeigen" name="show_guides" tool_tip="Zeigt Aufnahme-Guide (Drittel-Regel) innerhalb des Aufnahmebereichs an."/>
|
||||
<button label="Aktualisieren" name="new_snapshot_btn" tool_tip="Zum Aktualisieren klicken"/>
|
||||
<button label="Vorschau" name="big_preview_btn" tool_tip="Klicken, um Vorschau ein-/auszuschalten"/>
|
||||
<text name="title_label">
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@
|
|||
single_instance="true"
|
||||
reuse_instance="true"
|
||||
title="Share to Flickr"
|
||||
height="590"
|
||||
height="600"
|
||||
width="272">
|
||||
<panel
|
||||
height="590"
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
tab_height="21"
|
||||
tab_position="top"
|
||||
top="7"
|
||||
height="555"
|
||||
height="565"
|
||||
follows="all"
|
||||
halign="center">
|
||||
<panel
|
||||
|
|
|
|||
|
|
@ -351,6 +351,7 @@ width="403">
|
|||
</text>
|
||||
<slider
|
||||
decimal_digits="2"
|
||||
show_text="false"
|
||||
follows="left|top"
|
||||
height="16"
|
||||
increment="0.01"
|
||||
|
|
@ -361,18 +362,33 @@ width="403">
|
|||
max_val="1.5"
|
||||
name="av_position_updown"
|
||||
top_pad="5"
|
||||
width="172"
|
||||
width="122"
|
||||
tool_tip="Move the selected avatar up or down"
|
||||
can_edit_text="true">
|
||||
<slider.commit_callback
|
||||
function="Poser.PositionSet"/>
|
||||
</slider>
|
||||
<spinner
|
||||
height="16"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.01"
|
||||
top_pad="-19"
|
||||
left_pad="0"
|
||||
name="av_position_updown_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="0"/>
|
||||
</spinner>
|
||||
<text
|
||||
follows="left|top"
|
||||
name="av_position_leftright_label"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="-5"
|
||||
left="0"
|
||||
top_pad="5"
|
||||
width="172">
|
||||
Left/Right:
|
||||
|
|
@ -380,6 +396,7 @@ width="403">
|
|||
<slider
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
show_text="false"
|
||||
height="16"
|
||||
increment="0.01"
|
||||
initial_value="0"
|
||||
|
|
@ -389,18 +406,33 @@ width="403">
|
|||
max_val="1.5"
|
||||
name="av_position_leftright"
|
||||
top_pad="5"
|
||||
width="172"
|
||||
width="122"
|
||||
tool_tip="Move the selected avatar left or right"
|
||||
can_edit_text="true">
|
||||
<slider.commit_callback
|
||||
function="Poser.PositionSet"/>
|
||||
</slider>
|
||||
<spinner
|
||||
height="16"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.01"
|
||||
top_pad="-19"
|
||||
left_pad="0"
|
||||
name="av_position_leftright_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="1"/>
|
||||
</spinner>
|
||||
<text
|
||||
follows="left|top"
|
||||
name="av_position_inout_label"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="-5"
|
||||
left="0"
|
||||
top_pad="5"
|
||||
width="172">
|
||||
In/Out:
|
||||
|
|
@ -408,6 +440,7 @@ width="403">
|
|||
<slider
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
show_text="false"
|
||||
height="16"
|
||||
increment="0.01"
|
||||
initial_value="0"
|
||||
|
|
@ -417,13 +450,28 @@ width="403">
|
|||
max_val="1.5"
|
||||
name="av_position_inout"
|
||||
top_pad="5"
|
||||
width="172"
|
||||
width="122"
|
||||
tool_tip="Move the selected avatar in or out"
|
||||
can_edit_text="true">
|
||||
<slider.commit_callback
|
||||
function="Poser.PositionSet"/>
|
||||
</slider>
|
||||
<!-- so this panel behaves like the others in the code behind, it has an invisible list... -->
|
||||
<spinner
|
||||
height="16"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.01"
|
||||
top_pad="-19"
|
||||
left_pad="0"
|
||||
name="av_position_inout_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="2"/>
|
||||
</spinner>
|
||||
<!-- to make this panel behaves like the others in code-behind, it has an invisible list -->
|
||||
<scroll_list
|
||||
visible="false"
|
||||
column_padding="2"
|
||||
|
|
@ -796,6 +844,7 @@ width="403">
|
|||
</text>
|
||||
<slider
|
||||
decimal_digits="2"
|
||||
control_name="FSPoserTrackpadSensitivity"
|
||||
can_edit_text="true"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
|
|
@ -805,13 +854,30 @@ width="403">
|
|||
left_delta="0"
|
||||
max_val="2"
|
||||
min_val="0.01"
|
||||
show_text="false"
|
||||
name="trackpad_sensitivity_slider"
|
||||
tool_tip="Adjusts the sensitivity of the trackball"
|
||||
top_pad="3"
|
||||
width="170" >
|
||||
width="120" >
|
||||
<slider.commit_callback
|
||||
function="Poser.AdjustTrackPadSensitivity"/>
|
||||
</slider>
|
||||
<spinner
|
||||
height="16"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
control_name="FSPoserTrackpadSensitivity"
|
||||
increment="0.01"
|
||||
top_pad="-19"
|
||||
left_pad="0"
|
||||
name="trackpad_sensitivity_spinner"
|
||||
min_val="0.01"
|
||||
max_val="2"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="3"/>
|
||||
</spinner>
|
||||
<check_box
|
||||
control_name="FSPoserStopPosingWhenClosed"
|
||||
name="stop_posing_on_close_checkbox"
|
||||
|
|
@ -820,7 +886,7 @@ width="403">
|
|||
follows="left|top"
|
||||
left="5"
|
||||
tool_tip="Not stopping your pose can be helpful if you do a lot of work, and don't want to accidentally lose it."
|
||||
top_pad="5"
|
||||
top_pad="10"
|
||||
width="134" />
|
||||
<check_box
|
||||
control_name="FSPoserResetBaseRotationOnEdit"
|
||||
|
|
@ -839,9 +905,9 @@ width="403">
|
|||
enabled="false"
|
||||
label="Write BVH when saving**"
|
||||
follows="left|top"
|
||||
left="5"
|
||||
left="15"
|
||||
tool_tip="When you save your pose, also write a BVH file, which can be uploaded via the 'Build > Upload > Animation' to pose yourself or others in-world. This needs joints to reset their 'base' to zero, because BVH requires original work."
|
||||
top_pad="5"
|
||||
top_pad="2"
|
||||
width="134" />
|
||||
</panel>
|
||||
</tab_container>
|
||||
|
|
@ -923,7 +989,7 @@ width="403">
|
|||
layout="topleft"
|
||||
image_overlay="Inv_TrashOpen"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
name="refresh_avatars"
|
||||
name="poser_joint_reset"
|
||||
tool_tip="Double click to reset all selected body parts to when you first started posing"
|
||||
width="18"
|
||||
top_delta="0"
|
||||
|
|
@ -992,7 +1058,7 @@ width="403">
|
|||
name="limb_pitch_label"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left="0"
|
||||
top_pad="2"
|
||||
width="200">
|
||||
Up/Down:
|
||||
|
|
@ -1008,16 +1074,31 @@ width="403">
|
|||
min_val="-180"
|
||||
max_val="180"
|
||||
name="limb_pitch"
|
||||
show_text="false"
|
||||
top_pad="2"
|
||||
width="150"
|
||||
can_edit_text="true"/>
|
||||
width="98"/>
|
||||
<spinner
|
||||
height="16"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.1"
|
||||
top_pad="-19"
|
||||
left_pad="0"
|
||||
name="limb_pitch_spinner"
|
||||
min_val="-180"
|
||||
max_val="180"
|
||||
width="57">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="4"/>
|
||||
</spinner>
|
||||
<text
|
||||
follows="left|top"
|
||||
name="limb_yaw_label"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="-5"
|
||||
top_pad="0"
|
||||
left="0"
|
||||
top_pad="2"
|
||||
width="200">
|
||||
Left/Right:
|
||||
</text>
|
||||
|
|
@ -1032,16 +1113,32 @@ width="403">
|
|||
min_val="-180"
|
||||
max_val="180"
|
||||
name="limb_yaw"
|
||||
show_text="false"
|
||||
top_pad="0"
|
||||
width="150"
|
||||
width="98"
|
||||
can_edit_text="true"/>
|
||||
<spinner
|
||||
height="16"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.1"
|
||||
top_pad="-19"
|
||||
left_pad="0"
|
||||
name="limb_yaw_spinner"
|
||||
min_val="-180"
|
||||
max_val="180"
|
||||
width="57">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="5"/>
|
||||
</spinner>
|
||||
<text
|
||||
follows="left|top"
|
||||
name="limb_roll_label"
|
||||
height="10"
|
||||
layout="topleft"
|
||||
left_delta="-5"
|
||||
top_pad="-1"
|
||||
left="0"
|
||||
top_pad="2"
|
||||
width="200">
|
||||
Roll:
|
||||
</text>
|
||||
|
|
@ -1052,13 +1149,29 @@ width="403">
|
|||
increment="0.1"
|
||||
initial_value="0"
|
||||
layout="topleft"
|
||||
show_text="false"
|
||||
left_delta="5"
|
||||
min_val="-180"
|
||||
max_val="180"
|
||||
name="limb_roll"
|
||||
top_pad="-1"
|
||||
width="150"
|
||||
width="98"
|
||||
can_edit_text="true"/>
|
||||
<spinner
|
||||
height="16"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.1"
|
||||
top_pad="-18"
|
||||
left_pad="0"
|
||||
name="limb_roll_spinner"
|
||||
min_val="-180"
|
||||
max_val="180"
|
||||
width="57">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="6"/>
|
||||
</spinner>
|
||||
</panel>
|
||||
<panel
|
||||
follows="top|left|bottom"
|
||||
|
|
@ -1300,13 +1413,13 @@ width="403">
|
|||
<layout_panel
|
||||
follows="top|left|right"
|
||||
layout="topleft"
|
||||
height="97"
|
||||
height="99"
|
||||
auto_resize="false"
|
||||
name="advanced_controls_layout"
|
||||
width="600">
|
||||
<panel
|
||||
follows="top|left|right"
|
||||
height="97"
|
||||
height="99"
|
||||
left="0"
|
||||
layout="all"
|
||||
enabled="false"
|
||||
|
|
@ -1318,7 +1431,7 @@ width="403">
|
|||
<tab_container
|
||||
follows="all"
|
||||
halign="center"
|
||||
height="97"
|
||||
height="99"
|
||||
layout="topleft"
|
||||
name="modifier_tabs"
|
||||
tab_height="20"
|
||||
|
|
@ -1329,7 +1442,7 @@ width="403">
|
|||
<panel
|
||||
follows="all"
|
||||
background_visible="false"
|
||||
height="97"
|
||||
height="99"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
title="Body Part Position"
|
||||
|
|
@ -1337,75 +1450,117 @@ width="403">
|
|||
top="0"
|
||||
width="555">
|
||||
<slider
|
||||
decimal_digits="3"
|
||||
can_edit_text="true"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
increment="0.001"
|
||||
initial_value="0"
|
||||
label="Position X:"
|
||||
label_width="70"
|
||||
label_width="60"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
increment="0.001"
|
||||
initial_value="0"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
max_val="0.5"
|
||||
min_val="-0.5"
|
||||
show_text="false"
|
||||
left="3"
|
||||
max_val="1.5"
|
||||
min_val="-1.5"
|
||||
name="Advanced_Position_X"
|
||||
top_pad="6"
|
||||
width="380" >
|
||||
top_pad="2"
|
||||
width="342" >
|
||||
<slider.commit_callback
|
||||
function="Poser.Advanced.PositionSet"/>
|
||||
</slider>
|
||||
<slider
|
||||
decimal_digits="3"
|
||||
can_edit_text="true"
|
||||
<spinner
|
||||
height="0"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
increment="0.001"
|
||||
initial_value="0"
|
||||
increment="0.01"
|
||||
top_pad="-19"
|
||||
left_pad="2"
|
||||
name="adv_posx_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="7"/>
|
||||
</spinner>
|
||||
<slider
|
||||
label="Position Y:"
|
||||
label_width="70"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
max_val="0.5"
|
||||
min_val="-0.5"
|
||||
name="Advanced_Position_Y"
|
||||
top_pad="1"
|
||||
width="380" >
|
||||
<slider.commit_callback
|
||||
function="Poser.Advanced.PositionSet"/>
|
||||
</slider>
|
||||
<slider
|
||||
decimal_digits="3"
|
||||
can_edit_text="true"
|
||||
label_width="60"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
top_pad="24"
|
||||
increment="0.001"
|
||||
initial_value="0"
|
||||
label="Position Z:"
|
||||
label_width="70"
|
||||
show_text="false"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
max_val="0.5"
|
||||
min_val="-0.5"
|
||||
name="Advanced_Position_Z"
|
||||
top_pad="1"
|
||||
width="380" >
|
||||
max_val="1.5"
|
||||
min_val="-1.5"
|
||||
name="Advanced_Position_Y"
|
||||
left="3"
|
||||
width="342" >
|
||||
<slider.commit_callback
|
||||
function="Poser.Advanced.PositionSet"/>
|
||||
</slider>
|
||||
<spinner
|
||||
height="0"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.01"
|
||||
top_pad="-17"
|
||||
left_pad="2"
|
||||
name="adv_posy_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="8"/>
|
||||
</spinner>
|
||||
<slider
|
||||
label="Position Z:"
|
||||
label_width="60"
|
||||
show_text="false"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
top_pad="22"
|
||||
increment="0.001"
|
||||
initial_value="0"
|
||||
layout="topleft"
|
||||
max_val="1.5"
|
||||
min_val="-1.5"
|
||||
name="Advanced_Position_Z"
|
||||
left="3"
|
||||
width="342" >
|
||||
<slider.commit_callback
|
||||
function="Poser.Advanced.PositionSet"/>
|
||||
</slider>
|
||||
<spinner
|
||||
height="12"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.01"
|
||||
top_pad="-15"
|
||||
left_pad="2"
|
||||
name="adv_posz_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="9"/>
|
||||
</spinner>
|
||||
<button
|
||||
height="21"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
label="Undo Position Change"
|
||||
label="Undo Position"
|
||||
image_overlay="Script_Undo"
|
||||
image_overlay_alignment="left"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
name="undo_position_change"
|
||||
tool_tip="Undo the last position change"
|
||||
width="150"
|
||||
top_pad="2"
|
||||
left_delta="0">
|
||||
width="109"
|
||||
left="3"
|
||||
top_pad="5">
|
||||
<button.commit_callback
|
||||
function="Poser.UndoLastPosition"/>
|
||||
</button>
|
||||
|
|
@ -1419,7 +1574,7 @@ width="403">
|
|||
image_unselected="Toolbar_Middle_Off"
|
||||
name="redo_position_change"
|
||||
tool_tip="Redo the last position change"
|
||||
width="110"
|
||||
width="108"
|
||||
top_delta="0"
|
||||
left_pad="4">
|
||||
<button.commit_callback
|
||||
|
|
@ -1435,7 +1590,7 @@ width="403">
|
|||
image_unselected="Toolbar_Middle_Off"
|
||||
name="reset_positions"
|
||||
tool_tip="Double click to reset position back to original"
|
||||
width="110"
|
||||
width="109"
|
||||
top_delta="0"
|
||||
left_pad="4">
|
||||
<button.commit_callback
|
||||
|
|
@ -1445,7 +1600,7 @@ width="403">
|
|||
<panel
|
||||
follows="all"
|
||||
background_visible="false"
|
||||
height="97"
|
||||
height="99"
|
||||
layout="topleft"
|
||||
left="0"
|
||||
title="Body Part Scale"
|
||||
|
|
@ -1455,73 +1610,121 @@ width="403">
|
|||
<slider
|
||||
decimal_digits="3"
|
||||
can_edit_text="true"
|
||||
show_text="false"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
increment="0.001"
|
||||
initial_value="0"
|
||||
label="Scale X:"
|
||||
label_width="70"
|
||||
label_width="43"
|
||||
layout="topleft"
|
||||
left="10"
|
||||
left="3"
|
||||
max_val="2"
|
||||
min_val="-2"
|
||||
name="Advanced_Scale_X"
|
||||
top_pad="6"
|
||||
width="380" >
|
||||
top_pad="2"
|
||||
width="342" >
|
||||
<slider.commit_callback
|
||||
function="Poser.Advanced.ScaleSet"/>
|
||||
</slider>
|
||||
<spinner
|
||||
height="0"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.01"
|
||||
top_pad="-19"
|
||||
left_pad="2"
|
||||
name="adv_scalex_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="10"/>
|
||||
</spinner>
|
||||
<slider
|
||||
decimal_digits="3"
|
||||
can_edit_text="true"
|
||||
show_text="false"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
top_pad="24"
|
||||
increment="0.001"
|
||||
initial_value="0"
|
||||
label="Scale Y:"
|
||||
label_width="70"
|
||||
label_width="43"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left="3"
|
||||
max_val="2"
|
||||
min_val="-2"
|
||||
name="Advanced_Scale_Y"
|
||||
top_pad="1"
|
||||
width="380" >
|
||||
width="342" >
|
||||
<slider.commit_callback
|
||||
function="Poser.Advanced.ScaleSet"/>
|
||||
</slider>
|
||||
<spinner
|
||||
height="0"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.01"
|
||||
top_pad="-17"
|
||||
left_pad="2"
|
||||
name="adv_scaley_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="11"/>
|
||||
</spinner>
|
||||
<slider
|
||||
decimal_digits="3"
|
||||
can_edit_text="true"
|
||||
show_text="false"
|
||||
follows="left|top"
|
||||
height="14"
|
||||
top_pad="22"
|
||||
increment="0.001"
|
||||
initial_value="0"
|
||||
label="Scale Z:"
|
||||
label_width="70"
|
||||
label_width="43"
|
||||
layout="topleft"
|
||||
left_delta="0"
|
||||
left="3"
|
||||
max_val="2"
|
||||
min_val="-2"
|
||||
name="Advanced_Scale_Z"
|
||||
top_pad="1"
|
||||
width="380" >
|
||||
width="342" >
|
||||
<slider.commit_callback
|
||||
function="Poser.Advanced.ScaleSet"/>
|
||||
</slider>
|
||||
<spinner
|
||||
height="12"
|
||||
decimal_digits="2"
|
||||
follows="left|top"
|
||||
increment="0.01"
|
||||
top_pad="-15"
|
||||
left_pad="2"
|
||||
name="adv_scalez_spinner"
|
||||
min_val="-1.5"
|
||||
max_val="1.5"
|
||||
width="47">
|
||||
<spinner.commit_callback
|
||||
function="Poser.CommitSpinner"
|
||||
parameter="12"/>
|
||||
</spinner>
|
||||
<button
|
||||
height="21"
|
||||
follows="left|top"
|
||||
layout="topleft"
|
||||
label="Undo Scale Change"
|
||||
label="Undo Scale"
|
||||
image_overlay="Script_Undo"
|
||||
image_overlay_alignment="left"
|
||||
image_unselected="Toolbar_Middle_Off"
|
||||
name="undo_scale_change"
|
||||
tool_tip="Undo the last scale change"
|
||||
width="150"
|
||||
top_pad="2"
|
||||
left_delta="0">
|
||||
width="109"
|
||||
left="3"
|
||||
top_pad="5">
|
||||
<button.commit_callback
|
||||
function="Poser.UndoLastScale"/>
|
||||
</button>
|
||||
|
|
@ -1535,7 +1738,7 @@ width="403">
|
|||
image_unselected="Toolbar_Middle_Off"
|
||||
name="redo_scale_change"
|
||||
tool_tip="Redo the last scale change"
|
||||
width="110"
|
||||
width="108"
|
||||
top_delta="0"
|
||||
left_pad="4">
|
||||
<button.commit_callback
|
||||
|
|
@ -1551,7 +1754,7 @@ width="403">
|
|||
image_unselected="Toolbar_Middle_Off"
|
||||
name="reset_scales"
|
||||
tool_tip="Double click to reset scale back to original"
|
||||
width="110"
|
||||
width="109"
|
||||
top_delta="0"
|
||||
left_pad="4">
|
||||
<button.commit_callback
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
can_minimize="true"
|
||||
can_resize="false"
|
||||
can_close="true"
|
||||
height="475"
|
||||
height="480"
|
||||
layout="topleft"
|
||||
name="Snapshot"
|
||||
single_instance="true"
|
||||
|
|
@ -124,7 +124,7 @@
|
|||
top_delta="0"
|
||||
width="31" />
|
||||
<panel
|
||||
height="174"
|
||||
height="200"
|
||||
layout="topleft"
|
||||
follows="top|left"
|
||||
left="0"
|
||||
|
|
@ -200,6 +200,25 @@
|
|||
top_pad="0"
|
||||
width="180"
|
||||
name="hud_check" />
|
||||
<check_box
|
||||
control_name="FSSnapshotShowCaptureFrame"
|
||||
label="Show capture frame"
|
||||
tool_tip="Show a frame on-screen that surrounds the areas of the snapshot. Parts of the scene that are outside of the snapshot will be de-saturated and slightly blurred."
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="7"
|
||||
width="180"
|
||||
name="show_frame" />
|
||||
<check_box
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
control_name="FSSnapshotShowGuides"
|
||||
label="Show framing guide"
|
||||
tool_tip="Show framing guide (rule of thirds) inside the snapshot frame"
|
||||
layout="topleft"
|
||||
left="30"
|
||||
top_pad="7"
|
||||
width="180"
|
||||
name="show_guides" />
|
||||
<check_box
|
||||
label="Freeze frame (fullscreen)"
|
||||
layout="topleft"
|
||||
|
|
|
|||
|
|
@ -137,6 +137,24 @@
|
|||
width="251">
|
||||
Refreshing...
|
||||
</text>
|
||||
<check_box
|
||||
control_name="FSSnapshotShowCaptureFrame"
|
||||
label="Show capture frame"
|
||||
tool_tip="Show a frame on-screen that surrounds the areas of the snapshot. Parts of the scene that are outside of the snapshot will be de-saturated and slightly blurred."
|
||||
layout="topleft"
|
||||
left="10"
|
||||
top_pad="7"
|
||||
width="124"
|
||||
name="show_frame" />
|
||||
<check_box
|
||||
enabled_control="FSSnapshotShowCaptureFrame"
|
||||
control_name="FSSnapshotShowGuides"
|
||||
label="Framing guide"
|
||||
tool_tip="Show framing guide (rule of thirds) inside the snapshot frame."
|
||||
layout="topleft"
|
||||
left_pad="10"
|
||||
width="60"
|
||||
name="show_guides" />
|
||||
<view_border
|
||||
bevel_style="in"
|
||||
follows="left|top"
|
||||
|
|
|
|||
|
|
@ -226,7 +226,7 @@
|
|||
<panel name="trackball_button_panel">
|
||||
<button name="undo_change" tool_tip="Annuler la dernière rotation" />
|
||||
<button name="button_redo_change" tool_tip="Rétablir la dernière modification annulée" />
|
||||
<button name="refresh_avatars" tool_tip="Double-cliquez pour remettre toutes les parties du corps sélectionnées dans l'état où elles se trouvaient lorsque vous avez commencé à poser." />
|
||||
<button name="poser_joint_reset" tool_tip="Double-cliquez pour remettre toutes les parties du corps sélectionnées dans l'état où elles se trouvaient lorsque vous avez commencé à poser." />
|
||||
<button name="delta_mode_toggle" tool_tip="Si vous modifiez plusieurs articulations, chacune d'entre elles sera modifiée de la même manière, au lieu de toutes les modifier du même coup. Sert également à déverrouiller le Gimbal Lock." />
|
||||
<button label="Miroir" name="button_toggleMirrorRotation" tool_tip="Changer l'articulation opposée, comme dans un miroir." />
|
||||
<button label="Sym." name="button_toggleSympatheticRotation" tool_tip="Modifier l'articulation opposée, mais de la même manière." />
|
||||
|
|
|
|||
|
|
@ -226,7 +226,7 @@
|
|||
<panel name="trackball_button_panel">
|
||||
<button name="undo_change" tool_tip="Annulla l'ultima modifica della rotazione" />
|
||||
<button name="button_redo_change" tool_tip="Ripristina l'ultima modifica annullata" />
|
||||
<button name="refresh_avatars" tool_tip="Fai doppio clic per ripristinare tutte le parti del corpo selezionate al momento in cui hai iniziato a modificare la posa" />
|
||||
<button name="poser_joint_reset" tool_tip="Fai doppio clic per ripristinare tutte le parti del corpo selezionate al momento in cui hai iniziato a modificare la posa" />
|
||||
<button name="delta_mode_toggle" tool_tip="Se si cambiano più giunture, ognuna cambia della stessa quantità, anziché ottenere la stessa rotazione per tutte" />
|
||||
<button label="Spec." name="button_toggleMirrorRotation" tool_tip="Cambia la giuntura opposta, come in uno specchio" />
|
||||
<button label="Simp." name="button_toggleSympatheticRotation" tool_tip="Cambia la giuntura opposta, ma nello stesso modo" />
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@
|
|||
<panel name="trackball_button_panel">
|
||||
<button name="undo_change" tool_tip="Cofnij ostatnią zmianę obrotu" />
|
||||
<button name="button_redo_change" tool_tip="Ponów ostatnią cofniętą zmianę" />
|
||||
<button name="refresh_avatars" tool_tip="Kliknij dwukrotnie, aby zresetować wszystkie wybrane części ciała do stanu z momentu, w którym po raz pierwszy zacząłeś/aś pozować" />
|
||||
<button name="poser_joint_reset" tool_tip="Kliknij dwukrotnie, aby zresetować wszystkie wybrane części ciała do stanu z momentu, w którym po raz pierwszy zacząłeś/aś pozować" />
|
||||
<button name="delta_mode_toggle" tool_tip="Jeśli zmienisz wiele stawów, każdy z nich zmieni się o tę samą wartość, zamiast wszystkie o taki sam obrót. Stosowany również do pozbywania się blokady Gimbala." />
|
||||
<button label="Odbij" name="button_toggleMirrorRotation" tool_tip="Zmień przeciwległy staw, jak w lustrze." />
|
||||
<button label="Sym." name="button_toggleSympatheticRotation" tool_tip="Zmień przeciwległy staw, ale w ten sam sposób." />
|
||||
|
|
|
|||
|
|
@ -221,7 +221,7 @@
|
|||
<panel name="trackball_button_panel">
|
||||
<button name="undo_change" tool_tip="Отмените последнее изменение поворота"/>
|
||||
<button name="button_redo_change" tool_tip="Повторить последнее отмененное изменение"/>
|
||||
<button name="refresh_avatars" tool_tip="Двойной клик чтобы восстановить все выбранные части тела на тот момент, когда вы впервые начали изменения"/>
|
||||
<button name="poser_joint_reset" tool_tip="Двойной клик чтобы восстановить все выбранные части тела на тот момент, когда вы впервые начали изменения"/>
|
||||
<button name="delta_mode_toggle" tool_tip="При изменении нескольких суставов каждый из них изменяется на одинаковую величину, а не все они получают одинаковое вращение."/>
|
||||
<button label="Зерк." name="button_toggleMirrorRotation" tool_tip="Изменять положение противоположного сустава как в зеркале."/>
|
||||
<button label="Симм." name="button_toggleSympatheticRotation" tool_tip="Изменять положение противоположного сустав таким же образом."/>
|
||||
|
|
|
|||
|
|
@ -16,8 +16,12 @@
|
|||
<stat_bar label="Треугольников на кадр" name="ktrisframe"/>
|
||||
<stat_bar label="Треугольников в секунду" name="ktrissec"/>
|
||||
<stat_bar label="Всего объектов" name="objs"/>
|
||||
<stat_bar name="cachedobjs" label="Кэшированных объектов"/>
|
||||
<stat_bar label="Новых объектов" name="newobjs"/>
|
||||
<stat_bar label="Частота попаданий в кэш объектов" name="object_cache_hits"/>
|
||||
<stat_bar name="occlusion_queries" label="Выполненные запросы на окклюзию"/>
|
||||
<stat_bar name="occluded" label="Закрытые объекты"/>
|
||||
<stat_bar name="unoccluded" label="Незакрытый объекты"/>
|
||||
</stat_view>
|
||||
<stat_view label="Текстура" name="texture">
|
||||
<stat_bar label="Частота попаданий в кэш" name="texture_cache_hits"/>
|
||||
|
|
@ -29,15 +33,18 @@
|
|||
<stat_bar label="Неформатированная память" name="rawmemstat"/>
|
||||
<stat_bar label="Ограничение памяти" name="glboundmemstat"/>
|
||||
</stat_view>
|
||||
<stat_view name="material" label="Материал">
|
||||
<stat_bar name="nummaterials" label="Подсчет"/>
|
||||
</stat_view>
|
||||
<stat_view label="Сеть" name="network">
|
||||
<stat_bar label="Входящие пакеты" name="packetsinstat"/>
|
||||
<stat_bar label="Исходящие пакеты" name="packetsoutstat"/>
|
||||
<stat_bar label="Объекты" name="objectkbitstat"/>
|
||||
<stat_bar label="Текстура" name="texturekbitstat"/>
|
||||
<stat_bar label="Актив" name="assetkbitstat"/>
|
||||
<stat_bar label="Слои" name="layerskbitstat"/>
|
||||
<stat_bar label="Действительный ввод" name="actualinkbitstat"/>
|
||||
<stat_bar label="Действительный вывод" name="actualoutkbitstat"/>
|
||||
<stat_bar label="Объекты" name="objectdatareceived"/>
|
||||
<stat_bar label="Текстура" name="texturedatareceived"/>
|
||||
<stat_bar label="Актив" name="assetudpdatareceived"/>
|
||||
<stat_bar label="Слои" name="layersdatareceived"/>
|
||||
<stat_bar label="Фактический ввод" name="messagedatain"/>
|
||||
<stat_bar label="Фактический вывод" name="messagedataout"/>
|
||||
</stat_view>
|
||||
</stat_view>
|
||||
<stat_view label="Симулятор" name="sim">
|
||||
|
|
|
|||
|
|
@ -107,6 +107,7 @@
|
|||
<menu_item_check name="Conversation Log..." label="Журнал разговоров..."/>
|
||||
<menu_item_check label="Ближайшие голоса" name="Nearby Voice"/>
|
||||
<menu_item_call label="Список заблокированных" name="Block List"/>
|
||||
<menu_item_check label="Показать экранную консоль чата" name="Show On-screen Console"/>
|
||||
</menu>
|
||||
|
||||
<!-- World Menu -->
|
||||
|
|
|
|||
|
|
@ -234,7 +234,7 @@
|
|||
<panel name="trackball_button_panel">
|
||||
<button name="undo_change" tool_tip="撤銷最後一次旋轉變化"/>
|
||||
<button name="button_redo_change" tool_tip="重做最後一次旋轉變化"/>
|
||||
<button name="refresh_avatars" tool_tip="雙擊將所有選定身體部位重設為原始值。"/>
|
||||
<button name="poser_joint_reset" tool_tip="雙擊將所有選定身體部位重設為原始值。"/>
|
||||
<button name="delta_mode_toggle" tool_tip="如果改變多個關節,則改變它們相同的值而不是相同的角度。這也用於解決萬向節鎖定的問題。"/>
|
||||
<button label="映象" name="button_toggleMirrorRotation" tool_tip="映象對稱關節的變化。"/>
|
||||
<button label="同步" name="button_toggleSympatheticRotation" tool_tip="同步調整對稱關節。"/>
|
||||
|
|
@ -261,7 +261,7 @@
|
|||
<button name="toggleAdvancedPanel" tool_tip="啟用/禁用高級設定"/>
|
||||
<button name="FlipPose_avatar" tool_tip="左右翻轉整個姿勢"/>
|
||||
<button name="FlipJoint_avatar" tool_tip="映象翻轉選定的身體部位"/>
|
||||
<button label="取得選擇" name="button_RecaptureParts" tool_tip="如果選中的身體部位沒有姿勢,將取得目前姿勢的值。"/>
|
||||
<button label="重捕" name="button_RecaptureParts" tool_tip="如果選擇的身體部位已關閉,這將重新捕捉這些身體部位當前的姿勢。"/>
|
||||
<button label="啟用/禁用部位" name="toggle_PosingSelectedBones" tool_tip="啟用或禁用選定身體部位的姿勢。如果禁用,這些部位將正常動畫化。"/>
|
||||
<button label="自定義姿勢" name="toggleLoadSavePanel" tool_tip="載入、儲存並管理自定義建立的姿勢"/>
|
||||
<button tool_tip="管理姿勢目錄" name="open_poseDir_button"/>
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@
|
|||
剩餘容納量 [LAND_CAPACITY]。
|
||||
</floater.string>
|
||||
<floater.string name="link_number">
|
||||
聯結數:
|
||||
聯結序號:
|
||||
</floater.string>
|
||||
<floater.string name="selected_faces">
|
||||
面:
|
||||
|
|
|
|||
Loading…
Reference in New Issue