Ansariel 2024-09-26 21:15:01 +02:00
commit f30e9c2057
83 changed files with 892 additions and 386 deletions

View File

@ -316,11 +316,12 @@ jobs:
echo "viewer_build=$viewer_build" >> "$GITHUB_OUTPUT"
echo "viewer_channel=${{ env.FS_RELEASE_CHAN }}" >> "$GITHUB_OUTPUT"
echo "viewer_release_type=${{ env.FS_RELEASE_TYPE }}" >> "$GITHUB_OUTPUT"
# - name: Install node-dump-syms
# if: runner.os == 'Linux'
# run: |
# npm install -g node-pre-gyp
# npm install -g node-dump-syms
- name: Unzip xcarchive.zip files
if: runner.os == 'macOS'
run: |
find . -name '*.xcarchive.zip' -exec sh -c 'unzip -o "{}" -d "$(dirname "{}")"' \;
- name: Post Bugsplat Symbols
uses: BugSplat-Git/symbol-upload@main
@ -348,7 +349,7 @@ jobs:
secrets.BUGSPLAT_DEFAULT_DB }}
application: "Firestorm-${{ steps.version.outputs.viewer_channel}}"
version: ${{ steps.version.outputs.viewer_version }}.${{ steps.version.outputs.viewer_build }}
files: ${{ runner.os == 'Windows' && '**/Release/*.{pdb,exe,dll}' || runner.os == 'macOS' && '**/*.xcarchive.zip' || '**/{do-not-run-directly-firestorm-bin,*.sym}' }}
files: ${{ runner.os == 'Windows' && '**/Release/*.{pdb,exe,dll}' || runner.os == 'macOS' && '**/Release/{Firestorm,*.dSYM}' || '**/{do-not-run-directly-firestorm-bin,*.sym}' }}
directory: "build-*"
node-version: "20"
dumpSyms: false
@ -432,6 +433,31 @@ jobs:
run: ls -R
working-directory: ${{steps.download.outputs.download-path}}
- name: Create Build Info artifact
env:
FS_VIEWER_CHANNEL: ${{ needs.build_matrix.outputs.viewer_channel }}
FS_VIEWER_VERSION:
FS_VIEWER_BUILD:
FS_VIEWER_RELEASE_TYPE:
id: create_build_info
run: |
cat <<EOF > build_info.json
{
"build_run_number": "${{ github.run_number }}",
"release_type": "${{ needs.build_matrix.outputs.viewer_release_type }}",
"viewer_version": "${{ needs.build_matrix.outputs.viewer_version }}",
"viewer_build": "${{ needs.build_matrix.outputs.viewer_build }}"
}
EOF
echo "Build info created: $(cat build_info.json)"
# Upload Build Info Artifact
- name: Upload Tag Info
uses: actions/upload-artifact@v4
with:
name: build_info
path: build_info.json
- name: Reorganise artifacts ready for server upload.
env:
FS_VIEWER_CHANNEL: ${{ needs.build_matrix.outputs.viewer_channel }}

View File

@ -3,10 +3,9 @@ name: Deploy Viewer
on:
workflow_dispatch:
inputs:
build_run_id:
description: 'Workflow Run ID of the build to deploy'
build_run_number:
description: 'GitHub Run Number (per build_viewer.yml workflow)'
required: true
default: ''
viewer_channel:
description: 'viewer_channel'
required: true
@ -50,7 +49,7 @@ jobs:
id: download
with:
workflow: build_viewer.yml
run_number: ${{ github.event.inputs.build_run_id }}
run_number: ${{ github.event.inputs.build_run_number }}
path: to_deploy
- name: Install discord-webhook library
run: pip install discord-webhook

164
.github/workflows/tag-fs-build.yml vendored Normal file
View File

