diff --git a/.github/workflows/master_build.yml b/.github/workflows/master_build.yml
index 3d87061b09..499f317f80 100644
--- a/.github/workflows/master_build.yml
+++ b/.github/workflows/master_build.yml
@@ -13,13 +13,13 @@ on:
env:
APP_NAME: interface
BUILD_TYPE: Release
- BUILD_NUMBER: ${{ github.run_number }}
+ BUILD_NUMBER: ${{ github.event.number }}_${{ github.sha }}
CI_BUILD: Github
GIT_COMMIT: ${{ github.sha }}
# VCPKG did not build well on OSX disabling HIFI_VCPKG_BOOTSTRAP, which invokes a download to a working version of vcpkg
# HIFI_VCPKG_BOOTSTRAP: true
RELEASE_TYPE: PRODUCTION
- RELEASE_NUMBER: ${{ github.run_number }}
+ RELEASE_NUMBER: ${{ github.event.number }}_${{ github.sha }}
STABLE_BUILD: 0
UPLOAD_BUCKET: overte-public
UPLOAD_REGION: fra1
@@ -108,7 +108,7 @@ jobs:
# Build type variables
if [ "${{ matrix.build_type }}" = "full" ]; then
echo "CLIENT_ONLY=FALSE" >> $GITHUB_ENV
- echo "INSTALLER=Overte-master$BUILD_NUMBER-${{ steps.buildenv1.outputs.github_sha_short }}.$INSTALLER_EXT" >> $GITHUB_ENV
+ echo "INSTALLER=Overte-${{ github.event.number }}_${{ github.sha }}.$INSTALLER_EXT" >> $GITHUB_ENV
else
echo "CLIENT_ONLY=TRUE" >> $GITHUB_ENV
echo "INSTALLER=Overte-Interface-master$BUILD_NUMBER-${{ steps.buildenv1.outputs.github_sha_short }}.$INSTALLER_EXT" >> $GITHUB_ENV
@@ -247,8 +247,8 @@ jobs:
- name: Upload artifact to GitHub
uses: actions/upload-artifact@v4
with:
- name: ${{ env.ARTIFACT_PATTERN }}
- path: ./build/${{ env.ARTIFACT_PATTERN }}
+ name: ${{ env.INSTALLER }}
+ path: ${{runner.workspace}}/build/${{ env.INSTALLER }}
if-no-files-found: error
#- name: Archive symbols
diff --git a/.gitignore b/.gitignore
index c3cb03f201..90ff187027 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,6 +17,7 @@ cmake-build-release-visual-studio/
cmake-build-relwithdebinfo-visual-studio/
cmake-build-debug-visual-studio/
cmake-build-debug/
+/cmake-build-*/
/release*/
/debug*/
/gprof*/
diff --git a/interface/resources/icons/tablet-icons/avatar-a.svg b/interface/resources/icons/tablet-icons/avatar-a.svg
index 065ad4fc6f..8cb3b4d342 100644
--- a/interface/resources/icons/tablet-icons/avatar-a.svg
+++ b/interface/resources/icons/tablet-icons/avatar-a.svg
@@ -1,14 +1,72 @@
-
-
-
+
+
diff --git a/interface/resources/icons/tablet-icons/avatar-i.svg b/interface/resources/icons/tablet-icons/avatar-i.svg
index 2d3f80cbf8..20e2709257 100644
--- a/interface/resources/icons/tablet-icons/avatar-i.svg
+++ b/interface/resources/icons/tablet-icons/avatar-i.svg
@@ -1,17 +1,85 @@
-
-
-
+
+
diff --git a/interface/resources/images/avatarapp/guy-in-circle.svg b/interface/resources/images/avatarapp/guy-in-circle.svg
index 78cbf5186b..ebeb09392e 100644
--- a/interface/resources/images/avatarapp/guy-in-circle.svg
+++ b/interface/resources/images/avatarapp/guy-in-circle.svg
@@ -1,20 +1,70 @@
-
-
-
+
+
+
+
diff --git a/interface/resources/qml/hifi/avatarapp/AvatarAppHeader.qml b/interface/resources/qml/hifi/avatarapp/AvatarAppHeader.qml
index d3c9cd1d5f..bf8282f947 100644
--- a/interface/resources/qml/hifi/avatarapp/AvatarAppHeader.qml
+++ b/interface/resources/qml/hifi/avatarapp/AvatarAppHeader.qml
@@ -20,16 +20,6 @@ ShadowRectangle {
color: style.colors.lightGrayBackground
- HiFiGlyphs {
- id: avatarIcon
- anchors.left: parent.left
- anchors.leftMargin: 23
- anchors.verticalCenter: header.verticalCenter
-
- size: 38
- text: "<"
- }
-
// TextStyle6
RalewaySemiBold {
id: title
diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp
index 8d1b923db6..78ba7dbde8 100644
--- a/interface/src/Menu.cpp
+++ b/interface/src/Menu.cpp
@@ -46,6 +46,7 @@
#include "avatar/AvatarManager.h"
#include "avatar/AvatarPackager.h"
#include "AvatarBookmarks.h"
+#include
#include "DomainAccountManager.h"
#include "MainWindow.h"
#include "render/DrawStatus.h"
@@ -546,6 +547,13 @@ Menu::Menu() {
drawStatusConfig, SLOT(setShowFade(bool)));
}
+ {
+ action = addCheckableActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::ExtraLinearTosRGBConversion, 0, OpenGLDisplayPlugin::getExtraLinearToSRGBConversion());
+ connect(action, &QAction::triggered, [action] {
+ OpenGLDisplayPlugin::setExtraLinearToSRGBConversion(action->isChecked());
+ });
+ }
+
// Developer > Assets >>>
// Menu item is not currently needed but code should be kept in case it proves useful again at some stage.
//#define WANT_ASSET_MIGRATION
diff --git a/interface/src/Menu.h b/interface/src/Menu.h
index 4eb985cf8c..61b028269e 100644
--- a/interface/src/Menu.h
+++ b/interface/src/Menu.h
@@ -237,7 +237,8 @@ namespace MenuOption {
const QString ComputeBlendshapes = "Compute Blendshapes";
const QString HighlightTransitions = "Highlight Transitions";
const QString MaterialProceduralShaders = "Enable Procedural Materials";
-}
+ const QString ExtraLinearTosRGBConversion = "Extra Linear to sRGB Conversion";
+ }
#endif // hifi_Menu_h
diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp
index 024d9a0ab6..97c73603e1 100644
--- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp
+++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.cpp
@@ -112,14 +112,6 @@ bool Basic2DWindowOpenGLDisplayPlugin::internalActivate() {
return Parent::internalActivate();
}
-gpu::PipelinePointer Basic2DWindowOpenGLDisplayPlugin::getRenderTexturePipeline() {
-#if defined(Q_OS_ANDROID)
- return _linearToSRGBPipeline;
-#else
- return _drawTexturePipeline;
-#endif
-}
-
void Basic2DWindowOpenGLDisplayPlugin::compositeExtra() {
#if defined(Q_OS_ANDROID)
auto& virtualPadManager = VirtualPad::Manager::instance();
diff --git a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h
index 68301ff8b4..cc304c19c2 100644
--- a/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h
+++ b/libraries/display-plugins/src/display-plugins/Basic2DWindowOpenGLDisplayPlugin.h
@@ -37,8 +37,6 @@ public:
virtual void pluginUpdate() override {};
- virtual gpu::PipelinePointer getRenderTexturePipeline() override;
-
protected:
mutable bool _isThrottled = false;
diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp
index 47f22dfaee..00771927fb 100644
--- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp
+++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.cpp
@@ -32,6 +32,7 @@
#include
#include
#include
+#include
#include
#include
@@ -57,6 +58,8 @@ using namespace shader::gpu::program;
extern QThread* RENDER_THREAD;
+Setting::Handle OpenGLDisplayPlugin::_extraLinearToSRGBConversionSetting("extraLinearToSRGBConversion", false);
+
class PresentThread : public QThread, public Dependency {
using Mutex = std::mutex;
using Condition = std::condition_variable;
@@ -956,5 +959,16 @@ void OpenGLDisplayPlugin::copyTextureToQuickFramebuffer(NetworkTexturePointer ne
}
gpu::PipelinePointer OpenGLDisplayPlugin::getRenderTexturePipeline() {
- return _drawTexturePipeline;
+#ifdef USE_GLES
+ if (!_extraLinearToSRGBConversionSetting.isSet()) {
+ const gl::ContextInfo &contextInfo = gl::ContextInfo::get();
+ _extraLinearToSRGBConversionSetting.set(std::find(contextInfo.extensions.cbegin(), contextInfo.extensions.cend(), "GL_EXT_framebuffer_sRGB") == contextInfo.extensions.cend());
+ }
+#endif
+
+ if (getExtraLinearToSRGBConversion()) {
+ return _linearToSRGBPipeline;
+ } else {
+ return _drawTexturePipeline;
+ }
}
diff --git a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h
index 15cebf7e3a..0df0d9ac3e 100644
--- a/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h
+++ b/libraries/display-plugins/src/display-plugins/OpenGLDisplayPlugin.h
@@ -18,6 +18,7 @@
#include
#include
+#include
#include
#include
@@ -86,6 +87,9 @@ public:
QOpenGLFramebufferObject* target,
GLsync* fenceSync) override;
+ static void setExtraLinearToSRGBConversion(bool value) { _extraLinearToSRGBConversionSetting.set(value); }
+ static bool getExtraLinearToSRGBConversion() { return _extraLinearToSRGBConversionSetting.get(); };
+
protected:
friend class PresentThread;
@@ -201,4 +205,7 @@ protected:
QImage getScreenshot(float aspectRatio);
QImage getSecondaryCameraScreenshot();
+
+private:
+ static Setting::Handle _extraLinearToSRGBConversionSetting;
};
diff --git a/scripts/communityScripts/armored-chat/armored_chat.qml b/scripts/communityScripts/armored-chat/armored_chat.qml
index ede60fca71..d1e46f57a6 100644
--- a/scripts/communityScripts/armored-chat/armored_chat.qml
+++ b/scripts/communityScripts/armored-chat/armored_chat.qml
@@ -487,13 +487,17 @@ Rectangle {
var last_item_index = channel.count - 1;
var last_item = channel.get(last_item_index);
- if (last_message_user === username && elapsed_minutes < 1 && last_item){
- message = "
" + message
- last_item.text = last_item.text += "\n" + message;
- scrollToBottom()
- last_message_time = new Date();
- return;
- }
+ // FIXME: When adding a new message this would check to see if we could append the incoming message
+ // to the bottom of the last message. This current implimentation causes issues with scrollToBottom()
+ // Specifically, scrolling to the bottom does not like image embeds.
+ // This needs to be reworked entirely before it can be reimplimented
+ // if (last_message_user === username && elapsed_minutes < 1 && last_item){
+ // message = "
" + message
+ // last_item.text = last_item.text += "\n" + message;
+ // scrollToBottom()
+ // last_message_time = new Date();
+ // return;
+ // }
last_message_user = username;
last_message_time = new Date();
@@ -510,7 +514,7 @@ Rectangle {
mess = mess.replace(arrow, "<");
var link = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
- mess = mess.replace(link, (match) => {return `` + match + ` ⮺`});
+ mess = mess.replace(link, (match) => {return `` + match + ` 🗗`});
var newline = /\n/gi;
mess = mess.replace(newline, "
");
diff --git a/scripts/communityScripts/notificationCore/notificationCore.js b/scripts/communityScripts/notificationCore/notificationCore.js
index 51e1eadde1..f7ab6e73cd 100644
--- a/scripts/communityScripts/notificationCore/notificationCore.js
+++ b/scripts/communityScripts/notificationCore/notificationCore.js
@@ -21,6 +21,8 @@ var DEFAULT_SIZE = 30;
var DEFAULT_OFFSET = 10;
var FLOOF_NOTIFICATION_CHANNEL = "Floof-Notif";
var MAIN_CHAT_APP_CHANNEL = "Chat";
+var ARROW_REGEX = /\= 0; i--) {
if (i === 0) {
diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js
index a9bc2be591..31afd6e2db 100644
--- a/scripts/defaultScripts.js
+++ b/scripts/defaultScripts.js
@@ -37,7 +37,6 @@ var DEFAULT_SCRIPTS_COMBINED = [
"system/inspect.js",
"system/keyboardShortcuts/keyboardShortcuts.js",
"system/onEscape.js",
- "system/onFirstRun.js",
"system/places/places.js"
//"developer/debugging/scriptMemoryReport.js"
];
diff --git a/scripts/system/create/entityList/entityList.js b/scripts/system/create/entityList/entityList.js
index a5c58a7bcd..9a1df1f76f 100644
--- a/scripts/system/create/entityList/entityList.js
+++ b/scripts/system/create/entityList/entityList.js
@@ -210,8 +210,8 @@ var EntityListTool = function(shouldUseEditTabletApp, selectionManager) {
var cameraPosition = Camera.position;
PROFILE("getMultipleProperties", function () {
var multipleProperties = Entities.getMultipleEntityProperties(ids, ['position', 'name', 'type', 'locked',
- 'visible', 'renderInfo', 'modelURL', 'materialURL', 'imageURL', 'script', 'serverScripts',
- 'skybox.url', 'ambientLight.url', 'soundURL', 'created', 'lastEdited']);
+ 'visible', 'renderInfo', 'modelURL', 'materialURL', 'imageURL', 'script', 'serverScripts',
+ 'skybox.url', 'ambientLight.url', 'soundURL', 'created', 'lastEdited', 'entityHostType']);
for (var i = 0; i < multipleProperties.length; i++) {
var properties = multipleProperties[i];
@@ -258,7 +258,8 @@ var EntityListTool = function(shouldUseEditTabletApp, selectionManager) {
hasScript: (properties.script !== "" || properties.serverScripts !== ""),
parentState: parentState,
created: formatToStringDateTime(properties.created),
- lastEdited: formatToStringDateTime(properties.lastEdited)
+ lastEdited: formatToStringDateTime(properties.lastEdited),
+ entityHostType: properties.entityHostType
});
}
}
diff --git a/scripts/system/create/entityList/html/js/entityList.js b/scripts/system/create/entityList/html/js/entityList.js
index d25bf54079..a642c9e722 100644
--- a/scripts/system/create/entityList/html/js/entityList.js
+++ b/scripts/system/create/entityList/html/js/entityList.js
@@ -989,6 +989,7 @@ function loaded() {
parentState: entity.parentState,
created: entity.created,
lastEdited: entity.lastEdited,
+ entityHostType: entity.entityHostType,
elRow: null, // if this entity has a visible row element assigned to it
selected: false // if this entity is selected for edit regardless of having a visible row
};
@@ -1185,7 +1186,11 @@ function loaded() {
if (entity !== undefined) {
entity.selected = false;
if (entity.elRow) {
- entity.elRow.className = "";
+ if (entity.entityHostType === "avatar") {
+ entity.elRow.className = "avatarEntity";
+ } else {
+ entity.elRow.className = "";
+ }
}
}
});
@@ -1199,9 +1204,17 @@ function loaded() {
entity.selected = true;
if (entity.elRow) {
if (id === lastSelectedEntity) {
- entity.elRow.className = "last-selected";
+ if (entity.entityHostType === "avatar") {
+ entity.elRow.className = "lastSelAvatarEntity";
+ } else {
+ entity.elRow.className = "last-selected";
+ }
} else {
- entity.elRow.className = "selected";
+ if (entity.entityHostType === "avatar") {
+ entity.elRow.className = "selAvatarEntity";
+ } else {
+ entity.elRow.className = "selected";
+ }
}
}
} else {
@@ -1272,12 +1285,24 @@ function loaded() {
// if this entity was previously selected flag it's row as selected
if (itemData.selected) {
if (itemData.id === lastSelectedEntity) {
- elRow.className = "last-selected";
+ if (itemData.entityHostType === "avatar") {
+ elRow.className = "lastSelAvatarEntity";
+ } else {
+ elRow.className = "last-selected";
+ }
} else {
- elRow.className = "selected";
+ if (itemData.entityHostType === "avatar") {
+ elRow.className = "selAvatarEntity";
+ } else {
+ elRow.className = "selected";
+ }
}
} else {
- elRow.className = "";
+ if (itemData.entityHostType === "avatar") {
+ elRow.className = "avatarEntity";
+ } else {
+ elRow.className = "";
+ }
}
// if this row previously had an associated entity ID that wasn't the new entity ID then clear
diff --git a/scripts/system/create/entityProperties/html/js/entityProperties.js b/scripts/system/create/entityProperties/html/js/entityProperties.js
index 20f34ba8b8..8eab673e31 100644
--- a/scripts/system/create/entityProperties/html/js/entityProperties.js
+++ b/scripts/system/create/entityProperties/html/js/entityProperties.js
@@ -15,6 +15,10 @@ var currentTab = "base";
const DEGREES_TO_RADIANS = Math.PI / 180.0;
+const ENTITY_HOST_TYPE_COLOR_DOMAIN = "#afafaf";
+const ENTITY_HOST_TYPE_COLOR_AVATAR = "#7fdb98";
+const ENTITY_HOST_TYPE_COLOR_LOCAL = "#f0d769";
+
const NO_SELECTION = ",";
const PROPERTY_SPACE_MODE = Object.freeze({
@@ -2675,6 +2679,11 @@ function updateMultiDiffProperties(propertiesMapToUpdate, onlyUpdateEntity) {
function createEmitTextPropertyUpdateFunction(property) {
return function() {
+ // If we don't have canViewAssetURLs permissions, ignore clearing URLs
+ if (!canViewAssetURLs && property.data.placeholder === "URL" && this.value === "") {
+ return;
+ }
+
property.elInput.classList.remove('multi-diff');
updateProperty(property.name, this.value, property.isParticleProperty);
};
@@ -4875,6 +4884,8 @@ function handleEntitySelectionUpdate(selections, isPropertiesToolUpdate) {
disableProperties();
} else {
+ let entityHostType = selections[0].properties.entityHostType;
+
if (!isPropertiesToolUpdate && !hasSelectedEntityChanged && document.hasFocus()) {
// in case the selection has not changed and we still have focus on the properties page,
// we will ignore the event.
@@ -4961,9 +4972,31 @@ function handleEntitySelectionUpdate(selections, isPropertiesToolUpdate) {
property.elInput.classList.add('multi-diff');
property.elInput.value = "";
}
+ if (propertyName === "id") {
+ property.elInput.style.color = ENTITY_HOST_TYPE_COLOR_DOMAIN;
+ }
} else {
property.elInput.classList.remove('multi-diff');
property.elInput.value = propertyValue;
+ if (propertyName === "name" || propertyName === "id") {
+ if (selections.length === 1) {
+ switch (entityHostType) {
+ case "domain":
+ property.elInput.style.color = ENTITY_HOST_TYPE_COLOR_DOMAIN;
+ break;
+ case "avatar":
+ property.elInput.style.color = ENTITY_HOST_TYPE_COLOR_AVATAR;
+ break;
+ case "local":
+ property.elInput.style.color = ENTITY_HOST_TYPE_COLOR_LOCAL;
+ break;
+ default:
+ property.elInput.style.color = ENTITY_HOST_TYPE_COLOR_DOMAIN;
+ }
+ } else {
+ property.elInput.style.color = ENTITY_HOST_TYPE_COLOR_DOMAIN;
+ }
+ }
}
break;
}
diff --git a/scripts/system/create/qml/NewMaterialDialog.qml b/scripts/system/create/qml/NewMaterialDialog.qml
index ab61bc05a2..423afe4b18 100644
--- a/scripts/system/create/qml/NewMaterialDialog.qml
+++ b/scripts/system/create/qml/NewMaterialDialog.qml
@@ -2,9 +2,10 @@
// NewMaterialDialog.qml
// qml/hifi
//
-// Created by Sam Gondelman on 1/17/18
+// Created by Sam Gondelman on January 17th, 2018
// Copyright 2018 High Fidelity, Inc.
// Copyright 2020 Vircadia contributors
+// Copyright 2024 Overte e.V.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
@@ -54,17 +55,32 @@ Rectangle {
Text {
id: text1
- text: qsTr("Material URL (Optional)")
+ text: qsTr("Material URL (Optional) ")
color: "#ffffff"
font.pixelSize: 12
}
+ Button {
+ id: pasteBtn
+ text: "Paste"
+ font.pixelSize: 11
+ height: 16
+ width: 40
+ radius: 4
+ anchors.top: text1.top
+ anchors.left: text1.right
+ anchors.bottom: text1.bottom
+ onClicked: {
+ materialURL.paste()
+ }
+ }
+
TextInput {
id: materialURL
height: 20
text: qsTr("")
color: "white"
- anchors.top: text1.bottom
+ anchors.top: pasteBtn.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
diff --git a/scripts/system/create/qml/NewModelDialog.qml b/scripts/system/create/qml/NewModelDialog.qml
index 8df6bad33f..ad70f47085 100644
--- a/scripts/system/create/qml/NewModelDialog.qml
+++ b/scripts/system/create/qml/NewModelDialog.qml
@@ -2,9 +2,10 @@
// NewModelDialog.qml
// qml/hifi
//
-// Created by Seth Alves on 2017-2-10
+// Created by Seth Alves on February 10th, 2017
// Copyright 2017 High Fidelity, Inc.
// Copyright 2020 Vircadia contributors
+// Copyright 2024 Overte e.V.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
@@ -54,17 +55,30 @@ Rectangle {
Text {
id: text1
- text: qsTr("Model URL (.fbx, .fst, .glb, .gltf, .obj, .gz)")
+ text: qsTr("Model URL (.fbx, .fst, .glb, .gltf, .obj, .gz) ")
color: "#ffffff"
font.pixelSize: 12
}
-
+ Button {
+ id: pasteBtn
+ text: "Paste"
+ font.pixelSize: 11
+ height: 16
+ width: 40
+ radius: 4
+ anchors.top: text1.top + 10
+ anchors.left: text1.right
+ anchors.bottom: text1.bottom
+ onClicked: {
+ modelURL.paste()
+ }
+ }
TextInput {
id: modelURL
height: 20
text: qsTr("")
color: "white"
- anchors.top: text1.bottom
+ anchors.top: pasteBtn.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
diff --git a/scripts/system/create/qml/NewPolyVoxDialog.qml b/scripts/system/create/qml/NewPolyVoxDialog.qml
index c10b32840b..97e3f9d341 100644
--- a/scripts/system/create/qml/NewPolyVoxDialog.qml
+++ b/scripts/system/create/qml/NewPolyVoxDialog.qml
@@ -1,12 +1,12 @@
//
// NewPolyVoxDialog.qml
-// Created by dr Karol Suprynowicz on 2022.05.17.
+// Created by dr Karol Suprynowicz on May 17th, 2022
// based on NewModelDialog.qml
// qml/hifi
//
// Copyright 2017 High Fidelity, Inc.
// Copyright 2020 Vircadia contributors
-// Copyright 2022 Overte e.V.
+// Copyright 2022-2024 Overte e.V.
//
// Distributed under the Apache License, Version 2.0.
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
@@ -116,17 +116,32 @@ Rectangle {
id: text1
anchors.top: texturePreset.bottom
anchors.topMargin: 5
- text: qsTr("X Texture URL")
+ text: qsTr("X Texture URL ")
color: "#ffffff"
font.pixelSize: 12
}
+ Button {
+ id: pasteBtn1
+ text: "Paste"
+ font.pixelSize: 11
+ height: 16
+ width: 40
+ radius: 4
+ anchors.top: text1.top
+ anchors.left: text1.right
+ anchors.bottom: text1.bottom
+ onClicked: {
+ xTextureURL.paste()
+ }
+ }
+
TextInput {
id: xTextureURL
height: 20
text: qsTr("")
color: "white"
- anchors.top: text1.bottom
+ anchors.top: pasteBtn1.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
@@ -166,19 +181,33 @@ Rectangle {
Text {
id: text2
- text: qsTr("Y Texture URL")
+ text: qsTr("Y Texture URL ")
color: "#ffffff"
font.pixelSize: 12
anchors.top: textInputBox1.bottom
anchors.topMargin: 5
}
+ Button {
+ id: pasteBtn2
+ text: "Paste"
+ font.pixelSize: 11
+ height: 16
+ width: 40
+ radius: 4
+ anchors.top: text2.top
+ anchors.left: text2.right
+ anchors.bottom: text2.bottom
+ onClicked: {
+ yTextureURL.paste()
+ }
+ }
TextInput {
id: yTextureURL
height: 20
text: qsTr("")
color: "white"
- anchors.top: text2.bottom
+ anchors.top: pasteBtn2.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
@@ -218,19 +247,33 @@ Rectangle {
Text {
id: text3
- text: qsTr("Z Texture URL")
+ text: qsTr("Z Texture URL ")
color: "#ffffff"
font.pixelSize: 12
anchors.top: textInputBox2.bottom
anchors.topMargin: 5
}
+ Button {
+ id: pasteBtn3
+ text: "Paste"
+ font.pixelSize: 11
+ height: 16
+ width: 40
+ radius: 4
+ anchors.top: text3.top
+ anchors.left: text3.right
+ anchors.bottom: text3.bottom
+ onClicked: {
+ zTextureURL.paste()
+ }
+ }
TextInput {
id: zTextureURL
height: 20
text: qsTr("")
color: "white"
- anchors.top: text3.bottom
+ anchors.top: pasteBtn3.bottom
anchors.topMargin: 5
anchors.left: parent.left
anchors.leftMargin: 0
diff --git a/scripts/system/html/css/edit-style.css b/scripts/system/html/css/edit-style.css
index 27f1ce23f3..3ec78eb6cc 100644
--- a/scripts/system/html/css/edit-style.css
+++ b/scripts/system/html/css/edit-style.css
@@ -175,6 +175,28 @@ tr:focus {
outline: none;
}
+tr.avatarEntity {
+ color: #7fdb98;
+}
+
+tr.selAvatarEntity {
+ color: #000000;
+ background-color: #7fdb98;
+}
+
+tr.selAvatarEntity + tr.selAvatarEntity {
+ border-top: 1px solid #2e2e2e;
+}
+
+tr.lastSelAvatarEntity {
+ color: #000000;
+ background-color: #06c73a;
+}
+
+tr.lastSelAvatarEntity + tr.lastSelAvatarEntity {
+ border-top: 1px solid #2e2e2e;
+}
+
tr.selected {
color: #000000;
background-color: #00b4ef;
diff --git a/scripts/system/onFirstRun.js b/scripts/system/onFirstRun.js
deleted file mode 100644
index e7052c0e3a..0000000000
--- a/scripts/system/onFirstRun.js
+++ /dev/null
@@ -1,35 +0,0 @@
-'use strict';
-
-//
-// onFirstRun.js
-//
-// Created by Kalila L. on Oct 5 2020.
-// Copyright 2020 Vircadia contributors.
-//
-// This script triggers on first run to perform bootstrapping actions.
-//
-// Distributed under the Apache License, Version 2.0.
-// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
-//
-
-(function() { // BEGIN LOCAL_SCOPE
- // Check to see if we should run this script or bail...
- var SETTING_TO_CHECK = 'firstRun';
- var DEFAULT_DISPLAY_NAME = '';
-
- if (!Settings.getValue(SETTING_TO_CHECK, false)) {
- return;
- }
-
- // If this is our first run, then proceed...
-
- if (MyAvatar.displayName === '') {
- var selectedDisplayName = Window.prompt('Enter a display name.', MyAvatar.displayName);
-
- if (selectedDisplayName === '') {
- MyAvatar.displayName = DEFAULT_DISPLAY_NAME;
- } else {
- MyAvatar.displayName = selectedDisplayName;
- }
- }
-}());