@ -0,0 +1,164 @@
name: Tag FS Build
on:
workflow_run:
workflows: ["Build Viewer"] # Exact name of the build workflow
types:
- completed
workflow_dispatch:
inputs:
build_run_number:
description: 'GitHub Run Number (per build_viewer.yml workflow)'
required: true
release_type:
description: "Type of build"
required: false
type: choice
default: "undefined"
options:
- "undefined"
- "Manual"
- "Nightly"
- "Beta"
- "Alpha"
- "Release"
viewer_version:
description: 'Viewer version'
required: false
default: "undefined"
viewer_build:
description: 'Viewer build number'
required: false
default: "undefined"
dry_run:
description: 'Execute as dry run (no tag will be created)'
required: false
default: 'true'
permissions:
contents: write # Grants write access to repository contents
jobs:
tag-build:
# Run the job only if:
# - The event is workflow_run **and** the conclusion is success
# OR
# - The event is workflow_dispatch (manual trigger)
if: ${{ ( github.event_name == 'workflow_run' && github.event.workflow_run.conclusion == 'success' ) || ( github.event_name == 'workflow_dispatch' ) }}
runs-on: ubuntu-latest
steps:
# Checkout the Repository
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Necessary to fetch all history for tagging
# Install jq for JSON Parsing
- name: Install jq
run: sudo apt-get update && sudo apt-get install -y jq
- name: Get Run Number
id: get_run_number
run: |
if [ ${{ github.event_name == 'workflow_run' }} ]; then
echo "Triggered by workflow_run event."
echo "Using run number of triggering workflow"
echo "build_run_number=${{ github.event.inputs.build_run_number }}" >> "$GITHUB_OUTPUT"
elif [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "Triggered by workflow_dispatch event."
echo "Using run number of manual dispatch"
echo "build_run_number=${{ github.event.inputs.build_run_number }}" >> "$GITHUB_OUTPUT"
fi
- name: Download Build Artifacts
uses: dawidd6/action-download-artifact@v6
id: download_build_info
with:
workflow: build_viewer.yml
run_number: ${{ steps.get_run_number.outputs.build_run_number }}
name: build_info
skip_unpack: false
path: build_info
# workout the inputs based on the trigger type
- name: Query the json and get input overrides if applicable
id: get_inputs
run: |
# Parse the JSON file
RELEASE_TYPE=$(jq -r '.release_type' build_info/build_info.json)
VIEWER_VERSION=$(jq -r '.viewer_version' build_info/build_info.json)
VIEWER_BUILD=$(jq -r '.viewer_build' build_info/build_info.json)
DRY_RUN=false
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "Triggered by workflow_dispatch event."
echo "Allowing manual inputs to override."
if [ "${{ github.event.inputs.release_type }}" != "undefined" ]; then
RELEASE_TYPE=${{ github.event.inputs.release_type }}
fi
if [ "${{ github.event.inputs.viewer_version }}" != "undefined" ]; then
VIEWER_VERSION=${{ github.event.inputs.viewer_version }}
fi
if [ "${{ github.event.inputs.viewer_build }}" != "undefined" ]; then
VIEWER_BUILD=${{ github.event.inputs.viewer_build }}
fi
DRY_RUN=${{ github.event.inputs.dry_run }}
fi
# Set outputs
echo "build_run_number=$BUILD_RUN_NUMBER" >> $GITHUB_OUTPUT
echo "release_type=$RELEASE_TYPE" >> $GITHUB_OUTPUT
echo "viewer_version=$VIEWER_VERSION" >> $GITHUB_OUTPUT
echo "viewer_build=$VIEWER_BUILD" >> $GITHUB_OUTPUT
echo "dry_run=$DRY_RUN" >> $GITHUB_OUTPUT
shell: bash
# Check if Tag Already Exists
- name: Determine tag
id: get_tag
run: |
TAG_NAME="Firestorm_${{ steps.get_inputs.outputs.release_type }}_${{ steps.get_inputs.outputs.viewer_version }}.${{ steps.get_inputs.outputs.viewer_build }}"
echo "Proposed Tag: $TAG_NAME"
echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT
- name: Check if tag exists
id: check_tag
run: |
if git rev-parse "${{ steps.get_tag.outputs.tag_name }}" >/dev/null 2>&1; then
echo "Tag ${{ steps.get_tag.outputs.tag_name }} already exists."
echo "tag_exists=true" >> $GITHUB_OUTPUT
else
echo "Tag ${{ steps.get_tag.outputs.tag_name }} does not exist."
echo "tag_exists=false" >> $GITHUB_OUTPUT
fi
shell: bash
# Create the Tag (Conditional)
- name: Create tag
if: >
${{ steps.get_inputs.outputs.dry_run != 'true' &&
steps.check_tag.outputs.tag_exists == 'false' }}
run: |
echo "Creating tag: ${{ steps.get_tag.outputs.tag_name }}"
git tag ${{ steps.get_tag.outputs.tag_name }}
shell: bash
# Push the Tag to the Repository (Conditional)
- name: Push tag
if: >
${{ steps.get_inputs.outputs.dry_run != 'true' &&
steps.check_tag.outputs.tag_exists == 'false' }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
git push origin "${{ steps.get_tag.outputs.tag_name }}"
# Tagging Confirmation
- name: Tagging Confirmation
run: |
if [ "${{ steps.get_inputs.outputs.dry_run }}" == "true" ]; then
echo "Dry run mode enabled. Tag '$TAG_NAME' was not created or pushed."
elif [ "${{ steps.check_tag.outputs.tag_exists }}" == "true" ]; then
echo "Tag '${{ steps.get_tag.outputs.tag_name }}' already exists. No new tag was created."
else
echo "Tag '${{ steps.get_tag.outputs.tag_name }}' has been created and pushed successfully."
fi
shell: bash

View File

@ -343,7 +343,7 @@ def update_fs_version_mgr(build_info, config):
sys.exit(1)
secret_for_api = generate_secret(secret_key)
build_type = build_info["build_type"]
build_type = build_info["build_type"].lower()
version = os.environ.get('FS_VIEWER_VERSION')
channel = os.environ.get('FS_VIEWER_CHANNEL')
build_number = os.environ.get('FS_VIEWER_BUILD')

View File

@ -846,6 +846,7 @@ set(viewer_SOURCE_FILES
noise.cpp
particleeditor.cpp
permissionstracker.cpp
pieautohide.cpp
piemenu.cpp
pieseparator.cpp
pieslice.cpp
@ -1647,6 +1648,7 @@ set(viewer_HEADER_FILES
noise.h
particleeditor.h
permissionstracker.h
pieautohide.h
piemenu.h
pieseparator.h
pieslice.h

View File

@ -6645,7 +6645,7 @@
<key>Type</key>
<string>String</string>
<key>Value</key>
<string>https://status.secondlifegrid.net/history.rss</string>
<string>https://status.secondlifegrid.net/history.atom</string>
</map>
<key>GridStatusUpdateDelay</key>
<map>

View File

@ -5680,6 +5680,7 @@ void FSPanelPreferenceBackup:: doRestoreSettings(const LLSD& notification, const
// start clean
LL_INFOS("SettingsBackup") << "clearing global settings" << LL_ENDL;
gSavedSettings.resetToDefaults();
LLFeatureManager::getInstance()->applyRecommendedSettings();
// run restore on global controls
LL_INFOS("SettingsBackup") << "restoring global settings from backup" << LL_ENDL;

View File

@ -2075,7 +2075,10 @@ bool is_inventorysp_active()
}
// static
LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(bool auto_open)
// <FS:Beq> [FIRE-34532] Bugsplat Crash when uploading assets with non-tabbed inventory window active.
// LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(bool auto_open)
LLInventoryPanel* LLInventoryPanel::getActiveInventoryPanel(bool auto_open, bool ignore_secondary)
// </FS:Beq>
{
S32 z_min = S32_MAX;
LLInventoryPanel* res = NULL;
@ -2236,7 +2239,7 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(bool auto_open, const L
}
// </FS:Ansariel>
LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open);
LLInventoryPanel *active_panel = LLInventoryPanel::getActiveInventoryPanel(auto_open, true);// <FS:Beq/> [FIRE-34532] ignore secondary folder views that are probably single folder
if (active_panel)
{
LL_DEBUGS("Messaging", "Inventory") << "Highlighting" << obj_id << LL_ENDL;
@ -2261,15 +2264,18 @@ void LLInventoryPanel::openInventoryPanelAndSetSelection(bool auto_open, const L
}
else if (auto_open)
{
// <FS:Ansariel> FIRE-22167: Make "Show in Main View" work properly
//LLFloater* floater_inventory = LLFloaterReg::getInstance("inventory");
LLFloater* floater_inventory = LLFloaterReg::getInstance("inventory");
// <FS:Beq> [FIRE-34532] make sure the active panel has a tabbed view and avoid crash
if (use_main_panel)
{
active_panel->getParentByType<LLTabContainer>()->selectFirstTab();
active_panel = getActiveInventoryPanel(false);
if (auto* tab_container = active_panel->getParentByType<LLTabContainer>())
{
tab_container->selectFirstTab();
active_panel = getActiveInventoryPanel(false, true);
floater_inventory = active_panel->getParentByType<LLFloater>();
}
}
LLFloater* floater_inventory = active_panel->getParentByType<LLFloater>();
// </FS:Ansariel>
// </FS:Beq>
if (floater_inventory)
{
floater_inventory->setFocus(true);

View File

@ -258,8 +258,10 @@ public:
// Find whichever inventory panel is active / on top.
// "Auto_open" determines if we open an inventory panel if none are open.
static LLInventoryPanel *getActiveInventoryPanel(bool auto_open = true);
// <FS:Beq> FIRE-34532: don't try top open snapshots in the secondary windows.
// static LLInventoryPanel *getActiveInventoryPanel(bool auto_open = true);
static LLInventoryPanel* getActiveInventoryPanel(bool auto_open = true, bool ignore_secondary = false);
// </FS:Beq>
static void openInventoryPanelAndSetSelection(bool auto_open,
const LLUUID& obj_id,
bool use_main_panel = false,

View File

@ -37,6 +37,7 @@
// newview
#include "llsidetraypanelcontainer.h"
#include "llsnapshotlivepreview.h"
#include "llviewercontrol.h" // gSavedSettings
#include "llagentbenefits.h"
@ -108,6 +109,17 @@ void LLPanelSnapshot::onOpen(const LLSD& key)
{
getParentByType<LLFloater>()->notify(LLSD().with("image-format-change", true));
}
// If resolution is set to "Current Window", force a snapshot update
// each time a snapshot panel is opened to determine the correct
// image size (and upload fee) depending on the snapshot type.
if (mSnapshotFloater && getChild<LLUICtrl>(getImageSizeComboName())->getValue().asString() == "[i0,i0]")
{
if (LLSnapshotLivePreview* preview = mSnapshotFloater->getPreviewView())
{
preview->mForceUpdateSnapshot = true;
}
}
}
LLSnapshotModel::ESnapshotFormat LLPanelSnapshot::getImageFormat() const

View File

@ -48,78 +48,36 @@
/**
* The panel provides UI for saving snapshot as an inventory texture.
*/
class LLPanelSnapshotInventoryBase
: public LLPanelSnapshot
{
LOG_CLASS(LLPanelSnapshotInventoryBase);
public:
LLPanelSnapshotInventoryBase();
/*virtual*/ bool postBuild();
protected:
void onSend();
/*virtual*/ LLSnapshotModel::ESnapshotType getSnapshotType();
};
class LLPanelSnapshotInventory
: public LLPanelSnapshotInventoryBase
: public LLPanelSnapshot
{
LOG_CLASS(LLPanelSnapshotInventory);
public:
LLPanelSnapshotInventory();
/*virtual*/ ~LLPanelSnapshotInventory(); // <FS:Ansariel> Store settings at logout
/*virtual*/ bool postBuild();
/*virtual*/ void onOpen(const LLSD& key);
~LLPanelSnapshotInventory() override; // <FS:Ansariel> Store settings at logout
bool postBuild() override;
void onOpen(const LLSD& key) override;
void onResolutionCommit(LLUICtrl* ctrl);
private:
/*virtual*/ std::string getWidthSpinnerName() const { return "inventory_snapshot_width"; }
/*virtual*/ std::string getHeightSpinnerName() const { return "inventory_snapshot_height"; }
/*virtual*/ std::string getAspectRatioCBName() const { return "inventory_keep_aspect_check"; }
/*virtual*/ std::string getImageSizeComboName() const { return "texture_size_combo"; }
/*virtual*/ std::string getImageSizePanelName() const { return LLStringUtil::null; }
/*virtual*/ void updateControls(const LLSD& info);
std::string getWidthSpinnerName() const override { return "inventory_snapshot_width"; }
std::string getHeightSpinnerName() const override { return "inventory_snapshot_height"; }
std::string getAspectRatioCBName() const override { return "inventory_keep_aspect_check"; }
std::string getImageSizeComboName() const override { return "texture_size_combo"; }
std::string getImageSizePanelName() const override { return LLStringUtil::null; }
LLSnapshotModel::ESnapshotType getSnapshotType() override;
void updateControls(const LLSD& info) override;
};
class LLPanelOutfitSnapshotInventory
: public LLPanelSnapshotInventoryBase
{
LOG_CLASS(LLPanelOutfitSnapshotInventory);
public:
LLPanelOutfitSnapshotInventory();
/*virtual*/ bool postBuild();
/*virtual*/ void onOpen(const LLSD& key);
private:
/*virtual*/ std::string getWidthSpinnerName() const { return ""; }
/*virtual*/ std::string getHeightSpinnerName() const { return ""; }
/*virtual*/ std::string getAspectRatioCBName() const { return ""; }
/*virtual*/ std::string getImageSizeComboName() const { return "texture_size_combo"; }
/*virtual*/ std::string getImageSizePanelName() const { return LLStringUtil::null; }
/*virtual*/ void updateControls(const LLSD& info);
/*virtual*/ void cancel();
void onSend();
void updateUploadCost();
S32 calculateUploadCost();
};
static LLPanelInjector<LLPanelSnapshotInventory> panel_class1("llpanelsnapshotinventory");
static LLPanelInjector<LLPanelOutfitSnapshotInventory> panel_class2("llpaneloutfitsnapshotinventory");
LLPanelSnapshotInventoryBase::LLPanelSnapshotInventoryBase()
{
}
bool LLPanelSnapshotInventoryBase::postBuild()
{
return LLPanelSnapshot::postBuild();
}
LLSnapshotModel::ESnapshotType LLPanelSnapshotInventoryBase::getSnapshotType()
LLSnapshotModel::ESnapshotType LLPanelSnapshotInventory::getSnapshotType()
{
return LLSnapshotModel::SNAPSHOT_TEXTURE;
}
@ -130,6 +88,15 @@ LLPanelSnapshotInventory::LLPanelSnapshotInventory()
mCommitCallbackRegistrar.add("Inventory.Cancel", boost::bind(&LLPanelSnapshotInventory::cancel, this));
}
// <FS:Ansariel> Store settings at logout
LLPanelSnapshotInventory::~LLPanelSnapshotInventory()
{
gSavedSettings.setS32("LastSnapshotToInventoryResolution", getImageSizeComboBox()->getCurrentIndex());
gSavedSettings.setS32("LastSnapshotToInventoryWidth", getTypedPreviewWidth());
gSavedSettings.setS32("LastSnapshotToInventoryHeight", getTypedPreviewHeight());
}
// </FS:Ansariel>
// virtual
bool LLPanelSnapshotInventory::postBuild()
{
@ -145,15 +112,16 @@ bool LLPanelSnapshotInventory::postBuild()
getHeightSpinner()->setValue(gSavedSettings.getS32("LastSnapshotToInventoryHeight"));
// </FS:Ansariel>
return LLPanelSnapshotInventoryBase::postBuild();
return LLPanelSnapshot::postBuild();
}
// virtual
void LLPanelSnapshotInventory::onOpen(const LLSD& key)
{
updateUploadCost();
// <FS:CR> FIRE-10537 - Temp texture uploads aren't functional on SSB regions
if (LLAgentBenefitsMgr::current().getTextureUploadCost() == 0
|| gAgent.getRegion()->getCentralBakeVersion() > 0)
if (LLAgentBenefitsMgr::current().getTextureUploadCost() == 0 || gAgent.getRegion()->getCentralBakeVersion() > 0)
{
gSavedSettings.setBOOL("TemporaryUpload", false);
}
@ -167,6 +135,8 @@ void LLPanelSnapshotInventory::updateControls(const LLSD& info)
{
const bool have_snapshot = info.has("have-snapshot") ? info["have-snapshot"].asBoolean() : true;
getChild<LLUICtrl>("save_btn")->setEnabled(have_snapshot);
updateUploadCost();
}
void LLPanelSnapshotInventory::onResolutionCommit(LLUICtrl* ctrl)
@ -176,30 +146,9 @@ void LLPanelSnapshotInventory::onResolutionCommit(LLUICtrl* ctrl)
getChild<LLSpinCtrl>(getHeightSpinnerName())->setVisible(!current_window_selected);
}
// <FS:Ansariel> Store settings at logout
LLPanelSnapshotInventory::~LLPanelSnapshotInventory()
void LLPanelSnapshotInventory::onSend()
{
gSavedSettings.setS32("LastSnapshotToInventoryResolution", getImageSizeComboBox()->getCurrentIndex());
gSavedSettings.setS32("LastSnapshotToInventoryWidth", getTypedPreviewWidth());
gSavedSettings.setS32("LastSnapshotToInventoryHeight", getTypedPreviewHeight());
}
// </FS:Ansariel>
void LLPanelSnapshotInventoryBase::onSend()
{
S32 w = 0;
S32 h = 0;
if( mSnapshotFloater )
{
LLSnapshotLivePreview* preview = mSnapshotFloater->getPreviewView();
if( preview )
{
preview->getSize(w, h);
}
}
S32 expected_upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(w, h);
S32 expected_upload_cost = calculateUploadCost();
if (can_afford_transaction(expected_upload_cost))
{
if (mSnapshotFloater)
@ -220,36 +169,24 @@ void LLPanelSnapshotInventoryBase::onSend()
}
}
LLPanelOutfitSnapshotInventory::LLPanelOutfitSnapshotInventory()
void LLPanelSnapshotInventory::updateUploadCost()
{
mCommitCallbackRegistrar.add("Inventory.SaveOutfitPhoto", boost::bind(&LLPanelOutfitSnapshotInventory::onSend, this));
mCommitCallbackRegistrar.add("Inventory.SaveOutfitCancel", boost::bind(&LLPanelOutfitSnapshotInventory::cancel, this));
getChild<LLUICtrl>("hint_lbl")->setTextArg("[UPLOAD_COST]", llformat("%d", calculateUploadCost()));
}
// virtual
bool LLPanelOutfitSnapshotInventory::postBuild()
S32 LLPanelSnapshotInventory::calculateUploadCost()
{
return LLPanelSnapshotInventoryBase::postBuild();
}
S32 w = 0;
S32 h = 0;
// virtual
void LLPanelOutfitSnapshotInventory::onOpen(const LLSD& key)
{
getChild<LLUICtrl>("hint_lbl")->setTextArg("[UPLOAD_COST]", llformat("%d", LLAgentBenefitsMgr::current().getTextureUploadCost()));
LLPanelSnapshot::onOpen(key);
}
// virtual
void LLPanelOutfitSnapshotInventory::updateControls(const LLSD& info)
{
const bool have_snapshot = info.has("have-snapshot") ? info["have-snapshot"].asBoolean() : true;
getChild<LLUICtrl>("save_btn")->setEnabled(have_snapshot);
}
void LLPanelOutfitSnapshotInventory::cancel()
{
if (mSnapshotFloater)
{
mSnapshotFloater->closeFloater();
if (LLSnapshotLivePreview* preview = mSnapshotFloater->getPreviewView())
{
w = preview->getEncodedImageWidth();
h = preview->getEncodedImageHeight();
}
}
return LLAgentBenefitsMgr::current().getTextureUploadCost(w, h);
}

View File

@ -30,13 +30,9 @@
#include "llsidetraypanelcontainer.h"
#include "llfloatersnapshot.h" // FIXME: create a snapshot model
#include "llsnapshotlivepreview.h"
#include "llfloaterreg.h"
#include "llfloaterflickr.h" // <FS:Ansariel> Share to Flickr
#include "llagentbenefits.h"
/**
* Provides several ways to save a snapshot.
*/
@ -47,9 +43,7 @@ class LLPanelSnapshotOptions
public:
LLPanelSnapshotOptions();
~LLPanelSnapshotOptions();
/*virtual*/ bool postBuild();
/*virtual*/ void onOpen(const LLSD& key);
bool postBuild() override;
private:
void updateUploadCost();
@ -74,10 +68,6 @@ LLPanelSnapshotOptions::LLPanelSnapshotOptions()
mCommitCallbackRegistrar.add("Snapshot.SendToFlickr", boost::bind(&LLPanelSnapshotOptions::onSendToFlickr, this)); // <FS:Ansariel> Share to Flickr
}
LLPanelSnapshotOptions::~LLPanelSnapshotOptions()
{
}
// virtual
bool LLPanelSnapshotOptions::postBuild()
{
@ -85,30 +75,6 @@ bool LLPanelSnapshotOptions::postBuild()
return LLPanel::postBuild();
}
// virtual
void LLPanelSnapshotOptions::onOpen(const LLSD& key)
{
updateUploadCost();
}
void LLPanelSnapshotOptions::updateUploadCost()
{
S32 w = 0;
S32 h = 0;
if( mSnapshotFloater )
{
LLSnapshotLivePreview* preview = mSnapshotFloater->getPreviewView();
if( preview )
{
preview->getSize(w, h);
}
}
S32 upload_cost = LLAgentBenefitsMgr::current().getTextureUploadCost(w, h);
getChild<LLUICtrl>("save_to_inventory_btn")->setLabelArg("[AMOUNT]", llformat("%d", upload_cost));
}
void LLPanelSnapshotOptions::openPanel(const std::string& panel_name)
{
LLSideTrayPanelContainer* parent = dynamic_cast<LLSideTrayPanelContainer*>(getParent());

View File

@ -988,7 +988,7 @@ void LLViewerAssetUpload::AssetInventoryUploadCoproc(LLCoreHttpUtil::HttpCorouti
// Show the preview panel for textures and sounds to let
// user know that the image (or snapshot) arrived intact.
LLInventoryPanel* panel = LLInventoryPanel::getActiveInventoryPanel(false);
LLInventoryPanel* panel = LLInventoryPanel::getActiveInventoryPanel(false, true); // <FS:Beq> pick the main view not a secondary view.
// <FS:Ansariel> Use correct inventory floater for showing the upload
if (!panel)
{

View File

@ -1000,13 +1000,13 @@ bool LLViewerTexture::isLargeImage()
return (S32)mTexelsPerImage > LLViewerTexture::sMinLargeImageSize;
}
bool LLViewerTexture::isInvisiprim()
bool LLViewerTexture::isInvisiprim() const
{
return isInvisiprim(mID);
}
//static
bool LLViewerTexture::isInvisiprim(LLUUID id)
bool LLViewerTexture::isInvisiprim(const LLUUID& id)
{
return (id == sInvisiprimTexture1) || (id == sInvisiprimTexture2);
}

View File

@ -167,8 +167,8 @@ public:
const ll_volume_list_t* getVolumeList(U32 channel) const { return &mVolumeList[channel]; }
bool isLargeImage() ;
bool isInvisiprim() ;
static bool isInvisiprim(LLUUID id) ;
bool isInvisiprim() const;
static bool isInvisiprim(const LLUUID& id);
void setParcelMedia(LLViewerMediaTexture* media) {mParcelMedia = media;}
bool hasParcelMedia() const { return mParcelMedia != NULL;}

View File

@ -1179,6 +1179,7 @@ void LLVOTree::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)
mDrawable->setPositionGroup(pos);
LLFace* facep = mDrawable->getFace(0);
if (!facep) return; // <FS:Beq/> FIRE-34565 Repeatable Bugsplat crash while driving on mainland.
facep->mExtents[0] = newMin;
facep->mExtents[1] = newMax;
}

View File

@ -6568,7 +6568,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
{
U8 cur_tex = 0;
facep->setTextureIndex(cur_tex);
if (texture_count < MAX_TEXTURE_COUNT)
if (texture_count < MAX_TEXTURE_COUNT && tex) // <FS:Beq/> [FIRE-34534] guard additional cases of tex == null
{
texture_list[texture_count++] = tex;
}
@ -6622,7 +6622,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
// <FS:Beq> Quick hack test of proper batching logic
// if (texture_count < MAX_TEXTURE_COUNT)
// only add to the batch if this is a new texture
if (cur_tex == texture_count && texture_count < MAX_TEXTURE_COUNT)
if (cur_tex == texture_count && texture_count < MAX_TEXTURE_COUNT && tex) // <FS:Beq/> [FIRE-34534] guard additional cases of tex == null
// </FS:Beq>
{
texture_list[texture_count++] = tex;
@ -6999,7 +6999,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
&& te->getShiny()
&& can_be_shiny)
{ //shiny
if (tex->getPrimaryFormat() == GL_ALPHA)
if (tex && tex->getPrimaryFormat() == GL_ALPHA) // <FS:Beq/> [FIRE-34534] guard additional cases of tex == null
{ //invisiprim+shiny
registerFace(group, facep, LLRenderPass::PASS_INVISI_SHINY);
registerFace(group, facep, LLRenderPass::PASS_INVISIBLE);
@ -7036,7 +7036,7 @@ U32 LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, LLFace
}
else
{ //not alpha and not shiny
if (!is_alpha && tex->getPrimaryFormat() == GL_ALPHA)
if (!is_alpha && tex && tex->getPrimaryFormat() == GL_ALPHA) // <FS:Beq/> FIRE-34540 bugsplat crash caused by tex==nullptr. This stops the crash, but should we continue and leave the face unregistered instead of falling through?
{ //invisiprim
registerFace(group, facep, LLRenderPass::PASS_INVISIBLE);
}

View File

@ -0,0 +1,45 @@
/**
* @file pieautohide.cpp
* @brief Pie menu autohide base class
*
* $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
* http://www.firestormviewer.org
* $/LicenseInfo$
*/
#include "llviewerprecompiledheaders.h"
#include "pieautohide.h"
PieAutohide::PieAutohide(bool autohide, bool startAutohide) : mAutohide(autohide), mStartAutohide(startAutohide) {}
// accessor
bool PieAutohide::getStartAutohide() const
{
return mStartAutohide;
}
// accessor
bool PieAutohide::getAutohide() const
{
return mStartAutohide || mAutohide;
}

View File

@ -0,0 +1,48 @@
/**
* @file pieautohide.h
* @brief Pie menu autohide base class
*
* $LicenseInfo:firstyear=2024&license=fsviewerlgpl$
* Phoenix Firestorm Viewer Source Code
* Copyright (C) 2024, The Phoenix Firestorm Project, Inc.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License only.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
* The Phoenix Firestorm Project, Inc., 1831 Oakwood Drive, Fairmont, Minnesota 56031-3225 USA
* http://www.firestormviewer.org
* $/LicenseInfo$
*/
#ifndef PIEAUTOHIDE_H
#define PIEAUTOHIDE_H
#include "lluictrl.h"
// A slice in the pie that supports the auto-hide function.
class PieAutohide
{
public:
PieAutohide(bool autohide, bool startAutohide);
// accessor to expose the autohide feature
bool getStartAutohide() const;
bool getAutohide() const;
protected:
bool mStartAutohide{ false };
bool mAutohide{ false };
};
#endif // PIEAUTOHIDE_H

View File

@ -56,8 +56,9 @@ constexpr F32 PIE_OUTER_SHADE_FACTOR = 1.09f; // size factor of the outer shad
constexpr F32 PIE_SLICE_DIVIDER_WIDTH = 0.04f; // width of a slice divider in radians
constexpr F32 PIE_MAX_SLICES_F = F32(PIE_MAX_SLICES);
PieMenu::PieMenu(const LLMenuGL::Params& p) :
PieMenu::PieMenu(const Params& p) :
LLMenuGL(p),
PieAutohide(p.autohide, p.start_autohide),
mCurrentSegment(-1),
mOldSlice(nullptr),
mSlice(nullptr),
@ -305,22 +306,21 @@ void PieMenu::draw()
gl_washer_2d(PIE_OUTER_SIZE * factor, PIE_INNER_SIZE, steps, bgColor, borderColor);
// set up an item list iterator to point at the beginning of the item list
slice_list_t::iterator cur_item_iter;
cur_item_iter = mSlices->begin();
slice_list_t::iterator cur_item_iter{ mSlices->begin() };
// clear current slice pointer
mSlice = nullptr;
// current slice number is 0
S32 num = 0;
bool wasAutohide = false;
S32 num{ 0 };
bool wasAutohide{ false };
do
{
// standard item text color
LLColor4 itemColor = textColor;
// clear the label and set up the starting angle to draw in
std::string label("");
std::string label{ "" };
F32 segmentStart = F_PI / (PIE_MAX_SLICES_F / 2.f) * (F32)num - F_PI / PIE_MAX_SLICES_F;
// iterate through the list of slices
@ -328,16 +328,76 @@ void PieMenu::draw()
{
// get current slice item
LLView* item = (*cur_item_iter);
// check if this is a submenu or a normal click slice
PieSlice* currentSlice = dynamic_cast<PieSlice*>(item);
PieMenu* currentSubmenu = dynamic_cast<PieMenu*>(item);
// advance internally to the next slice item
cur_item_iter++;
bool isSliceOrSubmenu{ false };
auto checkAutohide = [&](PieAutohide* autohideSlice)
{
// if the current slice is the start of an autohide chain, clear out previous chains
if (autohideSlice->getStartAutohide())
{
wasAutohide = false;
}
// check if the current slice is part of an autohide chain
if (autohideSlice->getAutohide())
{
// if the previous item already won the autohide, skip this item
if (wasAutohide)
{
return true;
}
// look at the next item in the pie
LLView* lookAhead = (*cur_item_iter);
// check if this is a normal click slice
if (PieSlice* lookSlice = dynamic_cast<PieSlice*>(lookAhead))
{
// if the next item is part of the current autohide chain as well ...
if (lookSlice->getAutohide() && !lookSlice->getStartAutohide())
{
// ... it's visible and it's enabled, skip the current one.
// the first visible and enabled item in autohide chains wins
// this is useful for Sit/Stand toggles
lookSlice->updateEnabled();
lookSlice->updateVisible();
if (lookSlice->getVisible() && lookSlice->getEnabled())
{
return true;
}
// this item won the autohide contest
wasAutohide = true;
}
}
else if (PieMenu* lookSlice = dynamic_cast<PieMenu*>(lookAhead))
{
if (lookSlice->getAutohide() && !lookSlice->getStartAutohide())
{
if (/*lookSlice->getVisible() &&*/ lookSlice->getEnabled()) // Menu is somehow always set to not visible...
{
return true;
}
// this item won the autohide contest
wasAutohide = true;
}
}
}
else
{
// reset autohide chain
wasAutohide = false;
}
return false;
};
// in case it is regular click slice
if (currentSlice)
if (PieSlice* currentSlice = dynamic_cast<PieSlice*>(item))
{
isSliceOrSubmenu = true;
// get the slice label and tell the slice to check if it's supposed to be visible
label = currentSlice->getLabel();
currentSlice->updateVisible();
@ -350,50 +410,8 @@ void PieMenu::draw()
label = "";
}
// if the current slice is the start of an autohide chain, clear out previous chains
if (currentSlice->getStartAutohide())
{
wasAutohide = false;
}
// check if the current slice is part of an autohide chain
if (currentSlice->getAutohide())
{
// if the previous item already won the autohide, skip this item
if (wasAutohide)
{
continue;
}
// look at the next item in the pie
LLView* lookAhead = (*cur_item_iter);
// check if this is a normal click slice
PieSlice* lookSlice = dynamic_cast<PieSlice*>(lookAhead);
if (lookSlice)
{
// if the next item is part of the current autohide chain as well ...
if (lookSlice->getAutohide() && !lookSlice->getStartAutohide())
{
// ... it's visible and it's enabled, skip the current one.
// the first visible and enabled item in autohide chains wins
// this is useful for Sit/Stand toggles
lookSlice->updateEnabled();
lookSlice->updateVisible();
if (lookSlice->getVisible() && lookSlice->getEnabled())
{
continue;
}
// this item won the autohide contest
wasAutohide = true;
}
}
}
else
{
// reset autohide chain
wasAutohide = false;
}
if (checkAutohide(currentSlice))
continue;
// check if the slice is currently enabled
currentSlice->updateEnabled();
@ -404,9 +422,14 @@ void PieMenu::draw()
itemColor %= 0.3f;
}
}
// if it's a submenu just get the label
else if (currentSubmenu)
// if it's a submenu
else if (PieMenu* currentSubmenu = dynamic_cast<PieMenu*>(item))
{
isSliceOrSubmenu = true;
if (checkAutohide(currentSubmenu))
continue;
label = currentSubmenu->getLabel();
if (sPieMenuOuterRingShade)
{
@ -415,7 +438,7 @@ void PieMenu::draw()
}
// if it's a slice or submenu, the mouse pointer is over the same segment as our counter and the item is enabled
if ((currentSlice || currentSubmenu) && (mCurrentSegment == num) && item->getEnabled())
if (isSliceOrSubmenu && (mCurrentSegment == num) && item->getEnabled())
{
// memorize the currently highlighted slice for later
mSlice = item;

View File

@ -30,6 +30,7 @@
#include "llmenugl.h"
#include "llframetimer.h"
#include "pieautohide.h"
constexpr S32 PIE_MAX_SLICES = 8;
@ -39,15 +40,21 @@ struct PieChildRegistry : public LLChildRegistry<PieChildRegistry>
LLSINGLETON_EMPTY_CTOR(PieChildRegistry);
};
class PieMenu : public LLMenuGL
class PieMenu : public LLMenuGL, public PieAutohide
{
public:
// parameter block for the XUI factory
struct Params : public LLInitParam::Block<Params, LLMenuGL::Params>
{
Optional<std::string> name;
// autohide feature to hide a disabled pie slice
Optional<bool> start_autohide;
// next item in an autohide chain
Optional<bool> autohide;
Params()
Params() :
start_autohide("start_autohide", false),
autohide("autohide", false)
{
visible = false;
}
@ -56,7 +63,7 @@ public:
// PieChildRegistry contains a list of allowed child types for the XUI definition
typedef PieChildRegistry child_registry_t;
PieMenu(const LLMenuGL::Params& p);
PieMenu(const Params& p);
/*virtual*/ void setVisible(bool visible);

View File

@ -43,9 +43,8 @@ PieSlice::Params::Params() :
// create a new slice and memorize the XUI parameters
PieSlice::PieSlice(const PieSlice::Params& p) :
LLUICtrl(p),
PieAutohide(p.autohide, p.start_autohide),
mLabel(p.label),
mStartAutohide(p.start_autohide),
mAutohide(p.autohide),
mCheckEnableOnce(p.check_enable_once),
mDoUpdateEnabled(true)
{
@ -140,18 +139,6 @@ void PieSlice::setLabel(std::string_view newLabel)
mLabel = newLabel;
}
// accessor
bool PieSlice::getStartAutohide() const
{
return mStartAutohide;
}
// accessor
bool PieSlice::getAutohide() const
{
return mStartAutohide || mAutohide;
}
void PieSlice::resetUpdateEnabledCheck()
{
mDoUpdateEnabled = true;

View File

@ -29,10 +29,11 @@
#define PIESLICE_H
#include "lluictrl.h"
#include "pieautohide.h"
// A slice in the pie. Does nothing by itself, just stores the function and
// parameter to be execued when the user clicks on this item
class PieSlice : public LLUICtrl
class PieSlice : public LLUICtrl, public PieAutohide
{
public:
// parameter block for the XUI factory
@ -70,10 +71,6 @@ public:
LLSD getValue() const;
void setValue(const LLSD& value);
// accessor to expose the autohide feature
bool getStartAutohide() const;
bool getAutohide() const;
// callback connection for the onCommit method to launch the specified function
boost::signals2::connection setClickCallback(const commit_signal_t::slot_type& cb)
{
@ -91,8 +88,6 @@ public:
protected:
// accessor store
std::string mLabel;
bool mStartAutohide;
bool mAutohide;
bool mCheckEnableOnce;
bool mDoUpdateEnabled;

View File

@ -6,12 +6,14 @@
<pie_slice label="Otur" name="Pie Object Sit"/>
<pie_slice label="Dur" name="Object Stand Up"/>
<pie_slice label="Al" name="Buy..."/>
<pie_slice label="Götür" name="Pie Object Take"/>
<pie_menu label="Götür &gt;" name="Take Submenu">
<pie_slice label="Köçürtməsin götür" name="Take Copy" />
<pie_slice label="Götür" name="Take" />
</pie_menu>
<pie_slice label="Ödə" name="Pay..."/>
<pie_menu label="İrəli &gt;" name="Object Pie More 1">
<pie_slice label="Sil" name="Delete"/>
<pie_slice label="Geyin" name="Wear"/>
<pie_slice label="Köçürtməsin götür" name="Take Copy"/>
<pie_menu label="HUD Əlavə et &gt;" name="Pie Object Attach HUD" />
<pie_menu label="Birləşdir &gt;" name="Pie Object Attach">
<pie_menu label="Əlv.Skelet &gt;" name="Enhanced Skeleton">

View File

@ -7,7 +7,7 @@
Tekstur kimi saxlamaq üçün kvadrat formatlarından birini seçin.
</text>
<combo_box label="Ölçü" name="texture_size_combo">
<combo_box.item label="Cari pəncərə (512x512)" name="CurrentWindow"/>
<combo_box.item label="Cari pəncərə" name="CurrentWindow"/>
<combo_box.item label="Kiçik (128x128)" name="Small(128x128)"/>
<combo_box.item label="Orta (256x256)" name="Medium(256x256)"/>
<combo_box.item label="Böyük (512x512)" name="Large(512x512)"/>

View File

@ -5,7 +5,7 @@
<button label="Diskə yadda saxla" name="save_to_computer_btn"/>
</layout_panel>
<layout_panel name="lp_inventory">
<button label="Avadanlıq siyahısı (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="Avadanlıq siyahısı" name="save_to_inventory_btn"/>
</layout_panel>
<layout_panel name="lp_profile">
<button label="Profilə yüklə" name="save_to_profile_btn"/>

View File

@ -6,12 +6,18 @@
<pie_slice label="Hier sitzen" name="Pie Object Sit"/>
<pie_slice label="Aufstehen" name="Object Stand Up"/>
<pie_slice label="Kaufen" name="Buy..."/>
<pie_slice label="Nehmen" name="Pie Object Take"/>
<pie_menu label="Nehmen &gt;" name="Take Submenu">
<pie_slice label="Kopien sep. Obj." name="Take Copy Separate" />
<pie_slice label="Kopie nehmen" name="Take Copy" />
<pie_slice label="Nehmen" name="Take" />
<pie_slice label="Kombin. Obj." name="Take combined" />
<pie_slice label="Kopie kombin. Obj." name="Take Copy combined" />
<pie_slice label="Separate Obj." name="Take Separate" />
</pie_menu>
<pie_slice label="Zahlen" name="Pay..."/>
<pie_menu label="Mehr &gt;" name="Object Pie More 1">
<pie_slice label="Löschen" name="Delete"/>
<pie_slice label="Anziehen" name="Wear"/>
<pie_slice label="Kopie nehmen" name="Take Copy"/>
<pie_menu label="HUD anhängen &gt;" name="Pie Object Attach HUD"/>
<pie_menu label="Anhängen &gt;" name="Pie Object Attach">
<pie_menu label="Erw. Skelett &gt;" name="Enhanced Skeleton">

View File

@ -7,7 +7,7 @@
<combo_box.item label="Klein (128x128)" name="Small(128x128)"/>
<combo_box.item label="Mittel (256x256)" name="Medium(256x256)"/>
<combo_box.item label="Groß (512x512)" name="Large(512x512)"/>
<combo_box.item label="Aktuelles Fenster (512x512)" name="CurrentWindow"/>
<combo_box.item label="Aktuelles Fenster" name="CurrentWindow"/>
<combo_box.item label="Benutzerdefiniert" name="Custom"/>
</combo_box>
<spinner label="Breite x Höhe" name="inventory_snapshot_width"/>
@ -15,6 +15,8 @@
<check_box label="Seitenverhältnis beibehalten" name="inventory_keep_aspect_check"/>
<text name="hint_lbl">
Um das Bild als Textur zu speichern, wählen Sie eines der quadratischen Formate aus.
Upload-Kosten: [UPLOAD_COST] L$
</text>
<button label="&#x25B6; Auswahl" name="cancel_btn"/>
<button label="Speichern" name="save_btn"/>

View File

@ -5,7 +5,7 @@
<button label="Auf Festplatte speichern" name="save_to_computer_btn"/>
</layout_panel>
<layout_panel name="lp_inventory">
<button label="Im Inventar speich. ([AMOUNT] L$)" name="save_to_inventory_btn"/>
<button label="Im Inventar speichern" name="save_to_inventory_btn"/>
</layout_panel>
<layout_panel name="lp_profile">
<button label="Auf Profil teilen" name="save_to_profile_btn"/>

View File

@ -165,7 +165,7 @@ Additional code generously contributed to Firestorm by:
top_pad="4"
width="450"
wrap="true">
Albatroz Hird, Alexie Birman, Andromeda Rage, Angeldark Raymaker, Angus Boyd, Animats, Armin Weatherwax, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Denver Maksim, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hitomi Tiponi, humbletim, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, Paladin Forzane, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, Zwagoth Klaar and others.
Albatroz Hird, Alexie Birman, Andromeda Rage, Angeldark Raymaker, Angus Boyd, Animats, Armin Weatherwax, Casper Warden, Chalice Yao, Chaser Zaks, Chorazin Allen, Cron Stardust, Damian Zhaoying, Dan Threebeards, Dawa Gurbux, Denver Maksim, Dragonborn Forzane, Drake Arconis, Felyza Wishbringer, f0rbidden, Fractured Crystal, Geenz Spad, Gibson Firehawk, Hitomi Tiponi, humbletim, Inusaito Sayori, Jean Severine, Katharine Berry, Kittin Ninetails, Kool Koolhoven, Lance Corrimal, Lassie, Latif Khalifa, Laurent Bechir, Magne Metaverse LLC, Magus Freston, Makidoll, Manami Hokkigai, MartinRJ Fayray, McCabe Maxstead, Melancholy Lemon, Melysmile, Mimika Oh, Mister Acacia, MorganMegan, Morgan Pennent, Mysty Saunders, Nagi Michinaga, Name Short, nhede Core, NiranV Dean, Nogardrevlis Lectar, Oren Hurvitz, paperwork, Penny Patton, Peyton Menges, programmtest, Qwerty Venom, Rebecca Ashbourne, Revolution Smythe, Romka Swallowtail, Sahkolihaa Contepomi, sal Kaligawa, Samm Florian, Satomi Ahn, Sei Lisa, Sempervirens Oddfellow, Shin Wasp, Shyotl Kuhr, Sione Lomu, Skills Hak, StarlightShining, Sunset Faulkes, Tapple Gao, Testicular Slingshot, Thickbrick Sleaford, Ubit Umarov, Vaalith Jinn, Vincent Sylvester, Whirly Fizzle, Xenhat Liamano, Zwagoth Klaar and others.
</text>
<text
follows="top|left"
@ -217,7 +217,7 @@ UI Artists and Designers:
top_pad="4"
width="450"
wrap="true">
Adam Frisby, Alexandrea Fride, DarkAgent Baphomet, David Rowe, Digital Scribe, Hitomi Tiponi, Hugh Helendale, KirstenLee Cinquetti, Mobius Ryba, Nadin, Naomah Beaumont, Paladin Forzane, psi Merlin, samm florian, Sammie Benoir, Tommi Waydelich and Vincent Nacon.
Adam Frisby, Alexandrea Fride, DarkAgent Baphomet, David Rowe, Digital Scribe, Dragonborn Forzane, Hitomi Tiponi, Hugh Helendale, KirstenLee Cinquetti, Mobius Ryba, Nadin, Naomah Beaumont, psi Merlin, samm florian, Sammie Benoir, Tommi Waydelich and Vincent Nacon.
</text>
</panel>
</scroll_container>

View File

@ -56,8 +56,8 @@ Please add these to your AV folder exclusions as shown on the above wiki page.
top_pad="5"
width="689"
wrap="true">
The following box is the name and full path of the viewer executables.
Add these to you AV executable exclusions as shown in the above wiki.
The following box shows the names and full paths of the viewer executables.
Add the full paths to your AV executable exclusions as shown in the above wiki.
</text>
<text_editor
parse_urls="true"

View File

@ -58,15 +58,81 @@
<pie_slice.on_enable
function="Object.EnableBuy" />
</pie_slice>
<pie_slice
<pie_menu
autohide="true"
label="Take"
name="Pie Object Take">
<pie_slice.on_click
function="Object.Take"/>
<pie_slice.on_enable
function="Object.VisibleTake"/>
</pie_slice>
label="Take &gt;"
name="Take Submenu">
<pie_slice
enabled="false"
label="Copies: Separately"
name="Take Copy Separate">
<pie_slice.on_click
function="Object.TakeSeparateCopy"/>
<pie_slice.on_enable
function="Tools.EnableCopySeparate"/>
<pie_slice.on_visible
function="Object.VisibleTakeMultiple"/>
</pie_slice>
<pie_separator/>
<pie_separator/>
<pie_slice
enabled="false"
label="Take copy"
name="Take Copy">
<pie_slice.on_click
function="Tools.TakeCopy"/>
<pie_slice.on_enable
function="Tools.EnableTakeCopy"/>
<pie_slice.on_visible
function="Object.VisibleTakeSingle"/>
</pie_slice>
<pie_slice
enabled="false"
label="Take"
name="Take">
<pie_slice.on_click
function="Object.Take"/>
<pie_slice.on_enable
function="Object.VisibleTake"/>
<pie_slice.on_visible
function="Object.VisibleTakeSingle"/>
</pie_slice>
<pie_slice
enabled="false"
label="Take: Combined"
name="Take combined">
<pie_slice.on_click
function="Object.Take"/>
<pie_slice.on_enable
function="Object.VisibleTake"/>
<pie_slice.on_visible
function="Object.VisibleTakeMultiple"/>
</pie_slice>
<pie_slice
enabled="false"
label="Copy: Combined"
name="Take Copy combined">
<pie_slice.on_click
function="Tools.TakeCopy"/>
<pie_slice.on_enable
function="Tools.EnableTakeCopy"/>
<pie_slice.on_visible
function="Object.VisibleTakeMultiple"/>
</pie_slice>
<pie_slice
enabled="false"
label="Take: Separately"
name="Take Separate">
<pie_slice.on_click
function="Object.TakeSeparate"/>
<pie_slice.on_enable
function="Object.EnableTakeMultiple"/>
<pie_slice.on_visible
function="Object.VisibleTakeMultiple"/>
</pie_slice>
</pie_menu>
<pie_slice
enabled="false"
label="Pay"
@ -99,15 +165,6 @@
<pie_slice.on_enable
function="Object.EnableWear" />
</pie_slice>
<pie_slice
enabled="false"
label="Take Copy"
name="Take Copy">
<pie_slice.on_click
function="Tools.TakeCopy" />
<pie_slice.on_enable
function="Tools.EnableTakeCopy" />
</pie_slice>
<pie_menu
label="Attach HUD &gt;"
name="Pie Object Attach HUD" />

View File

@ -60,7 +60,7 @@
name="Large(512x512)"
value="[i512,i512]" />
<combo_box.item
label="Current Window(512x512)"
label="Current Window"
name="CurrentWindow"
value="[i0,i0]" />
<combo_box.item
@ -128,6 +128,8 @@
type="string"
word_wrap="true">
To save your image as a texture select one of the square formats.
Upload cost: L$ [UPLOAD_COST]
</text>
<button
follows="right|bottom"

View File

@ -54,7 +54,7 @@
image_overlay_alignment="left"
image_top_pad="-1"
imgoverlay_label_space="10"
label="Save to Inventory (L$[AMOUNT])"
label="Save to Inventory"
layout="topleft"
left="9"
name="save_to_inventory_btn"

View File

@ -6,12 +6,14 @@
<pie_slice label="Sentarme" name="Pie Object Sit"/>
<pie_slice label="Levantarme" name="Object Stand Up"/>
<pie_slice label="Comprar" name="Buy..."/>
<pie_slice label="Tomar" name="Pie Object Take"/>
<pie_menu label="Tomar &gt;" name="Take Submenu">
<pie_slice label="Tomar una copia" name="Take Copy" />
<pie_slice label="Tomar" name="Take" />
</pie_menu>
<pie_slice label="Pagar" name="Pay..."/>
<pie_menu label="Más &gt;" name="Object Pie More 1">
<pie_slice label="Eliminar" name="Delete"/>
<pie_slice label="Vestir" name="Wear"/>
<pie_slice label="Tomar una copia" name="Take Copy"/>
<pie_menu label="Anexar HUD &gt;" name="Pie Object Attach HUD"/>
<pie_menu label="Anexar &gt;" name="Pie Object Attach"/>
<pie_slice label="Devolver" name="Return..."/>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_inventory">
<text name="hint_lbl">
Para guardar una imagen como textura, selecciona uno de los formatos cuadrados.
Guardar una imagen en el inventario cuesta [UPLOAD_COST] L$. Para guardar una imagen como textura, selecciona uno de los formatos cuadrados.
</text>
<combo_box label="Resolución" name="texture_size_combo">
<combo_box.item label="Ventana actual (512 × 512)" name="CurrentWindow"/>
<combo_box.item label="Ventana actual" name="CurrentWindow"/>
<combo_box.item label="Pequeña (128x128)" name="Small(128x128)"/>
<combo_box.item label="Mediana (256x256)" name="Medium(256x256)"/>
<combo_box.item label="Grande (512x512)" name="Large(512x512)"/>

View File

@ -2,7 +2,7 @@
<panel name="panel_snapshot_options">
<button label="Publicar en los comentarios de mi perfil" name="save_to_profile_btn"/>
<button label="Enviar por correo electrónico" name="save_to_email_btn"/>
<button label="Guardar en mi inventario ([AMOUNT] L$)" name="save_to_inventory_btn"/>
<button label="Guardar en mi inventario" name="save_to_inventory_btn"/>
<button label="Guardar en mi ordenador" name="save_to_computer_btn"/>
<button label="Subir a Flickr" name="save_to_flickr_btn"/>
</panel>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="floater_region_restart_schedule">
<floater name="floater_region_restart_schedule" title="Planning de redémarrage de la région">
<text name="days_general">
Redémarrer la région ces jours-ci :
</text>

View File

@ -11,7 +11,7 @@ Pour vous simplifier la tâche, l'encadré ci-dessous indique les dossiers utili
Veuillez les ajouter à vos exclusions de dossiers AV, comme indiqué sur la page wiki ci-dessus.
</text>
<text name="whitelist_exe_instruction">
La case suivante indique le nom et le chemin d'accès complet des exécutables de la visionneuse.
Ajoutez-les à vos exclusions d'exécutables AV comme indiqué dans le wiki ci-dessus.
La case suivante indique les noms et chemins d'accès complets des exécutables de la visionneuse.
Ajoutez les chemins d'accès complet à vos exclusions d'exécutables AV comme indiqué dans le wiki ci-dessus.
</text>
</floater>

View File

@ -38,8 +38,14 @@
<menu_item_call label="Faire disparaître" name="Derender"/>
<menu_item_call label="Faire disparaître &amp; Blacklister" name="DerenderPermanent"/>
<menu_item_call label="Renvoyer" name="Return..."/>
<menu_item_call label="Prendre" name="Pie Object Take"/>
<menu_item_call label="Prendre une copie" name="Take Copy"/>
<context_menu label="Prendre" name="Take Submenu">
<menu_item_call label="Prendre" name="Pie Object Take"/>
<menu_item_call label="Copier" name="Take Copy"/>
<menu_item_call label="Le groupe" name="Take combined"/>
<menu_item_call label="Copie du groupe" name="Take Copy combined"/>
<menu_item_call label="Objets séparés" name="Take Separate"/>
<menu_item_call label="Copies séparées" name="Take Copy Separate"/>
</context_menu>
<menu_item_call label="Payer" name="Pay..."/>
<menu_item_call label="Acheter" name="Buy..."/>
<context_menu label="Enregistrer sous" name="Export Menu">

View File

@ -6,12 +6,18 @@
<pie_slice label="S'asseoir" name="Pie Object Sit"/>
<pie_slice label="Se lever" name="Object Stand Up"/>
<pie_slice label="Acheter" name="Buy..."/>
<pie_slice label="Prendre" name="Pie Object Take"/>
<pie_menu label="Prendre &gt;" name="Take Submenu">
<pie_slice label="Copies séparées" name="Take Copy Separate"/>
<pie_slice label="Copier" name="Take Copy" />
<pie_slice label="Prendre" name="Take" />
<pie_slice label="Le groupe" name="Take combined"/>
<pie_slice label="Copie du groupe" name="Take Copy combined"/>
<pie_slice label="Objets séparés" name="Take Separate"/>
</pie_menu>
<pie_slice label="Payer" name="Pay..."/>
<pie_menu label="Plus &gt;" name="Object Pie More 1">
<pie_slice label="Supprimer" name="Delete"/>
<pie_slice label="Porter" name="Wear"/>
<pie_slice label="Prendre une copie" name="Take Copy"/>
<pie_menu label="Attacher au HUD &gt;" name="Pie Object Attach HUD"/>
<pie_menu label="Attacher &gt;" name="Pie Object Attach">
<pie_menu label="Squelette (ext) &gt;" name="Enhanced Skeleton">

View File

@ -34,4 +34,5 @@
<button label="Téléporter chez eux tous les résidents..." name="kick_all_btn"/>
<button label="Envoyer un message à la région..." name="im_btn"/>
<button label="Gérer le Téléhub..." name="manage_telehub_btn"/>
<button label="Planifier les redémarrages..." name="manage_restart_btn" />
</panel>

View File

@ -12,7 +12,7 @@
<spinner width="50" name="inventory_snapshot_height"/>
<check_box label="Conserver les proportions" name="inventory_keep_aspect_check"/>
<check_box label="Uploader temporairement" name="inventory_temp_upload"/>
<text name="hint_lbl">Pour enregistrer votre image en tant que texture, sélectionnez un des formats listés.</text>
<text name="hint_lbl">L&apos;enregistrement d&apos;une image dans l&apos;inventaire coûte [UPLOAD_COST] L$. Pour enregistrer votre image en tant que texture, sélectionnez un des formats listés.</text>
<button label="&#x25B6; Sélection" name="cancel_btn"/>
<button label="Enregistrer" name="save_btn"/>
</panel>

View File

@ -2,7 +2,7 @@
<panel name="panel_snapshot_options">
<layout_stack name="option_buttons">
<layout_panel name="lp_download"><button label="Sur le disque" name="save_to_computer_btn"/></layout_panel>
<layout_panel name="lp_inventory"><button label="Dans l'inventaire ([AMOUNT] L$)" name="save_to_inventory_btn"/></layout_panel>
<layout_panel name="lp_inventory"><button label="Dans l'inventaire" name="save_to_inventory_btn"/></layout_panel>
<layout_panel name="lp_profile"><button label="En ligne sur mon profil" name="save_to_profile_btn"/></layout_panel>
<layout_panel name="lp_facebook"><button label="En ligne sur Facebook" name="send_to_facebook_btn"/></layout_panel>
<layout_panel name="lp_twitter"><button label="En ligne sur Twitter" name="send_to_twitter_btn"/></layout_panel>

View File

@ -51,6 +51,12 @@
<rows name="spin_around_cw">
<columns name="lst_action" tool_tip="Ruota la camera attorno al punto di focus in senso orario." value="Ruota camera verso sinistra" />
</rows>
<rows name="roll_left">
<columns name="lst_action" tool_tip="Inclina camera a sinistra" value="Inclina a sinistra" />
</rows>
<rows name="roll_right">
<columns name="lst_action" tool_tip="Inclina camera a destra" value="Inclina a destra" />
</rows>
<rows name="move_forward_sitting">
<columns name="lst_action" value="Camera in avanti (s)" />
</rows>

View File

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="bulk_upload">
<layout_stack name="maint_layout">
<layout_panel name="count_panel">
<text name="number_of_items">
Elementi da caricare: [COUNT]
</text>
</layout_panel>
<layout_panel name="warning_panel">
<text name="textures_2k_warning">
Per impostazione predefinita, una o più texture verranno ridimensionate a 2048px.
</text>
</layout_panel>
<layout_panel name="checkbox_panel">
<check_box label="Ridimensiona le texture ad un massimo di 1024px" name="upload_2k" />
</layout_panel>
<layout_panel name="cost_panel">
<text name="upload_cost">
Costo: [COST]L$
</text>
</layout_panel>
<layout_panel name="buttoms_panel">
<button label="Carica" name="upload_btn" />
<button label="Annulla" name="cancel_btn" />
</layout_panel>
<layout_panel name="link_panel">
<text name="new_folder_textbox">
Come vengono ridimensionate le texture caricate:
https://wiki.secondlife.com/wiki/Limits#All_Viewers
</text>
</layout_panel>
</layout_stack>
</floater>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="gltf asset editor">
<floater.string name="floater_title" value="Editor Scena GLTF" />
<floater.string name="scene_tittle" value="Scena" />
<floater.string name="node_tittle" value="Nodo" />
<floater.string name="mesh_tittle" value="Mesh" />
<floater.string name="skin_tittle" value="Skin" />
<layout_stack name="main_layout">
<layout_panel name="transforms_panel">
<menu_button name="clipboard_pos_btn" tool_tip="Opzioni incolla" />
<text name="label position" tool_tip="Posizione (metri)">
Posizione (m)
</text>
<menu_button name="clipboard_size_btn" tool_tip="Opzioni incolla" />
<text name="label size" tool_tip="Dimensioni (metri)">
Dimensioni (m)
</text>
<menu_button name="clipboard_rot_btn" tool_tip="Opzioni incolla" />
<text name="label rotation" tool_tip="Rotazione (gradi)">
Rotazione (°)
</text>
</layout_panel>
</layout_stack>
</floater>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<floater name="floater_region_restart_schedule" title="Pianifica Riavvio Regione">
<text name="days_general">
Riavvia regione nei seguenti giorni:
</text>
<check_box name="s_chk" tool_tip="Domenica" />
<check_box name="m_chk" tool_tip="Lunedì" />
<check_box name="t_chk" tool_tip="Martedì" />
<check_box name="w_chk" tool_tip="Mercoledì" />
<check_box name="r_chk" tool_tip="Giovedì" />
<check_box name="f_chk" tool_tip="Venerdì" />
<check_box name="a_chk" tool_tip="Sabato" />
<text name="su_label">
Do
</text>
<text name="mo_label">
Lu
</text>
<text name="tu_label">
Ma
</text>
<text name="we_label">
Me
</text>
<text name="th_label">
Gi
</text>
<text name="fr_label">
Ve
</text>
<text name="sa_label">
Sa
</text>
<text name="at_label">
alle
</text>
<button name="save_btn" label="Salva" />
<button name="cancel_btn" label="Annulla" />
</floater>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<floater name="settings_color" title="Impostazioni Colore">
<filter_editor label="Filtro di ricerca" name="filter_input" />
<scroll_list name="setting_list">
<scroll_list.columns label="Colore" name="color" />
</scroll_list>
<text name="color_name_txt">
Nome colore
</text>
<spinner label="Traspar." name="alpha_spinner" />
<button label="Ripristina predefiniti" name="default_btn" />
<check_box label="Mostra solo colori cambiati" name="hide_default" />
</floater>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Color Menu">
<menu_item_call label="Copia" name="params_copy" />
<menu_item_call label="Incolla" name="params_paste" />
</toggleable_menu>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Features Menu">
<menu_item_call label="Copia" name="params_copy" />
<menu_item_call label="Incolla" name="params_paste" />
</toggleable_menu>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Light Menu">
<menu_item_call label="Copia" name="params_copy" />
<menu_item_call label="Incolla" name="params_paste" />
</toggleable_menu>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Object Menu">
<menu_item_call label="Copia" name="params_copy" />
<menu_item_call label="Incolla" name="params_paste" />
</toggleable_menu>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Position Menu">
<menu_item_call label="Copia tutto" name="psr_copy" />
<menu_item_call label="Copia posizione" name="pos_copy" />
<menu_item_call label="Incolla tutto" name="psr_paste" />
<menu_item_call label="Incolla posizione" name="pos_paste" />
</toggleable_menu>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Rotation Menu">
<menu_item_call label="Copia tutto" name="psr_copy" />
<menu_item_call label="Copia rotazione" name="rot_copy" />
<menu_item_call label="Incolla tutto" name="psr_paste" />
<menu_item_call label="Incolla rotazione" name="rot_paste" />
</toggleable_menu>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Size Menu">
<menu_item_call label="Copia tutto" name="psr_copy" />
<menu_item_call label="Copia dimensioni" name="size_copy" />
<menu_item_call label="Incolla tutto" name="psr_paste" />
<menu_item_call label="Incolla dimensioni" name="size_paste" />
</toggleable_menu>

View File

@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Texture Menu">
<menu_item_call label="Copia" name="params_copy" />
<menu_item_call label="Incolla" name="params_paste" />
</toggleable_menu>

View File

@ -24,7 +24,8 @@
<menu_item_check label="Mostra menu Debug" name="Show Debug Menu"/>
<menu label="Debug" name="Debug">
<menu_item_call label="Impostazioni di debug" name="Debug Settings"/>
<menu_item_call label="Strumento anteprima XUI" name="UI Preview Tool"/>
<menu_item_call label="Mostra Impostazioni Colore" name="Color Settings" />
<menu_item_call label="Strumento Anteprima XUI" name="UI Preview Tool"/>
<menu label="Caratteri" name="Fonts">
<menu_item_call label="Mostra test carattere" name="Show Font Test" />
<menu_item_call label="Scarica caratteri" name="Dump Fonts" />
@ -37,7 +38,7 @@
<menu_item_call label="Ispeziona" name="Inspectors" />
</menu>
<menu_item_call label="Imposta dimensioni della finestra..." name="Set Window Size..."/>
<menu_item_call label="Mostra i Termini del servizio (TOS)" name="TOS"/>
<menu_item_call label="Mostra Termini del servizio (TOS)" name="TOS"/>
<menu_item_call label="Mostra messaggio critico" name="Critical"/>
<menu_item_call label="Browser media" name="Media Browser"/>
<menu_item_call label="Mostra Console notifiche" name="Show Notifications Console"/>

View File

@ -6,12 +6,18 @@
<pie_slice label="Siediti qui" name="Pie Object Sit"/>
<pie_slice label="Alzati" name="Object Stand Up"/>
<pie_slice label="Compra" name="Buy..."/>
<pie_slice label="Prendi" name="Pie Object Take"/>
<pie_menu label="Prendi &gt;" name="Take Submenu">
<pie_slice label="Copie come ogg. separati" name="Take Copy Separate" />
<pie_slice label="Prendi copia" name="Take Copy" />
<pie_slice label="Prendi" name="Take" />
<pie_slice label="Come multi-ogg." name="Take combined" />
<pie_slice label="Copia come multi-ogg." name="Take Copy combined" />
<pie_slice label="Come ogg. separati" name="Take Separate" />
</pie_menu>
<pie_slice label="Paga" name="Pay..."/>
<pie_menu label="Altro &gt;" name="Object Pie More 1">
<pie_slice label="Elimina" name="Delete"/>
<pie_slice label="Indossa" name="Wear"/>
<pie_slice label="Prendi copia" name="Take Copy"/>
<pie_menu label="Attacca HUD &gt;" name="Pie Object Attach HUD"/>
<pie_menu label="Attacca &gt;" name="Pie Object Attach">
<pie_menu label="Schel. avanz. &gt;" name="Enhanced Skeleton">

View File

@ -466,6 +466,7 @@
<menu_item_call label="Apri..." name="Open..." />
<menu_item_call label="Salva come..." name="Save As..." />
<menu_item_call label="Carica..." name="Upload..." />
<menu_item_call label="Modifica..." name="Edit..." />
</menu>
<menu label="Test rendering" name="Render Tests">
<menu_item_check label="Camera Offset" name="Camera Offset"/>
@ -508,25 +509,25 @@
</menu>
</menu>
<menu label="Rendering" name="Rendering">
<menu_item_check label="Axes" name="Axes"/>
<menu_item_check label="Tangent Basis" name="Tangent Basis"/>
<menu_item_call label="Selected Texture Info Basis" name="Selected Texture Info Basis"/>
<menu_item_call label="Info materiale selezionato" name="Selected Material Info"/>
<menu_item_check label="Wireframe" name="Wireframe"/>
<menu_item_check label="Object-Object Occlusion" name="Object-Object Occlusion"/>
<menu_item_check label="Advanced Lighting Model" name="Advanced Lighting Model"/>
<menu_item_check label=" Shadows from Sun/Moon/Projectors" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label=" SSAO and Shadow Smoothing" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="Debug GL" name="Debug GL"/>
<menu_item_check label="Debug Pipeline" name="Debug Pipeline"/>
<menu_item_check label="Automatic Alpha Masks (deferred)" name="Automatic Alpha Masks (deferred)"/>
<menu_item_check label="Automatic Alpha Masks (non-deferred)" name="Automatic Alpha Masks (non-deferred)"/>
<menu_item_check label="Animation Textures" name="Animation Textures"/>
<menu_item_check label="Disable Textures" name="Disable Textures"/>
<menu_item_check label="Full Res Textures (dangerous)" name="Full Res Textures"/>
<menu_item_check label="Render Attached Lights" name="Render Attached Lights"/>
<menu_item_check label="Render Attached Particles" name="Render Attached Particles"/>
<menu_item_check label="Hover Glow Objects" name="Hover Glow Objects"/>
<menu_item_check label="Assi" name="Axes"/>
<menu_item_check label="Info di base sulle tangenti" name="Tangent Basis"/>
<menu_item_call label="Info di base sulla texture selezionata" name="Selected Texture Info Basis"/>
<menu_item_call label="Info sul materiale selezionato" name="Selected Material Info"/>
<menu_item_check label="Modalità immagine wireframe" name="Wireframe"/>
<menu_item_check label="Occlusione da oggetto a oggetto" name="Object-Object Occlusion"/>
<menu_item_check label="Ombre sole/luna/proiettori" name="Shadows from Sun/Moon/Projectors"/>
<menu_item_check label="SSAO e attenuazione delle ombre" name="SSAO and Shadow Smoothing"/>
<menu_item_check label="Debug GL al prossimo avvio" name="Debug GL"/>
<menu_item_check label="Debug delle pipeline" name="Debug Pipeline"/>
<menu_item_check label="Mascherature alfa automatiche" name="Automatic Alpha Masks (deferred)"/>
<menu_item_check label="Texture animate" name="Animation Textures"/>
<menu_item_check label="Disabilita texture" name="Disable Textures"/>
<menu_item_call label="Derenderizza tutte le animesh" name="Derender Animesh"/>
<menu_item_check label="Risoluzione massima della texture (pericoloso)" name="Full Res Textures"/>
<menu_item_check label="Renderizza luci indossate" name="Render Attached Lights"/>
<menu_item_check label="Renderizza particelle indossate" name="Render Attached Particles"/>
<menu_item_check label="Abilita cache degli shader" name="Enable Shader Cache" />
<menu_item_call label="Cancella cache degli shader" name="Shader Cache Clear" />
</menu>
<menu label="Rete" name="Network">
<menu_item_check label="Pausa agente" name="AgentPause"/>
@ -553,6 +554,11 @@
<menu_item_call label="Scarica Region Object Cache" name="Dump Region Object Cache"/>
<menu_item_call label="Scarica Simulator Features to Nearby Chat" name="DumpSimFeaturesToChat"/>
</menu>
<menu label="Terreno" name="DevelopTerrain">
<menu_item_call label="Ricostruisci terreno" name="Rebuild Terrain" />
<menu_item_call label="Crea paintmap locale" name="Create Local Paintmap" />
<menu_item_call label="Elimina paintmap locale" name="Delete Local Paintmap" />
</menu>
<menu label="UI" name="UI">
<menu_item_call label="Test browser multimediale" name="Web Browser Test"/>
<menu_item_check label="Test riavvio regione" name="Region Restart Test"/>
@ -580,15 +586,16 @@
<menu_item_check label="Debug processi finestra" name="Debug WindowProc"/>
</menu>
<menu label="XUI" name="XUI">
<menu_item_call label="Mostra Impostazioni Colore" name="Color Settings" />
<menu_item_call label="Ricarica impostazioni colori" name="Reload Color Settings"/>
<menu_item_call label="Mostra Font Test" name="Show Font Test"/>
<menu_item_call label="Mostra Test Carattere" name="Show Font Test"/>
<menu_item_call label="Carica da XML" name="Load from XML"/>
<menu_item_call label="Salva su XML" name="Save to XML"/>
<menu_item_check label="Mostra nomi XUI" name="Show XUI Names"/>
<menu_item_check label="Mostra debugging info for views" name="DebugViews"/>
<menu_item_call label="XUI Preview Tool" name="UI Preview Tool"/>
<menu_item_call label="Manda IM test" name="Send Test IMs"/>
<menu_item_call label="Vuota cache nomi" name="Flush Names Caches"/>
<menu_item_check label="Mostra informazioni di debug per le visualizzazioni" name="DebugViews"/>
<menu_item_call label="Strumento di anteprima XUI" name="UI Preview Tool"/>
<menu_item_call label="Invia IM di prova" name="Send Test IMs"/>
<menu_item_call label="Svuota le cache dei nomi" name="Flush Names Caches"/>
</menu>
<menu label="Avatar" name="Character">
<menu label="Cattura texture combinate" name="Grab Baked Texture">
@ -600,10 +607,11 @@
</menu>
<menu label="Test avatar" name="Character Tests">
<menu_item_call label="Aspetto a XML" name="Appearance To XML"/>
<menu_item_call label="Commuta Character Geometry" name="Toggle Character Geometry"/>
<menu_item_call label="Commuta geometria personaggio" name="Toggle Character Geometry"/>
<menu_item_call label="Test maschio" name="Test Male"/>
<menu_item_call label="Test femmina" name="Test Female"/>
<menu_item_check label="Permetti di selezionare gli avatar" name="Allow Select Avatar"/>
<menu_item_check label="Disabilita l'animazione dello sguardo" name="Disable Look At Animation" />
<menu_item_check label="Renderizza solo gli amici" name="Render Only Friends" />
</menu>
<menu label="Velocità animazioni" name="Animation Speed">

View File

@ -852,6 +852,16 @@ Se si riavvia il viewer con le impostazioni precedenti potrebbe essere possibile
<notification name="CannotUploadReason">
Impossibile importare il file [FILE] a causa del seguente motivo: [REASON]
Riprova più tardi.
</notification>
<notification name="CannotUploadSnapshotEmailTooBig">
Il caricamento della foto [FILE] non è riuscito a causa di: [REASON]
Il file potrebbe essere troppo grande. Prova ad abbassare la risoluzione, la qualità o riprova più tardi.
</notification>
<notification name="CannotUploadSnapshotWebTooBig">
Caricamento foto non riuscito.
Il file potrebbe essere troppo grande. Prova ad abbassare la risoluzione, la qualità o riprova più tardi.
</notification>
<notification name="LandmarkCreated">
Hai aggiunto &quot;[LANDMARK_NAME]&quot; alla tua cartella [FOLDER_NAME].
@ -1146,6 +1156,9 @@ Unire il terreno?
Non è possibile salvare [NAME] nel database centrale degli asset.
In genere si tratta di un problema temporaneo. Attendere alcuni minuti per modificare e salvare nuovamente gli elementi indossabili.
</notification>
<notification name="OutOfDiskSpace">
Spazio sul disco esaurito. È necessario liberare spazio sul computer o svuotare la cache.
</notification>
<notification name="YouHaveBeenLoggedOut">
Sei stato scollegato da [CURRENT_GRID].
[MESSAGE]
@ -1602,6 +1615,10 @@ Eccede il [MAX_AGENTS] [LIST_TYPE] limite di [NUM_EXCESS].
<notification name="CanNotChangeAppearanceUntilLoaded">
Impossibile cambiare l&apos;aspetto fisico finchè i vestiti non sono caricati.
</notification>
<notification name="UsavedWearableChanges">
Sono presenti modifiche non salvate.
<usetemplate ignoretext="Conferma prima di eliminare le modifiche all'abbigliamento non salvate" name="okcancelignore" notext="Continua a modificare" yestext="Scarta" />
</notification>
<notification name="ClassifiedMustBeAlphanumeric">
Il nome del tuo annuncio deve iniziare con una lettera da A a Z oppure con un numero. Non sono consentiti caratteri di punteggiatura.
</notification>

View File

@ -23,8 +23,8 @@
<text name="options_text_lbl">
Opzioni:
</text>
<check_box label="Con script" name="return_scripts" tool_tip="Restituisci solo oggetti che hanno script"/>
<check_box label="Sul terreno di un altro residente" name="return_other_land" tool_tip="Restituisci solo gli oggetti che sono in terreni appartenenti a qualcun altro"/>
<check_box label="Con script" name="return_scripts" tool_tip="Restituisci solo gli oggetti scriptati"/>
<check_box label="Sui terreni di altri residenti" name="return_other_land" tool_tip="Restituisci solo gli oggetti che si trovano sui terreni che non sono di proprietà dell'utente selezionato"/>
<check_box label="In tutte le regioni di questa proprietà" name="return_estate_wide" tool_tip="Restituisci tutti gli oggetti nelle varie regioni che costituiscono l&apos;insieme dei possedimenti terrieri"/>
<button label="Restituisci" name="return_btn"/>
<button label="Vedi elenco maggiori collidenti..." name="top_colliders_btn" tool_tip="Elenco degli oggetti che stanno potenzialmente subendo le maggiori collisioni" width="200"/>

View File

@ -10,31 +10,31 @@
ID Proprietà:
</text>
<line_editor name="estate_id" initial_value="sconosciuto" width="85" />
<text name="version_channel_text_lbl">
Versione:
</text>
<text name="version_channel_text" left_delta="60">
sconosciuta
</text>
<text name="grid_position_lbl" right="-75">
Pos. grid:
</text>
<line_editor name="grid_position_x" default_text="scon"/>
<line_editor name="grid_position_y" default_text="scon"/>
<text name="region_type_lbl">
Tipo:
</text>
<text name="region_type" left_delta="60">
sconosciuto
</text>
<check_box label="Proibisci modifica del terreno" name="block_terraform_check"/>
<check_box label="Impedisci volo" name="block_fly_check"/>
<check_box label="Blocca sorvolo" name="block_fly_over_check" tool_tip="Espandi il controllo dell&apos;accesso in alto per impedire il volo sopra un lotto"/>
<check_box label="Abilita danni" name="allow_damage_check"/>
<check_box label="Limita urti" name="restrict_pushobject"/>
<text name="grid_position_lbl" right="-75">
Pos. grid:
</text>
<text name="version_channel_text_lbl">
Versione:
</text>
<text name="version_channel_text" left_delta="60">
sconosciuta
</text>
<line_editor name="grid_position_x" default_text="scon"/>
<line_editor name="grid_position_y" default_text="scon"/>
<check_box label="Disabilita modifica del terreno" name="block_terraform_check"/>
<check_box label="Disabilita il volo" name="block_fly_check"/>
<check_box label="Disabilita il sorvolo sul terreno" name="block_fly_over_check" tool_tip="Espandi il controllo dell&apos;accesso in alto per impedire il volo sopra un lotto"/>
<check_box label="Abilita il danno" name="allow_damage_check"/>
<check_box label="Disabilita la spinta" name="restrict_pushobject"/>
<check_box label="Abilita rivendita del terreno" name="allow_land_resell_check"/>
<check_box label="Abilita unione/suddivisione del terreno" name="allow_parcel_changes_check"/>
<check_box label="Proibisci che il terreno appaia nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti che le persone vedano questa regione e le sue suddivisioni nei risultati delle ricerche"/>
<check_box label="Non permettere che il terreno appaia nelle ricerche" name="block_parcel_search_check" tool_tip="Permetti che le persone vedano questa regione e le sue suddivisioni nei risultati delle ricerche"/>
<spinner label="Limite massimo di avatar" label_width="150" name="agent_limit_spin" width="223"/>
<spinner label="Bonus di oggetti" label_width="150" name="object_bonus_spin" width="223"/>
<text label="Maturità" name="access_text" width="160">
@ -50,4 +50,5 @@
<button label="Teleport a casa tutti i residenti..." name="kick_all_btn"/>
<button label="Invia messaggio alla regione..." name="im_btn"/>
<button label="Gestisci snodo di teleport..." name="manage_telehub_btn" width="210"/>
<button label="Pianifica riavvio regione..." name="manage_restart_btn" />
</panel>

View File

@ -14,7 +14,7 @@
<check_box label="Mantieni proporzioni" name="inventory_keep_aspect_check"/>
<check_box label="Temporaneo" name="inventory_temp_upload" />
<text name="hint_lbl">
Per salvare come texture, seleziona un formato quadrato.
Salvare un&apos;immagine nell&apos;inventario costa L$[UPLOAD_COST]. Per salvare come texture, seleziona un formato quadrato.
</text>
<button label="&#x25B6; Seleziona" name="cancel_btn"/>
<button label="Salva" name="save_btn"/>

View File

@ -5,7 +5,7 @@
<button label="Salva sul disco fisso" name="save_to_computer_btn"/>
</layout_panel>
<layout_panel name="lp_inventory">
<button label="Salva in inventario ([AMOUNT]L$)" name="save_to_inventory_btn"/>
<button label="Salva in inventario" name="save_to_inventory_btn"/>
</layout_panel>
<layout_panel name="lp_profile">
<button label="Condividi sul feed" name="save_to_profile_btn"/>

View File

@ -19,12 +19,13 @@
<pie_slice
label="購入"
name="Buy..."/>
<pie_slice
label="取る"
name="Pie Object Take"/>
<pie_menu label="取る &gt;" name="Take Submenu">
<pie_slice label="コピーを取る" name="Take Copy" />
<pie_slice label="取る" name="Take" />
</pie_menu>
<pie_slice
label="支払い"
name="Pay..."/>
name="Pay..."/>
<pie_menu
label="詳細 &gt;"
name="Object Pie More 1">
@ -34,9 +35,6 @@
<pie_slice
label="装着"
name="Wear"/>
<pie_slice
label="コピーを取る"
name="Take Copy"/>
<pie_menu
label="HUD装着先 &gt;"
name="Pie Object Attach HUD" />
@ -45,7 +43,7 @@
name="Pie Object Attach" />
<pie_slice
label="返却"
name="Return..."/>
name="Return..."/>
<pie_menu
label="詳細 &gt;"
name="Object Pie More 2">

View File

@ -5,13 +5,10 @@
</text>
<view_border name="hr" />
<combo_box label="解像度" name="texture_size_combo">
<!--
<combo_box.item label="現在のウィンドウ" name="CurrentWindow"/>
-->
<combo_box.item label="小128x128" name="Small(128x128)"/>
<combo_box.item label="中256x256" name="Medium(256x256)"/>
<combo_box.item label="大512x512" name="Large(512x512)"/>
<combo_box.item label="現在のウィンドウ (512x512)" name="CurrentWindow" />
<combo_box.item label="現在のウィンドウ" name="CurrentWindow" />
<combo_box.item label="カスタム" name="Custom"/>
</combo_box>
<spinner label="幅 x 高さ" name="inventory_snapshot_width"/>

View File

@ -5,7 +5,7 @@
<button label="ディスクに保存" name="save_to_computer_btn"/>
</layout_panel>
<layout_panel name="lp_inventory">
<button label="インベントリに保存 (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="インベントリに保存" name="save_to_inventory_btn"/>
</layout_panel>
<layout_panel name="lp_profile">
<button label="プロフィールにアップロード" name="save_to_profile_btn"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Rotation Menu">
<menu_item_call label="Kopiuj wszystko" name="psr_copy" />
<menu_item_call label="Wklej obrót" name="rot_copy" />
<menu_item_call label="Kopiuj obrót" name="rot_copy" />
<menu_item_call label="Wklej wszystko" name="psr_paste" />
<menu_item_call label="Wklej obrót" name="rot_paste" />
</toggleable_menu>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<toggleable_menu name="Copy Paste Size Menu">
<menu_item_call label="Kopiuj wszystko" name="psr_copy" />
<menu_item_call label="Wklej rozmiar" name="size_copy" />
<menu_item_call label="Kopiuj rozmiar" name="size_copy" />
<menu_item_call label="Wklej wszystko" name="psr_paste" />
<menu_item_call label="Wklej rozmiar" name="size_paste" />
</toggleable_menu>

View File

@ -6,12 +6,18 @@
<pie_slice label="Usiądź tutaj" name="Pie Object Sit"/>
<pie_slice label="Wstań" name="Object Stand Up"/>
<pie_slice label="Kup" name="Buy..."/>
<pie_slice label="Weź" name="Pie Object Take"/>
<pie_menu label="Weź &gt;" name="Take Submenu">
<pie_slice label="Kopie jako: oddzielne obiekty" name="Take Copy Separate" />
<pie_slice label="Weź kopię" name="Take Copy" />
<pie_slice label="Weź" name="Take" />
<pie_slice label="Jako: podniesione razem" name="Take combined" />
<pie_slice label="Kopię jako: podniesione razem" name="Take Copy combined" />
<pie_slice label="Jako: oddzielne obiekty" name="Take Separate" />
</pie_menu>
<pie_slice label="Zapłać" name="Pay..."/>
<pie_menu label="Więcej &gt;" name="Object Pie More 1">
<pie_slice label="Usuń" name="Delete"/>
<pie_slice label="Załóż" name="Wear"/>
<pie_slice label="Weź kopię" name="Take Copy"/>
<pie_menu label="Dołącz HUD &gt;" name="Pie Object Attach HUD"/>
<pie_menu label="Dołącz &gt;" name="Pie Object Attach">
<pie_menu label="Roz. szkielet &gt;" name="Enhanced Skeleton">

View File

@ -14,7 +14,7 @@
<check_box label="Zachowaj proporcje" name="inventory_keep_aspect_check" />
<check_box label="Tymczasowe" name="inventory_temp_upload" />
<text name="hint_lbl">
Aby zapisać je jako teksturę wybierz jeden z kwadratowych formatów.
Zapisanie zdjęcia do Szafy kosztuje [UPLOAD_COST]L$. Aby zapisać je jako teksturę wybierz jeden z kwadratowych formatów.
</text>
<button label="&#x25B6; Wybór" name="cancel_btn" />
<button label="Zapisz" name="save_btn" />

View File

@ -5,7 +5,7 @@
<button label="Zapisz na dysku twardym" name="save_to_computer_btn" />
</layout_panel>
<layout_panel name="lp_inventory">
<button label="Zapisz do Szafy ([AMOUNT]L$)" name="save_to_inventory_btn" />
<button label="Zapisz do Szafy " name="save_to_inventory_btn" />
</layout_panel>
<layout_panel name="lp_profile">
<button label="Wrzuć na mój Kanał" name="save_to_profile_btn" />

View File

@ -4,10 +4,10 @@
Inventário
</text>
<text name="hint_lbl">
Para salvar sua imagem como uma textura, selecione um dos formatos quadrados.
Salvar uma imagem em seu inventário custa L$[UPLOAD_COST]. Para salvar sua imagem como uma textura, selecione um dos formatos quadrados.
</text>
<combo_box label="Resolução" name="texture_size_combo">
<combo_box.item label="Janela ativa (512x512)" name="CurrentWindow"/>
<combo_box.item label="Janela ativa" name="CurrentWindow"/>
<combo_box.item label="Pequeno (128x128)" name="Small(128x128)"/>
<combo_box.item label="Médio (256x256)" name="Medium(256x256)"/>
<combo_box.item label="Grande (512x512)" name="Large(512x512)"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_options">
<button label="Salvar no disco" name="save_to_computer_btn"/>
<button label="Salvar em inventário (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="Salvar em inventário" name="save_to_inventory_btn"/>
<button label="Compartilhar no feed do perfil" name="save_to_profile_btn"/>
<button label="Compartilhar no Facebook" name="send_to_facebook_btn"/>
<button label="Compartilhar no Twitter" name="send_to_twitter_btn"/>

View File

@ -6,12 +6,18 @@
<pie_slice label="Сесть" name="Pie Object Sit"/>
<pie_slice label="Встать" name="Object Stand Up"/>
<pie_slice label="Купить" name="Buy..."/>
<pie_slice label="Взять" name="Pie Object Take"/>
<pie_menu label="Взять &gt;" name="Take Submenu">
<pie_slice label="Копии как отдельные предметы" name="Take Copy Separate" />
<pie_slice label="Взять Копию" name="Take Copy" />
<pie_slice label="Взять" name="Take" />
<pie_slice label="Как комбинированный предмет" name="Take combined" />
<pie_slice label="Копию как комбинированный предмет" name="Take Copy combined" />
<pie_slice label="Как отдельные предметы" name="Take Separate" />
</pie_menu>
<pie_slice label="Заплатить" name="Pay..."/>
<pie_menu label="Далее &gt;" name="Object Pie More 1">
<pie_slice label="Удалить" name="Delete"/>
<pie_slice label="Надеть" name="Wear"/>
<pie_slice label="Взять Копию" name="Take Copy"/>
<pie_menu label="Добавить HUD &gt;" name="Pie Object Attach HUD" />
<pie_menu label="Прикрепить &gt;" name="Pie Object Attach">
<pie_menu label="Доп.Скелет &gt;" name="Enhanced Skeleton">

View File

@ -4,10 +4,10 @@
Инвентарь
</text>
<text name="hint_lbl">
Чтобы сохранить его как текстуру, выберите один из квадратных форматов.
Сохранение изображения в инвентаре стоит L$[UPLOAD_COST]. Чтобы сохранить его как текстуру, выберите один из квадратных форматов.
</text>
<combo_box label="Размер" name="texture_size_combo">
<combo_box.item label="Текущее окно (512x512)" name="CurrentWindow"/>
<combo_box.item label="Текущее окно" name="CurrentWindow"/>
<combo_box.item label="Маленький (128x128)" name="Small(128x128)"/>
<combo_box.item label="Средний (256x256)" name="Medium(256x256)"/>
<combo_box.item label="Большой (512x512)" name="Large(512x512)"/>

View File

@ -5,7 +5,7 @@
<button label="Сохранить на диск" name="save_to_computer_btn"/>
</layout_panel>
<layout_panel name="lp_inventory">
<button label="В инвентарь (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="В инвентарь" name="save_to_inventory_btn"/>
</layout_panel>
<layout_panel name="lp_profile">
<button label="Загрузить в профиль" name="save_to_profile_btn"/>

View File

@ -4,10 +4,10 @@
Envanter
</text>
<text name="hint_lbl">
Görüntünüzü bir doku olarak kaydetmek için kare formatlardan birini seçin.
Bir görüntüyü envanterinize kaydetmenin maliyeti L$[UPLOAD_COST] olur. Görüntünüzü bir doku olarak kaydetmek için kare formatlardan birini seçin.
</text>
<combo_box label="Çözünürlük" name="texture_size_combo">
<combo_box.item label="Mevcut Pencere(512x512)" name="CurrentWindow"/>
<combo_box.item label="Mevcut Pencere" name="CurrentWindow"/>
<combo_box.item label="Küçük (128x128)" name="Small(128x128)"/>
<combo_box.item label="Orta (256x256)" name="Medium(256x256)"/>
<combo_box.item label="Büyük (512x512)" name="Large(512x512)"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_options">
<button label="Diske Kaydet" name="save_to_computer_btn"/>
<button label="Envantere Kaydet (L$[AMOUNT])" name="save_to_inventory_btn"/>
<button label="Envantere Kaydet" name="save_to_inventory_btn"/>
<button label="Profil Akışında Paylaş" name="save_to_profile_btn"/>
<button label="Facebook&apos;ta Paylaş" name="send_to_facebook_btn"/>
<button label="Twitter&apos;da Paylaş" name="send_to_twitter_btn"/>

View File

@ -4,10 +4,10 @@
收納區
</text>
<text name="hint_lbl">
若要將圖像存為材質,請選擇一個正方格式。
將圖像儲存到收納區的費用為 L$[UPLOAD_COST]。 若要將圖像存為材質,請選擇一個正方格式。
</text>
<combo_box label="解析度" name="texture_size_combo">
<combo_box.item label="目前視窗(512x512)" name="CurrentWindow"/>
<combo_box.item label="目前視窗" name="CurrentWindow"/>
<combo_box.item label="小128x128" name="Small(128x128)"/>
<combo_box.item label="中256x256" name="Medium(256x256)"/>
<combo_box.item label="大512x512" name="Large(512x512)"/>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<panel name="panel_snapshot_options">
<button label="儲存到硬碟" name="save_to_computer_btn"/>
<button label="儲存到收納區L$[AMOUNT]" name="save_to_inventory_btn"/>
<button label="儲存到收納區" name="save_to_inventory_btn"/>
<button label="分享至檔案訊息發佈" name="save_to_profile_btn"/>
<button label="分享到臉書" name="send_to_facebook_btn"/>
<button label="分享到推特" name="send_to_twitter_btn"/>

View File

@ -1454,7 +1454,7 @@ class Darwin_x86_64_Manifest(ViewerManifest):
self.path2basename(relpkgdir, "BugsplatMac.framework")
with self.prefix(dst="MacOS"):
executable = self.dst_path_of("Firestorm")
executable = self.dst_path_of(CHANNEL_VENDOR_BASE)
if self.args.get('bugsplat'):
# According to Apple Technical Note TN2206:
# https://developer.apple.com/library/archive/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG207
@ -2151,7 +2151,7 @@ class LinuxManifest(ViewerManifest):
self.path("ca-bundle.crt")
with self.prefix(src=os.path.join(pkgdir, 'lib', 'release'), dst="lib"):
self.path("libfreetype.so*")
# self.path("libfreetype.so*")
self.path("libapr-1.so*")
self.path("libaprutil-1.so*")
#self.path("libboost_context-mt.so*")