From b50e20c5457151368b7ead81bf44ce678de9dbe2 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 8 Feb 2017 00:01:48 +0000 Subject: [PATCH 001/247] general function to load QML for javascript for tablet --- libraries/script-engine/src/TabletScriptingInterface.cpp | 8 ++++++++ libraries/script-engine/src/TabletScriptingInterface.h | 4 +++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 2414ec469f..e7f8ebe2cb 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -212,6 +212,14 @@ void TabletProxy::gotoMenuScreen() { } } +void TabletProxy::loadQMLSource(const QVariant& path) { + if (_qmlTabletRoot) { + if (_state != State::QML) { + QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, path)); + _state = State::QML; + } + } +} void TabletProxy::gotoHomeScreen() { if (_qmlTabletRoot) { if (_state != State::Home) { diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index 4fe2c44c10..a005152fa9 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -89,6 +89,8 @@ public: Q_INVOKABLE void gotoWebScreen(const QString& url); Q_INVOKABLE void gotoWebScreen(const QString& url, const QString& injectedJavaScriptUrl); + Q_INVOKABLE void loadQMLSource(const QVariant& path); + /**jsdoc * Creates a new button, adds it to this and returns it. * @function TabletProxy#addButton @@ -149,7 +151,7 @@ protected: QQuickItem* _qmlTabletRoot { nullptr }; QObject* _qmlOffscreenSurface { nullptr }; - enum class State { Uninitialized, Home, Web, Menu }; + enum class State { Uninitialized, Home, Web, Menu, QML }; State _state { State::Uninitialized }; }; From 4c3a6842a53c0107ae0626bdae3b5877f669aeef Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 9 Feb 2017 14:03:01 -0800 Subject: [PATCH 002/247] start on moving edit.js to tablet --- .../resources/html/createGlobalEventBridge.js | 4 +++ .../qml/controls-uit/BaseWebView.qml | 2 +- .../qml/hifi/tablet/TabletMouseHandler.qml | 8 ++---- interface/src/ui/overlays/Web3DOverlay.cpp | 17 ++++++++++++ interface/src/ui/overlays/Web3DOverlay.h | 2 ++ .../src/TabletScriptingInterface.cpp | 12 ++++++++- .../src/TabletScriptingInterface.h | 2 ++ scripts/system/edit.js | 27 +++++++++++-------- scripts/system/html/js/entityProperties.js | 1 + 9 files changed, 56 insertions(+), 19 deletions(-) diff --git a/interface/resources/html/createGlobalEventBridge.js b/interface/resources/html/createGlobalEventBridge.js index 027d6fe8db..1dd232ae0a 100644 --- a/interface/resources/html/createGlobalEventBridge.js +++ b/interface/resources/html/createGlobalEventBridge.js @@ -27,6 +27,10 @@ var EventBridge; }; }; + console.log("---"); + console.log("CREATING GLOBAL EVENT BRIDGE"); + console.log("---"); + EventBridge = new TempEventBridge(); var webChannel = new QWebChannel(qt.webChannelTransport, function (channel) { diff --git a/interface/resources/qml/controls-uit/BaseWebView.qml b/interface/resources/qml/controls-uit/BaseWebView.qml index 763e6530fb..9c22a8ff8c 100644 --- a/interface/resources/qml/controls-uit/BaseWebView.qml +++ b/interface/resources/qml/controls-uit/BaseWebView.qml @@ -15,7 +15,7 @@ import HFWebEngineProfile 1.0 WebEngineView { id: root - profile: desktop.browserProfile + // profile: desktop.browserProfile Component.onCompleted: { console.log("Connecting JS messaging to Hifi Logging") diff --git a/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml b/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml index 17a00eccde..f2fa5f8d75 100644 --- a/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml +++ b/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml @@ -84,14 +84,10 @@ Item { topMenu.focus = true; topMenu.forceActiveFocus(); // show current menu level on nav bar - if (topMenu.objectName === "") { + if (topMenu.objectName === "" || menuStack.length === 1) { breadcrumbText.text = "Menu"; } else { - if (menuStack.length === 1) { - breadcrumbText.text = "Menu"; - } else { - breadcrumbText.text = topMenu.objectName; - } + breadcrumbText.text = topMenu.objectName; } } else { breadcrumbText.text = "Menu"; diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index f33ef24c0d..9fc53f85e8 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -133,12 +133,29 @@ QString Web3DOverlay::pickURL() { void Web3DOverlay::loadSourceURL() { + // if (_javaScriptToInject == "") { + // QString javaScriptToInject; + // QFile webChannelFile(":qtwebchannel/qwebchannel.js"); + // QFile createGlobalEventBridgeFile(PathUtils::resourcesPath() + "/html/createGlobalEventBridge.js"); + // if (webChannelFile.open(QFile::ReadOnly | QFile::Text) && + // createGlobalEventBridgeFile.open(QFile::ReadOnly | QFile::Text)) { + // QString webChannelStr = QTextStream(&webChannelFile).readAll(); + // QString createGlobalEventBridgeStr = QTextStream(&createGlobalEventBridgeFile).readAll(); + // // concatenate these js files + // _javaScriptToInject = webChannelStr + createGlobalEventBridgeStr; + // } + // } + QUrl sourceUrl(_url); if (sourceUrl.scheme() == "http" || sourceUrl.scheme() == "https" || _url.toLower().endsWith(".htm") || _url.toLower().endsWith(".html")) { _webSurface->setBaseUrl(QUrl::fromLocalFile(PathUtils::resourcesPath() + "/qml/")); _webSurface->load("Web3DOverlay.qml"); + // _webSurface->load("Web3DOverlay.qml", [&](QQmlContext* context, QObject* obj) { + // qDebug() << "Web3DOverlay::loadSourceURL -- " << _javaScriptToInject; + // context->setContextProperty("eventBridgeJavaScriptToInject", QVariant(_javaScriptToInject)); + // }); _webSurface->resume(); _webSurface->getRootItem()->setProperty("url", _url); _webSurface->getRootItem()->setProperty("scriptURL", _scriptURL); diff --git a/interface/src/ui/overlays/Web3DOverlay.h b/interface/src/ui/overlays/Web3DOverlay.h index 2b9686919d..2dea70cfd6 100644 --- a/interface/src/ui/overlays/Web3DOverlay.h +++ b/interface/src/ui/overlays/Web3DOverlay.h @@ -82,6 +82,8 @@ private: QMetaObject::Connection _emitScriptEventConnection; QMetaObject::Connection _webEventReceivedConnection; + + // QString _javaScriptToInject; }; #endif // hifi_Web3DOverlay_h diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index e7f8ebe2cb..3db4d7d840 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -215,6 +215,7 @@ void TabletProxy::gotoMenuScreen() { void TabletProxy::loadQMLSource(const QVariant& path) { if (_qmlTabletRoot) { if (_state != State::QML) { + // _qmlTabletRoot->setProperty("eventBridge", QVariant::fromValue(_qmlOffscreenSurface)); QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, path)); _state = State::QML; } @@ -370,7 +371,7 @@ QQuickItem* TabletProxy::getQmlTablet() const { } QQuickItem* TabletProxy::getQmlMenu() const { - if (!_qmlTabletRoot) { + if (!_qmlTabletRoot) { return nullptr; } @@ -391,6 +392,15 @@ QQuickItem* TabletProxy::getQmlMenu() const { return menuList; } +QQuickItem* TabletProxy::findChild(QString childName) const { + if (!_qmlTabletRoot) { + return nullptr; + } + + return _qmlTabletRoot->findChild<QQuickItem*>(childName); +} + + // // TabletButtonProxy // diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index a005152fa9..f5032dbff6 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -130,6 +130,8 @@ public: QQuickItem* getQmlMenu() const; + Q_INVOKABLE QQuickItem* findChild(QString childName) const; + signals: /**jsdoc * Signaled when this tablet receives an event from the html/js embedded in the tablet diff --git a/scripts/system/edit.js b/scripts/system/edit.js index f8cce6a544..9fa6d89bcc 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -457,7 +457,7 @@ var toolBar = (function () { that.toggle = function () { that.setActive(!isActive); - activeButton.editProperties({isActive: isActive}); + // activeButton.editProperties({isActive: isActive}); }; that.setActive = function (active) { @@ -1436,11 +1436,12 @@ var ServerScriptStatusMonitor = function(entityID, statusCallback) { var PropertiesTool = function (opts) { var that = {}; - var webView = new OverlayWebWindow({ - title: 'Entity Properties', - source: ENTITY_PROPERTIES_URL, - toolWindow: true - }); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + // var webView = new OverlayWebWindow({ + // title: 'Entity Properties', + // source: ENTITY_PROPERTIES_URL, + // toolWindow: true + // }); var visible = false; @@ -1449,16 +1450,20 @@ var PropertiesTool = function (opts) { var currentSelectedEntityID = null; var statusMonitor = null; - webView.setVisible(visible); + // webView.setVisible(visible); that.setVisible = function (newVisible) { + print("PropertiesTool.setVisible --> " + newVisible); visible = newVisible; - webView.setVisible(visible); + // webView.setVisible(visible); + if (visible) { + tablet.loadQMLSource("Edit.qml"); + } }; function updateScriptStatus(info) { info.type = "server_script_status"; - webView.emitScriptEvent(JSON.stringify(info)); + tablet.emitScriptEvent(JSON.stringify(info)); }; function resetScriptStatus() { @@ -1510,10 +1515,10 @@ var PropertiesTool = function (opts) { selections.push(entity); } data.selections = selections; - webView.emitScriptEvent(JSON.stringify(data)); + tablet.emitScriptEvent(JSON.stringify(data)); }); - webView.webEventReceived.connect(function (data) { + tablet.webEventReceived.connect(function (data) { try { data = JSON.parse(data); } diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index 6b3bdaa0a4..63e964c218 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -710,6 +710,7 @@ function loaded() { if (window.EventBridge !== undefined) { var properties; + console.log("HERE -- " + (typeof EventBridge) + " -- " + JSON.stringify(EventBridge)); EventBridge.scriptEventReceived.connect(function(data) { data = JSON.parse(data); if (data.type == "server_script_status") { From e12c77e5766069ecbaa5ceb4b823542b48a58d4a Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 9 Feb 2017 14:43:44 -0800 Subject: [PATCH 003/247] move the edit tabs into tablet --- interface/resources/qml/hifi/tablet/Edit.qml | 58 ++++++++++++++++++++ scripts/system/edit.js | 8 +-- scripts/system/libraries/entityList.js | 22 ++++---- scripts/system/libraries/gridTool.js | 13 +++-- 4 files changed, 81 insertions(+), 20 deletions(-) create mode 100644 interface/resources/qml/hifi/tablet/Edit.qml diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml new file mode 100644 index 0000000000..cdefefd49e --- /dev/null +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -0,0 +1,58 @@ +import QtQuick 2.5 +import QtQuick.Controls 1.0 +import QtWebEngine 1.1 +import QtWebChannel 1.0 +import "../../controls" +import HFWebEngineProfile 1.0 + +Item { + id: editRoot + property var eventBridge; + + TabView { + id: editTabView + anchors.fill: parent + + Tab { + active: true + enabled: true + property string originalUrl: "" + + WebView { + id: entityListToolWebView + url: "../../../../../scripts/system/html/entityList.html" + eventBridge: editRoot.eventBridge + anchors.fill: parent + enabled: true + } + } + + Tab { + active: true + enabled: true + property string originalUrl: "" + + WebView { + id: entityPropertiesWebView + url: "../../../../../scripts/system/html/entityProperties.html" + eventBridge: editRoot.eventBridge + anchors.fill: parent + enabled: true + } + } + + Tab { + active: true + enabled: true + property string originalUrl: "" + + WebView { + id: entityPropertiesWebView + url: "../../../../../scripts/system/html/gridControls.html" + eventBridge: editRoot.eventBridge + anchors.fill: parent + enabled: true + } + } + } +} diff --git a/scripts/system/edit.js b/scripts/system/edit.js index aedc0f81fe..efd1e0bf3b 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -482,6 +482,8 @@ var toolBar = (function () { cameraManager.disable(); selectionDisplay.triggerMapping.disable(); } else { + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet.loadQMLSource("Edit.qml"); UserActivityLogger.enabledEdit(); entityListTool.setVisible(true); gridTool.setVisible(true); @@ -1453,12 +1455,8 @@ var PropertiesTool = function (opts) { // webView.setVisible(visible); that.setVisible = function (newVisible) { - print("PropertiesTool.setVisible --> " + newVisible); visible = newVisible; // webView.setVisible(visible); - if (visible) { - webView.loadQMLSource("Edit.qml"); - } }; function updateScriptStatus(info) { @@ -1521,7 +1519,7 @@ var PropertiesTool = function (opts) { webView.webEventReceived.connect(function (data) { try { data = JSON.parse(data); - print("--- edit.js webView.webEventReceived ---"); + print("--- edit.js PropertiesTool webView.webEventReceived ---"); } catch(e) { print('Edit.js received web event that was not valid json.') diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index 6dc2486ffb..ff3aa41662 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -4,9 +4,10 @@ EntityListTool = function(opts) { var that = {}; var url = ENTITY_LIST_HTML_URL; - var webView = new OverlayWebWindow({ - title: 'Entity List', source: url, toolWindow: true - }); + var webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + // var webView = new OverlayWebWindow({ + // title: 'Entity List', source: url, toolWindow: true + // }); var filterInView = false; @@ -14,13 +15,13 @@ EntityListTool = function(opts) { var visible = false; - webView.setVisible(visible); + // webView.setVisible(visible); that.webView = webView; that.setVisible = function(newVisible) { visible = newVisible; - webView.setVisible(visible); + // webView.setVisible(visible); }; that.toggleVisible = function() { @@ -100,6 +101,7 @@ EntityListTool = function(opts) { webView.webEventReceived.connect(function(data) { data = JSON.parse(data); + print("--- edit.js EntityList webView.webEventReceived ---"); if (data.type == "selectionUpdate") { var ids = data.entityIds; var entityIDs = []; @@ -149,11 +151,11 @@ EntityListTool = function(opts) { } }); - webView.visibleChanged.connect(function () { - if (webView.visible) { - that.sendUpdate(); - } - }); + // webView.visibleChanged.connect(function () { + // if (webView.visible) { + // that.sendUpdate(); + // } + // }); return that; }; diff --git a/scripts/system/libraries/gridTool.js b/scripts/system/libraries/gridTool.js index c002aec3b1..0b040246f7 100644 --- a/scripts/system/libraries/gridTool.js +++ b/scripts/system/libraries/gridTool.js @@ -228,10 +228,12 @@ GridTool = function(opts) { var verticalGrid = opts.verticalGrid; var listeners = []; - var url = GRID_CONTROLS_HTML_URL; - var webView = new OverlayWebWindow({ - title: 'Grid', source: url, toolWindow: true - }); + var webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + // var url = GRID_CONTROLS_HTML_URL; + // var webView = new OverlayWebWindow({ + // title: 'Grid', source: url, toolWindow: true + // }); + horizontalGrid.addListener(function(data) { webView.emitScriptEvent(JSON.stringify(data)); @@ -240,6 +242,7 @@ GridTool = function(opts) { webView.webEventReceived.connect(function(data) { data = JSON.parse(data); + print("--- edit.js GridTool webView.webEventReceived ---"); if (data.type == "init") { horizontalGrid.emitUpdate(); } else if (data.type == "update") { @@ -268,7 +271,7 @@ GridTool = function(opts) { } that.setVisible = function(visible) { - webView.setVisible(visible); + // webView.setVisible(visible); } return that; From 24fc9bbe6703c1f3f96d0fbb4f20cbb7401fa303 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 9 Feb 2017 15:12:01 -0800 Subject: [PATCH 004/247] honor HUDUIEnabled setting --- scripts/system/edit.js | 37 +++++++++++++++++--------- scripts/system/libraries/entityList.js | 21 ++++++++------- scripts/system/libraries/gridTool.js | 19 +++++++------ 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index efd1e0bf3b..c91e97cf56 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -256,6 +256,11 @@ var toolBar = (function () { text: "EDIT", sortOrder: 10 }); + tablet.screenChanged.connect(function (type, url) { + if (isActive && (type !== "QML" || url !== "Edit.qml")) { + that.toggle(); + } + }); } activeButton.clicked.connect(function() { @@ -457,7 +462,9 @@ var toolBar = (function () { that.toggle = function () { that.setActive(!isActive); - // activeButton.editProperties({isActive: isActive}); + if (Settings.getValue("HUDUIEnabled")) { + activeButton.editProperties({isActive: isActive}); + } }; that.setActive = function (active) { @@ -482,8 +489,10 @@ var toolBar = (function () { cameraManager.disable(); selectionDisplay.triggerMapping.disable(); } else { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - tablet.loadQMLSource("Edit.qml"); + if (!Settings.getValue("HUDUIEnabled")) { + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet.loadQMLSource("Edit.qml"); + } UserActivityLogger.enabledEdit(); entityListTool.setVisible(true); gridTool.setVisible(true); @@ -1438,12 +1447,17 @@ var ServerScriptStatusMonitor = function(entityID, statusCallback) { var PropertiesTool = function (opts) { var that = {}; - var webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - // var webView = new OverlayWebWindow({ - // title: 'Entity Properties', - // source: ENTITY_PROPERTIES_URL, - // toolWindow: true - // }); + var webView = null; + if (Settings.getValue("HUDUIEnabled")) { + webView = new OverlayWebWindow({ + title: 'Entity Properties', + source: ENTITY_PROPERTIES_URL, + toolWindow: true + }); + } else { + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView.setVisible = function(value) {}; + } var visible = false; @@ -1452,11 +1466,11 @@ var PropertiesTool = function (opts) { var currentSelectedEntityID = null; var statusMonitor = null; - // webView.setVisible(visible); + webView.setVisible(visible); that.setVisible = function (newVisible) { visible = newVisible; - // webView.setVisible(visible); + webView.setVisible(visible); }; function updateScriptStatus(info) { @@ -1519,7 +1533,6 @@ var PropertiesTool = function (opts) { webView.webEventReceived.connect(function (data) { try { data = JSON.parse(data); - print("--- edit.js PropertiesTool webView.webEventReceived ---"); } catch(e) { print('Edit.js received web event that was not valid json.') diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index ff3aa41662..8ef028cdce 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -3,25 +3,29 @@ var ENTITY_LIST_HTML_URL = Script.resolvePath('../html/entityList.html'); EntityListTool = function(opts) { var that = {}; - var url = ENTITY_LIST_HTML_URL; - var webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - // var webView = new OverlayWebWindow({ - // title: 'Entity List', source: url, toolWindow: true - // }); - + var webView = null; + if (Settings.getValue("HUDUIEnabled")) { + var url = ENTITY_LIST_HTML_URL; + webView = new OverlayWebWindow({ + title: 'Entity List', source: url, toolWindow: true + }); + } else { + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView.setVisible = function(value) {}; + } var filterInView = false; var searchRadius = 100; var visible = false; - // webView.setVisible(visible); + webView.setVisible(visible); that.webView = webView; that.setVisible = function(newVisible) { visible = newVisible; - // webView.setVisible(visible); + webView.setVisible(visible); }; that.toggleVisible = function() { @@ -101,7 +105,6 @@ EntityListTool = function(opts) { webView.webEventReceived.connect(function(data) { data = JSON.parse(data); - print("--- edit.js EntityList webView.webEventReceived ---"); if (data.type == "selectionUpdate") { var ids = data.entityIds; var entityIDs = []; diff --git a/scripts/system/libraries/gridTool.js b/scripts/system/libraries/gridTool.js index 0b040246f7..7176fd00a6 100644 --- a/scripts/system/libraries/gridTool.js +++ b/scripts/system/libraries/gridTool.js @@ -228,12 +228,16 @@ GridTool = function(opts) { var verticalGrid = opts.verticalGrid; var listeners = []; - var webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - // var url = GRID_CONTROLS_HTML_URL; - // var webView = new OverlayWebWindow({ - // title: 'Grid', source: url, toolWindow: true - // }); - + var webView = null; + if (Settings.getValue("HUDUIEnabled")) { + var url = GRID_CONTROLS_HTML_URL; + webView = new OverlayWebWindow({ + title: 'Grid', source: url, toolWindow: true + }); + } else { + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView.setVisible = function(value) {}; + } horizontalGrid.addListener(function(data) { webView.emitScriptEvent(JSON.stringify(data)); @@ -242,7 +246,6 @@ GridTool = function(opts) { webView.webEventReceived.connect(function(data) { data = JSON.parse(data); - print("--- edit.js GridTool webView.webEventReceived ---"); if (data.type == "init") { horizontalGrid.emitUpdate(); } else if (data.type == "update") { @@ -271,7 +274,7 @@ GridTool = function(opts) { } that.setVisible = function(visible) { - // webView.setVisible(visible); + webView.setVisible(visible); } return that; From d0d13cdde1ac0357d96d09ef5b823ebd3043e16a Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 9 Feb 2017 15:52:15 -0800 Subject: [PATCH 005/247] fix tab titles --- interface/resources/qml/hifi/tablet/Edit.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index cdefefd49e..e95e0f2fc0 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -14,6 +14,7 @@ Item { anchors.fill: parent Tab { + title: "Entity List" active: true enabled: true property string originalUrl: "" @@ -28,6 +29,7 @@ Item { } Tab { + title: "Entity Properties" active: true enabled: true property string originalUrl: "" @@ -42,6 +44,7 @@ Item { } Tab { + title: "Grid" active: true enabled: true property string originalUrl: "" From 7a63b07462f7efa9ffaa1c5cf48cc8c1c4a79277 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Thu, 9 Feb 2017 17:14:10 -0800 Subject: [PATCH 006/247] attempting to handle new-model dialog --- .../qml/hifi/tablet/NewModelDialog.qml | 118 ++++++++++++++++++ scripts/system/edit.js | 80 ++++++------ 2 files changed, 162 insertions(+), 36 deletions(-) create mode 100644 interface/resources/qml/hifi/tablet/NewModelDialog.qml diff --git a/interface/resources/qml/hifi/tablet/NewModelDialog.qml b/interface/resources/qml/hifi/tablet/NewModelDialog.qml new file mode 100644 index 0000000000..f2aaf0f3a5 --- /dev/null +++ b/interface/resources/qml/hifi/tablet/NewModelDialog.qml @@ -0,0 +1,118 @@ +import QtQuick 2.5 +import QtQuick.Window 2.2 +import QtQuick.Controls 1.5 + +Item { + id: newModelDialog + property var eventBridge; + + Column { + id: column1 + anchors.rightMargin: 10 + anchors.leftMargin: 10 + anchors.bottomMargin: 10 + anchors.topMargin: 10 + anchors.fill: parent + spacing: 5 + + Text { + id: text1 + text: qsTr("Model URL") + font.pixelSize: 12 + } + + TextInput { + id: textInput1 + height: 20 + text: qsTr("") + anchors.left: parent.left + anchors.leftMargin: 0 + anchors.right: parent.right + anchors.rightMargin: 0 + font.pixelSize: 12 + } + + Row { + id: row1 + height: 400 + spacing: 30 + anchors.left: parent.left + anchors.leftMargin: 0 + anchors.right: parent.right + anchors.rightMargin: 0 + + Column { + id: column2 + width: 200 + height: 400 + + CheckBox { + id: checkBox1 + text: qsTr("Dynamic") + } + + Row { + id: row2 + width: 200 + height: 400 + spacing: 20 + + Image { + id: image1 + width: 30 + height: 30 + source: "qrc:/qtquickplugin/images/template_image.png" + } + + Text { + id: text2 + width: 160 + text: qsTr("Models with automatic collisions set to 'Exact' cannot be dynamic") + wrapMode: Text.WordWrap + font.pixelSize: 12 + } + } + } + + Column { + id: column3 + height: 400 + + Text { + id: text3 + text: qsTr("Automatic Collisions") + font.pixelSize: 12 + } + + ComboBox { + id: comboBox1 + width: 200 + transformOrigin: Item.Center + model: ListModel { + id: collisionDropdown + ListElement { text: "No Collision" } + ListElement { text: "Basic - Whole model" } + ListElement { text: "Good - Sub-meshes" } + ListElement { text: "Exact - All polygons" } + } + } + + Row { + id: row3 + width: 200 + height: 400 + + Button { + id: button1 + text: qsTr("Add") + } + + Button { + id: button2 + text: qsTr("Cancel") + } + } + } + } + } +} diff --git a/scripts/system/edit.js b/scripts/system/edit.js index c91e97cf56..9df6a30322 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -287,30 +287,33 @@ var toolBar = (function () { var SHAPE_TYPE_DEFAULT = SHAPE_TYPE_STATIC_MESH; var DYNAMIC_DEFAULT = false; - var result = Window.customPrompt({ - textInput: { - label: "Model URL" - }, - comboBox: { - label: "Automatic Collisions", - index: SHAPE_TYPE_DEFAULT, - items: SHAPE_TYPES - }, - checkBox: { - label: "Dynamic", - checked: DYNAMIC_DEFAULT, - disableForItems: [ - SHAPE_TYPE_STATIC_MESH - ], - checkStateOnDisable: false, - warningOnDisable: "Models with automatic collisions set to 'Exact' cannot be dynamic" - } - }); - if (result) { - var url = result.textInput; - var shapeType; - switch (result.comboBox) { + if (Settings.getValue("HUDUIEnabled")) { + // HUD-ui version of new-model dialog + var result = Window.customPrompt({ + textInput: { + label: "Model URL" + }, + comboBox: { + label: "Automatic Collisions", + index: SHAPE_TYPE_DEFAULT, + items: SHAPE_TYPES + }, + checkBox: { + label: "Dynamic", + checked: DYNAMIC_DEFAULT, + disableForItems: [ + SHAPE_TYPE_STATIC_MESH + ], + checkStateOnDisable: false, + warningOnDisable: "Models with automatic collisions set to 'Exact' cannot be dynamic" + } + }); + + if (result) { + var url = result.textInput; + var shapeType; + switch (result.comboBox) { case SHAPE_TYPE_SIMPLE_HULL: shapeType = "simple-hull"; break; @@ -322,21 +325,26 @@ var toolBar = (function () { break; default: shapeType = "none"; - } + } - var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; - if (shapeType === "static-mesh" && dynamic) { - // The prompt should prevent this case - print("Error: model cannot be both static mesh and dynamic. This should never happen."); - } else if (url) { - createNewEntity({ - type: "Model", - modelURL: url, - shapeType: shapeType, - dynamic: dynamic, - gravity: dynamic ? { x: 0, y: -10, z: 0 } : { x: 0, y: 0, z: 0 } - }); + var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; + if (shapeType === "static-mesh" && dynamic) { + // The prompt should prevent this case + print("Error: model cannot be both static mesh and dynamic. This should never happen."); + } else if (url) { + createNewEntity({ + type: "Model", + modelURL: url, + shapeType: shapeType, + dynamic: dynamic, + gravity: dynamic ? { x: 0, y: -10, z: 0 } : { x: 0, y: 0, z: 0 } + }); + } } + } else { + // tablet version of new-model dialog + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet.loadQMLSource("NewModelDialog.qml"); } }); From 3171ce160269b5312969952e547e024c02d1f81f Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Fri, 10 Feb 2017 12:03:26 -0800 Subject: [PATCH 007/247] hook up more of new-model dialog --- interface/resources/qml/hifi/tablet/Edit.qml | 87 +++++++++++-------- .../qml/hifi/tablet/NewModelDialog.qml | 28 +++++- .../src/TabletScriptingInterface.cpp | 29 +++++++ .../src/TabletScriptingInterface.h | 2 + scripts/system/edit.js | 14 ++- 5 files changed, 120 insertions(+), 40 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index cdefefd49e..fe13397c99 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -5,53 +5,70 @@ import QtWebChannel 1.0 import "../../controls" import HFWebEngineProfile 1.0 -Item { +StackView { id: editRoot + objectName: "stack" + initialItem: editBasePage + property var eventBridge; + signal sendToScript(var message); - TabView { - id: editTabView - anchors.fill: parent + function pushSource(path) { + editRoot.push(Qt.resolvedUrl(path)); + editRoot.currentItem.eventBridge = editRoot.eventBridge; + editRoot.currentItem.sendToScript.connect(editRoot.sendToScript); + } - Tab { - active: true - enabled: true - property string originalUrl: "" + function popSource() { + editRoot.pop(); + } - WebView { - id: entityListToolWebView - url: "../../../../../scripts/system/html/entityList.html" - eventBridge: editRoot.eventBridge - anchors.fill: parent + Component { + id: editBasePage + TabView { + id: editTabView + anchors.fill: parent + + Tab { + active: true enabled: true + property string originalUrl: "" + + WebView { + id: entityListToolWebView + url: "../../../../../scripts/system/html/entityList.html" + eventBridge: editRoot.eventBridge + anchors.fill: parent + enabled: true + } } - } - Tab { - active: true - enabled: true - property string originalUrl: "" - - WebView { - id: entityPropertiesWebView - url: "../../../../../scripts/system/html/entityProperties.html" - eventBridge: editRoot.eventBridge - anchors.fill: parent + Tab { + active: true enabled: true + property string originalUrl: "" + + WebView { + id: entityPropertiesWebView + url: "../../../../../scripts/system/html/entityProperties.html" + eventBridge: editRoot.eventBridge + anchors.fill: parent + enabled: true + } } - } - Tab { - active: true - enabled: true - property string originalUrl: "" - - WebView { - id: entityPropertiesWebView - url: "../../../../../scripts/system/html/gridControls.html" - eventBridge: editRoot.eventBridge - anchors.fill: parent + Tab { + active: true enabled: true + property string originalUrl: "" + + WebView { + id: entityPropertiesWebView + url: "../../../../../scripts/system/html/gridControls.html" + eventBridge: editRoot.eventBridge + anchors.fill: parent + enabled: true + } } } } diff --git a/interface/resources/qml/hifi/tablet/NewModelDialog.qml b/interface/resources/qml/hifi/tablet/NewModelDialog.qml index f2aaf0f3a5..15d7fc3616 100644 --- a/interface/resources/qml/hifi/tablet/NewModelDialog.qml +++ b/interface/resources/qml/hifi/tablet/NewModelDialog.qml @@ -1,10 +1,24 @@ -import QtQuick 2.5 -import QtQuick.Window 2.2 -import QtQuick.Controls 1.5 +// +// NewModelDialog.qml +// qml/hifi +// +// Created by Seth Alves on 2017-2-10 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// -Item { +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +Rectangle { id: newModelDialog + width: parent.width + height: parent.height + property var eventBridge; + signal sendToScript(var message); Column { id: column1 @@ -105,11 +119,17 @@ Item { Button { id: button1 text: qsTr("Add") + onClicked: { + newModelDialog.sendToScript({method: 'newModelDialogAdd'}) + } } Button { id: button2 text: qsTr("Cancel") + onClicked: { + newModelDialog.sendToScript({method: 'newModelDialogCancel'}) + } } } } diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 2e64be750f..fe68f350d2 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -234,8 +234,37 @@ void TabletProxy::loadQMLSource(const QVariant& path) { _state = State::QML; emit screenChanged(QVariant("QML"), path); } + } else { + qCDebug(scriptengine) << "tablet cannot load QML because _qmlTabletRoot is null"; } } + +void TabletProxy::pushOntoStack(const QVariant& path) { + if (_qmlTabletRoot) { + auto stack = _qmlTabletRoot->findChild<QQuickItem*>("stack"); + if (stack) { + QMetaObject::invokeMethod(stack, "pushSource", Q_ARG(const QVariant&, path)); + } else { + qCDebug(scriptengine) << "tablet cannot push QML because _qmlTabletRoot doesn't have child stack"; + } + } else { + qCDebug(scriptengine) << "tablet cannot push QML because _qmlTabletRoot is null"; + } +} + +void TabletProxy::popFromStack() { + if (_qmlTabletRoot) { + auto stack = _qmlTabletRoot->findChild<QQuickItem*>("stack"); + if (stack) { + QMetaObject::invokeMethod(stack, "popSource"); + } else { + qCDebug(scriptengine) << "tablet cannot pop QML because _qmlTabletRoot doesn't have child stack"; + } + } else { + qCDebug(scriptengine) << "tablet cannot pop QML because _qmlTabletRoot is null"; + } +} + void TabletProxy::gotoHomeScreen() { if (_qmlTabletRoot) { if (_state != State::Home) { diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index 93f5bcf6ba..ff2213dfcc 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -90,6 +90,8 @@ public: Q_INVOKABLE void gotoWebScreen(const QString& url, const QString& injectedJavaScriptUrl); Q_INVOKABLE void loadQMLSource(const QVariant& path); + Q_INVOKABLE void pushOntoStack(const QVariant& path); + Q_INVOKABLE void popFromStack(); /**jsdoc * Creates a new button, adds it to this and returns it. diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 9df6a30322..95b75ff343 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -225,6 +225,16 @@ var toolBar = (function () { return button; } + function fromQml(message) { // messages are {method, params}, like json-rpc. See also sendToQml. + print("fromQml: " + JSON.stringify(message)); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet.popFromStack(); + // switch (message.method) { + // case 'selected': + // break; + // } + } + function initialize() { Script.scriptEnding.connect(cleanup); @@ -249,6 +259,7 @@ var toolBar = (function () { alpha: 0.9, defaultState: 1 }); + systemToolbar.fromQml.connect(fromQml); } else { tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); activeButton = tablet.addButton({ @@ -261,6 +272,7 @@ var toolBar = (function () { that.toggle(); } }); + tablet.fromQml.connect(fromQml); } activeButton.clicked.connect(function() { @@ -344,7 +356,7 @@ var toolBar = (function () { } else { // tablet version of new-model dialog var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - tablet.loadQMLSource("NewModelDialog.qml"); + tablet.pushOntoStack("NewModelDialog.qml"); } }); From 0b358a2ac7fbd22be36bb988e89bb94031daf284 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Fri, 10 Feb 2017 13:29:06 -0800 Subject: [PATCH 008/247] finish hooking up new-model dialog --- .../qml/hifi/tablet/NewModelDialog.qml | 21 ++- scripts/system/edit.js | 132 +++++++++--------- 2 files changed, 81 insertions(+), 72 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/NewModelDialog.qml b/interface/resources/qml/hifi/tablet/NewModelDialog.qml index 15d7fc3616..246e8d515d 100644 --- a/interface/resources/qml/hifi/tablet/NewModelDialog.qml +++ b/interface/resources/qml/hifi/tablet/NewModelDialog.qml @@ -14,8 +14,8 @@ import QtQuick.Controls 1.4 Rectangle { id: newModelDialog - width: parent.width - height: parent.height + // width: parent.width + // height: parent.height property var eventBridge; signal sendToScript(var message); @@ -36,7 +36,7 @@ Rectangle { } TextInput { - id: textInput1 + id: modelURL height: 20 text: qsTr("") anchors.left: parent.left @@ -59,9 +59,10 @@ Rectangle { id: column2 width: 200 height: 400 + spacing: 10 CheckBox { - id: checkBox1 + id: dynamic text: qsTr("Dynamic") } @@ -91,6 +92,7 @@ Rectangle { Column { id: column3 height: 400 + spacing: 10 Text { id: text3 @@ -99,7 +101,7 @@ Rectangle { } ComboBox { - id: comboBox1 + id: collisionType width: 200 transformOrigin: Item.Center model: ListModel { @@ -120,7 +122,14 @@ Rectangle { id: button1 text: qsTr("Add") onClicked: { - newModelDialog.sendToScript({method: 'newModelDialogAdd'}) + newModelDialog.sendToScript({ + method: 'newModelDialogAdd', + params: { + textInput: modelURL.text, + checkBox: dynamic.checked, + comboBox: collisionType.currentIndex + } + }); } } diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 95b75ff343..bc977b84eb 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -13,6 +13,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +/* global Script, SelectionDisplay, LightOverlayManager, CameraManager, Grid, GridTool, EntityListTook, EntityListTool, Vec3, SelectionManager, Overlays, OverlayWebWindow, UserActivityLogger, Settings, Entities, Tablet, Toolbars, Messages, Menu, Camera, progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, ParticleExplorerTool */ + (function() { // BEGIN LOCAL_SCOPE var HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; @@ -58,18 +60,13 @@ selectionManager.addEventListener(function () { var DEGREES_TO_RADIANS = Math.PI / 180.0; var RADIANS_TO_DEGREES = 180.0 / Math.PI; -var epsilon = 0.001; var MIN_ANGULAR_SIZE = 2; var MAX_ANGULAR_SIZE = 45; var allowLargeModels = true; var allowSmallModels = true; -var SPAWN_DISTANCE = 1; var DEFAULT_DIMENSION = 0.20; -var DEFAULT_TEXT_DIMENSION_X = 1.0; -var DEFAULT_TEXT_DIMENSION_Y = 1.0; -var DEFAULT_TEXT_DIMENSION_Z = 0.01; var DEFAULT_DIMENSIONS = { x: DEFAULT_DIMENSION, @@ -84,7 +81,6 @@ var MENU_EASE_ON_FOCUS = "Ease Orientation on Focus"; var MENU_SHOW_LIGHTS_IN_EDIT_MODE = "Show Lights in Edit Mode"; var MENU_SHOW_ZONES_IN_EDIT_MODE = "Show Zones in Edit Mode"; -var SETTING_INSPECT_TOOL_ENABLED = "inspectToolEnabled"; var SETTING_AUTO_FOCUS_ON_SELECT = "autoFocusOnSelect"; var SETTING_EASE_ON_FOCUS = "cameraEaseOnFocus"; var SETTING_SHOW_LIGHTS_IN_EDIT_MODE = "showLightsInEditMode"; @@ -156,13 +152,13 @@ function hideMarketplace() { marketplaceWindow.setURL("about:blank"); } -function toggleMarketplace() { - if (marketplaceWindow.visible) { - hideMarketplace(); - } else { - showMarketplace(); - } -} +// function toggleMarketplace() { +// if (marketplaceWindow.visible) { +// hideMarketplace(); +// } else { +// showMarketplace(); +// } +// } var TOOLS_PATH = Script.resolvePath("assets/images/tools/"); @@ -225,14 +221,55 @@ var toolBar = (function () { return button; } + var SHAPE_TYPE_NONE = 0; + var SHAPE_TYPE_SIMPLE_HULL = 1; + var SHAPE_TYPE_SIMPLE_COMPOUND = 2; + var SHAPE_TYPE_STATIC_MESH = 3; + var DYNAMIC_DEFAULT = false; + + function handleNewModelDialogResult(result) { + if (result) { + var url = result.textInput; + var shapeType; + switch (result.comboBox) { + case SHAPE_TYPE_SIMPLE_HULL: + shapeType = "simple-hull"; + break; + case SHAPE_TYPE_SIMPLE_COMPOUND: + shapeType = "simple-compound"; + break; + case SHAPE_TYPE_STATIC_MESH: + shapeType = "static-mesh"; + break; + default: + shapeType = "none"; + } + + var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; + if (shapeType === "static-mesh" && dynamic) { + // The prompt should prevent this case + print("Error: model cannot be both static mesh and dynamic. This should never happen."); + } else if (url) { + createNewEntity({ + type: "Model", + modelURL: url, + shapeType: shapeType, + dynamic: dynamic, + gravity: dynamic ? { x: 0, y: -10, z: 0 } : { x: 0, y: 0, z: 0 } + }); + } + } + } + function fromQml(message) { // messages are {method, params}, like json-rpc. See also sendToQml. print("fromQml: " + JSON.stringify(message)); var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); tablet.popFromStack(); - // switch (message.method) { - // case 'selected': - // break; - // } + switch (message.method) { + case "newModelDialogAdd": + handleNewModelDialogResult(message.params); + break; + } } function initialize() { @@ -283,22 +320,16 @@ var toolBar = (function () { toolBar.writeProperty("shown", false); addButton("openAssetBrowserButton","assets-01.svg",function(){ Window.showAssetServer(); - }) + }); addButton("newModelButton", "model-01.svg", function () { - var SHAPE_TYPE_NONE = 0; - var SHAPE_TYPE_SIMPLE_HULL = 1; - var SHAPE_TYPE_SIMPLE_COMPOUND = 2; - var SHAPE_TYPE_STATIC_MESH = 3; var SHAPE_TYPES = []; SHAPE_TYPES[SHAPE_TYPE_NONE] = "No Collision"; SHAPE_TYPES[SHAPE_TYPE_SIMPLE_HULL] = "Basic - Whole model"; SHAPE_TYPES[SHAPE_TYPE_SIMPLE_COMPOUND] = "Good - Sub-meshes"; SHAPE_TYPES[SHAPE_TYPE_STATIC_MESH] = "Exact - All polygons"; - var SHAPE_TYPE_DEFAULT = SHAPE_TYPE_STATIC_MESH; - var DYNAMIC_DEFAULT = false; if (Settings.getValue("HUDUIEnabled")) { // HUD-ui version of new-model dialog @@ -322,37 +353,7 @@ var toolBar = (function () { } }); - if (result) { - var url = result.textInput; - var shapeType; - switch (result.comboBox) { - case SHAPE_TYPE_SIMPLE_HULL: - shapeType = "simple-hull"; - break; - case SHAPE_TYPE_SIMPLE_COMPOUND: - shapeType = "simple-compound"; - break; - case SHAPE_TYPE_STATIC_MESH: - shapeType = "static-mesh"; - break; - default: - shapeType = "none"; - } - - var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; - if (shapeType === "static-mesh" && dynamic) { - // The prompt should prevent this case - print("Error: model cannot be both static mesh and dynamic. This should never happen."); - } else if (url) { - createNewEntity({ - type: "Model", - modelURL: url, - shapeType: shapeType, - dynamic: dynamic, - gravity: dynamic ? { x: 0, y: -10, z: 0 } : { x: 0, y: 0, z: 0 } - }); - } - } + handleNewModelDialogResult(result); } else { // tablet version of new-model dialog var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); @@ -661,7 +662,6 @@ var idleMouseTimerId = null; var CLICK_TIME_THRESHOLD = 500 * 1000; // 500 ms var CLICK_MOVE_DISTANCE_THRESHOLD = 20; var IDLE_MOUSE_TIMEOUT = 200; -var DEFAULT_ENTITY_DRAG_DROP_DISTANCE = 2.0; var lastMouseMoveEvent = null; @@ -1232,11 +1232,11 @@ function getPositionToCreateEntity() { var position = Vec3.sum(MyAvatar.position, Vec3.multiply(direction, distance)); if (Camera.mode === "entity" || Camera.mode === "independent") { - position = Vec3.sum(Camera.position, Vec3.multiply(Quat.getFront(Camera.orientation), distance)) + position = Vec3.sum(Camera.position, Vec3.multiply(Quat.getFront(Camera.orientation), distance)); } position.y += 0.5; if (position.x > HALF_TREE_SCALE || position.y > HALF_TREE_SCALE || position.z > HALF_TREE_SCALE) { - return null + return null; } return position; } @@ -1250,11 +1250,11 @@ function getPositionToImportEntity() { var position = Vec3.sum(MyAvatar.position, Vec3.multiply(direction, longest)); if (Camera.mode === "entity" || Camera.mode === "independent") { - position = Vec3.sum(Camera.position, Vec3.multiply(Quat.getFront(Camera.orientation), longest)) + position = Vec3.sum(Camera.position, Vec3.multiply(Quat.getFront(Camera.orientation), longest)); } if (position.x > HALF_TREE_SCALE || position.y > HALF_TREE_SCALE || position.z > HALF_TREE_SCALE) { - return null + return null; } return position; @@ -1455,11 +1455,11 @@ var ServerScriptStatusMonitor = function(entityID, statusCallback) { Entities.getServerScriptStatus(entityID, onStatusReceived); } }, 1000); - }; + } }; self.stop = function() { self.active = false; - } + }; Entities.getServerScriptStatus(entityID, onStatusReceived); }; @@ -1496,7 +1496,7 @@ var PropertiesTool = function (opts) { function updateScriptStatus(info) { info.type = "server_script_status"; webView.emitScriptEvent(JSON.stringify(info)); - }; + } function resetScriptStatus() { updateScriptStatus({ @@ -1555,7 +1555,7 @@ var PropertiesTool = function (opts) { data = JSON.parse(data); } catch(e) { - print('Edit.js received web event that was not valid json.') + print('Edit.js received web event that was not valid json.'); return; } var i, properties, dY, diff, newPosition; @@ -1576,12 +1576,12 @@ var PropertiesTool = function (opts) { } else { if (data.properties.dynamic === false) { // this object is leaving dynamic, so we zero its velocities - data.properties["velocity"] = { + data.properties.velocity = { x: 0, y: 0, z: 0 }; - data.properties["angularVelocity"] = { + data.properties.angularVelocity = { x: 0, y: 0, z: 0 From fead52f626e347564fc17eaed892b9996c492646 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Fri, 10 Feb 2017 15:18:01 -0800 Subject: [PATCH 009/247] put new-entity buttons in a tab of the edit app --- interface/resources/qml/hifi/tablet/Edit.qml | 120 +++++++++++++++++- .../qml/hifi/tablet/NewModelDialog.qml | 4 +- scripts/system/edit.js | 39 +++--- .../particle_explorer/particleExplorerTool.js | 25 ++-- 4 files changed, 160 insertions(+), 28 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 4300c80bd8..7cdf706497 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -31,11 +31,112 @@ StackView { anchors.fill: parent Tab { - title: "Entity List" + title: "Create Entities" active: true enabled: true property string originalUrl: "" + Flow { + id: createEntitiesFlow + spacing: 16 + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/assets-01.svg" + text: "ASSETS" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "openAssetBrowserButton" } + }); + } + } + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/model-01.svg" + text: "MODEL" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newModelButton" } + }); + } + } + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/cube-01.svg" + text: "CUBE" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newCubeButton" } + }); + } + } + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/sphere-01.svg" + text: "SPHERE" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newSphereButton" } + }); + } + } + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/light-01.svg" + text: "LIGHT" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newLightButton" } + }); + } + } + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/text-01.svg" + text: "TEXT" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newTextButton" } + }); + } + } + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/web-01.svg" + text: "WEB" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newWebButton" } + }); + } + } + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/zone-01.svg" + text: "ZONE" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newZoneButton" } + }); + } + } + + Button { + iconSource: "../../../../../scripts/system/assets/images/tools/particle-01.svg" + text: "PARTICLE" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newParticleButton" } + }); + } + } + } + } + + Tab { + title: "Entity List" + active: true + enabled: true + property string originalUrl: "" WebView { id: entityListToolWebView @@ -68,13 +169,28 @@ StackView { property string originalUrl: "" WebView { - id: entityPropertiesWebView + id: gridControlsWebView url: "../../../../../scripts/system/html/gridControls.html" eventBridge: editRoot.eventBridge anchors.fill: parent enabled: true } } + + Tab { + title: "Particle Explorer" + active: true + enabled: true + property string originalUrl: "" + + WebView { + id: particleExplorerWebView + url: "../../../../../scripts/system/particle_explorer/particleExplorer.html" + eventBridge: editRoot.eventBridge + anchors.fill: parent + enabled: true + } + } } } } diff --git a/interface/resources/qml/hifi/tablet/NewModelDialog.qml b/interface/resources/qml/hifi/tablet/NewModelDialog.qml index 246e8d515d..13c0d963ea 100644 --- a/interface/resources/qml/hifi/tablet/NewModelDialog.qml +++ b/interface/resources/qml/hifi/tablet/NewModelDialog.qml @@ -123,7 +123,7 @@ Rectangle { text: qsTr("Add") onClicked: { newModelDialog.sendToScript({ - method: 'newModelDialogAdd', + method: "newModelDialogAdd", params: { textInput: modelURL.text, checkBox: dynamic.checked, @@ -137,7 +137,7 @@ Rectangle { id: button2 text: qsTr("Cancel") onClicked: { - newModelDialog.sendToScript({method: 'newModelDialogCancel'}) + newModelDialog.sendToScript({method: "newModelDialogCancel"}) } } } diff --git a/scripts/system/edit.js b/scripts/system/edit.js index bc977b84eb..d3e2143316 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -201,24 +201,30 @@ var toolBar = (function () { } } + var buttonHandlers = {}; // only used to tablet mode + function addButton(name, image, handler) { - var imageUrl = TOOLS_PATH + image; - var button = toolBar.addButton({ - objectName: name, - imageURL: imageUrl, - imageOffOut: 1, - imageOffIn: 2, - imageOnOut: 0, - imageOnIn: 2, - alpha: 0.9, - visible: true - }); - if (handler) { - button.clicked.connect(function () { - Script.setTimeout(handler, 100); + if (Settings.getValue("HUDUIEnabled")) { + var imageUrl = TOOLS_PATH + image; + var button = toolBar.addButton({ + objectName: name, + imageURL: imageUrl, + imageOffOut: 1, + imageOffIn: 2, + imageOnOut: 0, + imageOnIn: 2, + alpha: 0.9, + visible: true }); + if (handler) { + button.clicked.connect(function () { + Script.setTimeout(handler, 100); + }); + } + return button; + } else { + buttonHandlers[name] = handler; } - return button; } var SHAPE_TYPE_NONE = 0; @@ -269,6 +275,9 @@ var toolBar = (function () { case "newModelDialogAdd": handleNewModelDialogResult(message.params); break; + case "newEntityButtonClicked": + buttonHandlers[message.params.buttonName](); + break; } } diff --git a/scripts/system/particle_explorer/particleExplorerTool.js b/scripts/system/particle_explorer/particleExplorerTool.js index 8a28445c33..e592161414 100644 --- a/scripts/system/particle_explorer/particleExplorerTool.js +++ b/scripts/system/particle_explorer/particleExplorerTool.js @@ -18,12 +18,17 @@ ParticleExplorerTool = function() { var that = {}; that.createWebView = function() { - var url = PARTICLE_EXPLORER_HTML_URL; - that.webView = new OverlayWebWindow({ - title: 'Particle Explorer', - source: url, - toolWindow: true - }); + if (Settings.getValue("HUDUIEnabled")) { + var url = PARTICLE_EXPLORER_HTML_URL; + that.webView = new OverlayWebWindow({ + title: 'Particle Explorer', + source: url, + toolWindow: true + }); + } else { + that.webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + that.webView.setVisible = function(value) {}; + } that.webView.setVisible(true); that.webView.webEventReceived.connect(that.webEventReceived); @@ -35,8 +40,10 @@ ParticleExplorerTool = function() { return; } - that.webView.close(); - that.webView = null; + if (Settings.getValue("HUDUIEnabled")) { + that.webView.close(); + that.webView = null; + } that.activeParticleEntity = 0; } @@ -55,4 +62,4 @@ ParticleExplorerTool = function() { return that; -}; \ No newline at end of file +}; From 44aa3e044bc017f533d49e8beeec03ed7cc727cb Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Fri, 10 Feb 2017 16:56:53 -0800 Subject: [PATCH 010/247] make it so near grabbing while edit is active doesn't select a new entity --- interface/resources/qml/hifi/tablet/Edit.qml | 29 ++- .../system/controllers/handControllerGrab.js | 13 +- .../system/libraries/entitySelectionTool.js | 191 ++++++++++-------- 3 files changed, 139 insertions(+), 94 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 7cdf706497..44959395fa 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -2,6 +2,7 @@ import QtQuick 2.5 import QtQuick.Controls 1.0 import QtWebEngine 1.1 import QtWebChannel 1.0 +import QtQuick.Controls.Styles 1.4 import "../../controls" import HFWebEngineProfile 1.0 @@ -28,10 +29,11 @@ StackView { id: editBasePage TabView { id: editTabView - anchors.fill: parent + // anchors.fill: parent + height: 60 Tab { - title: "Create Entities" + title: "Create" active: true enabled: true property string originalUrl: "" @@ -133,7 +135,7 @@ StackView { } Tab { - title: "Entity List" + title: "List" active: true enabled: true property string originalUrl: "" @@ -148,7 +150,7 @@ StackView { } Tab { - title: "Entity Properties" + title: "Properties" active: true enabled: true property string originalUrl: "" @@ -178,7 +180,7 @@ StackView { } Tab { - title: "Particle Explorer" + title: "Particles" active: true enabled: true property string originalUrl: "" @@ -191,6 +193,23 @@ StackView { enabled: true } } + + + style: TabViewStyle { + frameOverlap: 1 + tab: Rectangle { + color: styleData.selected ? "slategrey" :"grey" + implicitWidth: text.width + 25 + implicitHeight: 60 + radius: 2 + Text { + id: text + anchors.centerIn: parent + text: styleData.title + color: styleData.selected ? "white" : "white" + } + } + } } } } diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 527a9cfc2b..f61ea3013e 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -13,8 +13,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html /* global getEntityCustomData, flatten, Xform, Script, Quat, Vec3, MyAvatar, Entities, Overlays, Settings, - Reticle, Controller, Camera, Messages, Mat4, getControllerWorldLocation, getGrabPointSphereOffset, setGrabCommunications, - Menu, HMD */ + Reticle, Controller, Camera, Messages, Mat4, getControllerWorldLocation, getGrabPointSphereOffset, + setGrabCommunications, Menu, HMD, isInEditMode */ /* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function() { // BEGIN LOCAL_SCOPE @@ -1667,6 +1667,15 @@ function MyController(hand) { } if (rayPickInfo.entityID) { + if (this.triggerSmoothedGrab() && isInEditMode()) { + this.searchIndicatorOn(rayPickInfo.searchRay); + Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({ + method: "selectEntity", + entityID: rayPickInfo.entityID + })); + return; + } + entity = rayPickInfo.entityID; name = entityPropertiesCache.getProps(entity).name; if (this.entityWantsTrigger(entity)) { diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index b9bae72d14..4fd708a86e 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -11,6 +11,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +/* global HIFI_PUBLIC_BUCKET, SPACE_LOCAL, Script, SelectionManager */ + HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/"; SPACE_LOCAL = "local"; @@ -28,7 +30,7 @@ SelectionManager = (function() { var that = {}; function subscribeToUpdateMessages() { - Messages.subscribe('entityToolUpdates'); + Messages.subscribe("entityToolUpdates"); Messages.messageReceived.connect(handleEntitySelectionToolUpdates); } @@ -40,8 +42,20 @@ SelectionManager = (function() { return; } - if (message === 'callUpdate') { - that._update(); + var messageParsed; + try { + messageParsed = JSON.parse(message); + } catch (err) { + print("error -- entitySelectionTool got malformed message: " + message); + } + + // if (message === 'callUpdate') { + // that._update(); + // } + + if (messageParsed.method === "selectEntity") { + print("setting selection to " + messageParsed.entityID); + that.setSelections([messageParsed.entityID]); } } @@ -149,13 +163,14 @@ SelectionManager = (function() { }; that._update = function(selectionUpdated) { - if (that.selections.length == 0) { + var properties = null; + if (that.selections.length === 0) { that.localDimensions = null; that.localPosition = null; that.worldDimensions = null; that.worldPosition = null; } else if (that.selections.length == 1) { - var properties = Entities.getEntityProperties(that.selections[0]); + properties = Entities.getEntityProperties(that.selections[0]); that.localDimensions = properties.dimensions; that.localPosition = properties.position; that.localRotation = properties.rotation; @@ -170,7 +185,7 @@ SelectionManager = (function() { that.localDimensions = null; that.localPosition = null; - var properties = Entities.getEntityProperties(that.selections[0]); + properties = Entities.getEntityProperties(that.selections[0]); var brn = properties.boundingBox.brn; var tfl = properties.boundingBox.tfl; @@ -203,9 +218,9 @@ SelectionManager = (function() { SelectionDisplay.setSpaceMode(SPACE_WORLD); } - for (var i = 0; i < listeners.length; i++) { + for (var j = 0; j < listeners.length; j++) { try { - listeners[i](selectionUpdated === true); + listeners[j](selectionUpdated === true); } catch (e) { print("EntitySelectionTool got exception: " + JSON.stringify(e)); } @@ -229,8 +244,8 @@ function getRelativeCenterPosition(dimensions, registrationPoint) { return { x: -dimensions.x * (registrationPoint.x - 0.5), y: -dimensions.y * (registrationPoint.y - 0.5), - z: -dimensions.z * (registrationPoint.z - 0.5), - } + z: -dimensions.z * (registrationPoint.z - 0.5) + }; } SelectionDisplay = (function() { @@ -253,7 +268,7 @@ SelectionDisplay = (function() { var spaceMode = SPACE_LOCAL; var mode = "UNKNOWN"; - var overlayNames = new Array(); + var overlayNames = []; var lastCameraPosition = Camera.getPosition(); var lastCameraOrientation = Camera.getOrientation(); @@ -679,8 +694,7 @@ SelectionDisplay = (function() { green: 0, blue: 0 }, - ignoreRayIntersection: true, // always ignore this - visible: false, + ignoreRayIntersection: true // always ignore this }); var yRailOverlay = Overlays.addOverlay("line3d", { visible: false, @@ -700,8 +714,7 @@ SelectionDisplay = (function() { green: 255, blue: 0 }, - ignoreRayIntersection: true, // always ignore this - visible: false, + ignoreRayIntersection: true // always ignore this }); var zRailOverlay = Overlays.addOverlay("line3d", { visible: false, @@ -721,8 +734,7 @@ SelectionDisplay = (function() { green: 0, blue: 255 }, - ignoreRayIntersection: true, // always ignore this - visible: false, + ignoreRayIntersection: true // always ignore this }); var rotateZeroOverlay = Overlays.addOverlay("line3d", { @@ -1016,44 +1028,46 @@ SelectionDisplay = (function() { that.TRIGGER_OFF_VALUE = 0.15; that.triggered = false; var activeHand = Controller.Standard.RightHand; - function makeTriggerHandler(hand) { - return function (value) { - if (!that.triggered && (value > that.TRIGGER_GRAB_VALUE)) { // should we smooth? - that.triggered = true; - if (activeHand !== hand) { - // No switching while the other is already triggered, so no need to release. - activeHand = (activeHand === Controller.Standard.RightHand) ? Controller.Standard.LeftHand : Controller.Standard.RightHand; - } - if (Reticle.pointingAtSystemOverlay || Overlays.getOverlayAtPoint(Reticle.position)) { - return; - } - var eventResult = that.mousePressEvent({}); - if (!eventResult || (eventResult === 'selectionBox')) { - var pickRay = controllerComputePickRay(); - if (pickRay) { - var entityIntersection = Entities.findRayIntersection(pickRay, true); + // function makeTriggerHandler(hand) { + // return function (value) { + // if (!that.triggered && (value > that.TRIGGER_GRAB_VALUE)) { // should we smooth? + // that.triggered = true; + // if (activeHand !== hand) { + // // No switching while the other is already triggered, so no need to release. + // activeHand = (activeHand === Controller.Standard.RightHand) ? Controller.Standard.LeftHand : Controller.Standard.RightHand; + // } + // if (Reticle.pointingAtSystemOverlay || Overlays.getOverlayAtPoint(Reticle.position)) { + // return; + // } + // var eventResult = that.mousePressEvent({}); + // if (!eventResult || (eventResult === 'selectionBox')) { + // var pickRay = controllerComputePickRay(); + // if (pickRay) { + // var entityIntersection = Entities.findRayIntersection(pickRay, true); - var overlayIntersection = Overlays.findRayIntersection(pickRay); - if (entityIntersection.intersects && - (!overlayIntersection.intersects || (entityIntersection.distance < overlayIntersection.distance))) { + // var overlayIntersection = Overlays.findRayIntersection(pickRay); + // if (entityIntersection.intersects && + // (!overlayIntersection.intersects || (entityIntersection.distance < overlayIntersection.distance))) { + + // if (HMD.tabletID === entityIntersection.entityID) { + // return; + // } + + // selectionManager.setSelections([entityIntersection.entityID]); + // } + // } + // } + // } else if (that.triggered && (value < that.TRIGGER_OFF_VALUE)) { + // that.triggered = false; + // that.mouseReleaseEvent({}); + // } + // }; + // } + // that.triggerMapping.from(Controller.Standard.RT).peek().to(makeTriggerHandler(Controller.Standard.RightHand)); + // that.triggerMapping.from(Controller.Standard.LT).peek().to(makeTriggerHandler(Controller.Standard.LeftHand)); - if (HMD.tabletID === entityIntersection.entityID) { - return; - } - selectionManager.setSelections([entityIntersection.entityID]); - } - } - } - } else if (that.triggered && (value < that.TRIGGER_OFF_VALUE)) { - that.triggered = false; - that.mouseReleaseEvent({}); - } - }; - } - that.triggerMapping.from(Controller.Standard.RT).peek().to(makeTriggerHandler(Controller.Standard.RightHand)); - that.triggerMapping.from(Controller.Standard.LT).peek().to(makeTriggerHandler(Controller.Standard.LeftHand)); function controllerComputePickRay() { var controllerPose = getControllerWorldLocation(activeHand, true); if (controllerPose.valid && that.triggered) { @@ -1072,7 +1086,7 @@ SelectionDisplay = (function() { onBegin: tool.onBegin, onMove: tool.onMove, onEnd: tool.onEnd, - } + }; } @@ -1080,8 +1094,8 @@ SelectionDisplay = (function() { for (var i = 0; i < allOverlays.length; i++) { Overlays.deleteOverlay(allOverlays[i]); } - for (var i = 0; i < selectionBoxes.length; i++) { - Overlays.deleteOverlay(selectionBoxes[i]); + for (var j = 0; j < selectionBoxes.length; j++) { + Overlays.deleteOverlay(selectionBoxes[j]); } }; @@ -1125,7 +1139,7 @@ SelectionDisplay = (function() { }); that.updateHandles(); - } + }; that.updateRotationHandles = function() { var diagonal = (Vec3.length(selectionManager.worldDimensions) / 2) * 1.1; @@ -1572,7 +1586,7 @@ SelectionDisplay = (function() { that.unselectAll = function() {}; that.updateHandles = function() { - if (SelectionManager.selections.length == 0) { + if (SelectionManager.selections.length === 0) { that.setOverlaysVisible(false); return; } @@ -1608,7 +1622,8 @@ SelectionDisplay = (function() { var bottom = -registrationPointDimensions.y; var top = dimensions.y - registrationPointDimensions.y; var near = -registrationPointDimensions.z; - var front = far = dimensions.z - registrationPointDimensions.z; + var far = dimensions.z - registrationPointDimensions.z; + var front = far; var worldTop = SelectionManager.worldDimensions.y / 2; @@ -1808,9 +1823,9 @@ SelectionDisplay = (function() { if (selectionManager.selections.length == 1) { var properties = Entities.getEntityProperties(selectionManager.selections[0]); - if (properties.type == "Light" && properties.isSpotlight == true) { - var stretchHandlesVisible = false; - var extendedStretchHandlesVisible = false; + if (properties.type == "Light" && properties.isSpotlight === true) { + stretchHandlesVisible = false; + extendedStretchHandlesVisible = false; Overlays.editOverlay(grabberSpotLightCenter, { position: position, @@ -1903,9 +1918,9 @@ SelectionDisplay = (function() { Overlays.editOverlay(grabberPointLightN, { visible: false }); - } else if (properties.type == "Light" && properties.isSpotlight == false) { - var stretchHandlesVisible = false; - var extendedStretchHandlesVisible = false; + } else if (properties.type == "Light" && properties.isSpotlight === false) { + stretchHandlesVisible = false; + extendedStretchHandlesVisible = false; Overlays.editOverlay(grabberPointLightT, { position: TOP, rotation: rotation, @@ -2171,28 +2186,28 @@ SelectionDisplay = (function() { })); } - var i = 0; + i = 0; // Only show individual selections boxes if there is more than 1 selection if (selectionManager.selections.length > 1) { for (; i < selectionManager.selections.length; i++) { - var properties = Entities.getEntityProperties(selectionManager.selections[i]); + var props = Entities.getEntityProperties(selectionManager.selections[i]); // Adjust overlay position to take registrationPoint into account // centeredRP = registrationPoint with range [-0.5, 0.5] - var centeredRP = Vec3.subtract(properties.registrationPoint, { + var centeredRP = Vec3.subtract(props.registrationPoint, { x: 0.5, y: 0.5, z: 0.5 }); - var offset = vec3Mult(properties.dimensions, centeredRP); + var offset = vec3Mult(props.dimensions, centeredRP); offset = Vec3.multiply(-1, offset); - offset = Vec3.multiplyQbyV(properties.rotation, offset); - var boxPosition = Vec3.sum(properties.position, offset); + offset = Vec3.multiplyQbyV(props.rotation, offset); + var boxPosition = Vec3.sum(props.position, offset); Overlays.editOverlay(selectionBoxes[i], { position: boxPosition, - rotation: properties.rotation, - dimensions: properties.dimensions, + rotation: props.rotation, + dimensions: props.dimensions, visible: true, }); } @@ -2584,11 +2599,11 @@ SelectionDisplay = (function() { y: v1.y * v2.y, z: v1.z * v2.z }; - } - // stretchMode - name of mode - // direction - direction to stretch in - // pivot - point to use as a pivot - // offset - the position of the overlay tool relative to the selections center position + }; + // stretchMode - name of mode + // direction - direction to stretch in + // pivot - point to use as a pivot + // offset - the position of the overlay tool relative to the selections center position var makeStretchTool = function(stretchMode, direction, pivot, offset, customOnMove) { var signs = { x: direction.x < 0 ? -1 : (direction.x > 0 ? 1 : 0), @@ -2640,7 +2655,7 @@ SelectionDisplay = (function() { }); // Scale pivot to be in the same range as registrationPoint - var scaledPivot = Vec3.multiply(0.5, pivot) + var scaledPivot = Vec3.multiply(0.5, pivot); deltaPivot = Vec3.subtract(centeredRP, scaledPivot); var scaledOffset = Vec3.multiply(0.5, offset); @@ -2652,14 +2667,16 @@ SelectionDisplay = (function() { var scaledOffsetWorld = vec3Mult(initialDimensions, offsetRP); pickRayPosition = Vec3.sum(initialPosition, Vec3.multiplyQbyV(rotation, scaledOffsetWorld)); + var start = null; + var end = null; if (numDimensions == 1 && mask.x) { - var start = Vec3.multiplyQbyV(rotation, { + start = Vec3.multiplyQbyV(rotation, { x: -10000, y: 0, z: 0 }); start = Vec3.sum(start, properties.position); - var end = Vec3.multiplyQbyV(rotation, { + end = Vec3.multiplyQbyV(rotation, { x: 10000, y: 0, z: 0 @@ -2672,13 +2689,13 @@ SelectionDisplay = (function() { }); } if (numDimensions == 1 && mask.y) { - var start = Vec3.multiplyQbyV(rotation, { + start = Vec3.multiplyQbyV(rotation, { x: 0, y: -10000, z: 0 }); start = Vec3.sum(start, properties.position); - var end = Vec3.multiplyQbyV(rotation, { + end = Vec3.multiplyQbyV(rotation, { x: 0, y: 10000, z: 0 @@ -2691,13 +2708,13 @@ SelectionDisplay = (function() { }); } if (numDimensions == 1 && mask.z) { - var start = Vec3.multiplyQbyV(rotation, { + start = Vec3.multiplyQbyV(rotation, { x: 0, y: 0, z: -10000 }); start = Vec3.sum(start, properties.position); - var end = Vec3.multiplyQbyV(rotation, { + end = Vec3.multiplyQbyV(rotation, { x: 0, y: 0, z: 10000 @@ -2730,13 +2747,13 @@ SelectionDisplay = (function() { }; } } else if (numDimensions == 2) { - if (mask.x == 0) { + if (mask.x === 0) { planeNormal = { x: 1, y: 0, z: 0 }; - } else if (mask.y == 0) { + } else if (mask.y === 0) { planeNormal = { x: 0, y: 1, @@ -2894,7 +2911,7 @@ SelectionDisplay = (function() { }); SelectionManager._update(); - }; + } function radiusStretchFunc(vector, change) { var props = selectionManager.savedProperties[selectionManager.selections[0]]; @@ -4413,7 +4430,7 @@ SelectionDisplay = (function() { scale: handleSize / 1.25, }); } - } + }; Script.update.connect(that.updateHandleSizes); that.mouseReleaseEvent = function(event) { From 6f506d602301e9aa221613fb8a2b584be859404c Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Mon, 13 Feb 2017 14:40:45 -0800 Subject: [PATCH 011/247] some attempts to get icons in create tab --- interface/resources/images/sphere-01.svg | 108 +++++++++++++++++++ interface/resources/qml/hifi/tablet/Edit.qml | 46 ++++---- 2 files changed, 135 insertions(+), 19 deletions(-) create mode 100644 interface/resources/images/sphere-01.svg diff --git a/interface/resources/images/sphere-01.svg b/interface/resources/images/sphere-01.svg new file mode 100644 index 0000000000..975199c8da --- /dev/null +++ b/interface/resources/images/sphere-01.svg @@ -0,0 +1,108 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 50 150" style="enable-background:new 0 0 50 150;" xml:space="preserve"> +<style type="text/css"> + .st0{opacity:0.9;} + .st1{fill:#FFFFFF;} + .st2{fill:#1E1E1E;} + .st3{fill:#EAEAEA;} + .st4{opacity:0.47;} + .st5{opacity:0.47;fill:#EAEAEA;} +</style> +<g> + <g class="st0"> + <path class="st1" d="M50,46c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V4c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V46z"/> + </g> +</g> +<g class="st0"> + <path class="st2" d="M50,96c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4V54c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V96z"/> +</g> +<path d="M32.7,9.4c-4.3-4.3-11.2-4.3-15.5,0c-2.1,2.1-3.2,4.8-3.2,7.7c0,2.9,1.1,5.7,3.2,7.7C19.4,27,22.2,28,25,28 + c2.8,0,5.6-1.1,7.7-3.2c2.1-2.1,3.2-4.8,3.2-7.7C35.9,14.2,34.8,11.4,32.7,9.4z M18.3,10.4c1.4-1.4,3.2-2.3,5-2.6 + C23,8.3,22.7,9,22.4,9.9c-0.6,2-1,4.6-1,7.3c0,0.1,0,0.3,0,0.5c0.3,0.1,0.6,0.1,0.9,0.1c0.1,0,0.2,0,0.3,0c0-0.2,0-0.4,0-0.6 + c0-5.5,1.4-9.2,2.5-9.5c0,0,0,0,0.1-0.1c2.4,0,4.7,1,6.5,2.8c1.7,1.7,2.7,4,2.8,6.5c-0.2,1.1-3.9,2.5-9.5,2.5 + c-5.5,0-9.1-1.4-9.4-2.4C15.6,14.5,16.6,12.2,18.3,10.4z M31.7,23.8c-1.9,1.9-4.3,2.8-6.8,2.8c-0.7-0.4-1.4-2.1-1.9-4.6l-1.2-0.1 + c0.2,0.9,0.4,1.8,0.6,2.6c0.2,0.8,0.5,1.4,0.8,1.9c-1.8-0.3-3.5-1.2-4.9-2.6c-1.4-1.4-2.3-3.2-2.6-5.1c0.5,0.3,1.2,0.6,2,0.9 + c2,0.6,4.6,1,7.3,1s5.3-0.3,7.3-1c0.8-0.3,1.5-0.6,2-0.9C34,20.6,33.1,22.4,31.7,23.8z"/> +<g> + <path d="M11.1,37.5c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2c-0.2-0.1-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1 + c-0.3,0-0.6,0.1-0.8,0.2c-0.2,0.1-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2s0.3,0.1,0.5,0.2 + c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3c0.3,0.1,0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7 + c0,0.3-0.1,0.6-0.2,0.9c-0.1,0.2-0.3,0.4-0.5,0.6s-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2 + s-0.9-0.3-1.3-0.6l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1 + c0.7,0,1-0.2,1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2 + c-0.3-0.1-0.6-0.2-0.8-0.3S7.7,39,7.6,38.9c-0.2-0.1-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9 + c0.1-0.3,0.3-0.5,0.5-0.6s0.5-0.3,0.7-0.4c0.3-0.1,0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2c0.4,0.1,0.7,0.3,1,0.5L11.1,37.5z"/> + <path d="M13.1,42.2v-6.4h2.7c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8 + c0,0.3,0,0.5-0.1,0.8c-0.1,0.3-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.4-0.6,0.5c-0.2,0.1-0.5,0.2-0.8,0.2h-1.5v2.1H13.1z M14.3,39h1.4 + c0.2,0,0.4-0.1,0.6-0.3c0.2-0.2,0.2-0.4,0.2-0.8c0-0.2,0-0.3-0.1-0.4c0-0.1-0.1-0.2-0.2-0.3C16.2,37.1,16.1,37,16,37 + c-0.1,0-0.2-0.1-0.3-0.1h-1.4V39z"/> + <path d="M24.3,35.8v6.4H23v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6H23v-2.6H24.3z"/> + <path d="M30.3,41.1v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H30.3z"/> + <path d="M31.5,42.2v-6.4h2.8c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8 + c0,0.4-0.1,0.8-0.3,1.1c-0.2,0.3-0.5,0.6-0.8,0.7l1.5,2.4h-1.4L34,40.1h-1.2v2.1H31.5z M32.7,39h1.6c0.1,0,0.2,0,0.3-0.1 + c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.2-0.3s0.1-0.3,0.1-0.4c0-0.1,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3c-0.1-0.1-0.2-0.2-0.3-0.2 + c-0.1-0.1-0.2-0.1-0.3-0.1h-1.5V39z"/> + <path d="M42.2,41.1v1.1h-4.4v-6.4h4.4v1.1H39v1.5h2.7v1H39v1.7H42.2z"/> +</g> +<path class="st3" d="M33.1,59.4c-4.3-4.3-11.2-4.3-15.5,0c-2.1,2.1-3.2,4.8-3.2,7.7c0,2.9,1.1,5.7,3.2,7.7c2.1,2.1,4.9,3.2,7.7,3.2 + c2.8,0,5.6-1.1,7.7-3.2c2.1-2.1,3.2-4.8,3.2-7.7C36.3,64.2,35.1,61.5,33.1,59.4z M18.6,60.4c1.4-1.4,3.2-2.3,5-2.6 + c-0.3,0.5-0.7,1.2-0.9,2.1c-0.6,2-1,4.6-1,7.3c0,0.1,0,0.3,0,0.5c0.3,0.1,0.6,0.1,0.9,0.1c0.1,0,0.2,0,0.3,0c0-0.2,0-0.4,0-0.6 + c0-5.5,1.4-9.2,2.5-9.5c0,0,0,0,0.1-0.1c2.4,0,4.7,1,6.5,2.8c1.7,1.7,2.7,4,2.8,6.5c-0.2,1.1-3.9,2.5-9.5,2.5 + c-5.5,0-9.1-1.4-9.4-2.4C15.9,64.5,16.9,62.2,18.6,60.4z M32,73.8c-1.9,1.9-4.3,2.8-6.8,2.8c-0.7-0.4-1.4-2.1-1.9-4.6l-1.2-0.1 + c0.2,0.9,0.4,1.8,0.6,2.6c0.2,0.8,0.5,1.4,0.8,1.9c-1.8-0.3-3.5-1.2-4.9-2.6c-1.4-1.4-2.3-3.2-2.6-5.1c0.5,0.3,1.2,0.6,2,0.9 + c2,0.6,4.6,1,7.3,1s5.3-0.3,7.3-1c0.8-0.3,1.5-0.6,2-0.9C34.3,70.7,33.4,72.4,32,73.8z"/> +<g> + <path class="st3" d="M11.5,87.5c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2S10.5,87,10.3,87c-0.2,0-0.4-0.1-0.6-0.1 + c-0.3,0-0.6,0.1-0.8,0.2s-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3C8.9,88,9,88.1,9.1,88.2c0.1,0.1,0.3,0.1,0.5,0.2 + c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3s0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7 + c0,0.3-0.1,0.6-0.2,0.9c-0.1,0.2-0.3,0.4-0.5,0.6c-0.2,0.2-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2 + C8,92,7.6,91.8,7.2,91.5l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1 + c0.7,0,1-0.2,1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2 + c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.3s-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9 + c0.1-0.3,0.3-0.5,0.5-0.6s0.5-0.3,0.7-0.4s0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2s0.7,0.3,1,0.5L11.5,87.5z"/> + <path class="st3" d="M13.4,92.2v-6.4h2.7c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5s0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8 + c0,0.3,0,0.5-0.1,0.8c-0.1,0.3-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.4-0.6,0.5c-0.2,0.1-0.5,0.2-0.8,0.2h-1.5v2.1H13.4z M14.7,89h1.4 + c0.2,0,0.4-0.1,0.6-0.3c0.2-0.2,0.2-0.4,0.2-0.8c0-0.2,0-0.3-0.1-0.4c0-0.1-0.1-0.2-0.2-0.3s-0.2-0.2-0.3-0.2 + c-0.1,0-0.2-0.1-0.3-0.1h-1.4V89z"/> + <path class="st3" d="M24.6,85.9v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H24.6z"/> + <path class="st3" d="M30.6,91.2v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H30.6z"/> + <path class="st3" d="M31.8,92.2v-6.4h2.8c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8 + c0,0.4-0.1,0.8-0.3,1.1s-0.5,0.6-0.8,0.7l1.5,2.4h-1.4l-1.3-2.1h-1.2v2.1H31.8z M33.1,89h1.6c0.1,0,0.2,0,0.3-0.1 + c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.2-0.3s0.1-0.3,0.1-0.4c0-0.1,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3S35,87.1,34.9,87 + c-0.1-0.1-0.2-0.1-0.3-0.1h-1.5V89z"/> + <path class="st3" d="M42.5,91.2v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5H42v1h-2.7v1.7H42.5z"/> +</g> +<g class="st4"> + <path class="st2" d="M50,146c0,2.2-1.8,4-4,4H4c-2.2,0-4-1.8-4-4v-42c0-2.2,1.8-4,4-4h42c2.2,0,4,1.8,4,4V146z"/> +</g> +<path class="st5" d="M33.1,109.4c-4.3-4.3-11.2-4.3-15.5,0c-2.1,2.1-3.2,4.8-3.2,7.7c0,2.9,1.1,5.7,3.2,7.7c2.1,2.1,4.9,3.2,7.7,3.2 + c2.8,0,5.6-1.1,7.7-3.2c2.1-2.1,3.2-4.8,3.2-7.7C36.3,114.2,35.1,111.5,33.1,109.4z M18.6,110.4c1.4-1.4,3.2-2.3,5-2.6 + c-0.3,0.5-0.7,1.2-0.9,2.1c-0.6,2-1,4.6-1,7.3c0,0.1,0,0.3,0,0.5c0.3,0.1,0.6,0.1,0.9,0.1c0.1,0,0.2,0,0.3,0c0-0.2,0-0.4,0-0.6 + c0-5.5,1.4-9.2,2.5-9.5c0,0,0,0,0.1-0.1c2.4,0,4.7,1,6.5,2.8c1.7,1.7,2.7,4,2.8,6.5c-0.2,1.1-3.9,2.5-9.5,2.5 + c-5.5,0-9.1-1.4-9.4-2.4C15.9,114.5,16.9,112.2,18.6,110.4z M32,123.8c-1.9,1.9-4.3,2.8-6.8,2.8c-0.7-0.4-1.4-2.1-1.9-4.6l-1.2-0.1 + c0.2,0.9,0.4,1.8,0.6,2.6c0.2,0.8,0.5,1.4,0.8,1.9c-1.8-0.3-3.5-1.2-4.9-2.6c-1.4-1.4-2.3-3.2-2.6-5.1c0.5,0.3,1.2,0.6,2,0.9 + c2,0.6,4.6,1,7.3,1s5.3-0.3,7.3-1c0.8-0.3,1.5-0.6,2-0.9C34.3,120.7,33.4,122.4,32,123.8z"/> +<g class="st4"> + <path class="st3" d="M11.5,137.5c0,0-0.1-0.1-0.2-0.2c-0.1-0.1-0.2-0.1-0.4-0.2s-0.3-0.1-0.5-0.2c-0.2,0-0.4-0.1-0.6-0.1 + c-0.3,0-0.6,0.1-0.8,0.2s-0.3,0.3-0.3,0.5c0,0.1,0,0.2,0.1,0.3c0.1,0.1,0.2,0.2,0.3,0.2c0.1,0.1,0.3,0.1,0.5,0.2 + c0.2,0.1,0.4,0.1,0.6,0.2c0.3,0.1,0.6,0.2,0.9,0.3s0.5,0.2,0.6,0.4c0.2,0.1,0.3,0.3,0.4,0.5c0.1,0.2,0.1,0.4,0.1,0.7 + c0,0.3-0.1,0.6-0.2,0.9c-0.1,0.2-0.3,0.4-0.5,0.6c-0.2,0.2-0.5,0.3-0.8,0.3c-0.3,0.1-0.6,0.1-0.9,0.1c-0.5,0-1-0.1-1.4-0.2 + c-0.5-0.1-0.9-0.3-1.3-0.6l0.5-1.1c0.1,0.1,0.2,0.1,0.3,0.2c0.1,0.1,0.3,0.2,0.5,0.3s0.4,0.2,0.6,0.2c0.2,0.1,0.5,0.1,0.7,0.1 + c0.7,0,1-0.2,1-0.7c0-0.1,0-0.3-0.1-0.4c-0.1-0.1-0.2-0.2-0.3-0.3c-0.1-0.1-0.3-0.1-0.5-0.2c-0.2-0.1-0.4-0.1-0.7-0.2 + c-0.3-0.1-0.6-0.2-0.8-0.3c-0.2-0.1-0.4-0.2-0.6-0.3s-0.3-0.3-0.3-0.5c-0.1-0.2-0.1-0.4-0.1-0.6c0-0.3,0.1-0.6,0.2-0.9 + c0.1-0.3,0.3-0.5,0.5-0.6s0.5-0.3,0.7-0.4s0.6-0.1,0.9-0.1c0.5,0,0.9,0.1,1.2,0.2s0.7,0.3,1,0.5L11.5,137.5z"/> + <path class="st3" d="M13.4,142.2v-6.4h2.7c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5s0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8 + c0,0.3,0,0.5-0.1,0.8c-0.1,0.3-0.2,0.5-0.4,0.7c-0.2,0.2-0.4,0.4-0.6,0.5c-0.2,0.1-0.5,0.2-0.8,0.2h-1.5v2.1H13.4z M14.7,139h1.4 + c0.2,0,0.4-0.1,0.6-0.3c0.2-0.2,0.2-0.4,0.2-0.8c0-0.2,0-0.3-0.1-0.4c0-0.1-0.1-0.2-0.2-0.3s-0.2-0.2-0.3-0.2 + c-0.1,0-0.2-0.1-0.3-0.1h-1.4V139z"/> + <path class="st3" d="M24.6,135.9v6.4h-1.2v-2.7h-2.9v2.7h-1.2v-6.4h1.2v2.6h2.9v-2.6H24.6z"/> + <path class="st3" d="M30.6,141.2v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5h2.7v1h-2.7v1.7H30.6z"/> + <path class="st3" d="M31.8,142.2v-6.4h2.8c0.3,0,0.6,0.1,0.8,0.2s0.5,0.3,0.6,0.5c0.2,0.2,0.3,0.4,0.4,0.7c0.1,0.3,0.2,0.5,0.2,0.8 + c0,0.4-0.1,0.8-0.3,1.1s-0.5,0.6-0.8,0.7l1.5,2.4h-1.4l-1.3-2.1h-1.2v2.1H31.8z M33.1,139h1.6c0.1,0,0.2,0,0.3-0.1 + c0.1-0.1,0.2-0.1,0.3-0.2c0.1-0.1,0.1-0.2,0.2-0.3s0.1-0.3,0.1-0.4c0-0.1,0-0.3-0.1-0.4s-0.1-0.2-0.2-0.3s-0.2-0.2-0.3-0.2 + c-0.1-0.1-0.2-0.1-0.3-0.1h-1.5V139z"/> + <path class="st3" d="M42.5,141.2v1.1h-4.4v-6.4h4.4v1.1h-3.1v1.5H42v1h-2.7v1.7H42.5z"/> +</g> +</svg> diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 44959395fa..5301ff78f8 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -4,6 +4,7 @@ import QtWebEngine 1.1 import QtWebChannel 1.0 import QtQuick.Controls.Styles 1.4 import "../../controls" +import "../toolbars" import HFWebEngineProfile 1.0 StackView { @@ -41,9 +42,17 @@ StackView { Flow { id: createEntitiesFlow spacing: 16 + anchors.right: parent.right + anchors.rightMargin: 30 + anchors.left: parent.left + anchors.leftMargin: 30 + anchors.bottom: parent.bottom + anchors.bottomMargin: 30 + anchors.top: parent.top + anchors.topMargin: 30 - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/assets-01.svg" + TabletButton { + icon: "icons/assets-01.svg" text: "ASSETS" onClicked: { editRoot.sendToScript({ @@ -52,8 +61,8 @@ StackView { } } - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/model-01.svg" + TabletButton { + icon: "model-01.svg" text: "MODEL" onClicked: { editRoot.sendToScript({ @@ -62,8 +71,8 @@ StackView { } } - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/cube-01.svg" + TabletButton { + icon: "../cube-01.svg" text: "CUBE" onClicked: { editRoot.sendToScript({ @@ -72,9 +81,8 @@ StackView { } } - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/sphere-01.svg" - text: "SPHERE" + ToolbarButton { + imageURL: "../images/sphere-01.svg" onClicked: { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newSphereButton" } @@ -82,8 +90,8 @@ StackView { } } - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/light-01.svg" + TabletButton { + icon: "../scripts/system/assets/images/tools/light-01.svg" text: "LIGHT" onClicked: { editRoot.sendToScript({ @@ -92,8 +100,8 @@ StackView { } } - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/text-01.svg" + TabletButton { + icon: "../scripts/system/assets/images/tools/text-01.svg" text: "TEXT" onClicked: { editRoot.sendToScript({ @@ -102,8 +110,8 @@ StackView { } } - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/web-01.svg" + TabletButton { + icon: "../scripts/system/assets/images/tools/web-01.svg" text: "WEB" onClicked: { editRoot.sendToScript({ @@ -112,8 +120,8 @@ StackView { } } - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/zone-01.svg" + TabletButton { + icon: "../scripts/system/assets/images/tools/zone-01.svg" text: "ZONE" onClicked: { editRoot.sendToScript({ @@ -122,8 +130,8 @@ StackView { } } - Button { - iconSource: "../../../../../scripts/system/assets/images/tools/particle-01.svg" + TabletButton { + icon: "../scripts/system/assets/images/tools/particle-01.svg" text: "PARTICLE" onClicked: { editRoot.sendToScript({ From a57a0435c1a348ce40d9c5b608e948b14b021af8 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Mon, 13 Feb 2017 15:13:10 -0800 Subject: [PATCH 012/247] fix overlapping issue with the delete button --- scripts/system/html/css/edit-style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/html/css/edit-style.css b/scripts/system/html/css/edit-style.css index 251d0a2d75..06a60b5405 100644 --- a/scripts/system/html/css/edit-style.css +++ b/scripts/system/html/css/edit-style.css @@ -871,6 +871,7 @@ textarea:enabled[scrolling="true"]::-webkit-resizer { float: right; margin-right: 0; background-color: #ff0000; + min-width: 90px; } #entity-list { From 3a23ec86d55c8a6b91b2356ff41982b6aac81247 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Tue, 14 Feb 2017 13:57:48 -0800 Subject: [PATCH 013/247] handles etc work better --- .../system/controllers/handControllerGrab.js | 68 +++++++++++------- scripts/system/html/js/entityList.js | 4 +- scripts/system/html/js/entityProperties.js | 4 +- .../system/libraries/entitySelectionTool.js | 70 +++++++++---------- 4 files changed, 80 insertions(+), 66 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index f61ea3013e..e7ca74cf54 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -738,6 +738,7 @@ function MyController(hand) { this.grabPointIntersectsEntity = false; this.stylus = null; this.homeButtonTouched = false; + this.editTriggered = false; // Until there is some reliable way to keep track of a "stack" of parentIDs, we'll have problems // when more than one avatar does parenting grabs on things. This script tries to work @@ -858,9 +859,10 @@ function MyController(hand) { }; this.setState = function(newState, reason) { - if ((isInEditMode() && this.grabbedEntity !== HMD.tabletID )&& (newState !== STATE_OFF && - newState !== STATE_SEARCHING && - newState !== STATE_OVERLAY_STYLUS_TOUCHING)) { + if ((isInEditMode() && this.grabbedEntity !== HMD.tabletID) && + (newState !== STATE_OFF && + newState !== STATE_SEARCHING && + newState !== STATE_OVERLAY_STYLUS_TOUCHING)) { return; } setGrabCommunications((newState === STATE_DISTANCE_HOLDING) || (newState === STATE_NEAR_GRABBING)); @@ -1037,7 +1039,7 @@ function MyController(hand) { } var searchSphereLocation = Vec3.sum(distantPickRay.origin, - Vec3.multiply(distantPickRay.direction, this.searchSphereDistance)); + Vec3.multiply(distantPickRay.direction, this.searchSphereDistance)); this.searchSphereOn(searchSphereLocation, SEARCH_SPHERE_SIZE * this.searchSphereDistance, (this.triggerSmoothedGrab() || this.secondarySqueezed()) ? COLORS_GRAB_SEARCHING_FULL_SQUEEZE : @@ -1199,6 +1201,10 @@ function MyController(hand) { this.checkForUnexpectedChildren(); + if (this.editTriggered) { + this.editTriggered = false; + } + if (this.triggerSmoothedReleased() && this.secondaryReleased()) { this.waitForTriggerRelease = false; } @@ -1636,22 +1642,24 @@ function MyController(hand) { return aDistance - bDistance; }); entity = grabbableEntities[0]; - name = entityPropertiesCache.getProps(entity).name; - this.grabbedEntity = entity; - if (this.entityWantsTrigger(entity)) { - if (this.triggerSmoothedGrab()) { - this.setState(STATE_NEAR_TRIGGER, "near trigger '" + name + "'"); - return; + if (!isInEditMode() || entity == HMD.tabletID) { + name = entityPropertiesCache.getProps(entity).name; + this.grabbedEntity = entity; + if (this.entityWantsTrigger(entity)) { + if (this.triggerSmoothedGrab()) { + this.setState(STATE_NEAR_TRIGGER, "near trigger '" + name + "'"); + return; + } else { + // potentialNearTriggerEntity = entity; + } } else { - // potentialNearTriggerEntity = entity; - } - } else { - // If near something grabbable, grab it! - if ((this.triggerSmoothedGrab() || this.secondarySqueezed()) && nearGrabEnabled) { - this.setState(STATE_NEAR_GRABBING, "near grab '" + name + "'"); - return; - } else { - // potentialNearGrabEntity = entity; + // If near something grabbable, grab it! + if ((this.triggerSmoothedGrab() || this.secondarySqueezed()) && nearGrabEnabled) { + this.setState(STATE_NEAR_GRABBING, "near grab '" + name + "'"); + return; + } else { + // potentialNearGrabEntity = entity; + } } } } @@ -1666,16 +1674,22 @@ function MyController(hand) { } } - if (rayPickInfo.entityID) { - if (this.triggerSmoothedGrab() && isInEditMode()) { - this.searchIndicatorOn(rayPickInfo.searchRay); - Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({ - method: "selectEntity", - entityID: rayPickInfo.entityID - })); - return; + if (isInEditMode()) { + this.searchIndicatorOn(rayPickInfo.searchRay); + if (this.triggerSmoothedGrab()) { + if (!this.editTriggered && rayPickInfo.entityID) { + Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({ + method: "selectEntity", + entityID: rayPickInfo.entityID + })); + } + this.editTriggered = true; } + Reticle.setVisible(false); + return; + } + if (rayPickInfo.entityID) { entity = rayPickInfo.entityID; name = entityPropertiesCache.getProps(entity).name; if (this.entityWantsTrigger(entity)) { diff --git a/scripts/system/html/js/entityList.js b/scripts/system/html/js/entityList.js index 1af9c1e1d6..048d5561df 100644 --- a/scripts/system/html/js/entityList.js +++ b/scripts/system/html/js/entityList.js @@ -330,10 +330,10 @@ function loaded() { } } else if (data.type == "update") { var newEntities = data.entities; - if (newEntities.length == 0) { + if (newEntities && newEntities.length == 0) { elNoEntitiesMessage.style.display = "block"; elFooter.firstChild.nodeValue = "0 entities found"; - } else { + } else if (newEntities) { elNoEntitiesMessage.style.display = "none"; for (var i = 0; i < newEntities.length; i++) { var id = newEntities[i].id; diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index 957cea4528..1c15aafa8b 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -732,7 +732,7 @@ function loaded() { } } else if (data.type == "update") { - if (data.selections.length == 0) { + if (!data.selections || data.selections.length == 0) { if (editor !== null && lastEntityID !== null) { saveJSONUserData(true); deleteJSONEditor(); @@ -741,7 +741,7 @@ function loaded() { elType.innerHTML = "<i>No selection</i>"; elID.innerHTML = ""; disableProperties(); - } else if (data.selections.length > 1) { + } else if (data.selections && data.selections.length > 1) { deleteJSONEditor(); var selections = data.selections; diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 4fd708a86e..08ae7ae5f7 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -1028,44 +1028,44 @@ SelectionDisplay = (function() { that.TRIGGER_OFF_VALUE = 0.15; that.triggered = false; var activeHand = Controller.Standard.RightHand; - // function makeTriggerHandler(hand) { - // return function (value) { - // if (!that.triggered && (value > that.TRIGGER_GRAB_VALUE)) { // should we smooth? - // that.triggered = true; - // if (activeHand !== hand) { - // // No switching while the other is already triggered, so no need to release. - // activeHand = (activeHand === Controller.Standard.RightHand) ? Controller.Standard.LeftHand : Controller.Standard.RightHand; - // } - // if (Reticle.pointingAtSystemOverlay || Overlays.getOverlayAtPoint(Reticle.position)) { - // return; - // } - // var eventResult = that.mousePressEvent({}); - // if (!eventResult || (eventResult === 'selectionBox')) { - // var pickRay = controllerComputePickRay(); - // if (pickRay) { - // var entityIntersection = Entities.findRayIntersection(pickRay, true); + function makeTriggerHandler(hand) { + return function (value) { + if (!that.triggered && (value > that.TRIGGER_GRAB_VALUE)) { // should we smooth? + that.triggered = true; + if (activeHand !== hand) { + // No switching while the other is already triggered, so no need to release. + activeHand = (activeHand === Controller.Standard.RightHand) ? Controller.Standard.LeftHand : Controller.Standard.RightHand; + } + if (Reticle.pointingAtSystemOverlay || Overlays.getOverlayAtPoint(Reticle.position)) { + return; + } + var eventResult = that.mousePressEvent({}); + // if (!eventResult || (eventResult === 'selectionBox')) { + // var pickRay = controllerComputePickRay(); + // if (pickRay) { + // var entityIntersection = Entities.findRayIntersection(pickRay, true); - // var overlayIntersection = Overlays.findRayIntersection(pickRay); - // if (entityIntersection.intersects && - // (!overlayIntersection.intersects || (entityIntersection.distance < overlayIntersection.distance))) { + // var overlayIntersection = Overlays.findRayIntersection(pickRay); + // if (entityIntersection.intersects && + // (!overlayIntersection.intersects || (entityIntersection.distance < overlayIntersection.distance))) { - // if (HMD.tabletID === entityIntersection.entityID) { - // return; - // } + // if (HMD.tabletID === entityIntersection.entityID) { + // return; + // } - // selectionManager.setSelections([entityIntersection.entityID]); - // } - // } - // } - // } else if (that.triggered && (value < that.TRIGGER_OFF_VALUE)) { - // that.triggered = false; - // that.mouseReleaseEvent({}); - // } - // }; - // } - // that.triggerMapping.from(Controller.Standard.RT).peek().to(makeTriggerHandler(Controller.Standard.RightHand)); - // that.triggerMapping.from(Controller.Standard.LT).peek().to(makeTriggerHandler(Controller.Standard.LeftHand)); + // selectionManager.setSelections([entityIntersection.entityID]); + // } + // } + // } + } else if (that.triggered && (value < that.TRIGGER_OFF_VALUE)) { + that.triggered = false; + that.mouseReleaseEvent({}); + } + }; + } + that.triggerMapping.from(Controller.Standard.RT).peek().to(makeTriggerHandler(Controller.Standard.RightHand)); + that.triggerMapping.from(Controller.Standard.LT).peek().to(makeTriggerHandler(Controller.Standard.LeftHand)); function controllerComputePickRay() { @@ -2064,7 +2064,7 @@ SelectionDisplay = (function() { }); Overlays.editOverlay(grabberPointLightL, { visible: false - }); + }); Overlays.editOverlay(grabberPointLightR, { visible: false }); From 22baab13592c6de7622db085cf64bcee7f0b5918 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 15 Feb 2017 15:24:08 +0000 Subject: [PATCH 014/247] updating branch with master --- .../resources/qml/hifi/tablet/TabletMenu.qml | 13 +++++-- ...etMouseHandler.qml => TabletMenuStack.qml} | 37 +++++++++++-------- interface/src/Application.cpp | 11 +++++- 3 files changed, 42 insertions(+), 19 deletions(-) rename interface/resources/qml/hifi/tablet/{TabletMouseHandler.qml => TabletMenuStack.qml} (88%) diff --git a/interface/resources/qml/hifi/tablet/TabletMenu.qml b/interface/resources/qml/hifi/tablet/TabletMenu.qml index cd3a9cacae..618aa30fb4 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenu.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenu.qml @@ -2,8 +2,14 @@ import QtQuick 2.5 import QtGraphicalEffects 1.0 import QtQuick.Controls 1.4 import QtQml 2.2 +import QtWebChannel 1.0 +import QtWebEngine 1.1 +import HFWebEngineProfile 1.0 + + import "." import "../../styles-uit" +import "../../controls" FocusScope { id: tabletMenu @@ -14,8 +20,9 @@ FocusScope { property var rootMenu: Menu { objectName:"rootMenu" } property var point: Qt.point(50, 50) - - TabletMouseHandler { id: menuPopperUpper } + property var eventBridge; + signal sendToScript(var message); + TabletMenuStack { id: menuPopperUpper } Rectangle { id: bgNavBar @@ -101,6 +108,6 @@ FocusScope { buildMenu() } function buildMenu() { - menuPopperUpper.popup(tabletMenu, rootMenu.items) + menuPopperUpper.popup(rootMenu.items); } } diff --git a/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml similarity index 88% rename from interface/resources/qml/hifi/tablet/TabletMouseHandler.qml rename to interface/resources/qml/hifi/tablet/TabletMenuStack.qml index f2fa5f8d75..f84f90fbb3 100644 --- a/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml @@ -1,7 +1,7 @@ // // MessageDialog.qml // -// Created by Bradley Austin Davis on 18 Jan 2016 +// Created by Dante Ruiz on 13 Feb 2017 // Copyright 2016 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. @@ -28,8 +28,11 @@ Item { } } - QtObject { + StackView { + anchors.fill: parent id: d + objectName: "stack" + initialItem: topMenu property var menuStack: [] property var topMenu: null; property var modelMaker: Component { ListModel { } } @@ -53,6 +56,12 @@ Item { } } + function pushSource(path) { + } + + function popSource() { + } + function toModel(items) { var result = modelMaker.createObject(tabletMenu); for (var i = 0; i < items.length; ++i) { @@ -76,15 +85,15 @@ Item { } function popMenu() { - if (menuStack.length) { - menuStack.pop().destroy(); + if (d.depth) { + d.pop(); } - if (menuStack.length) { - topMenu = menuStack[menuStack.length - 1]; + if (d.depth) { + topMenu = d.currentItem; topMenu.focus = true; topMenu.forceActiveFocus(); // show current menu level on nav bar - if (topMenu.objectName === "" || menuStack.length === 1) { + if (topMenu.objectName === "" || d.depth === 1) { breadcrumbText.text = "Menu"; } else { breadcrumbText.text = topMenu.objectName; @@ -96,16 +105,14 @@ Item { } function pushMenu(newMenu) { - menuStack.push(newMenu); + d.push({ item:newMenu, destroyOnPop: true}); topMenu = newMenu; topMenu.focus = true; topMenu.forceActiveFocus(); } function clearMenus() { - while (menuStack.length) { - popMenu() - } + d.clear() } function clampMenuPosition(menu) { @@ -123,7 +130,7 @@ Item { } } - function buildMenu(items, targetPosition) { + function buildMenu(items) { var model = toModel(items); // Menus must be childed to desktop for Z-ordering var newMenu = menuViewMaker.createObject(tabletMenu, { model: model, isSubMenu: topMenu !== null }); @@ -154,13 +161,13 @@ Item { } - function popup(parent, items) { + function popup(items) { d.clearMenus(); - d.buildMenu(items, point); + d.buildMenu(items); } function closeLastMenu() { - if (d.menuStack.length > 1) { + if (d.depth > 1) { d.popMenu(); return true; } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b7aecfa597..663c1f81fb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5743,8 +5743,17 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) } void Application::toggleRunningScriptsWidget() const { + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tabletWindow = tabletScriptingInterface->getTabletWindow(); static const QUrl url("hifi/dialogs/RunningScripts.qml"); - DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); + if (tabletWindow) { + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet) { + tablet->pushOntoStack("../..//hifi/dialogs/RunningScripts.qml"); + } + } else { + DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); + } //if (_runningScriptsWidget->isVisible()) { // if (_runningScriptsWidget->hasFocus()) { // _runningScriptsWidget->hide(); From 792c7ff51f144d6515bf977f370be8267e94bbe4 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 15 Feb 2017 10:41:56 -0800 Subject: [PATCH 015/247] PointerEvent will now relay keyboard modifiers --- interface/src/ui/overlays/Overlays.cpp | 12 +++++------ interface/src/ui/overlays/Web3DOverlay.cpp | 3 +-- .../src/EntityTreeRenderer.cpp | 21 ++++++++++++------- libraries/shared/src/PointerEvent.cpp | 13 ++++++++---- libraries/shared/src/PointerEvent.h | 6 +++++- .../system/libraries/entitySelectionTool.js | 2 +- 6 files changed, 36 insertions(+), 21 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index e81e48f2bc..8a71d51a8b 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -693,8 +693,9 @@ static PointerEvent::Button toPointerButton(const QMouseEvent& event) { } } -PointerEvent Overlays::calculatePointerEvent(Overlay::Pointer overlay, PickRay ray, - RayToOverlayIntersectionResult rayPickResult, QMouseEvent* event, PointerEvent::EventType eventType) { +PointerEvent Overlays::calculatePointerEvent(Overlay::Pointer overlay, PickRay ray, + RayToOverlayIntersectionResult rayPickResult, QMouseEvent* event, + PointerEvent::EventType eventType) { auto thisOverlay = std::dynamic_pointer_cast<Web3DOverlay>(overlay); @@ -704,10 +705,9 @@ PointerEvent Overlays::calculatePointerEvent(Overlay::Pointer overlay, PickRay r auto dimensions = thisOverlay->getSize(); glm::vec2 pos2D = projectOntoOverlayXYPlane(position, rotation, dimensions, ray, rayPickResult); - PointerEvent pointerEvent(eventType, MOUSE_POINTER_ID, - pos2D, rayPickResult.intersection, - rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + + PointerEvent pointerEvent(eventType, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, + ray.direction, toPointerButton(*event), toPointerButtons(*event), event->modifiers()); return pointerEvent; } diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index cb649e8766..72bd0228f3 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -344,9 +344,8 @@ void Web3DOverlay::handlePointerEvent(const PointerEvent& event) { QList<QTouchEvent::TouchPoint> touchPoints; touchPoints.push_back(point); - QTouchEvent* touchEvent = new QTouchEvent(type); + QTouchEvent* touchEvent = new QTouchEvent(type, &_touchDevice, event.getKeyboardModifiers()); touchEvent->setWindow(_webSurface->getWindow()); - touchEvent->setDevice(&_touchDevice); touchEvent->setTarget(_webSurface->getRootItem()); touchEvent->setTouchPoints(touchPoints); touchEvent->setTouchPointStates(touchPointState); diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 4f4f3bf67f..4e105e4149 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -713,7 +713,8 @@ void EntityTreeRenderer::mousePressEvent(QMouseEvent* event) { PointerEvent pointerEvent(PointerEvent::Press, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + toPointerButton(*event), toPointerButtons(*event), + Qt::NoModifier); // TODO -- check for modifier keys? emit mousePressOnEntity(rayPickResult.entityID, pointerEvent); @@ -753,7 +754,8 @@ void EntityTreeRenderer::mouseReleaseEvent(QMouseEvent* event) { PointerEvent pointerEvent(PointerEvent::Release, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + toPointerButton(*event), toPointerButtons(*event), + Qt::NoModifier); // TODO -- check for modifier keys? emit mouseReleaseOnEntity(rayPickResult.entityID, pointerEvent); if (_entitiesScriptEngine) { @@ -773,7 +775,8 @@ void EntityTreeRenderer::mouseReleaseEvent(QMouseEvent* event) { PointerEvent pointerEvent(PointerEvent::Release, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + toPointerButton(*event), toPointerButtons(*event), + Qt::NoModifier); // TODO -- check for modifier keys? emit clickReleaseOnEntity(_currentClickingOnEntityID, pointerEvent); if (_entitiesScriptEngine) { @@ -803,7 +806,8 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event) { PointerEvent pointerEvent(PointerEvent::Move, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + toPointerButton(*event), toPointerButtons(*event), + Qt::NoModifier); // TODO -- check for modifier keys? emit mouseMoveOnEntity(rayPickResult.entityID, pointerEvent); @@ -823,7 +827,8 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event) { PointerEvent pointerEvent(PointerEvent::Move, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + toPointerButton(*event), toPointerButtons(*event), + Qt::NoModifier); // TODO -- check for modifier keys? emit hoverLeaveEntity(_currentHoverOverEntityID, pointerEvent); if (_entitiesScriptEngine) { @@ -864,7 +869,8 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event) { PointerEvent pointerEvent(PointerEvent::Move, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + toPointerButton(*event), toPointerButtons(*event), + Qt::NoModifier); // TODO -- check for modifier keys? emit hoverLeaveEntity(_currentHoverOverEntityID, pointerEvent); if (_entitiesScriptEngine) { @@ -883,7 +889,8 @@ void EntityTreeRenderer::mouseMoveEvent(QMouseEvent* event) { PointerEvent pointerEvent(PointerEvent::Move, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + toPointerButton(*event), toPointerButtons(*event), + Qt::NoModifier); // TODO -- check for modifier keys? emit holdingClickOnEntity(_currentClickingOnEntityID, pointerEvent); if (_entitiesScriptEngine) { diff --git a/libraries/shared/src/PointerEvent.cpp b/libraries/shared/src/PointerEvent.cpp index ed9acb9ada..0833657886 100644 --- a/libraries/shared/src/PointerEvent.cpp +++ b/libraries/shared/src/PointerEvent.cpp @@ -25,9 +25,9 @@ PointerEvent::PointerEvent() { } PointerEvent::PointerEvent(EventType type, uint32_t id, - const glm::vec2& pos2D, const glm::vec3& pos3D, - const glm::vec3& normal, const glm::vec3& direction, - Button button, uint32_t buttons) : + const glm::vec2& pos2D, const glm::vec3& pos3D, + const glm::vec3& normal, const glm::vec3& direction, + Button button, uint32_t buttons, Qt::KeyboardModifiers keyboardModifiers) : _type(type), _id(id), _pos2D(pos2D), @@ -35,7 +35,8 @@ PointerEvent::PointerEvent(EventType type, uint32_t id, _normal(normal), _direction(direction), _button(button), - _buttons(buttons) + _buttons(buttons), + _keyboardModifiers(keyboardModifiers) { ; } @@ -119,6 +120,8 @@ QScriptValue PointerEvent::toScriptValue(QScriptEngine* engine, const PointerEve obj.setProperty("isSecondaryHeld", areFlagsSet(event._buttons, SecondaryButton)); obj.setProperty("isTertiaryHeld", areFlagsSet(event._buttons, TertiaryButton)); + obj.setProperty("keyboardModifiers", QScriptValue(event.getKeyboardModifiers())); + return obj; } @@ -174,5 +177,7 @@ void PointerEvent::fromScriptValue(const QScriptValue& object, PointerEvent& eve if (tertiary) { event._buttons |= TertiaryButton; } + + event._keyboardModifiers = (Qt::KeyboardModifiers)(object.property("keyboardModifiers").toUInt32()); } } diff --git a/libraries/shared/src/PointerEvent.h b/libraries/shared/src/PointerEvent.h index 054835c4fc..2b98a50487 100644 --- a/libraries/shared/src/PointerEvent.h +++ b/libraries/shared/src/PointerEvent.h @@ -12,6 +12,8 @@ #ifndef hifi_PointerEvent_h #define hifi_PointerEvent_h +#include <Qt> + #include <stdint.h> #include <glm/glm.hpp> #include <QScriptValue> @@ -35,7 +37,7 @@ public: PointerEvent(EventType type, uint32_t id, const glm::vec2& pos2D, const glm::vec3& pos3D, const glm::vec3& normal, const glm::vec3& direction, - Button button, uint32_t buttons); + Button button, uint32_t buttons, Qt::KeyboardModifiers keyboardModifiers); static QScriptValue toScriptValue(QScriptEngine* engine, const PointerEvent& event); static void fromScriptValue(const QScriptValue& object, PointerEvent& event); @@ -50,6 +52,7 @@ public: const glm::vec3& getDirection() const { return _direction; } Button getButton() const { return _button; } uint32_t getButtons() const { return _buttons; } + Qt::KeyboardModifiers getKeyboardModifiers() const { return _keyboardModifiers; } private: EventType _type; @@ -61,6 +64,7 @@ private: Button _button { NoButtons }; // button assosiated with this event, (if type is Press, this will be the button that is pressed) uint32_t _buttons { NoButtons }; // the current state of all the buttons. + Qt::KeyboardModifiers _keyboardModifiers { Qt::NoModifier }; }; Q_DECLARE_METATYPE(PointerEvent) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 08ae7ae5f7..2471de98d3 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -2064,7 +2064,7 @@ SelectionDisplay = (function() { }); Overlays.editOverlay(grabberPointLightL, { visible: false - }); + }); Overlays.editOverlay(grabberPointLightR, { visible: false }); From e6853a925549e148648349e7351d8a073e9c3278 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 15 Feb 2017 18:57:06 +0000 Subject: [PATCH 016/247] updated menu stack --- interface/resources/qml/hifi/tablet/TabletMenu.qml | 13 +++++-------- .../resources/qml/hifi/tablet/TabletMenuStack.qml | 7 ++++++- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletMenu.qml b/interface/resources/qml/hifi/tablet/TabletMenu.qml index 10ee247b2d..e4895740e6 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenu.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenu.qml @@ -19,7 +19,7 @@ FocusScope { height: 720 property var rootMenu: Menu { objectName:"rootMenu" } - property var point: Qt.point(50, 50) + property var point: Qt.point(50, 50); property var eventBridge; signal sendToScript(var message); TabletMenuStack { id: menuPopperUpper } @@ -64,6 +64,7 @@ FocusScope { // navigate back to root level menu onClicked: { buildMenu(); + breadcrumbText.text = "Menu"; tabletRoot.playButtonClickSound(); } } @@ -106,12 +107,9 @@ FocusScope { function setRootMenu(menu) { tabletMenu.rootMenu = menu - buildMenu() + buildMenu(); } function buildMenu() { -<<<<<<< HEAD - menuPopperUpper.popup(rootMenu.items); -======= // Build submenu if specified. if (subMenu !== "") { var index = 0; @@ -124,13 +122,12 @@ FocusScope { } subMenu = ""; // Continue with full menu after initially displaying submenu. if (found) { - menuPopperUpper.popup(tabletMenu, rootMenu.items[index].items); + menuPopperUpper.popup(rootMenu.items[index].items); return; } } // Otherwise build whole menu. - menuPopperUpper.popup(tabletMenu, rootMenu.items); ->>>>>>> 01bdac49d04ec897a3da7a264a1a26748a4e1938 + menuPopperUpper.popup(rootMenu.items); } } diff --git a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml index f84f90fbb3..c33f4e648b 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml @@ -27,12 +27,13 @@ Item { d.clearMenus(); } } - + StackView { anchors.fill: parent id: d objectName: "stack" initialItem: topMenu + property var menuStack: [] property var topMenu: null; property var modelMaker: Component { ListModel { } } @@ -57,9 +58,13 @@ Item { } function pushSource(path) { + d.push(Qt.resolvedUrl(path)); + d.currentItem.eventBridge = tabletMenu.eventBridge + d.currentItem.sendToScript.connect(tabletMenu.sendToScript); } function popSource() { + d.pop(); } function toModel(items) { From 1038e97c7f1c5a0d80e7fe08d8ebcc17dee88b1d Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Wed, 15 Feb 2017 11:14:23 -0800 Subject: [PATCH 017/247] fix windows build --- libraries/shared/src/PointerEvent.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/shared/src/PointerEvent.h b/libraries/shared/src/PointerEvent.h index 2b98a50487..980510b091 100644 --- a/libraries/shared/src/PointerEvent.h +++ b/libraries/shared/src/PointerEvent.h @@ -64,7 +64,7 @@ private: Button _button { NoButtons }; // button assosiated with this event, (if type is Press, this will be the button that is pressed) uint32_t _buttons { NoButtons }; // the current state of all the buttons. - Qt::KeyboardModifiers _keyboardModifiers { Qt::NoModifier }; + Qt::KeyboardModifiers _keyboardModifiers; // set of keys held when event was generated }; Q_DECLARE_METATYPE(PointerEvent) From 3ea0f6d2d2ea08b82b6f8f83d486048d924ac368 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Wed, 15 Feb 2017 11:34:48 -0800 Subject: [PATCH 018/247] allow lasers to scroll tablet while in edit-mode --- scripts/system/controllers/handControllerGrab.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 6e81c3de52..4c08bb6ef5 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -862,7 +862,8 @@ function MyController(hand) { if ((isInEditMode() && this.grabbedEntity !== HMD.tabletID) && (newState !== STATE_OFF && newState !== STATE_SEARCHING && - newState !== STATE_OVERLAY_STYLUS_TOUCHING)) { + newState !== STATE_OVERLAY_STYLUS_TOUCHING && + newState !== STATE_OVERLAY_LASER_TOUCHING)) { return; } setGrabCommunications((newState === STATE_DISTANCE_HOLDING) || (newState === STATE_NEAR_GRABBING)); From 076b0ed3ab1b2308d593c94ced1cf096350a5582 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Wed, 15 Feb 2017 15:00:25 -0800 Subject: [PATCH 019/247] get particle explorer working, again --- scripts/system/edit.js | 17 ++++++++----- .../system/libraries/entitySelectionTool.js | 25 +++---------------- .../particle_explorer/particleExplorer.html | 2 +- .../particle_explorer/particleExplorer.js | 9 ++++--- .../particle_explorer/particleExplorerTool.js | 5 ++-- 5 files changed, 25 insertions(+), 33 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 39dd3bc598..fdc14445c5 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -1924,12 +1924,17 @@ entityListTool.webView.webEventReceived.connect(function (data) { selectedParticleEntity = ids[0]; particleExplorerTool.setActiveParticleEntity(ids[0]); - particleExplorerTool.webView.webEventReceived.connect(function (data) { - data = JSON.parse(data); - if (data.messageType === "page_loaded") { - particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); - } - }); + if (Settings.getValue("HUDUIEnabled")) { + particleExplorerTool.webView.webEventReceived.connect(function (data) { + data = JSON.parse(data); + if (data.messageType === "page_loaded") { + particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); + } + }); + } else { + // in the tablet version, the page was loaded earlier + particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); + } } else { selectedParticleEntity = 0; particleExplorerTool.destroyWebView(); diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 2471de98d3..596620b59a 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -1034,30 +1034,13 @@ SelectionDisplay = (function() { that.triggered = true; if (activeHand !== hand) { // No switching while the other is already triggered, so no need to release. - activeHand = (activeHand === Controller.Standard.RightHand) ? Controller.Standard.LeftHand : Controller.Standard.RightHand; + activeHand = (activeHand === Controller.Standard.RightHand) ? + Controller.Standard.LeftHand : Controller.Standard.RightHand; } if (Reticle.pointingAtSystemOverlay || Overlays.getOverlayAtPoint(Reticle.position)) { return; } - var eventResult = that.mousePressEvent({}); - // if (!eventResult || (eventResult === 'selectionBox')) { - // var pickRay = controllerComputePickRay(); - // if (pickRay) { - // var entityIntersection = Entities.findRayIntersection(pickRay, true); - - - // var overlayIntersection = Overlays.findRayIntersection(pickRay); - // if (entityIntersection.intersects && - // (!overlayIntersection.intersects || (entityIntersection.distance < overlayIntersection.distance))) { - - // if (HMD.tabletID === entityIntersection.entityID) { - // return; - // } - - // selectionManager.setSelections([entityIntersection.entityID]); - // } - // } - // } + that.mousePressEvent({}); } else if (that.triggered && (value < that.TRIGGER_OFF_VALUE)) { that.triggered = false; that.mouseReleaseEvent({}); @@ -2065,7 +2048,7 @@ SelectionDisplay = (function() { Overlays.editOverlay(grabberPointLightL, { visible: false }); - Overlays.editOverlay(grabberPointLightR, { + Overlays.editOverlay(grabberPointLightR, { visible: false }); Overlays.editOverlay(grabberPointLightF, { diff --git a/scripts/system/particle_explorer/particleExplorer.html b/scripts/system/particle_explorer/particleExplorer.html index 260d8a7813..d12ceac14b 100644 --- a/scripts/system/particle_explorer/particleExplorer.html +++ b/scripts/system/particle_explorer/particleExplorer.html @@ -76,4 +76,4 @@ body{ </div> </body> -</html> \ No newline at end of file +</html> diff --git a/scripts/system/particle_explorer/particleExplorer.js b/scripts/system/particle_explorer/particleExplorer.js index 4fd0978a84..44fa242435 100644 --- a/scripts/system/particle_explorer/particleExplorer.js +++ b/scripts/system/particle_explorer/particleExplorer.js @@ -358,9 +358,12 @@ function listenForSettingsUpdates() { settings[key] = value; }); - loadGUI(); + if (gui) { + manuallyUpdateDisplay(); + } else { + loadGUI(); + } } - }); } @@ -505,4 +508,4 @@ function registerDOMElementsForListenerBlocking() { }); }); }); -} \ No newline at end of file +} diff --git a/scripts/system/particle_explorer/particleExplorerTool.js b/scripts/system/particle_explorer/particleExplorerTool.js index e592161414..0be7c6b588 100644 --- a/scripts/system/particle_explorer/particleExplorerTool.js +++ b/scripts/system/particle_explorer/particleExplorerTool.js @@ -58,8 +58,9 @@ ParticleExplorerTool = function() { that.activeParticleEntity = id; } + if (Settings.getValue("HUDUIEnabled")) { + that.createWebView(); + } return that; - - }; From 33c1c3ac112bb179fa5bfaaa856ebfdb85f1a9f7 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Wed, 15 Feb 2017 15:19:49 -0800 Subject: [PATCH 020/247] when a new particle-entity is created, hook the particle explorer to it --- scripts/system/edit.js | 54 +++++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index fdc14445c5..4820421d46 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -180,8 +180,12 @@ var toolBar = (function () { position = grid.snapToSurface(grid.snapToGrid(position, false, dimensions), dimensions), properties.position = position; entityID = Entities.addEntity(properties); + if (properties.type == "ParticleEffect") { + selectParticleEntity(entityID); + } } else { - Window.notifyEditError("Can't create " + properties.type + ": " + properties.type + " would be out of bounds."); + Window.notifyEditError("Can't create " + properties.type + ": " + + properties.type + " would be out of bounds."); } selectionManager.clearSelections(); @@ -1903,6 +1907,32 @@ var showMenuItem = propertyMenu.addMenuItem("Show in Marketplace"); var propertiesTool = new PropertiesTool(); var particleExplorerTool = new ParticleExplorerTool(); var selectedParticleEntity = 0; + +function selectParticleEntity(entityID) { + var properties = Entities.getEntityProperties(entityID); + var particleData = { + messageType: "particle_settings", + currentProperties: properties + }; + particleExplorerTool.destroyWebView(); + particleExplorerTool.createWebView(); + + selectedParticleEntity = entityID; + particleExplorerTool.setActiveParticleEntity(entityID); + + if (Settings.getValue("HUDUIEnabled")) { + particleExplorerTool.webView.webEventReceived.connect(function (data) { + data = JSON.parse(data); + if (data.messageType === "page_loaded") { + particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); + } + }); + } else { + // in the tablet version, the page was loaded earlier + particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); + } +} + entityListTool.webView.webEventReceived.connect(function (data) { data = JSON.parse(data); if (data.type === "selectionUpdate") { @@ -1914,27 +1944,7 @@ entityListTool.webView.webEventReceived.connect(function (data) { return; } // Destroy the old particles web view first - particleExplorerTool.destroyWebView(); - particleExplorerTool.createWebView(); - var properties = Entities.getEntityProperties(ids[0]); - var particleData = { - messageType: "particle_settings", - currentProperties: properties - }; - selectedParticleEntity = ids[0]; - particleExplorerTool.setActiveParticleEntity(ids[0]); - - if (Settings.getValue("HUDUIEnabled")) { - particleExplorerTool.webView.webEventReceived.connect(function (data) { - data = JSON.parse(data); - if (data.messageType === "page_loaded") { - particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); - } - }); - } else { - // in the tablet version, the page was loaded earlier - particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); - } + selectParticleEntity(ids[0]) } else { selectedParticleEntity = 0; particleExplorerTool.destroyWebView(); From 3d7733219cb0343b615d48f484277069fb5fb740 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Wed, 15 Feb 2017 16:15:18 -0800 Subject: [PATCH 021/247] edit's open-asset-browser button works, again --- scripts/system/edit.js | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 4820421d46..5f7556592e 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -330,9 +330,12 @@ var toolBar = (function () { that.toggle(); }); - toolBar = Toolbars.getToolbar(EDIT_TOOLBAR); - toolBar.writeProperty("shown", false); - addButton("openAssetBrowserButton","assets-01.svg",function(){ + if (Settings.getValue("HUDUIEnabled")) { + toolBar = Toolbars.getToolbar(EDIT_TOOLBAR); + toolBar.writeProperty("shown", false); + } + + addButton("openAssetBrowserButton", "assets-01.svg", function(){ Window.showAssetServer(); }); @@ -543,12 +546,14 @@ var toolBar = (function () { // everybody else to think that Interface has lost focus overall. fogbugzid:558 // Window.setFocus(); } - // Sets visibility of tool buttons, excluding the power button - toolBar.writeProperty("shown", active); - var visible = toolBar.readProperty("visible"); - if (active && !visible) { - toolBar.writeProperty("shown", false); - toolBar.writeProperty("shown", true); + if (Settings.getValue("HUDUIEnabled")) { + // Sets visibility of tool buttons, excluding the power button + toolBar.writeProperty("shown", active); + var visible = toolBar.readProperty("visible"); + if (active && !visible) { + toolBar.writeProperty("shown", false); + toolBar.writeProperty("shown", true); + } } lightOverlayManager.setVisible(isActive && Menu.isOptionChecked(MENU_SHOW_LIGHTS_IN_EDIT_MODE)); Entities.setDrawZoneBoundaries(isActive && Menu.isOptionChecked(MENU_SHOW_ZONES_IN_EDIT_MODE)); @@ -1593,7 +1598,7 @@ var PropertiesTool = function (opts) { for (i = 0; i < selectionManager.selections.length; i++) { Entities.editEntity(selectionManager.selections[i], properties); } - } else { + } else if (data.properties) { if (data.properties.dynamic === false) { // this object is leaving dynamic, so we zero its velocities data.properties.velocity = { From 12b8a7748895dfd30ef958431038e48c69d459e2 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Wed, 15 Feb 2017 16:29:50 -0800 Subject: [PATCH 022/247] in edit.js, convert entity property ID to be a text-field so the data can be copied --- scripts/system/html/entityProperties.html | 2 +- scripts/system/html/js/entityProperties.js | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/system/html/entityProperties.html b/scripts/system/html/entityProperties.html index b11127b26c..59c420b547 100644 --- a/scripts/system/html/entityProperties.html +++ b/scripts/system/html/entityProperties.html @@ -77,7 +77,7 @@ </div> <div id="id" class="property value"> <label>ID:</label> - <span id="property-id" class="selectable"></span> + <input type="text" id="property-id" readonly> </div> <div class="section-header hyperlink-group hyperlink-section"> <label>Hyperlink</label><span>M</span> diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index d38a0e66fa..35063a254f 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -740,7 +740,7 @@ function loaded() { } elTypeIcon.style.display = "none"; elType.innerHTML = "<i>No selection</i>"; - elID.innerHTML = ""; + elID.value = ""; disableProperties(); } else if (data.selections && data.selections.length > 1) { deleteJSONEditor(); @@ -770,7 +770,7 @@ function loaded() { elTypeIcon.innerHTML = ICON_FOR_TYPE[type]; elTypeIcon.style.display = "inline-block"; - elID.innerHTML = ids.join("<br>"); + elID.value = ""; disableProperties(); } else { @@ -783,7 +783,7 @@ function loaded() { //the event bridge and json parsing handle our avatar id string differently. lastEntityID = '"' + properties.id + '"'; - elID.innerHTML = properties.id; + elID.value = properties.id; elType.innerHTML = properties.type; elTypeIcon.innerHTML = ICON_FOR_TYPE[properties.type]; From 896f9d7181f92e77746a1e4cd41eca9897ffc3de Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Thu, 16 Feb 2017 15:58:26 +0000 Subject: [PATCH 023/247] refreshing with master --- interface/src/Application.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4011eafb6a..78b81f2075 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5744,13 +5744,10 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) void Application::toggleRunningScriptsWidget() const { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); - auto tabletWindow = tabletScriptingInterface->getTabletWindow(); static const QUrl url("hifi/dialogs/RunningScripts.qml"); - if (tabletWindow) { + if (true) { auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet) { - tablet->pushOntoStack("../..//hifi/dialogs/RunningScripts.qml"); - } + tablet->pushOntoStack("../..//hifi/dialogs/RunningScripts.qml"); } else { DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); } From 2a97ebb076254f9f92aa64f0b33ab0af66311028 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 15 Feb 2017 15:24:08 +0000 Subject: [PATCH 024/247] updating branch with master --- .../resources/qml/hifi/tablet/TabletMenu.qml | 15 +++++++- ...etMouseHandler.qml => TabletMenuStack.qml} | 37 +++++++++++-------- interface/src/Application.cpp | 11 +++++- .../system/libraries/entitySelectionTool.js | 2 +- 4 files changed, 46 insertions(+), 19 deletions(-) rename interface/resources/qml/hifi/tablet/{TabletMouseHandler.qml => TabletMenuStack.qml} (88%) diff --git a/interface/resources/qml/hifi/tablet/TabletMenu.qml b/interface/resources/qml/hifi/tablet/TabletMenu.qml index c154ac0f49..1903a700d6 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenu.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenu.qml @@ -2,8 +2,14 @@ import QtQuick 2.5 import QtGraphicalEffects 1.0 import QtQuick.Controls 1.4 import QtQml 2.2 +import QtWebChannel 1.0 +import QtWebEngine 1.1 +import HFWebEngineProfile 1.0 + + import "." import "../../styles-uit" +import "../../controls" FocusScope { id: tabletMenu @@ -15,8 +21,9 @@ FocusScope { property var rootMenu: Menu { objectName:"rootMenu" } property var point: Qt.point(50, 50) property string subMenu: "" - - TabletMouseHandler { id: menuPopperUpper } + property var eventBridge; + signal sendToScript(var message); + TabletMenuStack { id: menuPopperUpper } Rectangle { id: bgNavBar @@ -102,6 +109,7 @@ FocusScope { buildMenu() } function buildMenu() { +<<<<<<< HEAD // Build submenu if specified. if (subMenu !== "") { var index = 0; @@ -121,5 +129,8 @@ FocusScope { // Otherwise build whole menu. menuPopperUpper.popup(tabletMenu, rootMenu.items); +======= + menuPopperUpper.popup(rootMenu.items); +>>>>>>> updating branch with master } } diff --git a/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml similarity index 88% rename from interface/resources/qml/hifi/tablet/TabletMouseHandler.qml rename to interface/resources/qml/hifi/tablet/TabletMenuStack.qml index f2fa5f8d75..f84f90fbb3 100644 --- a/interface/resources/qml/hifi/tablet/TabletMouseHandler.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml @@ -1,7 +1,7 @@ // // MessageDialog.qml // -// Created by Bradley Austin Davis on 18 Jan 2016 +// Created by Dante Ruiz on 13 Feb 2017 // Copyright 2016 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. @@ -28,8 +28,11 @@ Item { } } - QtObject { + StackView { + anchors.fill: parent id: d + objectName: "stack" + initialItem: topMenu property var menuStack: [] property var topMenu: null; property var modelMaker: Component { ListModel { } } @@ -53,6 +56,12 @@ Item { } } + function pushSource(path) { + } + + function popSource() { + } + function toModel(items) { var result = modelMaker.createObject(tabletMenu); for (var i = 0; i < items.length; ++i) { @@ -76,15 +85,15 @@ Item { } function popMenu() { - if (menuStack.length) { - menuStack.pop().destroy(); + if (d.depth) { + d.pop(); } - if (menuStack.length) { - topMenu = menuStack[menuStack.length - 1]; + if (d.depth) { + topMenu = d.currentItem; topMenu.focus = true; topMenu.forceActiveFocus(); // show current menu level on nav bar - if (topMenu.objectName === "" || menuStack.length === 1) { + if (topMenu.objectName === "" || d.depth === 1) { breadcrumbText.text = "Menu"; } else { breadcrumbText.text = topMenu.objectName; @@ -96,16 +105,14 @@ Item { } function pushMenu(newMenu) { - menuStack.push(newMenu); + d.push({ item:newMenu, destroyOnPop: true}); topMenu = newMenu; topMenu.focus = true; topMenu.forceActiveFocus(); } function clearMenus() { - while (menuStack.length) { - popMenu() - } + d.clear() } function clampMenuPosition(menu) { @@ -123,7 +130,7 @@ Item { } } - function buildMenu(items, targetPosition) { + function buildMenu(items) { var model = toModel(items); // Menus must be childed to desktop for Z-ordering var newMenu = menuViewMaker.createObject(tabletMenu, { model: model, isSubMenu: topMenu !== null }); @@ -154,13 +161,13 @@ Item { } - function popup(parent, items) { + function popup(items) { d.clearMenus(); - d.buildMenu(items, point); + d.buildMenu(items); } function closeLastMenu() { - if (d.menuStack.length > 1) { + if (d.depth > 1) { d.popMenu(); return true; } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 488e97b5e6..4011eafb6a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5743,8 +5743,17 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) } void Application::toggleRunningScriptsWidget() const { + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tabletWindow = tabletScriptingInterface->getTabletWindow(); static const QUrl url("hifi/dialogs/RunningScripts.qml"); - DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); + if (tabletWindow) { + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet) { + tablet->pushOntoStack("../..//hifi/dialogs/RunningScripts.qml"); + } + } else { + DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); + } //if (_runningScriptsWidget->isVisible()) { // if (_runningScriptsWidget->hasFocus()) { // _runningScriptsWidget->hide(); diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 596620b59a..0fd0b01d25 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -2048,7 +2048,7 @@ SelectionDisplay = (function() { Overlays.editOverlay(grabberPointLightL, { visible: false }); - Overlays.editOverlay(grabberPointLightR, { + Overlays.editOverlay(grabberPointLightR, { visible: false }); Overlays.editOverlay(grabberPointLightF, { From b50bc99cbdccb8d74bc4ff3b93dfcfd63de16338 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 15 Feb 2017 18:57:06 +0000 Subject: [PATCH 025/247] updated menu stack --- interface/resources/qml/hifi/tablet/TabletMenu.qml | 12 ++++++++++-- .../resources/qml/hifi/tablet/TabletMenuStack.qml | 7 ++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletMenu.qml b/interface/resources/qml/hifi/tablet/TabletMenu.qml index 1903a700d6..ec916a60f9 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenu.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenu.qml @@ -64,6 +64,7 @@ FocusScope { // navigate back to root level menu onClicked: { buildMenu(); + breadcrumbText.text = "Menu"; tabletRoot.playButtonClickSound(); } } @@ -106,10 +107,13 @@ FocusScope { function setRootMenu(menu) { tabletMenu.rootMenu = menu - buildMenu() + buildMenu(); } function buildMenu() { <<<<<<< HEAD +<<<<<<< HEAD +======= +>>>>>>> updated menu stack // Build submenu if specified. if (subMenu !== "") { var index = 0; @@ -122,15 +126,19 @@ FocusScope { } subMenu = ""; // Continue with full menu after initially displaying submenu. if (found) { - menuPopperUpper.popup(tabletMenu, rootMenu.items[index].items); + menuPopperUpper.popup(rootMenu.items[index].items); return; } } // Otherwise build whole menu. +<<<<<<< HEAD menuPopperUpper.popup(tabletMenu, rootMenu.items); ======= menuPopperUpper.popup(rootMenu.items); >>>>>>> updating branch with master +======= + menuPopperUpper.popup(rootMenu.items); +>>>>>>> updated menu stack } } diff --git a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml index f84f90fbb3..c33f4e648b 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml @@ -27,12 +27,13 @@ Item { d.clearMenus(); } } - + StackView { anchors.fill: parent id: d objectName: "stack" initialItem: topMenu + property var menuStack: [] property var topMenu: null; property var modelMaker: Component { ListModel { } } @@ -57,9 +58,13 @@ Item { } function pushSource(path) { + d.push(Qt.resolvedUrl(path)); + d.currentItem.eventBridge = tabletMenu.eventBridge + d.currentItem.sendToScript.connect(tabletMenu.sendToScript); } function popSource() { + d.pop(); } function toModel(items) { From 7ad8a389f62eb743f40d31fb37ed2ab47cfc3c1b Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Thu, 16 Feb 2017 15:58:26 +0000 Subject: [PATCH 026/247] refreshing with master --- interface/src/Application.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4011eafb6a..78b81f2075 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5744,13 +5744,10 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) void Application::toggleRunningScriptsWidget() const { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); - auto tabletWindow = tabletScriptingInterface->getTabletWindow(); static const QUrl url("hifi/dialogs/RunningScripts.qml"); - if (tabletWindow) { + if (true) { auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet) { - tablet->pushOntoStack("../..//hifi/dialogs/RunningScripts.qml"); - } + tablet->pushOntoStack("../..//hifi/dialogs/RunningScripts.qml"); } else { DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); } From 21b0e45b0f79232415e2698731e8dd990989d659 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Thu, 16 Feb 2017 09:56:50 -0800 Subject: [PATCH 027/247] don't show keyboard in edit.js unless HMD is being worn --- interface/src/Application.cpp | 3 +++ .../src/scripting/HMDScriptingInterface.cpp | 2 +- libraries/gl/src/gl/OffscreenQmlSurface.cpp | 26 +++++++++++-------- .../shared/src/shared/GlobalAppProperties.cpp | 1 + .../shared/src/shared/GlobalAppProperties.h | 1 + 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 488e97b5e6..6e03db5192 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -831,6 +831,9 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(this, &QCoreApplication::aboutToQuit, addressManager.data(), &AddressManager::storeCurrentAddress); connect(this, &Application::activeDisplayPluginChanged, this, &Application::updateThreadPoolCount); + connect(this, &Application::activeDisplayPluginChanged, this, [](){ + qApp->setProperty(hifi::properties::HMD, qApp->isHMDMode()); + }); // Save avatar location immediately after a teleport. connect(myAvatar.get(), &MyAvatar::positionGoneTo, diff --git a/interface/src/scripting/HMDScriptingInterface.cpp b/interface/src/scripting/HMDScriptingInterface.cpp index 2bca793d80..37f10ed415 100644 --- a/interface/src/scripting/HMDScriptingInterface.cpp +++ b/interface/src/scripting/HMDScriptingInterface.cpp @@ -131,7 +131,7 @@ glm::quat HMDScriptingInterface::getOrientation() const { return glm::quat(); } -bool HMDScriptingInterface::isMounted() const{ +bool HMDScriptingInterface::isMounted() const { auto displayPlugin = qApp->getActiveDisplayPlugin(); return (displayPlugin->isHmd() && displayPlugin->isDisplayVisible()); } diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.cpp b/libraries/gl/src/gl/OffscreenQmlSurface.cpp index 447b9d56aa..2d940d6755 100644 --- a/libraries/gl/src/gl/OffscreenQmlSurface.cpp +++ b/libraries/gl/src/gl/OffscreenQmlSurface.cpp @@ -32,6 +32,7 @@ #include <AccountManager.h> #include <NetworkAccessManager.h> #include <GLMHelpers.h> +#include <shared/GlobalAppProperties.h> #include "OffscreenGLCanvas.h" #include "GLHelpers.h" @@ -911,20 +912,23 @@ void OffscreenQmlSurface::setKeyboardRaised(QObject* object, bool raised, bool n return; } - QQuickItem* item = dynamic_cast<QQuickItem*>(object); - while (item) { - // Numeric value may be set in parameter from HTML UI; for QML UI, detect numeric fields here. - numeric = numeric || QString(item->metaObject()->className()).left(7) == "SpinBox"; + // if HMD is being worn, allow keyboard to open. allow it to close, HMD or not. + if (!raised || qApp->property(hifi::properties::HMD).toBool()) { + QQuickItem* item = dynamic_cast<QQuickItem*>(object); + while (item) { + // Numeric value may be set in parameter from HTML UI; for QML UI, detect numeric fields here. + numeric = numeric || QString(item->metaObject()->className()).left(7) == "SpinBox"; - if (item->property("keyboardRaised").isValid()) { - // FIXME - HMD only: Possibly set value of "keyboardEnabled" per isHMDMode() for use in WebView.qml. - if (item->property("punctuationMode").isValid()) { - item->setProperty("punctuationMode", QVariant(numeric)); + if (item->property("keyboardRaised").isValid()) { + // FIXME - HMD only: Possibly set value of "keyboardEnabled" per isHMDMode() for use in WebView.qml. + if (item->property("punctuationMode").isValid()) { + item->setProperty("punctuationMode", QVariant(numeric)); + } + item->setProperty("keyboardRaised", QVariant(raised)); + return; } - item->setProperty("keyboardRaised", QVariant(raised)); - return; + item = dynamic_cast<QQuickItem*>(item->parentItem()); } - item = dynamic_cast<QQuickItem*>(item->parentItem()); } } diff --git a/libraries/shared/src/shared/GlobalAppProperties.cpp b/libraries/shared/src/shared/GlobalAppProperties.cpp index f2d8990708..b0ba0bf83d 100644 --- a/libraries/shared/src/shared/GlobalAppProperties.cpp +++ b/libraries/shared/src/shared/GlobalAppProperties.cpp @@ -16,6 +16,7 @@ namespace hifi { namespace properties { const char* OCULUS_STORE = "com.highfidelity.oculusStore"; const char* TEST = "com.highfidelity.test"; const char* TRACING = "com.highfidelity.tracing"; + const char* HMD = "com.highfidelity.hmd"; namespace gl { const char* BACKEND = "com.highfidelity.gl.backend"; diff --git a/libraries/shared/src/shared/GlobalAppProperties.h b/libraries/shared/src/shared/GlobalAppProperties.h index 609f2afd94..b1811586ba 100644 --- a/libraries/shared/src/shared/GlobalAppProperties.h +++ b/libraries/shared/src/shared/GlobalAppProperties.h @@ -18,6 +18,7 @@ namespace hifi { namespace properties { extern const char* OCULUS_STORE; extern const char* TEST; extern const char* TRACING; + extern const char* HMD; namespace gl { extern const char* BACKEND; From afd56bbbbe0db2b8c46a1c5d2cdfb5f9eaf0a8a8 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 17 Feb 2017 00:01:12 +0000 Subject: [PATCH 028/247] fixed qml font path issue for desktop and tablet --- .../qml/hifi/dialogs/TabletRunningScripts.qml | 342 ++++++++++++++++++ .../resources/qml/hifi/tablet/TabletMenu.qml | 11 - .../qml/hifi/tablet/TabletMenuStack.qml | 14 +- .../qml/styles-uit/FiraSansSemiBold.qml | 2 +- .../resources/qml/styles-uit/HiFiGlyphs.qml | 2 +- .../resources/qml/styles-uit/RalewayBold.qml | 2 +- .../qml/styles-uit/RalewayRegular.qml | 2 +- .../qml/styles-uit/RalewaySemiBold.qml | 2 +- interface/src/Application.cpp | 11 +- interface/src/ui/overlays/Web3DOverlay.cpp | 4 + 10 files changed, 358 insertions(+), 34 deletions(-) create mode 100644 interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml diff --git a/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml b/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml new file mode 100644 index 0000000000..235f7103ff --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml @@ -0,0 +1,342 @@ +// +// RunningScripts.qml +// +// Created by Bradley Austin Davis on 12 Jan 2016 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Dialogs 1.2 as OriginalDialogs +import Qt.labs.settings 1.0 + +import "../../styles-uit" +import "../../controls-uit" as HifiControls +import "../../windows" + +Item { + id: root + objectName: "RunningScripts" + HifiConstants { id: hifi } + signal sendToScript(var message); + property var eventBridge; + property var scripts: ScriptDiscoveryService; + property var scriptsModel: scripts.scriptsModelFilter + property var runningScriptsModel: ListModel { } + property bool isHMD: false + + Connections { + target: ScriptDiscoveryService + onScriptCountChanged: updateRunningScripts(); + } + + Component.onCompleted: { + isHMD = HMD.active; + updateRunningScripts(); + } + + function updateRunningScripts() { + var runningScripts = ScriptDiscoveryService.getRunning(); + runningScriptsModel.clear() + for (var i = 0; i < runningScripts.length; ++i) { + runningScriptsModel.append(runningScripts[i]); + } + } + + function loadScript(script) { + console.log("Load script " + script); + scripts.loadOneScript(script); + } + + function reloadScript(script) { + console.log("Reload script " + script); + scripts.stopScript(script, true); + } + + function stopScript(script) { + console.log("Stop script " + script); + scripts.stopScript(script); + } + + function reloadAll() { + console.log("Reload all scripts"); + scripts.reloadAllScripts(); + } + + function loadDefaults() { + console.log("Load default scripts"); + scripts.loadOneScript(scripts.defaultScriptsPath + "/defaultScripts.js"); + } + + function stopAll() { + console.log("Stop all scripts"); + scripts.stopAllScripts(); + } + + Column { + width: parent.width + HifiControls.TabletContentSection { + name: "Currently Running" + isFirst: true + + HifiControls.VerticalSpacer {} + + Row { + spacing: hifi.dimensions.contentSpacing.x + + HifiControls.Button { + text: "Reload All" + color: hifi.buttons.black + onClicked: reloadAll() + } + + HifiControls.Button { + text: "Remove All" + color: hifi.buttons.red + onClicked: stopAll() + } + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border + } + + HifiControls.Table { + model: runningScriptsModel + id: table + height: 185 + colorScheme: hifi.colorSchemes.dark + anchors.left: parent.left + anchors.right: parent.right + expandSelectedRow: true + + itemDelegate: Item { + anchors { + left: parent ? parent.left : undefined + leftMargin: hifi.dimensions.tablePadding + right: parent ? parent.right : undefined + rightMargin: hifi.dimensions.tablePadding + } + + FiraSansSemiBold { + id: textItem + text: styleData.value + size: hifi.fontSizes.tableText + color: table.colorScheme == hifi.colorSchemes.light + ? (styleData.selected ? hifi.colors.black : hifi.colors.baseGrayHighlight) + : (styleData.selected ? hifi.colors.black : hifi.colors.lightGrayText) + anchors { + left: parent.left + right: parent.right + top: parent.top + topMargin: 3 + } + + HiFiGlyphs { + id: reloadButton + text: hifi.glyphs.reloadSmall + color: reloadButtonArea.pressed ? hifi.colors.white : parent.color + anchors { + top: parent.top + right: stopButton.left + verticalCenter: parent.verticalCenter + } + MouseArea { + id: reloadButtonArea + anchors { fill: parent; margins: -2 } + onClicked: reloadScript(model.url) + } + } + + HiFiGlyphs { + id: stopButton + text: hifi.glyphs.closeSmall + color: stopButtonArea.pressed ? hifi.colors.white : parent.color + anchors { + top: parent.top + right: parent.right + verticalCenter: parent.verticalCenter + } + MouseArea { + id: stopButtonArea + anchors { fill: parent; margins: -2 } + onClicked: stopScript(model.url) + } + } + + } + + FiraSansSemiBold { + text: runningScriptsModel.get(styleData.row) ? runningScriptsModel.get(styleData.row).url : "" + elide: Text.ElideMiddle + size: hifi.fontSizes.tableText + color: table.colorScheme == hifi.colorSchemes.light + ? (styleData.selected ? hifi.colors.black : hifi.colors.lightGray) + : (styleData.selected ? hifi.colors.black : hifi.colors.lightGrayText) + anchors { + top: textItem.bottom + left: parent.left + right: parent.right + } + visible: styleData.selected + } + } + + TableViewColumn { + role: "name" + } + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border + } + } + + HifiControls.TabletContentSection { + name: "Load Scripts" + + HifiControls.VerticalSpacer {} + + Row { + spacing: hifi.dimensions.contentSpacing.x + + HifiControls.Button { + text: "from URL" + color: hifi.buttons.black + height: 26 + onClicked: fromUrlTimer.running = true + + // For some reason trigginer an API that enters + // an internal event loop directly from the button clicked + // trigger below causes the appliction to behave oddly. + // Most likely because the button onClicked handling is never + // completed until the function returns. + // FIXME find a better way of handling the input dialogs that + // doesn't trigger this. + Timer { + id: fromUrlTimer + interval: 5 + repeat: false + running: false + onTriggered: ApplicationInterface.loadScriptURLDialog(); + } + } + + HifiControls.Button { + text: "from Disk" + color: hifi.buttons.black + height: 26 + onClicked: fromDiskTimer.running = true + + Timer { + id: fromDiskTimer + interval: 5 + repeat: false + running: false + onTriggered: ApplicationInterface.loadDialog(); + } + } + + HifiControls.Button { + text: "Load Defaults" + color: hifi.buttons.black + height: 26 + onClicked: loadDefaults() + } + } + + HifiControls.VerticalSpacer {} + + HifiControls.TextField { + id: filterEdit + isSearchField: true + anchors.left: parent.left + anchors.right: parent.right + colorScheme: hifi.colorSchemes.dark + placeholderText: "Filter" + onTextChanged: scriptsModel.filterRegExp = new RegExp("^.*" + text + ".*$", "i") + Component.onCompleted: scriptsModel.filterRegExp = new RegExp("^.*$", "i") + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border + } + + HifiControls.Tree { + id: treeView + height: 155 + treeModel: scriptsModel + colorScheme: hifi.colorSchemes.dark + anchors.left: parent.left + anchors.right: parent.right + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border + } + + HifiControls.TextField { + id: selectedScript + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: loadButton.width + hifi.dimensions.contentSpacing.x + + colorScheme: hifi.colorSchemes.dark + readOnly: true + + Connections { + target: treeView + onCurrentIndexChanged: { + var path = scriptsModel.data(treeView.currentIndex, 0x100) + if (path) { + selectedScript.text = path + } else { + selectedScript.text = "" + } + } + } + } + + Item { + // Take the loadButton out of the column flow. + id: loadButtonContainer + anchors.top: selectedScript.top + anchors.right: parent.right + + HifiControls.Button { + id: loadButton + anchors.right: parent.right + + text: "Load" + color: hifi.buttons.blue + enabled: selectedScript.text != "" + onClicked: root.loadScript(selectedScript.text) + } + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight - (!isHMD ? 3 : 0) + } + + HifiControls.TextAction { + id: directoryButton + icon: hifi.glyphs.script + iconSize: 24 + text: "Reveal Scripts Folder" + onClicked: fileDialogHelper.openDirectory(scripts.defaultScriptsPath) + colorScheme: hifi.colorSchemes.dark + anchors.left: parent.left + visible: !isHMD + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight - 3 + visible: !isHMD + } + } + } +} + diff --git a/interface/resources/qml/hifi/tablet/TabletMenu.qml b/interface/resources/qml/hifi/tablet/TabletMenu.qml index ec916a60f9..46a62ace82 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenu.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenu.qml @@ -110,10 +110,6 @@ FocusScope { buildMenu(); } function buildMenu() { -<<<<<<< HEAD -<<<<<<< HEAD -======= ->>>>>>> updated menu stack // Build submenu if specified. if (subMenu !== "") { var index = 0; @@ -132,13 +128,6 @@ FocusScope { } // Otherwise build whole menu. -<<<<<<< HEAD - menuPopperUpper.popup(tabletMenu, rootMenu.items); -======= menuPopperUpper.popup(rootMenu.items); ->>>>>>> updating branch with master -======= - menuPopperUpper.popup(rootMenu.items); ->>>>>>> updated menu stack } } diff --git a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml index c33f4e648b..ca4c657242 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml @@ -17,16 +17,6 @@ Item { id: root anchors.fill: parent objectName: "tabletMenuHandlerItem" - - MouseArea { - id: menuRoot; - objectName: "tabletMenuHandlerMouseArea" - anchors.fill: parent - enabled: d.topMenu !== null - onClicked: { - d.clearMenus(); - } - } StackView { anchors.fill: parent @@ -61,9 +51,11 @@ Item { d.push(Qt.resolvedUrl(path)); d.currentItem.eventBridge = tabletMenu.eventBridge d.currentItem.sendToScript.connect(tabletMenu.sendToScript); + breadcrumbText.text = d.currentItem.objectName; } function popSource() { + console.log("trying to pop page"); d.pop(); } @@ -90,7 +82,9 @@ Item { } function popMenu() { + console.log("the depth of the stack " + d.depth); if (d.depth) { + console.log("trying to pop page from stack"); d.pop(); } if (d.depth) { diff --git a/interface/resources/qml/styles-uit/FiraSansSemiBold.qml b/interface/resources/qml/styles-uit/FiraSansSemiBold.qml index ddbeff7d90..b3f3324090 100644 --- a/interface/resources/qml/styles-uit/FiraSansSemiBold.qml +++ b/interface/resources/qml/styles-uit/FiraSansSemiBold.qml @@ -14,7 +14,7 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } + FontLoader { id: firaSansSemiBold; source: pathToFonts + "fonts/FiraSans-SemiBold.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter diff --git a/interface/resources/qml/styles-uit/HiFiGlyphs.qml b/interface/resources/qml/styles-uit/HiFiGlyphs.qml index d0dae746be..cbd6fa1d68 100644 --- a/interface/resources/qml/styles-uit/HiFiGlyphs.qml +++ b/interface/resources/qml/styles-uit/HiFiGlyphs.qml @@ -14,7 +14,7 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: hiFiGlyphs; source: "../../fonts/hifi-glyphs.ttf"; } + FontLoader { id: hiFiGlyphs; source: pathToFonts + "fonts/hifi-glyphs.ttf"; } property int size: 32 font.pixelSize: size width: size diff --git a/interface/resources/qml/styles-uit/RalewayBold.qml b/interface/resources/qml/styles-uit/RalewayBold.qml index 97a6a4c208..433fdb7ae6 100644 --- a/interface/resources/qml/styles-uit/RalewayBold.qml +++ b/interface/resources/qml/styles-uit/RalewayBold.qml @@ -14,7 +14,7 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: ralewayBold; source: "../../fonts/Raleway-Bold.ttf"; } + FontLoader { id: ralewayBold; source: pathToFonts + "fonts/Raleway-Bold.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter diff --git a/interface/resources/qml/styles-uit/RalewayRegular.qml b/interface/resources/qml/styles-uit/RalewayRegular.qml index 1ed5f122dc..2cffeeb59d 100644 --- a/interface/resources/qml/styles-uit/RalewayRegular.qml +++ b/interface/resources/qml/styles-uit/RalewayRegular.qml @@ -14,7 +14,7 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: ralewayRegular; source: "../../fonts/Raleway-Regular.ttf"; } + FontLoader { id: ralewayRegular; source: pathToFonts + "fonts/Raleway-Regular.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter diff --git a/interface/resources/qml/styles-uit/RalewaySemiBold.qml b/interface/resources/qml/styles-uit/RalewaySemiBold.qml index 3c36a872a4..b6c79e02a4 100644 --- a/interface/resources/qml/styles-uit/RalewaySemiBold.qml +++ b/interface/resources/qml/styles-uit/RalewaySemiBold.qml @@ -14,7 +14,7 @@ import QtQuick.Controls.Styles 1.4 Text { id: root - FontLoader { id: ralewaySemiBold; source: "../../fonts/Raleway-SemiBold.ttf"; } + FontLoader { id: ralewaySemiBold; source: pathToFonts + "fonts/Raleway-SemiBold.ttf"; } property real size: 32 font.pixelSize: size verticalAlignment: Text.AlignVCenter diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 78b81f2075..d6c69f005d 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1940,6 +1940,7 @@ void Application::initializeUi() { rootContext->setContextProperty("AddressManager", DependencyManager::get<AddressManager>().data()); rootContext->setContextProperty("FrameTimings", &_frameTimingsScriptingInterface); rootContext->setContextProperty("Rates", new RatesScriptingInterface(this)); + rootContext->setContextProperty("pathToFonts", "../../"); rootContext->setContextProperty("TREE_SCALE", TREE_SCALE); rootContext->setContextProperty("Quat", new Quat()); @@ -5743,14 +5744,8 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) } void Application::toggleRunningScriptsWidget() const { - auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); - static const QUrl url("hifi/dialogs/RunningScripts.qml"); - if (true) { - auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - tablet->pushOntoStack("../..//hifi/dialogs/RunningScripts.qml"); - } else { - DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); - } + DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); + //if (_runningScriptsWidget->isVisible()) { // if (_runningScriptsWidget->hasFocus()) { // _runningScriptsWidget->hide(); diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 72bd0228f3..bfd58b9cff 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -38,8 +38,10 @@ #include "scripting/AccountScriptingInterface.h" #include "scripting/HMDScriptingInterface.h" #include <Preferences.h> +#include <ScriptEngines.h> #include "FileDialogHelper.h" + static const float DPI = 30.47f; static const float INCHES_TO_METERS = 1.0f / 39.3701f; static const float METERS_TO_INCHES = 39.3701f; @@ -170,6 +172,8 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("Account", AccountScriptingInterface::getInstance()); _webSurface->getRootContext()->setContextProperty("HMD", DependencyManager::get<HMDScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("fileDialogHelper", new FileDialogHelper()); + _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); + _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); // Override min fps for tablet UI, for silky smooth scrolling From b6b6ad780d57220ff0c1fb32e149885812d58d03 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Thu, 16 Feb 2017 17:15:52 -0800 Subject: [PATCH 029/247] allow isSpotlight to be 0 or 1 --- scripts/system/libraries/entitySelectionTool.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 596620b59a..ffce0774b5 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -1806,7 +1806,7 @@ SelectionDisplay = (function() { if (selectionManager.selections.length == 1) { var properties = Entities.getEntityProperties(selectionManager.selections[0]); - if (properties.type == "Light" && properties.isSpotlight === true) { + if (properties.type == "Light" && properties.isSpotlight) { stretchHandlesVisible = false; extendedStretchHandlesVisible = false; @@ -1901,7 +1901,7 @@ SelectionDisplay = (function() { Overlays.editOverlay(grabberPointLightN, { visible: false }); - } else if (properties.type == "Light" && properties.isSpotlight === false) { + } else if (properties.type == "Light" && !properties.isSpotlight) { stretchHandlesVisible = false; extendedStretchHandlesVisible = false; Overlays.editOverlay(grabberPointLightT, { From 3189b44612edb006ccc23920ae10e79bead59a3c Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 17 Feb 2017 15:50:08 +0000 Subject: [PATCH 030/247] refreshing with master --- interface/resources/qml/hifi/tablet/TabletMenu.qml | 3 --- interface/src/Application.cpp | 2 ++ 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletMenu.qml b/interface/resources/qml/hifi/tablet/TabletMenu.qml index 8c277fef04..4c687131ca 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenu.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenu.qml @@ -20,13 +20,10 @@ FocusScope { property var rootMenu: Menu { objectName:"rootMenu" } property var point: Qt.point(50, 50); - property var eventBridge; - signal sendToScript(var message); TabletMenuStack { id: menuPopperUpper } property string subMenu: "" property var eventBridge; signal sendToScript(var message); - TabletMenuStack { id: menuPopperUpper } Rectangle { id: bgNavBar diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2d049dbec7..ffd5c53d47 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5744,7 +5744,9 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) } void Application::toggleRunningScriptsWidget() const { + static const QUrl url("hifi/dialogs/RunningScripts.qml"); DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); + //if (_runningScriptsWidget->isVisible()) { // if (_runningScriptsWidget->hasFocus()) { // _runningScriptsWidget->hide(); From dedd85d29696445ae3a04237fd1028e9a5714002 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 17 Feb 2017 18:47:59 +0000 Subject: [PATCH 031/247] saving work --- interface/resources/qml/hifi/tablet/TabletRoot.qml | 1 + interface/src/Application.cpp | 10 +++++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 481c7846a9..fcefd1af24 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -81,6 +81,7 @@ Item { loader.item.subMenu = option; } loader.item.forceActiveFocus(); + tabletRoot.findStackableChild(); } } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4e0cf46634..95620b1ddf 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5747,9 +5747,13 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) } void Application::toggleRunningScriptsWidget() const { - static const QUrl url("hifi/dialogs/RunningScripts.qml"); - DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); - + static const QUrl url("../../hifi/dialogs/TabletRunningScripts.qml"); + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet) { + tablet->pushOntoStack(url); + } + //DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); //if (_runningScriptsWidget->isVisible()) { // if (_runningScriptsWidget->hasFocus()) { // _runningScriptsWidget->hide(); From 5ddcbae9345a6fd885600462bfb373c87234a5c1 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Fri, 17 Feb 2017 11:51:23 -0800 Subject: [PATCH 032/247] save tablet web-overlay ID in HMD interface. don't trigger edit affordances if the click was intented for the tablet --- interface/src/avatar/MyAvatar.cpp | 2 +- interface/src/scripting/HMDScriptingInterface.h | 11 ++++++++--- scripts/system/libraries/entitySelectionTool.js | 11 ++++++++--- scripts/system/tablet-ui/tabletUI.js | 2 ++ 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 29f41c89fd..e39b7e1e50 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -808,7 +808,7 @@ void MyAvatar::saveData() { auto hmdInterface = DependencyManager::get<HMDScriptingInterface>(); _avatarEntitiesLock.withReadLock([&] { for (auto entityID : _avatarEntityData.keys()) { - if (hmdInterface->getCurrentTableUIID() == entityID) { + if (hmdInterface->getCurrentTabletUIID() == entityID) { // don't persist the tablet between domains / sessions continue; } diff --git a/interface/src/scripting/HMDScriptingInterface.h b/interface/src/scripting/HMDScriptingInterface.h index f5744bb8d1..9a618695d6 100644 --- a/interface/src/scripting/HMDScriptingInterface.h +++ b/interface/src/scripting/HMDScriptingInterface.h @@ -29,8 +29,9 @@ class HMDScriptingInterface : public AbstractHMDScriptingInterface, public Depen Q_PROPERTY(glm::quat orientation READ getOrientation) Q_PROPERTY(bool mounted READ isMounted) Q_PROPERTY(bool showTablet READ getShouldShowTablet) - Q_PROPERTY(QUuid tabletID READ getCurrentTableUIID WRITE setCurrentTabletUIID) + Q_PROPERTY(QUuid tabletID READ getCurrentTabletUIID WRITE setCurrentTabletUIID) Q_PROPERTY(unsigned int homeButtonID READ getCurrentHomeButtonUUID WRITE setCurrentHomeButtonUUID) + Q_PROPERTY(QUuid tabletScreenID READ getCurrentTabletScreenID WRITE setCurrentTabletScreenID) public: @@ -91,14 +92,18 @@ public: bool getShouldShowTablet() const { return _showTablet; } void setCurrentTabletUIID(QUuid tabletID) { _tabletUIID = tabletID; } - QUuid getCurrentTableUIID() const { return _tabletUIID; } + QUuid getCurrentTabletUIID() const { return _tabletUIID; } void setCurrentHomeButtonUUID(unsigned int homeButtonID) { _homeButtonID = homeButtonID; } unsigned int getCurrentHomeButtonUUID() const { return _homeButtonID; } + void setCurrentTabletScreenID(QUuid tabletID) { _tabletScreenID = tabletID; } + QUuid getCurrentTabletScreenID() const { return _tabletScreenID; } + private: bool _showTablet { false }; - QUuid _tabletUIID; // this is the entityID of the WebEntity which is part of (a child of) the tablet-ui. + QUuid _tabletUIID; // this is the entityID of the tablet frame + QUuid _tabletScreenID; // this is the overlayID which is part of (a child of) the tablet-ui. unsigned int _homeButtonID; QUuid _tabletEntityID; diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index ffce0774b5..b46b1267cc 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -2048,7 +2048,7 @@ SelectionDisplay = (function() { Overlays.editOverlay(grabberPointLightL, { visible: false }); - Overlays.editOverlay(grabberPointLightR, { + Overlays.editOverlay(grabberPointLightR, { visible: false }); Overlays.editOverlay(grabberPointLightF, { @@ -3866,6 +3866,12 @@ SelectionDisplay = (function() { var somethingClicked = false; var pickRay = generalComputePickRay(event.x, event.y); + var result = Overlays.findRayIntersection(pickRay, true, [HMD.tabletScreenID]); + if (result.intersects) { + // mouse clicks on the tablet should override the edit affordances + return false; + } + // before we do a ray test for grabbers, disable the ray intersection for our selection box Overlays.editOverlay(selectionBox, { ignoreRayIntersection: true @@ -3879,10 +3885,9 @@ SelectionDisplay = (function() { Overlays.editOverlay(rollHandle, { ignoreRayIntersection: true }); - var result = Overlays.findRayIntersection(pickRay); + result = Overlays.findRayIntersection(pickRay); if (result.intersects) { - if (wantDebug) { print("something intersects... "); diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index 1dc6b7fef8..43eebf15e1 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -32,6 +32,7 @@ UIWebTablet.register(); HMD.tabletID = UIWebTablet.tabletEntityID; HMD.homeButtonID = UIWebTablet.homeButtonEntity; + HMD.tabletScreenID = UIWebTablet.webOverlayID; } function hideTabletUI() { @@ -48,6 +49,7 @@ UIWebTablet = null; HMD.tabletID = null; HMD.homeButtonID = null; + HMD.tabletScreenID = null; } } From 2db8517303776b11b0c59ac7d7f21213cb6e5931 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Mon, 20 Feb 2017 12:42:57 -0800 Subject: [PATCH 033/247] remove ctrl-M from file --- scripts/system/libraries/entitySelectionTool.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 596620b59a..0fd0b01d25 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -2048,7 +2048,7 @@ SelectionDisplay = (function() { Overlays.editOverlay(grabberPointLightL, { visible: false }); - Overlays.editOverlay(grabberPointLightR, { + Overlays.editOverlay(grabberPointLightR, { visible: false }); Overlays.editOverlay(grabberPointLightF, { From 5bff2034c33feb52dd774c54c5f1b5825eed57b8 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Wed, 22 Feb 2017 12:07:18 -0800 Subject: [PATCH 034/247] cleanups, attempt to get particle explorer to work right --- interface/resources/qml/windows/Window.qml | 4 +- scripts/system/edit.js | 157 ++++-------------- scripts/system/libraries/entityList.js | 34 ++-- scripts/system/libraries/gridTool.js | 11 +- .../particle_explorer/particleExplorer.js | 15 ++ .../particle_explorer/particleExplorerTool.js | 30 +--- scripts/system/tablet-users.js | 1 - 7 files changed, 79 insertions(+), 173 deletions(-) diff --git a/interface/resources/qml/windows/Window.qml b/interface/resources/qml/windows/Window.qml index 20216ed7ae..a0ef73290a 100644 --- a/interface/resources/qml/windows/Window.qml +++ b/interface/resources/qml/windows/Window.qml @@ -313,6 +313,6 @@ Fadable { } } - onMouseEntered: console.log("Mouse entered " + window) - onMouseExited: console.log("Mouse exited " + window) + // onMouseEntered: console.log("Mouse entered " + window) + // onMouseExited: console.log("Mouse exited " + window) } diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 5f7556592e..f954f0d258 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -1,7 +1,6 @@ "use strict"; -// newEditEntities.js -// examples +// edit.js // // Created by Brad Hefta-Gaub on 10/2/14. // Persist toolbar by HRS 6/11/15. @@ -13,7 +12,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global Script, SelectionDisplay, LightOverlayManager, CameraManager, Grid, GridTool, EntityListTook, EntityListTool, Vec3, SelectionManager, Overlays, OverlayWebWindow, UserActivityLogger, Settings, Entities, Tablet, Toolbars, Messages, Menu, Camera, progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, ParticleExplorerTool */ +/* global Script, SelectionDisplay, LightOverlayManager, CameraManager, Grid, GridTool, EntityListTool, Vec3, SelectionManager, Overlays, OverlayWebWindow, UserActivityLogger, Settings, Entities, Tablet, Toolbars, Messages, Menu, Camera, progressDialog, tooltip, MyAvatar, Quat, Controller, Clipboard, HMD, UndoStack, ParticleExplorerTool */ (function() { // BEGIN LOCAL_SCOPE @@ -208,27 +207,7 @@ var toolBar = (function () { var buttonHandlers = {}; // only used to tablet mode function addButton(name, image, handler) { - if (Settings.getValue("HUDUIEnabled")) { - var imageUrl = TOOLS_PATH + image; - var button = toolBar.addButton({ - objectName: name, - imageURL: imageUrl, - imageOffOut: 1, - imageOffIn: 2, - imageOnOut: 0, - imageOnIn: 2, - alpha: 0.9, - visible: true - }); - if (handler) { - button.clicked.connect(function () { - Script.setTimeout(handler, 100); - }); - } - return button; - } else { - buttonHandlers[name] = handler; - } + buttonHandlers[name] = handler; } var SHAPE_TYPE_NONE = 0; @@ -272,7 +251,6 @@ var toolBar = (function () { } function fromQml(message) { // messages are {method, params}, like json-rpc. See also sendToQml. - print("fromQml: " + JSON.stringify(message)); var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); tablet.popFromStack(); switch (message.method) { @@ -299,42 +277,24 @@ var toolBar = (function () { } }); - - if (Settings.getValue("HUDUIEnabled")) { - systemToolbar = Toolbars.getToolbar(SYSTEM_TOOLBAR); - activeButton = systemToolbar.addButton({ - objectName: EDIT_TOGGLE_BUTTON, - imageURL: TOOLS_PATH + "edit.svg", - visible: true, - alpha: 0.9, - defaultState: 1 - }); - systemToolbar.fromQml.connect(fromQml); - } else { - tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - activeButton = tablet.addButton({ - icon: "icons/tablet-icons/edit-i.svg", - activeIcon: "icons/tablet-icons/edit-a.svg", - text: "EDIT", - sortOrder: 10 - }); - tablet.screenChanged.connect(function (type, url) { - if (isActive && (type !== "QML" || url !== "Edit.qml")) { - that.toggle(); - } - }); - tablet.fromQml.connect(fromQml); - } + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + activeButton = tablet.addButton({ + icon: "icons/tablet-icons/edit-i.svg", + activeIcon: "icons/tablet-icons/edit-a.svg", + text: "EDIT", + sortOrder: 10 + }); + tablet.screenChanged.connect(function (type, url) { + if (isActive && (type !== "QML" || url !== "Edit.qml")) { + that.toggle(); + } + }); + tablet.fromQml.connect(fromQml); activeButton.clicked.connect(function() { that.toggle(); }); - if (Settings.getValue("HUDUIEnabled")) { - toolBar = Toolbars.getToolbar(EDIT_TOOLBAR); - toolBar.writeProperty("shown", false); - } - addButton("openAssetBrowserButton", "assets-01.svg", function(){ Window.showAssetServer(); }); @@ -348,34 +308,9 @@ var toolBar = (function () { SHAPE_TYPES[SHAPE_TYPE_STATIC_MESH] = "Exact - All polygons"; var SHAPE_TYPE_DEFAULT = SHAPE_TYPE_STATIC_MESH; - if (Settings.getValue("HUDUIEnabled")) { - // HUD-ui version of new-model dialog - var result = Window.customPrompt({ - textInput: { - label: "Model URL" - }, - comboBox: { - label: "Automatic Collisions", - index: SHAPE_TYPE_DEFAULT, - items: SHAPE_TYPES - }, - checkBox: { - label: "Dynamic", - checked: DYNAMIC_DEFAULT, - disableForItems: [ - SHAPE_TYPE_STATIC_MESH - ], - checkStateOnDisable: false, - warningOnDisable: "Models with automatic collisions set to 'Exact' cannot be dynamic" - } - }); - - handleNewModelDialogResult(result); - } else { - // tablet version of new-model dialog - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - tablet.pushOntoStack("NewModelDialog.qml"); - } + // tablet version of new-model dialog + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet.pushOntoStack("NewModelDialog.qml"); }); addButton("newCubeButton", "cube-01.svg", function () { @@ -497,11 +432,11 @@ var toolBar = (function () { entityListTool.clearEntityList(); }; - that.toggle = function () { that.setActive(!isActive); - if (Settings.getValue("HUDUIEnabled")) { - activeButton.editProperties({isActive: isActive}); + activeButton.editProperties({isActive: isActive}); + if (!isActive) { + tablet.gotoHomeScreen(); } }; @@ -532,10 +467,8 @@ var toolBar = (function () { cameraManager.disable(); selectionDisplay.triggerMapping.disable(); } else { - if (!Settings.getValue("HUDUIEnabled")) { - var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - tablet.loadQMLSource("Edit.qml"); - } + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + tablet.loadQMLSource("Edit.qml"); UserActivityLogger.enabledEdit(); entityListTool.setVisible(true); gridTool.setVisible(true); @@ -546,15 +479,6 @@ var toolBar = (function () { // everybody else to think that Interface has lost focus overall. fogbugzid:558 // Window.setFocus(); } - if (Settings.getValue("HUDUIEnabled")) { - // Sets visibility of tool buttons, excluding the power button - toolBar.writeProperty("shown", active); - var visible = toolBar.readProperty("visible"); - if (active && !visible) { - toolBar.writeProperty("shown", false); - toolBar.writeProperty("shown", true); - } - } lightOverlayManager.setVisible(isActive && Menu.isOptionChecked(MENU_SHOW_LIGHTS_IN_EDIT_MODE)); Entities.setDrawZoneBoundaries(isActive && Menu.isOptionChecked(MENU_SHOW_ZONES_IN_EDIT_MODE)); }; @@ -815,6 +739,12 @@ function mouseClickEvent(event) { orientation = MyAvatar.orientation; intersection = rayPlaneIntersection(pickRay, P, Quat.getFront(orientation)); + if (event.isShifted) { + particleExplorerTool.destroyWebView(); + } + if (properties.type !== "ParticleEffect") { + particleExplorerTool.destroyWebView(); + } if (!event.isShifted) { selectionManager.setSelections([foundEntity]); @@ -1493,16 +1423,8 @@ var PropertiesTool = function (opts) { var that = {}; var webView = null; - if (Settings.getValue("HUDUIEnabled")) { - webView = new OverlayWebWindow({ - title: 'Entity Properties', - source: ENTITY_PROPERTIES_URL, - toolWindow: true - }); - } else { - webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - webView.setVisible = function(value) {}; - } + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView.setVisible = function(value) {}; var visible = false; @@ -1924,18 +1846,7 @@ function selectParticleEntity(entityID) { selectedParticleEntity = entityID; particleExplorerTool.setActiveParticleEntity(entityID); - - if (Settings.getValue("HUDUIEnabled")) { - particleExplorerTool.webView.webEventReceived.connect(function (data) { - data = JSON.parse(data); - if (data.messageType === "page_loaded") { - particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); - } - }); - } else { - // in the tablet version, the page was loaded earlier - particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); - } + particleExplorerTool.webView.emitScriptEvent(JSON.stringify(particleData)); } entityListTool.webView.webEventReceived.connect(function (data) { @@ -1949,7 +1860,7 @@ entityListTool.webView.webEventReceived.connect(function (data) { return; } // Destroy the old particles web view first - selectParticleEntity(ids[0]) + selectParticleEntity(ids[0]); } else { selectedParticleEntity = 0; particleExplorerTool.destroyWebView(); diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index 8ef028cdce..63ac33a1dd 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -1,18 +1,22 @@ -var ENTITY_LIST_HTML_URL = Script.resolvePath('../html/entityList.html'); +"use strict"; + +// entityList.js +// +// Copyright 2014 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +/* global EntityListTool, Tablet, selectionManager, Entities, Camera, MyAvatar, Vec3, Menu, Messages, + cameraManager, MENU_EASE_ON_FOCUS, deleteSelectedEntities, toggleSelectedEntitiesLocked, toggleSelectedEntitiesVisible */ EntityListTool = function(opts) { var that = {}; var webView = null; - if (Settings.getValue("HUDUIEnabled")) { - var url = ENTITY_LIST_HTML_URL; - webView = new OverlayWebWindow({ - title: 'Entity List', source: url, toolWindow: true - }); - } else { - webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - webView.setVisible = function(value) {}; - } + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView.setVisible = function(value) {}; var filterInView = false; var searchRadius = 100; @@ -30,7 +34,7 @@ EntityListTool = function(opts) { that.toggleVisible = function() { that.setVisible(!visible); - } + }; selectionManager.addEventListener(function() { var selectedIDs = []; @@ -49,7 +53,7 @@ EntityListTool = function(opts) { that.clearEntityList = function () { var data = { type: 'clearEntityList' - } + }; webView.emitScriptEvent(JSON.stringify(data)); }; @@ -91,8 +95,8 @@ EntityListTool = function(opts) { } var selectedIDs = []; - for (var i = 0; i < selectionManager.selections.length; i++) { - selectedIDs.push(selectionManager.selections[i].id); + for (var j = 0; j < selectionManager.selections.length; j++) { + selectedIDs.push(selectionManager.selections[j].id); } var data = { @@ -101,7 +105,7 @@ EntityListTool = function(opts) { selectedIDs: selectedIDs, }; webView.emitScriptEvent(JSON.stringify(data)); - } + }; webView.webEventReceived.connect(function(data) { data = JSON.parse(data); diff --git a/scripts/system/libraries/gridTool.js b/scripts/system/libraries/gridTool.js index 7176fd00a6..0290674a0f 100644 --- a/scripts/system/libraries/gridTool.js +++ b/scripts/system/libraries/gridTool.js @@ -229,15 +229,8 @@ GridTool = function(opts) { var listeners = []; var webView = null; - if (Settings.getValue("HUDUIEnabled")) { - var url = GRID_CONTROLS_HTML_URL; - webView = new OverlayWebWindow({ - title: 'Grid', source: url, toolWindow: true - }); - } else { - webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - webView.setVisible = function(value) {}; - } + webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + webView.setVisible = function(value) {}; horizontalGrid.addListener(function(data) { webView.emitScriptEvent(JSON.stringify(data)); diff --git a/scripts/system/particle_explorer/particleExplorer.js b/scripts/system/particle_explorer/particleExplorer.js index 44fa242435..e0987ecd09 100644 --- a/scripts/system/particle_explorer/particleExplorer.js +++ b/scripts/system/particle_explorer/particleExplorer.js @@ -32,6 +32,8 @@ var gui = null; var settings = new Settings(); var updateInterval; +var active = false; + var currentInputField; var storedController; //CHANGE TO WHITELIST @@ -363,6 +365,19 @@ function listenForSettingsUpdates() { } else { loadGUI(); } + if (!active) { + // gui.toggleHide(); + gui.closed = false; + } + active = true; + + } else if (data.messageType === "particle_close") { + // none of this seems to work. + // if (active) { + // gui.toggleHide(); + // } + active = false; + gui.closed = true; } }); } diff --git a/scripts/system/particle_explorer/particleExplorerTool.js b/scripts/system/particle_explorer/particleExplorerTool.js index 0be7c6b588..b3db475ab0 100644 --- a/scripts/system/particle_explorer/particleExplorerTool.js +++ b/scripts/system/particle_explorer/particleExplorerTool.js @@ -18,33 +18,21 @@ ParticleExplorerTool = function() { var that = {}; that.createWebView = function() { - if (Settings.getValue("HUDUIEnabled")) { - var url = PARTICLE_EXPLORER_HTML_URL; - that.webView = new OverlayWebWindow({ - title: 'Particle Explorer', - source: url, - toolWindow: true - }); - } else { - that.webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - that.webView.setVisible = function(value) {}; - } - - that.webView.setVisible(true); + that.webView = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + that.webView.setVisible = function(value) {}; that.webView.webEventReceived.connect(that.webEventReceived); } - that.destroyWebView = function() { if (!that.webView) { return; } - - if (Settings.getValue("HUDUIEnabled")) { - that.webView.close(); - that.webView = null; - } that.activeParticleEntity = 0; + + var messageData = { + messageType: "particle_close" + }; + that.webView.emitScriptEvent(JSON.stringify(messageData)); } that.webEventReceived = function(data) { @@ -58,9 +46,5 @@ ParticleExplorerTool = function() { that.activeParticleEntity = id; } - if (Settings.getValue("HUDUIEnabled")) { - that.createWebView(); - } - return that; }; diff --git a/scripts/system/tablet-users.js b/scripts/system/tablet-users.js index ce50c4686d..5edc8d17ec 100644 --- a/scripts/system/tablet-users.js +++ b/scripts/system/tablet-users.js @@ -49,7 +49,6 @@ } function onWebEventReceived(event) { - print("Script received a web event, its type is " + typeof event); if (typeof event === "string") { event = JSON.parse(event); } From 3ba605bf23cd53e4962de78a15a647c93ef48c23 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Thu, 23 Feb 2017 00:28:30 +0000 Subject: [PATCH 035/247] saving work --- cmake/macros/LinkHifiLibraries.cmake | 2 +- .../qml/dialogs/TabletQueryDialog.qml | 205 ++++++++++++++++++ .../resources/qml/hifi/tablet/TabletRoot.qml | 20 +- .../qml/windows/TabletModalFrame.qml | 85 ++++++++ .../qml/windows/TabletModalWindow.qml | 22 ++ interface/src/Application.cpp | 8 +- .../src/TabletScriptingInterface.h | 2 + libraries/ui/CMakeLists.txt | 2 +- libraries/ui/src/OffscreenUi.cpp | 20 +- 9 files changed, 355 insertions(+), 11 deletions(-) create mode 100644 interface/resources/qml/dialogs/TabletQueryDialog.qml create mode 100644 interface/resources/qml/windows/TabletModalFrame.qml create mode 100644 interface/resources/qml/windows/TabletModalWindow.qml diff --git a/cmake/macros/LinkHifiLibraries.cmake b/cmake/macros/LinkHifiLibraries.cmake index 3767dc7131..de4ff23863 100644 --- a/cmake/macros/LinkHifiLibraries.cmake +++ b/cmake/macros/LinkHifiLibraries.cmake @@ -21,7 +21,7 @@ macro(LINK_HIFI_LIBRARIES) include_directories("${HIFI_LIBRARY_DIR}/${HIFI_LIBRARY}/src") include_directories("${CMAKE_BINARY_DIR}/libraries/${HIFI_LIBRARY}/shaders") - add_dependencies(${TARGET_NAME} ${HIFI_LIBRARY}) + #add_dependencies(${TARGET_NAME} ${HIFI_LIBRARY}) # link the actual library - it is static so don't bubble it up target_link_libraries(${TARGET_NAME} ${HIFI_LIBRARY}) diff --git a/interface/resources/qml/dialogs/TabletQueryDialog.qml b/interface/resources/qml/dialogs/TabletQueryDialog.qml new file mode 100644 index 0000000000..0ae18d1c2d --- /dev/null +++ b/interface/resources/qml/dialogs/TabletQueryDialog.qml @@ -0,0 +1,205 @@ +// +// QueryDialog.qml +// +// Created by Bradley Austin Davis on 22 Jan 2016 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Dialogs 1.2 as OriginalDialogs + +import "../controls-uit" +import "../styles-uit" +import "../windows" + +TabletModalWindow { + id: root + HifiConstants { id: hifi } + signal selected(var result); + signal canceled(); + layer.enabled: true + property int icon: hifi.icons.none + property string iconText: "" + property int iconSize: 35 + + MouseArea { + width: parent.width + height: parent.height + } + + property bool keyboardOverride: true + onIconChanged: updateIcon(); + + property var items; + property string label: "" + property var result; + property alias current: textResult.text + + // For text boxes + property alias placeholderText: textResult.placeholderText + + // For combo boxes + property bool editable: true; + + property int titleWidth: 0 + onTitleWidthChanged: d.resize(); + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + + onKeyboardRaisedChanged: d.resize(); + + function updateIcon() { + if (!root) { + return; + } + iconText = hifi.glyphForIcon(root.icon); + } + + Rectangle { + id: modalWindowItem + width: parent.width + height: 480 + anchors.margins: 0 + anchors { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + + QtObject { + id: d + readonly property int minWidth: 480 + readonly property int maxWdith: 480 + readonly property int minHeight: 120 + readonly property int maxHeight: 720 + + function resize() { + var targetWidth = Math.max(titleWidth, 480) + var targetHeight = (items ? comboBox.controlHeight : textResult.controlHeight) + 5 * hifi.dimensions.contentSpacing.y + buttons.height + modalWindowItem.width = (targetWidth < d.minWidth) ? d.minWidth : ((targetWidth > d.maxWdith) ? d.maxWidth : targetWidth); + modalWindowItem.height = ((targetHeight < d.minHeight) ? d.minHeight : ((targetHeight > d.maxHeight) ? d.maxHeight : targetHeight)) + ((keyboardEnabled && keyboardRaised) ? (keyboard.raisedHeight + 2 * hifi.dimensions.contentSpacing.y) : 0) + } + } + + Item { + anchors { + top: frameTitle.bottom + bottom: keyboard.top; + left: parent.left; + right: parent.right; + margins: 0 + bottomMargin: 2 * hifi.dimensions.contentSpacing.y + } + + // FIXME make a text field type that can be bound to a history for autocompletion + TextField { + id: textResult + label: root.label + focus: items ? false : true + visible: items ? false : true + anchors { + left: parent.left; + right: parent.right; + bottom: parent.bottom + } + } + + TabletComboBox { + id: comboBox + label: root.label + focus: true + visible: items ? true : false + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + model: items ? items : [] + } + } + + property alias keyboardOverride: root.keyboardOverride + property alias keyboardRaised: root.keyboardRaised + property alias punctuationMode: root.punctuationMode + + Keyboard { + id: keyboard + raised: keyboardEnabled && keyboardRaised + numeric: punctuationMode + anchors { + left: parent.left + right: parent.right + bottom: buttons.top + bottomMargin: raised ? 2 * hifi.dimensions.contentSpacing.y : 0 + } + } + + Flow { + id: buttons + focus: true + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + layoutDirection: Qt.RightToLeft + anchors { + bottom: parent.bottom + right: parent.right + margins: 0 + bottomMargin: hifi.dimensions.contentSpacing.y + } + Button { action: cancelAction } + Button { action: acceptAction } + } + + Action { + id: cancelAction + text: qsTr("Cancel") + shortcut: Qt.Key_Escape + onTriggered: { + root.canceled(); + root.destroy(); + } + } + Action { + id: acceptAction + text: qsTr("OK") + shortcut: Qt.Key_Return + onTriggered: { + root.result = items ? comboBox.currentText : textResult.text + root.selected(root.result); + root.destroy(); + } + } + } + + Keys.onPressed: { + if (!visible) { + return + } + + switch (event.key) { + case Qt.Key_Escape: + case Qt.Key_Back: + cancelAction.trigger() + event.accepted = true; + break; + + case Qt.Key_Return: + case Qt.Key_Enter: + acceptAction.trigger() + event.accepted = true; + break; + } + } + + Component.onCompleted: { + keyboardEnabled = HMD.active; + updateIcon(); + d.resize(); + textResult.forceActiveFocus(); + } +} diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 22efe63064..79b127098b 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -1,6 +1,7 @@ import QtQuick 2.0 import Hifi 1.0 - +import QtQuick.Controls 1.4 +import "../../dialogs" Item { id: tabletRoot objectName: "tabletRoot" @@ -9,13 +10,26 @@ Item { property var rootMenu; property string subMenu: "" - signal showDesktop(); function setOption(value) { option = value; } + Component { id: inputDialogBuilder; TabletQueryDialog { } } + function inputDialog(properties) { + return inputDialogBuilder.createObject(tabletRoot, properties); + } + + function messageBox(properties) { + } + + function customInputDialog(properties) { + } + + function fileDialog(properties) { + } + function setMenuProperties(rootMenu, subMenu) { tabletRoot.rootMenu = rootMenu; tabletRoot.subMenu = subMenu; @@ -68,6 +82,7 @@ Item { objectName: "loader" asynchronous: false + width: parent.width height: parent.height @@ -89,7 +104,6 @@ Item { loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu); } loader.item.forceActiveFocus(); - tabletRoot.findStackableChild(); } } diff --git a/interface/resources/qml/windows/TabletModalFrame.qml b/interface/resources/qml/windows/TabletModalFrame.qml new file mode 100644 index 0000000000..41775f6b3e --- /dev/null +++ b/interface/resources/qml/windows/TabletModalFrame.qml @@ -0,0 +1,85 @@ +// +// ModalFrame.qml +// +// Created by Bradley Austin Davis on 15 Jan 2016 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 + +import "." +import "../controls-uit" +import "../styles-uit" + + +Rectangle { + HifiConstants { id: hifi } + + + Rectangle { + id: frameContent + + //readonly property bool hasTitle: window.title != "" + + readonly property int frameMarginLeft: hifi.dimensions.modalDialogMargin.x + readonly property int frameMarginRight: hifi.dimensions.modalDialogMargin.x + readonly property int frameMarginTop: hifi.dimensions.modalDialogMargin.y + (frameContent.hasTitle ? hifi.dimensions.modalDialogTitleHeight + 10 : 0) + readonly property int frameMarginBottom: hifi.dimensions.modalDialogMargin.y + + border { + width: hifi.dimensions.borderWidth + color: hifi.colors.lightGrayText80 + } + radius: hifi.dimensions.borderRadius + color: hifi.colors.faintGray + Item { + id: frameTitle + visible: true//frameContent.hasTitle + //anchors.fill: parent + + anchors { + fill: parent + topMargin: -frameMarginTop + leftMargin: -frameMarginLeft + rightMargin: -frameMarginRight + bottomMargin: -frameMarginBottom + } + + Item { + width: title.width + (icon.text !== "" ? icon.width + hifi.dimensions.contentSpacing.x : 20) + + onWidthChanged: root.titleWidth = width + + HiFiGlyphs { + id: icon + text: root.iconText ? root.iconText : "hello" + size: root.iconSize ? root.iconSize : 30 + color: hifi.colors.lightGray + visible: true + anchors.verticalCenter: title.verticalCenter + anchors.left: parent.left + } + RalewayRegular { + id: title + text: root.title + elide: Text.ElideRight + color: hifi.colors.baseGrayHighlight + size: hifi.fontSizes.overlayTitle + y: -hifi.dimensions.modalDialogTitleHeight + anchors.right: parent.right + } + } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + height: 1 + color: hifi.colors.lightGray + } + } + } + +} diff --git a/interface/resources/qml/windows/TabletModalWindow.qml b/interface/resources/qml/windows/TabletModalWindow.qml new file mode 100644 index 0000000000..05f192f7a7 --- /dev/null +++ b/interface/resources/qml/windows/TabletModalWindow.qml @@ -0,0 +1,22 @@ +// +// ModalWindow.qml +// +// Created by Bradley Austin Davis on 22 Jan 2016 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Dialogs 1.2 as OriginalDialogs +import "." + +Rectangle { + id: modalWindow + layer.enabled: true + property var title: "Modal" + width: tabletRoot.width + height: tabletRoot.height + color: "#80000000" +} diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index cf677a1c95..c016b31a14 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5769,10 +5769,14 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) } void Application::toggleRunningScriptsWidget() const { - static const QUrl url("../../hifi/dialogs/TabletRunningScripts.qml"); + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet) { + if (tablet->getToolbarMode()) { + static const QUrl url("hifi/dialogs/RunningScripts.qml"); + DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); + } else { + static const QUrl url("../../hifi/dialogs/TabletRunningScripts.qml"); tablet->pushOntoStack(url); } //DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index a30b4459e3..8b9bec4013 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -154,6 +154,8 @@ public: Q_INVOKABLE bool onHomeScreen(); + QQuickItem* getTabletRoot() const { return _qmlTabletRoot; } + QObject* getTabletSurface(); QQuickItem* getQmlTablet() const; diff --git a/libraries/ui/CMakeLists.txt b/libraries/ui/CMakeLists.txt index cc2382926f..f2b48446fe 100644 --- a/libraries/ui/CMakeLists.txt +++ b/libraries/ui/CMakeLists.txt @@ -1,3 +1,3 @@ set(TARGET_NAME ui) setup_hifi_library(OpenGL Network Qml Quick Script WebChannel WebSockets XmlPatterns) -link_hifi_libraries(shared networking gl) +link_hifi_libraries(shared networking gl script-engine) diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 7724a409f0..f3cb28b8ce 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -19,7 +19,8 @@ #include <AbstractUriHandler.h> #include <AccountManager.h> - +#include <DependencyManager.h> +#include <TabletScriptingInterface.h> #include "FileDialogHelper.h" #include "VrMenu.h" @@ -405,10 +406,21 @@ QQuickItem* OffscreenUi::createInputDialog(const Icon icon, const QString& title map.insert("label", label); map.insert("current", current); QVariant result; - bool invokeResult = QMetaObject::invokeMethod(_desktop, "inputDialog", - Q_RETURN_ARG(QVariant, result), - Q_ARG(QVariant, QVariant::fromValue(map))); + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + + bool invokeResult; + if (tablet->getToolbarMode()) { + invokeResult = QMetaObject::invokeMethod(_desktop, "inputDialog", + Q_RETURN_ARG(QVariant, result), + Q_ARG(QVariant, QVariant::fromValue(map))); + } else { + QQuickItem* tabletRoot = tablet->getTabletRoot(); + invokeResult = QMetaObject::invokeMethod(tabletRoot, "inputDialog", + Q_RETURN_ARG(QVariant, result), + Q_ARG(QVariant, QVariant::fromValue(map))); + } if (!invokeResult) { qWarning() << "Failed to create message box"; return nullptr; From 88318c1911f522925c81ab6f3fa3df6b92021bb2 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Thu, 23 Feb 2017 11:40:26 -0800 Subject: [PATCH 036/247] create tab background and new entity buttons --- interface/resources/qml/hifi/tablet/Edit.qml | 169 ++++++++------- .../qml/hifi/tablet/NewEntityButton.qml | 204 ++++++++++++++++++ 2 files changed, 291 insertions(+), 82 deletions(-) create mode 100644 interface/resources/qml/hifi/tablet/NewEntityButton.qml diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 5301ff78f8..4a5930e6e7 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -39,106 +39,111 @@ StackView { enabled: true property string originalUrl: "" - Flow { - id: createEntitiesFlow - spacing: 16 - anchors.right: parent.right - anchors.rightMargin: 30 - anchors.left: parent.left - anchors.leftMargin: 30 - anchors.bottom: parent.bottom - anchors.bottomMargin: 30 - anchors.top: parent.top - anchors.topMargin: 30 + Rectangle { + color: "#383838" + Flow { + id: createEntitiesFlow + spacing: 35 + anchors.right: parent.right + anchors.rightMargin: 55 + anchors.left: parent.left + anchors.leftMargin: 55 + anchors.bottom: parent.bottom + anchors.bottomMargin: 30 + anchors.top: parent.top + anchors.topMargin: 70 - TabletButton { - icon: "icons/assets-01.svg" - text: "ASSETS" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "openAssetBrowserButton" } - }); + NewEntityButton { + icon: "icons/assets-01.svg" + text: "ASSETS" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "openAssetBrowserButton" } + }); + } } - } - TabletButton { - icon: "model-01.svg" - text: "MODEL" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "newModelButton" } - }); + NewEntityButton { + icon: "model-01.svg" + text: "MODEL" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newModelButton" } + }); + } } - } - TabletButton { - icon: "../cube-01.svg" - text: "CUBE" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "newCubeButton" } - }); + NewEntityButton { + icon: "../cube-01.svg" + text: "CUBE" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newCubeButton" } + }); + } } - } - ToolbarButton { - imageURL: "../images/sphere-01.svg" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "newSphereButton" } - }); + NewEntityButton { + icon: "../images/sphere-01.svg" + text: "SPHERE" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newSphereButton" } + }); + } } - } - TabletButton { - icon: "../scripts/system/assets/images/tools/light-01.svg" - text: "LIGHT" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "newLightButton" } - }); + NewEntityButton { + icon: "../scripts/system/assets/images/tools/light-01.svg" + text: "LIGHT" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newLightButton" } + }); + } } - } - TabletButton { - icon: "../scripts/system/assets/images/tools/text-01.svg" - text: "TEXT" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "newTextButton" } - }); + NewEntityButton { + icon: "../scripts/system/assets/images/tools/text-01.svg" + text: "TEXT" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newTextButton" } + }); + } } - } - TabletButton { - icon: "../scripts/system/assets/images/tools/web-01.svg" - text: "WEB" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "newWebButton" } - }); + NewEntityButton { + icon: "../scripts/system/assets/images/tools/web-01.svg" + text: "WEB" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newWebButton" } + }); + } } - } - TabletButton { - icon: "../scripts/system/assets/images/tools/zone-01.svg" - text: "ZONE" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "newZoneButton" } - }); + NewEntityButton { + icon: "../scripts/system/assets/images/tools/zone-01.svg" + text: "ZONE" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newZoneButton" } + }); + } } - } - TabletButton { - icon: "../scripts/system/assets/images/tools/particle-01.svg" - text: "PARTICLE" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "newParticleButton" } - }); + NewEntityButton { + icon: "../scripts/system/assets/images/tools/particle-01.svg" + text: "PARTICLE" + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "newParticleButton" } + }); + } } - } + } + } } diff --git a/interface/resources/qml/hifi/tablet/NewEntityButton.qml b/interface/resources/qml/hifi/tablet/NewEntityButton.qml new file mode 100644 index 0000000000..93816be71b --- /dev/null +++ b/interface/resources/qml/hifi/tablet/NewEntityButton.qml @@ -0,0 +1,204 @@ +import QtQuick 2.0 +import QtGraphicalEffects 1.0 + +Item { + id: tabletButton + property var uuid; + property string text: "EDIT" + property string icon: "icons/edit-icon.svg" + property string activeText: tabletButton.text + property string activeIcon: tabletButton.icon + property bool isActive: false + property bool inDebugMode: false + property bool isEntered: false + property double sortOrder: 100 + property int stableOrder: 0 + property var tabletRoot; + width: 100 + height: 100 + + signal clicked() + + function changeProperty(key, value) { + tabletButton[key] = value; + } + + onIsActiveChanged: { + if (tabletButton.isEntered) { + tabletButton.state = (tabletButton.isActive) ? "hover active state" : "hover sate"; + } else { + tabletButton.state = (tabletButton.isActive) ? "active state" : "base sate"; + } + } + + Rectangle { + id: buttonBg + color: "#222222" + opacity: 1 + radius: 8 + anchors.right: parent.right + anchors.rightMargin: 0 + anchors.left: parent.left + anchors.leftMargin: 0 + anchors.bottom: parent.bottom + anchors.bottomMargin: 0 + anchors.top: parent.top + anchors.topMargin: 0 + } + + function urlHelper(src) { + if (src.match(/\bhttp/)) { + return src; + } else { + return "../../../" + src; + } + } + + Image { + id: icon + width: 50 + height: 50 + visible: false + anchors.bottom: text.top + anchors.bottomMargin: 5 + anchors.horizontalCenter: parent.horizontalCenter + fillMode: Image.Stretch + source: tabletButton.urlHelper(tabletButton.icon) + } + + ColorOverlay { + id: iconColorOverlay + anchors.fill: icon + source: icon + color: "#ffffff" + } + + Text { + id: text + color: "#ffffff" + text: tabletButton.text + font.bold: true + font.pixelSize: 18 + anchors.bottom: parent.bottom + anchors.bottomMargin: 10 + anchors.horizontalCenter: parent.horizontalCenter + horizontalAlignment: Text.AlignHCenter + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + enabled: true + onClicked: { + console.log("Tablet Button Clicked!"); + if (tabletButton.inDebugMode) { + if (tabletButton.isActive) { + tabletButton.isActive = false; + } else { + tabletButton.isActive = true; + } + } + tabletButton.clicked(); + if (tabletRoot) { + tabletRoot.playButtonClickSound(); + } + } + onEntered: { + tabletButton.isEntered = true; + if (tabletButton.isActive) { + tabletButton.state = "hover active state"; + } else { + tabletButton.state = "hover state"; + } + } + onExited: { + tabletButton.isEntered = false; + if (tabletButton.isActive) { + tabletButton.state = "active state"; + } else { + tabletButton.state = "base state"; + } + } + } + + states: [ + State { + name: "hover state" + + PropertyChanges { + target: buttonOutline + border.color: "#1fc6a6" + opacity: 1 + } + + PropertyChanges { + target: glow + visible: true + } + }, + State { + name: "active state" + + PropertyChanges { + target: buttonOutline + border.color: "#1fc6a6" + opacity: 1 + } + + PropertyChanges { + target: buttonBg + color: "#1fc6a6" + opacity: 1 + } + + PropertyChanges { + target: text + color: "#333333" + text: tabletButton.activeText + } + + PropertyChanges { + target: iconColorOverlay + color: "#333333" + } + + PropertyChanges { + target: icon + source: tabletButton.urlHelper(tabletButton.activeIcon) + } + }, + State { + name: "hover active state" + + PropertyChanges { + target: glow + visible: true + } + + PropertyChanges { + target: buttonOutline + border.color: "#ffffff" + opacity: 1 + } + + PropertyChanges { + target: buttonBg + color: "#1fc6a6" + opacity: 1 + } + + PropertyChanges { + target: text + color: "#333333" + } + + PropertyChanges { + target: iconColorOverlay + color: "#333333" + } + + } + ] +} + + From 8e89e0773211edb37d6259a6e5981e5e2a87f742 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Thu, 23 Feb 2017 11:50:39 -0800 Subject: [PATCH 037/247] text choose an entity type to create --- interface/resources/qml/hifi/tablet/Edit.qml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 4a5930e6e7..6e0995779a 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -41,6 +41,18 @@ StackView { Rectangle { color: "#383838" + + Text { + color: "#ffffff" + text: "Choose an Entity Type to Create:" + font.pixelSize: 14 + font.bold: true + anchors.top: parent.top + anchors.topMargin: 28 + anchors.left: parent.left + anchors.leftMargin: 28 + } + Flow { id: createEntitiesFlow spacing: 35 From bd834097d59428b1e9bd53ebf10fb057078173a0 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Thu, 23 Feb 2017 12:36:27 -0800 Subject: [PATCH 038/247] tab bar styling --- interface/resources/qml/hifi/tablet/Edit.qml | 32 +++++++++++++------ .../qml/hifi/tablet/NewEntityButton.qml | 2 +- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 6e0995779a..3489af5fcb 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -34,13 +34,13 @@ StackView { height: 60 Tab { - title: "Create" + title: "CREATE" active: true enabled: true property string originalUrl: "" Rectangle { - color: "#383838" + color: "#404040" Text { color: "#ffffff" @@ -160,7 +160,7 @@ StackView { } Tab { - title: "List" + title: "LIST" active: true enabled: true property string originalUrl: "" @@ -175,7 +175,7 @@ StackView { } Tab { - title: "Properties" + title: "PROPERTIES" active: true enabled: true property string originalUrl: "" @@ -190,7 +190,7 @@ StackView { } Tab { - title: "Grid" + title: "GRID" active: true enabled: true property string originalUrl: "" @@ -205,7 +205,7 @@ StackView { } Tab { - title: "Particles" + title: "P" active: true enabled: true property string originalUrl: "" @@ -223,17 +223,29 @@ StackView { style: TabViewStyle { frameOverlap: 1 tab: Rectangle { - color: styleData.selected ? "slategrey" :"grey" - implicitWidth: text.width + 25 - implicitHeight: 60 - radius: 2 + color: styleData.selected ? "#404040" :"black" + implicitWidth: text.width + 42 + implicitHeight: 40 Text { id: text anchors.centerIn: parent text: styleData.title + font.pixelSize: 16 + font.bold: true color: styleData.selected ? "white" : "white" } } + tabBar: Rectangle { + color: "black" + anchors.right: parent.right + anchors.rightMargin: 0 + anchors.left: parent.left + anchors.leftMargin: 0 + anchors.bottom: parent.bottom + anchors.bottomMargin: 0 + anchors.top: parent.top + anchors.topMargin: 0 + } } } } diff --git a/interface/resources/qml/hifi/tablet/NewEntityButton.qml b/interface/resources/qml/hifi/tablet/NewEntityButton.qml index 93816be71b..5cb3d169e7 100644 --- a/interface/resources/qml/hifi/tablet/NewEntityButton.qml +++ b/interface/resources/qml/hifi/tablet/NewEntityButton.qml @@ -33,7 +33,7 @@ Item { Rectangle { id: buttonBg - color: "#222222" + color: "#1c1c1c" opacity: 1 radius: 8 anchors.right: parent.right From 3850bc35a9ffe90f0c7ce2cd78ff7e852dddfb09 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Thu, 23 Feb 2017 13:31:03 -0800 Subject: [PATCH 039/247] icons on new entity buttons --- .../icons/create-icons/20-text-01.svg | 26 ++++ .../icons/create-icons/21-cube-01.svg | 17 +++ .../icons/create-icons/22-sphere-01.svg | 21 +++ .../icons/create-icons/23-zone-01.svg | 38 +++++ .../icons/create-icons/24-light-01.svg | 34 +++++ .../icons/create-icons/25-web-1-01.svg | 30 ++++ .../icons/create-icons/90-particles-01.svg | 29 ++++ .../icons/create-icons/94-model-01.svg | 20 +++ interface/resources/qml/hifi/tablet/Edit.qml | 20 +-- .../qml/hifi/tablet/NewEntityButton.qml | 134 ++++++------------ 10 files changed, 271 insertions(+), 98 deletions(-) create mode 100644 interface/resources/icons/create-icons/20-text-01.svg create mode 100644 interface/resources/icons/create-icons/21-cube-01.svg create mode 100644 interface/resources/icons/create-icons/22-sphere-01.svg create mode 100644 interface/resources/icons/create-icons/23-zone-01.svg create mode 100644 interface/resources/icons/create-icons/24-light-01.svg create mode 100644 interface/resources/icons/create-icons/25-web-1-01.svg create mode 100644 interface/resources/icons/create-icons/90-particles-01.svg create mode 100644 interface/resources/icons/create-icons/94-model-01.svg diff --git a/interface/resources/icons/create-icons/20-text-01.svg b/interface/resources/icons/create-icons/20-text-01.svg new file mode 100644 index 0000000000..337f3b70e3 --- /dev/null +++ b/interface/resources/icons/create-icons/20-text-01.svg @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;stroke:#000000;stroke-width:18;stroke-miterlimit:10;} + .st1{fill:none;stroke:#000000;stroke-width:18;stroke-linecap:round;stroke-miterlimit:10;} + .st2{fill:none;stroke:#000000;stroke-width:19;stroke-linecap:round;stroke-miterlimit:10;} +</style> +<g> + <g> + <path d="M220.3,378.4l-81.1-232c-1-2.8-3.6-4.3-6.6-4.3h-9.2c-3,0-5.6,1.5-6.6,4.3L34,378.5c-0.8,2.1-0.4,5.1,0.9,7 + c1.3,1.9,3.4,3.5,5.7,3.5h15.9c3,0,5.6-2.6,6.6-5.4L90.2,305h73.7l27,78.6c1,2.8,3.6,5.4,6.6,5.4h16.2c2.3,0,4.4-1.8,5.7-3.6 + C220.7,383.5,221.1,380.5,220.3,378.4z M100.3,276l25.6-73.1c0.6-1.7,1.3-3.3,1.9-5.1c0.6,1.8,1.2,3,1.7,4.5l24.9,73.7H100.3z"/> + <path d="M351.6,215.5c-9.7-11.4-24.3-17.2-43.2-17.2c-17.5,0-35.5,4.7-53.2,14.1c-3.1,1.7-4.6,5.4-3.3,8.7l5.2,13.6 + c0.7,1.9,2.3,3.4,4.2,4.1c1.9,0.7,4.1,0.5,5.8-0.6c14.1-8.2,27.7-12.3,40.6-12.3c10.9,0,18.8,3.2,23.3,9.6c5.2,7.3,8,18.4,8,33 + v4.6l-22.7,0.7c-25,0.6-44.7,6-58.2,16.1c-14.3,10.7-21.6,25.7-21.6,44.7c0,17.1,4.9,30.9,14.5,40.8c9.7,10,23.2,15.1,40.1,15.1 + c12,0,22.8-2.7,32.2-8c5.6-3.1,11.1-7.7,16.4-13.6l1.6,13.3c0.4,3.5,3.4,6.8,6.9,6.8h10.2c3.9,0,7.6-4.4,7.6-8.3V265.9 + C366,243.2,361.1,226.7,351.6,215.5z M265.1,335.2c0-11.2,3.5-19.1,10.7-24.1c8-5.6,22.1-9,42-10.1l19.1-0.9v9.6 + c0,17.2-3.8,29.9-12,39.1c-8.1,9-19,13.4-33.3,13.4c-8.8,0-15.3-2.2-19.8-6.9C267.3,350.8,265.1,344.2,265.1,335.2z"/> + <path d="M451.3,439.9c-10,0-15.3-8.1-15.3-18c-0.1-22.2-0.2-298.2-0.4-320.4c-0.1-10,5.2-18.2,15.2-18.3c0.1,0,0.1,0,0.2,0 + c9.9,0,15.2,8,15.3,18c0.2,22.2,0.3,298.3,0.4,320.5C466.7,431.7,461.4,439.9,451.3,439.9C451.4,439.9,451.3,439.9,451.3,439.9z" + /> + </g> +</g> +</svg> diff --git a/interface/resources/icons/create-icons/21-cube-01.svg b/interface/resources/icons/create-icons/21-cube-01.svg new file mode 100644 index 0000000000..21a980ca35 --- /dev/null +++ b/interface/resources/icons/create-icons/21-cube-01.svg @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;stroke:#000000;stroke-width:18;stroke-miterlimit:10;} + .st1{fill:none;stroke:#000000;stroke-width:18;stroke-linecap:round;stroke-miterlimit:10;} + .st2{fill:none;stroke:#000000;stroke-width:19;stroke-linecap:round;stroke-miterlimit:10;} +</style> +<g> + <path d="M451.6,90.8L189.4,64.9c-3.2-0.3-6.2,0.5-8.8,2.4l0.1,0L54.9,155.4l0,0c-0.5,0.3-0.5,0.7-0.9,1c-2.8,2.5-4,6.1-4,9.9v262.5 + c0,6.8,4.8,12.6,11.6,13.2l262.3,25.9c0.4,0,0.8,0.1,1.2,0.1c2.7,0,5.3-0.9,7.6-2.4l0,0l125.8-88.2l0,0c0.5-0.3,0.3-0.7,0.7-1 + c2.8-2.5,3.8-6.1,3.8-9.9V104.1C463,97.2,458.4,91.5,451.6,90.8z M430.1,364.7l-1.8,1.4c-0.2,0.1-0.3,0.3-0.6,0.4c0,0,0.4,0,0.4,0 + L339,429.2v-230l98-69.5v222.2C436,358,435,361.1,430.1,364.7z M203.3,93l210.6,20.8l-92.4,64.7L99.6,156.6l86.7-60.8 + c0.2,0,0.3,0,0.5,0c0,0,0,0,0.1,0c3.4-2.1,7.4-3.4,11.4-3.4C200,92.4,201.7,92.6,203.3,93z M313,440L76,416.7V181l237,23.3V440z"/> +</g> +</svg> diff --git a/interface/resources/icons/create-icons/22-sphere-01.svg b/interface/resources/icons/create-icons/22-sphere-01.svg new file mode 100644 index 0000000000..5080a16e78 --- /dev/null +++ b/interface/resources/icons/create-icons/22-sphere-01.svg @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;stroke:#000000;stroke-width:18;stroke-miterlimit:10;} + .st1{fill:none;stroke:#000000;stroke-width:18;stroke-linecap:round;stroke-miterlimit:10;} + .st2{fill:none;stroke:#000000;stroke-width:19;stroke-linecap:round;stroke-miterlimit:10;} +</style> +<g> + <path d="M417.6,96.6c-90.2-90.2-236.9-90.2-327.1,0c-43.7,43.7-67.8,101.8-67.8,163.6c0,61.8,24.1,119.9,67.8,163.6 + c45.1,45.1,104.3,67.6,163.6,67.6c59.2,0,118.5-22.5,163.6-67.6c43.7-43.7,67.8-101.8,67.8-163.6 + C485.4,198.4,461.3,140.3,417.6,96.6z M112.7,118.8c30-30,67.2-48.4,106.1-55.3c-7.4,11.3-14,26-19.8,44 + c-13.2,41.4-20.5,96.3-20.5,154.5c0,2.8,0,7,0.1,9.8c6.4,1.6,12.8,1.7,19.3,2.8c1.9,0.3,3.9,0.6,5.9,0.8c-0.1-4.4-0.1-8.8-0.1-13.3 + c0-116.9,30-193.4,52.3-200c0.5-0.5,1-1,1.4-1.6c50.1,0.8,99.9,20.3,138,58.4c36.6,36.6,57.3,85,58.5,136.6 + c-4.8,22.4-81.7,53.2-200.2,53.2c-115.3,0-191.3-29.1-199.6-51.4C54.9,204.9,75.6,155.9,112.7,118.8z M395.5,401.6 + C356,441.1,304,460.5,252.1,460c-14.1-8.9-30.3-43.3-39.9-96.6l-25.6-1.4c3.2,19.2,7.4,38.5,12.5,54.3c5.1,16,10.9,29.4,17.3,40.1 + c-38-7.2-74.3-25.5-103.7-54.9C83.2,372.1,64,334.9,57.1,294.6c11,6.9,25.2,13.2,42.3,18.7c41.4,13.2,96.3,20.5,154.5,20.5 + c58.2,0,113-7.3,154.5-20.5c17.4-5.6,31.7-11.9,42.9-19C444.2,334.7,425.1,372,395.5,401.6z"/> +</g> +</svg> diff --git a/interface/resources/icons/create-icons/23-zone-01.svg b/interface/resources/icons/create-icons/23-zone-01.svg new file mode 100644 index 0000000000..5428257893 --- /dev/null +++ b/interface/resources/icons/create-icons/23-zone-01.svg @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;stroke:#000000;stroke-width:18;stroke-miterlimit:10;} + .st1{fill:none;stroke:#000000;stroke-width:18;stroke-linecap:round;stroke-miterlimit:10;} + .st2{fill:none;stroke:#000000;stroke-width:19;stroke-linecap:round;stroke-miterlimit:10;} +</style> +<g> + <path d="M380.7,139.8c-2.7-6.6-9.2-10.8-16.3-10.8H292v34h29.9L159,326.1V290h-36v79h1.3c0.1,2,0.5,4.1,1.3,5.9 + c2.7,6.6,9.1,11.1,16.2,11.1H225v-35h-40.8L346,189.7V215h35v-62.4C382,148.5,382.4,144,380.7,139.8z"/> + <path d="M338.4,437.6c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0 + C348.1,459.3,338.4,449.6,338.4,437.6z M266.9,437.6c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0 + c0,12-9.7,21.7-21.7,21.7l0,0C276.6,459.3,266.9,449.6,266.9,437.6z M195.4,437.6c0-12,9.7-21.7,21.7-21.7l0,0 + c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0C205.1,459.3,195.4,449.6,195.4,437.6z M123.9,437.6 + c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0C133.6,459.3,123.9,449.6,123.9,437.6z"/> + <path d="M74.1,459.3c-5.7,0-11.3-2.3-15.4-6.4c-4-4-6.4-9.6-6.4-15.3c0-5.7,2.3-11.3,6.4-15.3c4-4,9.6-6.4,15.4-6.4 + c5.7,0,11.3,2.3,15.3,6.4c4,4,6.4,9.6,6.4,15.3c0,5.7-2.3,11.3-6.4,15.3C85.4,457,79.8,459.3,74.1,459.3z"/> + <path d="M52.4,366.1c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0 + C62.1,387.8,52.4,378,52.4,366.1z M52.4,294.6c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7 + l0,0C62.1,316.3,52.4,306.5,52.4,294.6z M52.4,223.1c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0 + c0,12-9.7,21.7-21.7,21.7l0,0C62.1,244.8,52.4,235,52.4,223.1z M52.4,151.5c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7 + l0,0c0,12-9.7,21.7-21.7,21.7l0,0C62.1,173.2,52.4,163.5,52.4,151.5z"/> + <path d="M338.4,80c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0 + C348.1,101.7,338.4,92,338.4,80z M266.9,80c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0 + C276.6,101.7,266.9,92,266.9,80z M195.4,80c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0 + C205.1,101.7,195.4,92,195.4,80z M123.9,80c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0 + C133.6,101.7,123.9,92,123.9,80z"/> + <path d="M431.6,101.7c-5.7,0-11.3-2.3-15.3-6.4c-4-4-6.4-9.6-6.4-15.3c0-5.7,2.3-11.3,6.4-15.3c4-4,9.6-6.4,15.3-6.4 + s11.3,2.3,15.3,6.4c4,4,6.4,9.6,6.4,15.3c0,5.7-2.3,11.3-6.4,15.3C442.9,99.4,437.4,101.7,431.6,101.7z"/> + <path d="M409.9,366.1c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0 + C419.7,387.8,409.9,378.1,409.9,366.1z M409.9,294.6c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0 + c0,12-9.7,21.7-21.7,21.7l0,0C419.7,316.3,409.9,306.5,409.9,294.6z M409.9,223.1c0-12,9.7-21.7,21.7-21.7l0,0 + c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0C419.7,244.7,409.9,235,409.9,223.1z M409.9,151.5 + c0-12,9.7-21.7,21.7-21.7l0,0c12,0,21.7,9.7,21.7,21.7l0,0c0,12-9.7,21.7-21.7,21.7l0,0C419.7,173.2,409.9,163.5,409.9,151.5z"/> +</g> +</svg> diff --git a/interface/resources/icons/create-icons/24-light-01.svg b/interface/resources/icons/create-icons/24-light-01.svg new file mode 100644 index 0000000000..028ea22793 --- /dev/null +++ b/interface/resources/icons/create-icons/24-light-01.svg @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;stroke:#000000;stroke-width:18;stroke-miterlimit:10;} + .st1{fill:none;stroke:#000000;stroke-width:18;stroke-linecap:round;stroke-miterlimit:10;} + .st2{fill:none;stroke:#000000;stroke-width:19;stroke-linecap:round;stroke-miterlimit:10;} +</style> +<g> + <circle cx="259.2" cy="252.5" r="38.3"/> + <path d="M259.2,361.8c-60.3,0-109.3-49-109.3-109.3s49-109.3,109.3-109.3s109.3,49,109.3,109.3S319.4,361.8,259.2,361.8z + M259.2,171.8c-44.5,0-80.7,36.2-80.7,80.7s36.2,80.7,80.7,80.7s80.7-36.2,80.7-80.7S303.7,171.8,259.2,171.8z"/> + <path d="M414.1,268.5c-7.9,0-14.2-6.4-14.3-14.2c0-7.9,6.3-14.3,14.2-14.3c17.1-0.1,34.5-0.2,51.6-0.3c0,0,0.1,0,0.1,0 + c7.8,0,14.2,6.3,14.3,14.2c0.1,7.9-6.3,14.3-14.2,14.4C448.8,268.3,431.4,268.4,414.1,268.5C414.2,268.5,414.1,268.5,414.1,268.5z" + /> + <path d="M105.8,268.5C105.8,268.5,105.8,268.5,105.8,268.5c-17.3-0.1-34.6-0.2-51.7-0.4c-7.9-0.1-14.2-6.5-14.1-14.4 + c0.1-7.8,6.5-14.1,14.3-14.1c0.1,0,0.1,0,0.2,0c17,0.2,34.3,0.3,51.5,0.4c7.9,0,14.3,6.5,14.2,14.3 + C120.1,262.2,113.7,268.5,105.8,268.5z"/> + <path d="M369.1,159.5c-3.6,0-7.3-1.4-10-4.1c-5.6-5.6-5.6-14.6-0.1-20.2c12-12.1,24.2-24.5,36.3-36.7c5.5-5.6,14.6-5.7,20.2-0.2 + c5.6,5.5,5.7,14.6,0.2,20.2c-12.1,12.3-24.3,24.7-36.4,36.8C376.4,158.1,372.8,159.5,369.1,159.5z"/> + <path d="M114.4,413.7c-3.7,0-7.4-1.4-10.2-4.3c-5.5-5.6-5.4-14.7,0.2-20.2c12.2-11.9,24.5-24.1,36.7-36.1 + c5.6-5.6,14.6-5.5,20.2,0.1c5.6,5.6,5.5,14.6-0.1,20.2c-12.2,12.1-24.6,24.3-36.8,36.2C121.6,412.3,118,413.7,114.4,413.7z"/> + <path d="M260.2,114.2c-7.9,0-14.2-6.4-14.3-14.2c-0.1-17-0.2-34.4-0.3-51.6c-0.1-7.9,6.3-14.3,14.2-14.4c0,0,0.1,0,0.1,0 + c7.8,0,14.2,6.3,14.3,14.2c0.1,17.3,0.3,34.7,0.3,51.7C274.5,107.8,268.1,114.2,260.2,114.2C260.2,114.2,260.2,114.2,260.2,114.2z" + /> + <path d="M259.9,474.1c-0.1,0-0.1,0-0.2,0c-7.9-0.1-14.2-6.5-14.1-14.4c0.2-16.9,0.3-34.3,0.4-51.5c0-7.9,6.4-14.2,14.3-14.2 + c0,0,0,0,0.1,0c7.9,0,14.3,6.5,14.2,14.3c-0.1,17.3-0.2,34.6-0.4,51.7C274,467.8,267.7,474.1,259.9,474.1z"/> + <path d="M151.2,159.3c-3.6,0-7.3-1.4-10-4.1c-12.2-12.1-24.6-24.3-36.7-36.3c-5.6-5.5-5.7-14.6-0.2-20.2c5.5-5.6,14.6-5.7,20.2-0.2 + c12.2,12,24.6,24.2,36.8,36.4c5.6,5.6,5.6,14.6,0.1,20.2C158.5,157.9,154.9,159.3,151.2,159.3z"/> + <path d="M405.4,414c-3.7,0-7.4-1.4-10.2-4.3c-11.9-12.2-24-24.5-36.1-36.7c-5.6-5.6-5.5-14.6,0.1-20.2c5.6-5.6,14.6-5.5,20.2,0.1 + c12.1,12.2,24.3,24.6,36.2,36.8c5.5,5.6,5.4,14.7-0.2,20.2C412.6,412.6,409,414,405.4,414z"/> +</g> +</svg> diff --git a/interface/resources/icons/create-icons/25-web-1-01.svg b/interface/resources/icons/create-icons/25-web-1-01.svg new file mode 100644 index 0000000000..4f0eccc11e --- /dev/null +++ b/interface/resources/icons/create-icons/25-web-1-01.svg @@ -0,0 +1,30 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<style type="text/css"> + .st0{fill:none;stroke:#000000;stroke-width:18;stroke-miterlimit:10;} + .st1{fill:none;stroke:#000000;stroke-width:18;stroke-linecap:round;stroke-miterlimit:10;} + .st2{fill:none;stroke:#000000;stroke-width:19;stroke-linecap:round;stroke-miterlimit:10;} + .st3{stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;} +</style> +<g> + <path d="M438,121.5c0-8-6.5-14.5-14.5-14.5h-333c-8,0-14.5,6.5-14.5,14.5v298c0,8,6.5,14.5,14.5,14.5h333c8,0,14.5-6.5,14.5-14.5 + V121.5z M219.4,130H391c8.3,0,15,7.2,15,16s-6.7,16-15,16H219.4c-8.3,0-15-7.2-15-16S211.1,130,219.4,130z M171.5,128.6 + c9.2,0,16.7,7.5,16.7,16.7c0,9.2-7.5,16.7-16.7,16.7c-9.2,0-16.7-7.5-16.7-16.7C154.8,136,162.3,128.6,171.5,128.6z M121,128.6 + c9.2,0,16.7,7.5,16.7,16.7c0,9.2-7.5,16.7-16.7,16.7c-9.2,0-16.7-7.5-16.7-16.7C104.4,136,111.8,128.6,121,128.6z M412,405H104V186 + h308V405z"/> +</g> +<g> + <path class="st3" d="M161.6,320.5h-14.3l-20.5-59.3h12.9l14.7,44.8l14.7-44.8h12.9l14.7,44.8l14.7-44.8h12.9L204,320.5h-14.3 + l-14-40.6L161.6,320.5z"/> + <path class="st3" d="M299.4,296.3h-46.5c0.3,4.3,2.3,7.8,5.9,10.4c3.6,2.6,7.8,4,12.5,4c7.4,0,13.1-2.3,16.9-7l7.1,7.8 + c-6.4,6.6-14.7,9.9-25,9.9c-8.3,0-15.4-2.8-21.2-8.3c-5.8-5.5-8.7-13-8.7-22.3c0-9.3,3-16.7,8.9-22.2c5.9-5.5,12.9-8.2,21-8.2 + c8.1,0,14.9,2.4,20.6,7.3c5.6,4.9,8.5,11.6,8.5,20.1V296.3z M252.9,286.5h34c0-5-1.6-8.8-4.7-11.5s-7-4-11.5-4 + c-4.6,0-8.7,1.4-12.3,4.2C254.7,278,252.9,281.8,252.9,286.5z"/> + <path class="st3" d="M353.6,260.3c7.9,0,14.7,2.8,20.4,8.2c5.6,5.5,8.5,12.8,8.5,22c0,9.1-2.8,16.6-8.4,22.3 + c-5.6,5.7-12.1,8.6-19.6,8.6s-14.2-3.3-20.1-9.8v8.9h-12.5v-82.7h12.5v33.8C339.2,264.1,345.6,260.3,353.6,260.3z M334.1,291 + c0,5.6,1.7,10.3,5.1,13.9c3.4,3.6,7.6,5.4,12.5,5.4c4.9,0,9.2-1.8,12.8-5.3c3.6-3.6,5.5-8.2,5.5-13.9c0-5.7-1.8-10.4-5.3-14.2 + c-3.6-3.8-7.8-5.6-12.8-5.6c-5,0-9.2,1.9-12.6,5.6C335.8,280.6,334.1,285.3,334.1,291z"/> +</g> +</svg> diff --git a/interface/resources/icons/create-icons/90-particles-01.svg b/interface/resources/icons/create-icons/90-particles-01.svg new file mode 100644 index 0000000000..5e0105d7cd --- /dev/null +++ b/interface/resources/icons/create-icons/90-particles-01.svg @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path d="M331.8,283.4c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C342.1,306.6,331.8,296.2,331.8,283.4z"/> +<path d="M277.8,350.9c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C288.1,374.2,277.8,363.8,277.8,350.9z"/> +<path d="M216.3,368.8c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C226.7,392,216.3,381.6,216.3,368.8z"/> +<path d="M169.9,308.9c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C180.3,332.1,169.9,321.7,169.9,308.9z"/> +<path d="M251.2,447.4c-4.9-3.6-8.3-9.1-9.2-15.3c-0.9-6,0.6-12.3,4.2-17.2c3.6-4.9,9.1-8.3,15.2-9.1c6-0.9,12.3,0.6,17.3,4.3 + c4.9,3.6,8.3,9.1,9.1,15.2c0.9,6-0.6,12.3-4.2,17.2s-9.1,8.3-15.2,9.1C262.4,452.6,256.1,451,251.2,447.4z"/> +<path d="M67.6,246.1c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C78,269.3,67.6,258.8,67.6,246.1z"/> +<path d="M178.8,199.5c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C189.1,222.7,178.8,212.2,178.8,199.5z"/> +<path d="M250.3,293.9c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C260.7,317.1,250.3,306.6,250.3,293.9z"/> +<path d="M413,242.1c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C423.5,265.3,413,255,413,242.1z"/> +<path d="M302.1,203.7c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C312.6,226.9,302.1,216.5,302.1,203.7z"/> +<path d="M132.3,113.5c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C142.8,136.6,132.3,126.2,132.3,113.5z"/> +<path d="M366.6,136.7c0-12.8,10.4-23.2,23.2-23.2l0,0c12.8,0,23.2,10.4,23.2,23.2l0,0c0,12.8-10.4,23.2-23.2,23.2l0,0 + C377.1,159.9,366.6,149.5,366.6,136.7z"/> +</svg> diff --git a/interface/resources/icons/create-icons/94-model-01.svg b/interface/resources/icons/create-icons/94-model-01.svg new file mode 100644 index 0000000000..5d8c4c5eca --- /dev/null +++ b/interface/resources/icons/create-icons/94-model-01.svg @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Generator: Adobe Illustrator 19.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve"> +<path d="M494.2,117.2c-2.2-5.3-7.8-8.4-13.5-7.3l-89.9,16.4l44.9-72.6c2.8-4.6,2.3-10.5-1.2-14.5s-9.3-5.3-14.2-3l-213.1,98 + c-15.3-4.9-72.2-27.3-111.4-43.2c-0.3-0.1-0.6-0.2-0.8-0.3c0,0-0.1,0-0.1,0c-0.4-0.1-0.9-0.2-1.3-0.3c-0.1,0-0.2-0.1-0.3-0.1 + c-0.5-0.1-0.9-0.2-1.4-0.2c0,0,0,0-0.1,0c-0.5,0-0.9,0.1-1.4,0.1c-0.1,0-0.1,0-0.2,0c0,0-0.1,0-0.1,0c-0.5,0-0.9,0.1-1.3,0.2 + c-0.1,0-0.2,0-0.3,0.1c-0.4,0.1-0.8,0.2-1.2,0.3c-0.1,0-0.1,0-0.2,0.1c-0.4,0.1-0.8,0.3-1.2,0.5c-0.1,0-0.2,0.1-0.3,0.1 + c-0.8,0.4-1.6,0.9-2.3,1.5c-0.1,0.1-0.2,0.1-0.2,0.2c-0.3,0.3-0.7,0.6-1,0.9c0,0-0.1,0.1-0.1,0.1c-0.2,0.2-0.4,0.4-0.5,0.6 + c-0.1,0.1-0.2,0.2-0.3,0.4c-0.1,0.1-0.1,0.2-0.2,0.3c-0.3,0.4-0.5,0.8-0.7,1.2c0,0,0,0,0,0l-27.3,52.1l-32.7,40.1 + c-3.4,4.2-3.7,10.2-0.6,14.7c2.3,3.3,6.1,5.2,10,5.2c1.3,0,2.6-0.2,3.9-0.7l50.1-17l40.6-1.9l-26.7,50.3c-2.4,4.5-1.7,9.9,1.6,13.7 + c0.3,0.3,25.6,29.3,51.7,57.7c15.4,16.8,28,30.1,37.6,39.6c6.6,6.5,11.6,11.2,15.6,14.4l-16,61l-45.7,18.2 + c-6.3,2.5-9.3,9.6-6.8,15.8c1.9,4.8,6.5,7.7,11.3,7.7c1.5,0,3-0.3,4.5-0.9l44.5-17.7l17.2,15.4c2.3,2.1,5.2,3.1,8.1,3.1 + c3.4,0,6.7-1.4,9.1-4.1c4.5-5,4-12.7-1-17.2L212.1,431l16-60.7l75.7,89.3c2.4,2.8,5.8,4.3,9.3,4.3c1.1,0,2.1-0.1,3.2-0.4l84.6-22.8 + c4.8-1.3,8.4-5.4,8.9-10.4c0.6-5-2-9.8-6.4-12.1l-136.2-71.8l44.4-91.2L489.9,132C494.6,128.7,496.4,122.6,494.2,117.2z + M294.4,234.2l-122.6-55.4l41.5-20.6c0,0,0,0,0,0l180.4-82.9L294.4,234.2z M146.4,160.8l-24.8-33.2c16.7,6.6,39.3,15.5,54,21 + L146.4,160.8z M87.3,166.6l-9.6-12.3l15.1-28.9l27.4,37.3l1.7,2.3L87.3,166.6z M123.2,243.6l22.8-43.3c18.3,44.8,35.2,91,47,121 + C173.7,301.1,147.7,271.5,123.2,243.6z M317.4,438l-57.5-67.8l104.6,55.1L317.4,438z M223.3,336.7c-5.5-14.1-42.6-104.1-30.8-76.4 + c0.6,1.4-20.5-49.2-27.9-66.3l120.9,58.9l-47.1,95L223.3,336.7z M330.5,216.7l43-62.3l70.9-16.2L330.5,216.7z"/> +</svg> diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 3489af5fcb..601dbb5d73 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -76,7 +76,7 @@ StackView { } NewEntityButton { - icon: "model-01.svg" + icon: "icons/create-icons/94-model-01.svg" text: "MODEL" onClicked: { editRoot.sendToScript({ @@ -86,7 +86,7 @@ StackView { } NewEntityButton { - icon: "../cube-01.svg" + icon: "icons/create-icons/21-cube-01.svg" text: "CUBE" onClicked: { editRoot.sendToScript({ @@ -96,7 +96,7 @@ StackView { } NewEntityButton { - icon: "../images/sphere-01.svg" + icon: "icons/create-icons/22-sphere-01.svg" text: "SPHERE" onClicked: { editRoot.sendToScript({ @@ -106,7 +106,7 @@ StackView { } NewEntityButton { - icon: "../scripts/system/assets/images/tools/light-01.svg" + icon: "icons/create-icons/24-light-01.svg" text: "LIGHT" onClicked: { editRoot.sendToScript({ @@ -116,7 +116,7 @@ StackView { } NewEntityButton { - icon: "../scripts/system/assets/images/tools/text-01.svg" + icon: "icons/create-icons/20-text-01.svg" text: "TEXT" onClicked: { editRoot.sendToScript({ @@ -126,7 +126,7 @@ StackView { } NewEntityButton { - icon: "../scripts/system/assets/images/tools/web-01.svg" + icon: "icons/create-icons/25-web-1-01.svg" text: "WEB" onClicked: { editRoot.sendToScript({ @@ -136,7 +136,7 @@ StackView { } NewEntityButton { - icon: "../scripts/system/assets/images/tools/zone-01.svg" + icon: "icons/create-icons/23-zone-01.svg" text: "ZONE" onClicked: { editRoot.sendToScript({ @@ -146,7 +146,7 @@ StackView { } NewEntityButton { - icon: "../scripts/system/assets/images/tools/particle-01.svg" + icon: "icons/create-icons/90-particles-01.svg" text: "PARTICLE" onClicked: { editRoot.sendToScript({ @@ -154,7 +154,9 @@ StackView { }); } } - } + } + + } } diff --git a/interface/resources/qml/hifi/tablet/NewEntityButton.qml b/interface/resources/qml/hifi/tablet/NewEntityButton.qml index 5cb3d169e7..e5684fa791 100644 --- a/interface/resources/qml/hifi/tablet/NewEntityButton.qml +++ b/interface/resources/qml/hifi/tablet/NewEntityButton.qml @@ -2,12 +2,12 @@ import QtQuick 2.0 import QtGraphicalEffects 1.0 Item { - id: tabletButton + id: newEntityButton property var uuid; - property string text: "EDIT" + property string text: "ENTITY" property string icon: "icons/edit-icon.svg" - property string activeText: tabletButton.text - property string activeIcon: tabletButton.icon + property string activeText: newEntityButton.text + property string activeIcon: newEntityButton.icon property bool isActive: false property bool inDebugMode: false property bool isEntered: false @@ -54,6 +54,38 @@ Item { } } + Rectangle { + id: buttonOutline + color: "#00000000" + opacity: 0 + radius: 8 + z: 1 + border.width: 2 + border.color: "#ffffff" + anchors.right: parent.right + anchors.rightMargin: 0 + anchors.left: parent.left + anchors.leftMargin: 0 + anchors.bottom: parent.bottom + anchors.bottomMargin: 0 + anchors.top: parent.top + anchors.topMargin: 0 + } + + DropShadow { + id: glow + visible: false + anchors.fill: parent + horizontalOffset: 0 + verticalOffset: 0 + color: "#ffffff" + radius: 20 + z: -1 + samples: 41 + source: buttonOutline + } + + Image { id: icon width: 50 @@ -63,7 +95,7 @@ Item { anchors.bottomMargin: 5 anchors.horizontalCenter: parent.horizontalCenter fillMode: Image.Stretch - source: tabletButton.urlHelper(tabletButton.icon) + source: newEntityButton.urlHelper(newEntityButton.icon) } ColorOverlay { @@ -76,11 +108,11 @@ Item { Text { id: text color: "#ffffff" - text: tabletButton.text + text: newEntityButton.text font.bold: true - font.pixelSize: 18 + font.pixelSize: 16 anchors.bottom: parent.bottom - anchors.bottomMargin: 10 + anchors.bottomMargin: 12 anchors.horizontalCenter: parent.horizontalCenter horizontalAlignment: Text.AlignHCenter } @@ -90,34 +122,13 @@ Item { hoverEnabled: true enabled: true onClicked: { - console.log("Tablet Button Clicked!"); - if (tabletButton.inDebugMode) { - if (tabletButton.isActive) { - tabletButton.isActive = false; - } else { - tabletButton.isActive = true; - } - } - tabletButton.clicked(); - if (tabletRoot) { - tabletRoot.playButtonClickSound(); - } + newEntityButton.clicked(); } onEntered: { - tabletButton.isEntered = true; - if (tabletButton.isActive) { - tabletButton.state = "hover active state"; - } else { - tabletButton.state = "hover state"; - } + newEntityButton.state = "hover state"; } onExited: { - tabletButton.isEntered = false; - if (tabletButton.isActive) { - tabletButton.state = "active state"; - } else { - tabletButton.state = "base state"; - } + newEntityButton.state = "base state"; } } @@ -127,7 +138,6 @@ Item { PropertyChanges { target: buttonOutline - border.color: "#1fc6a6" opacity: 1 } @@ -137,66 +147,12 @@ Item { } }, State { - name: "active state" - - PropertyChanges { - target: buttonOutline - border.color: "#1fc6a6" - opacity: 1 - } - - PropertyChanges { - target: buttonBg - color: "#1fc6a6" - opacity: 1 - } - - PropertyChanges { - target: text - color: "#333333" - text: tabletButton.activeText - } - - PropertyChanges { - target: iconColorOverlay - color: "#333333" - } - - PropertyChanges { - target: icon - source: tabletButton.urlHelper(tabletButton.activeIcon) - } - }, - State { - name: "hover active state" + name: "base state" PropertyChanges { target: glow - visible: true + visible: false } - - PropertyChanges { - target: buttonOutline - border.color: "#ffffff" - opacity: 1 - } - - PropertyChanges { - target: buttonBg - color: "#1fc6a6" - opacity: 1 - } - - PropertyChanges { - target: text - color: "#333333" - } - - PropertyChanges { - target: iconColorOverlay - color: "#333333" - } - } ] } From d4ea0c116dbba42f15346a95ed48d3c04e132702 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Thu, 23 Feb 2017 14:36:39 -0800 Subject: [PATCH 040/247] asset server button --- interface/resources/qml/hifi/tablet/Edit.qml | 102 +++++++++++++++++-- 1 file changed, 91 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 601dbb5d73..b3f28569cc 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -6,6 +6,7 @@ import QtQuick.Controls.Styles 1.4 import "../../controls" import "../toolbars" import HFWebEngineProfile 1.0 +import QtGraphicalEffects 1.0 StackView { id: editRoot @@ -60,20 +61,9 @@ StackView { anchors.rightMargin: 55 anchors.left: parent.left anchors.leftMargin: 55 - anchors.bottom: parent.bottom - anchors.bottomMargin: 30 anchors.top: parent.top anchors.topMargin: 70 - NewEntityButton { - icon: "icons/assets-01.svg" - text: "ASSETS" - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "openAssetBrowserButton" } - }); - } - } NewEntityButton { icon: "icons/create-icons/94-model-01.svg" @@ -156,8 +146,98 @@ StackView { } } + Item { + id: assetServerButton + width: 370 + height: 38 + anchors.horizontalCenter: parent.horizontalCenter + anchors.top: createEntitiesFlow.bottom + anchors.topMargin: 35 + + Rectangle { + id: assetServerButtonBg + color: "black" + opacity: 1 + radius: 6 + anchors.right: parent.right + anchors.rightMargin: 0 + anchors.left: parent.left + anchors.leftMargin: 0 + anchors.bottom: parent.bottom + anchors.bottomMargin: 0 + anchors.top: parent.top + anchors.topMargin: 0 + } + Rectangle { + id: assetServerButtonGradient + gradient: Gradient { + GradientStop { + position: 0 + color: "#383838" + } + GradientStop { + position: 1 + color: "black" + } + } + opacity: 1 + radius: 6 + anchors.right: parent.right + anchors.rightMargin: 0 + anchors.left: parent.left + anchors.leftMargin: 0 + anchors.bottom: parent.bottom + anchors.bottomMargin: 0 + anchors.top: parent.top + anchors.topMargin: 0 + } + + Text { + color: "#ffffff" + text: "OPEN THIS DOMAIN'S ASSET SERVER" + font.bold: true + font.pixelSize: 14 + anchors.centerIn: parent + } + + MouseArea { + anchors.fill: parent + hoverEnabled: true + enabled: true + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "openAssetBrowserButton" } + }); + } + onEntered: { + assetServerButton.state = "hover state"; + } + onExited: { + assetServerButton.state = "base state"; + } + } + + states: [ + State { + name: "hover state" + + PropertyChanges { + target: assetServerButtonGradient + opacity: 0 + } + }, + State { + name: "base state" + + PropertyChanges { + target: assetServerButtonGradient + opacity: 1 + } + } + ] + } } } From 80c3c003984b58b5a1f57833780b4e72aa3b8b85 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Thu, 23 Feb 2017 14:48:06 -0800 Subject: [PATCH 041/247] switch to properties tab when you create an entity --- interface/resources/qml/hifi/tablet/Edit.qml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index b3f28569cc..a4e3db73f4 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -72,6 +72,7 @@ StackView { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newModelButton" } }); + editTabView.currentIndex = 2 } } @@ -82,6 +83,7 @@ StackView { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newCubeButton" } }); + editTabView.currentIndex = 2 } } @@ -92,6 +94,7 @@ StackView { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newSphereButton" } }); + editTabView.currentIndex = 2 } } @@ -102,6 +105,7 @@ StackView { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newLightButton" } }); + editTabView.currentIndex = 2 } } @@ -112,6 +116,7 @@ StackView { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newTextButton" } }); + editTabView.currentIndex = 2 } } @@ -122,6 +127,7 @@ StackView { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newWebButton" } }); + editTabView.currentIndex = 2 } } @@ -132,6 +138,7 @@ StackView { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newZoneButton" } }); + editTabView.currentIndex = 2 } } @@ -142,6 +149,7 @@ StackView { editRoot.sendToScript({ method: "newEntityButtonClicked", params: { buttonName: "newParticleButton" } }); + editTabView.currentIndex = 2 } } } From 4a5be4238e4c5ba44851a1924af3f35ec1db9172 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 24 Feb 2017 00:19:32 +0000 Subject: [PATCH 042/247] messages and file dialogs in tablet --- .../qml/dialogs/TabletFileDialog.qml | 776 ++++++++++++++++++ .../qml/dialogs/TabletMessageBox.qml | 248 ++++++ .../qml/dialogs/TabletQueryDialog.qml | 8 +- .../qml/hifi/dialogs/TabletRunningScripts.qml | 4 +- .../resources/qml/hifi/tablet/TabletRoot.qml | 17 +- .../qml/windows/TabletModalFrame.qml | 101 +-- libraries/ui/src/OffscreenUi.cpp | 49 +- 7 files changed, 1137 insertions(+), 66 deletions(-) create mode 100644 interface/resources/qml/dialogs/TabletFileDialog.qml create mode 100644 interface/resources/qml/dialogs/TabletMessageBox.qml diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml new file mode 100644 index 0000000000..1b0e6d694d --- /dev/null +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -0,0 +1,776 @@ +// +// FileDialog.qml +// +// Created by Dante Ruiz on 23 Feb 2017 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import Qt.labs.folderlistmodel 2.1 +import Qt.labs.settings 1.0 +import QtQuick.Controls.Styles 1.4 +import QtQuick.Dialogs 1.2 as OriginalDialogs + +import ".." +import "../controls-uit" +import "../styles-uit" +import "../windows" + +import "fileDialog" + +//FIXME implement shortcuts for favorite location +TabletModalWindow { + id: root + anchors.fill: parent + width: parent.width + height: parent.height + HifiConstants { id: hifi } + + Settings { + category: "FileDialog" + property alias width: root.width + property alias height: root.height + property alias x: root.x + property alias y: root.y + } + + + // Set from OffscreenUi::getOpenFile() + property alias caption: root.title; + // Set from OffscreenUi::getOpenFile() + property alias dir: fileTableModel.folder; + // Set from OffscreenUi::getOpenFile() + property alias filter: selectionType.filtersString; + // Set from OffscreenUi::getOpenFile() + property int options; // <-- FIXME unused + + property string iconText: root.title !== "" ? hifi.glyphs.scriptUpload : "" + property int iconSize: 40 + + property bool selectDirectory: false; + property bool showHidden: false; + // FIXME implement + property bool multiSelect: false; + property bool saveDialog: false; + property var helper: fileDialogHelper + property alias model: fileTableView.model + property var drives: helper.drives() + + property int titleWidth: 0 + + signal selectedFile(var file); + signal canceled(); + + Component.onCompleted: { + console.log("Helper " + helper + " drives " + drives); + + fileDialogItem.keyboardEnabled = HMD.active; + + // HACK: The following lines force the model to initialize properly such that the go-up button + // works properly from the initial screen. + var initialFolder = folderListModel.folder; + fileTableModel.folder = helper.pathToUrl(drives[0]); + fileTableModel.folder = initialFolder; + + iconText = root.title !== "" ? hifi.glyphs.scriptUpload : ""; + + // Clear selection when click on external frame. + //frameClicked.connect(function() { d.clearSelection(); }); + + if (selectDirectory) { + currentSelection.text = d.capitalizeDrive(helper.urlToPath(initialFolder)); + d.currentSelectionIsFolder = true; + d.currentSelectionUrl = initialFolder; + } + + helper.contentsChanged.connect(function() { + if (folderListModel) { + // Make folderListModel refresh. + var save = folderListModel.folder; + folderListModel.folder = ""; + folderListModel.folder = save; + } + }); + + fileTableView.forceActiveFocus(); + } + + TabletModalFrame { + id: fileDialogItem + width: parent.width + height: parent.height + anchors.margins: 0 + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + + MouseArea { + // Clear selection when click on internal unused area. + anchors.fill: parent + onClicked: { + d.clearSelection(); + } + } + + Row { + id: navControls + anchors { + top: parent.top + topMargin: (fileDialogItem.hasTitle ? (fileDialogItem.frameMarginTop + hifi.dimensions.modalDialogMargin.y) : hifi.dimension.modalDialogMargin.y) + left: parent.left + } + spacing: hifi.dimensions.contentSpacing.x + + GlyphButton { + id: upButton + glyph: hifi.glyphs.levelUp + width: height + size: 30 + enabled: fileTableModel.parentFolder && fileTableModel.parentFolder !== "" + onClicked: d.navigateUp(); + } + + GlyphButton { + id: homeButton + property var destination: helper.home(); + glyph: hifi.glyphs.home + size: 28 + width: height + enabled: d.homeDestination ? true : false + onClicked: d.navigateHome(); + } + } + + /*TabletComboBox { + id: pathSelector + anchors { + top: parent.top + topMargin: hifi.dimensions.contentMargin.y + left: navControls.right + leftMargin: hifi.dimensions.contentSpacing.x + right: parent.right + } + + property var lastValidFolder: helper.urlToPath(fileTableModel.folder) + + function calculatePathChoices(folder) { + var folders = folder.split("/"), + choices = [], + i, length; + + if (folders[folders.length - 1] === "") { + folders.pop(); + } + + choices.push(folders[0]); + + for (i = 1, length = folders.length; i < length; i++) { + choices.push(choices[i - 1] + "/" + folders[i]); + } + + if (folders[0] === "") { + // Special handling for OSX root dir. + choices[0] = "/"; + } + + choices.reverse(); + + if (drives && drives.length > 1) { + choices.push("This PC"); + } + + if (choices.length > 0) { + pathSelector.model = choices; + } + } + + onLastValidFolderChanged: { + var folder = d.capitalizeDrive(lastValidFolder); + calculatePathChoices(folder); + } + + onCurrentTextChanged: { + var folder = currentText; + + if (/^[a-zA-z]:$/.test(folder)) { + folder = "file:///" + folder + "/"; + } else if (folder === "This PC") { + folder = "file:///"; + } else { + folder = helper.pathToUrl(folder); + } + + if (helper.urlToPath(folder).toLowerCase() !== helper.urlToPath(fileTableModel.folder).toLowerCase()) { + if (root.selectDirectory) { + currentSelection.text = currentText !== "This PC" ? currentText : ""; + d.currentSelectionUrl = helper.pathToUrl(currentText); + } + fileTableModel.folder = folder; + fileTableView.forceActiveFocus(); + } + } + }*/ + + QtObject { + id: d + property var currentSelectionUrl; + readonly property string currentSelectionPath: helper.urlToPath(currentSelectionUrl); + property bool currentSelectionIsFolder; + property var backStack: [] + property var tableViewConnection: Connections { target: fileTableView; onCurrentRowChanged: d.update(); } + property var modelConnection: Connections { target: fileTableModel; onFolderChanged: d.update(); } + property var homeDestination: helper.home(); + + function capitalizeDrive(path) { + // Consistently capitalize drive letter for Windows. + if (/[a-zA-Z]:/.test(path)) { + return path.charAt(0).toUpperCase() + path.slice(1); + } + return path; + } + + function update() { + var row = fileTableView.currentRow; + + if (row === -1) { + if (!root.selectDirectory) { + currentSelection.text = ""; + currentSelectionIsFolder = false; + } + return; + } + + currentSelectionUrl = helper.pathToUrl(fileTableView.model.get(row).filePath); + currentSelectionIsFolder = fileTableView.model.isFolder(row); + if (root.selectDirectory || !currentSelectionIsFolder) { + currentSelection.text = capitalizeDrive(helper.urlToPath(currentSelectionUrl)); + } else { + currentSelection.text = ""; + } + } + + function navigateUp() { + if (fileTableModel.parentFolder && fileTableModel.parentFolder !== "") { + fileTableModel.folder = fileTableModel.parentFolder; + return true; + } + } + + function navigateHome() { + fileTableModel.folder = homeDestination; + return true; + } + + function clearSelection() { + fileTableView.selection.clear(); + fileTableView.currentRow = -1; + update(); + } + } + + FolderListModel { + id: folderListModel + nameFilters: selectionType.currentFilter + showDirsFirst: true + showDotAndDotDot: false + showFiles: !root.selectDirectory + Component.onCompleted: { + showFiles = !root.selectDirectory + } + + onFolderChanged: { + fileTableModel.update(); // Update once the data from the folder change is available. + } + + function getItem(index, field) { + return get(index, field); + } + } + + ListModel { + // Emulates FolderListModel but contains drive data. + id: driveListModel + + property int count: 1 + + Component.onCompleted: initialize(); + + function initialize() { + var drive, + i; + + count = drives.length; + + for (i = 0; i < count; i++) { + drive = drives[i].slice(0, -1); // Remove trailing "/". + append({ + fileName: drive, + fileModified: new Date(0), + fileSize: 0, + filePath: drive + "/", + fileIsDir: true, + fileNameSort: drive.toLowerCase() + }); + } + } + + function getItem(index, field) { + return get(index)[field]; + } + } + + ListModel { + id: fileTableModel + + // FolderListModel has a couple of problems: + // 1) Files and directories sort case-sensitively: https://bugreports.qt.io/browse/QTBUG-48757 + // 2) Cannot browse up to the "computer" level to view Windows drives: https://bugreports.qt.io/browse/QTBUG-42901 + // + // To solve these problems an intermediary ListModel is used that implements proper sorting and can be populated with + // drive information when viewing at the computer level. + + property var folder + property int sortOrder: Qt.AscendingOrder + property int sortColumn: 0 + property var model: folderListModel + property string parentFolder: calculateParentFolder(); + + readonly property string rootFolder: "file:///" + + function calculateParentFolder() { + if (model === folderListModel) { + if (folderListModel.parentFolder.toString() === "" && driveListModel.count > 1) { + return rootFolder; + } else { + return folderListModel.parentFolder; + } + } else { + return ""; + } + } + + onFolderChanged: { + if (folder === rootFolder) { + model = driveListModel; + helper.monitorDirectory(""); + update(); + } else { + var needsUpdate = model === driveListModel && folder === folderListModel.folder; + + model = folderListModel; + folderListModel.folder = folder; + helper.monitorDirectory(helper.urlToPath(folder)); + + if (needsUpdate) { + update(); + } + } + } + + function isFolder(row) { + if (row === -1) { + return false; + } + return get(row).fileIsDir; + } + + function update() { + var dataFields = ["fileName", "fileModified", "fileSize"], + sortFields = ["fileNameSort", "fileModified", "fileSize"], + dataField = dataFields[sortColumn], + sortField = sortFields[sortColumn], + sortValue, + fileName, + fileIsDir, + comparisonFunction, + lower, + middle, + upper, + rows = 0, + i; + + clear(); + + comparisonFunction = sortOrder === Qt.AscendingOrder + ? function(a, b) { return a < b; } + : function(a, b) { return a > b; } + + for (i = 0; i < model.count; i++) { + fileName = model.getItem(i, "fileName"); + fileIsDir = model.getItem(i, "fileIsDir"); + + sortValue = model.getItem(i, dataField); + if (dataField === "fileName") { + // Directories first by prefixing a "*". + // Case-insensitive. + sortValue = (fileIsDir ? "*" : "") + sortValue.toLowerCase(); + } + + lower = 0; + upper = rows; + while (lower < upper) { + middle = Math.floor((lower + upper) / 2); + var lessThan; + if (comparisonFunction(sortValue, get(middle)[sortField])) { + lessThan = true; + upper = middle; + } else { + lessThan = false; + lower = middle + 1; + } + } + + insert(lower, { + fileName: fileName, + fileModified: (fileIsDir ? new Date(0) : model.getItem(i, "fileModified")), + fileSize: model.getItem(i, "fileSize"), + filePath: model.getItem(i, "filePath"), + fileIsDir: fileIsDir, + fileNameSort: (fileIsDir ? "*" : "") + fileName.toLowerCase() + }); + + rows++; + } + + d.clearSelection(); + } + } + + Table { + id: fileTableView + colorScheme: hifi.colorSchemes.light + anchors { + top: navControls.bottom + topMargin: hifi.dimensions.contentSpacing.y + left: parent.left + right: parent.right + bottom: currentSelection.top + bottomMargin: hifi.dimensions.contentSpacing.y + currentSelection.controlHeight - currentSelection.height + } + headerVisible: !selectDirectory + onDoubleClicked: navigateToRow(row); + focus: true + Keys.onReturnPressed: navigateToCurrentRow(); + Keys.onEnterPressed: navigateToCurrentRow(); + + sortIndicatorColumn: 0 + sortIndicatorOrder: Qt.AscendingOrder + sortIndicatorVisible: true + + model: fileTableModel + + function updateSort() { + model.sortOrder = sortIndicatorOrder; + model.sortColumn = sortIndicatorColumn; + model.update(); + } + + onSortIndicatorColumnChanged: { updateSort(); } + + onSortIndicatorOrderChanged: { updateSort(); } + + itemDelegate: Item { + clip: true + + //FontLoader { id: firaSansSemiBold; source: "../../fonts/FiraSans-SemiBold.ttf"; } + //FontLoader { id: firaSansRegular; source: "../../fonts/FiraSans-Regular.ttf"; } + + FiraSansSemiBold { + text: getText(); + elide: styleData.elideMode + anchors { + left: parent.left + leftMargin: hifi.dimensions.tablePadding + right: parent.right + rightMargin: hifi.dimensions.tablePadding + verticalCenter: parent.verticalCenter + } + size: hifi.fontSizes.tableText + color: hifi.colors.baseGrayHighlight + //font.family: (styleData.row !== -1 && fileTableView.model.get(styleData.row).fileIsDir) + //? firaSansSemiBold.name : firaSansRegular.name + + function getText() { + if (styleData.row === -1) { + return styleData.value; + } + + switch (styleData.column) { + case 1: return fileTableView.model.get(styleData.row).fileIsDir ? "" : styleData.value; + case 2: return fileTableView.model.get(styleData.row).fileIsDir ? "" : formatSize(styleData.value); + default: return styleData.value; + } + } + function formatSize(size) { + var suffixes = [ "bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB" ]; + var suffixIndex = 0 + while ((size / 1024.0) > 1.1) { + size /= 1024.0; + ++suffixIndex; + } + + size = Math.round(size*1000)/1000; + size = size.toLocaleString() + + return size + " " + suffixes[suffixIndex]; + } + } + } + + TableViewColumn { + id: fileNameColumn + role: "fileName" + title: "Name" + width: (selectDirectory ? 1.0 : 0.5) * fileTableView.width + movable: false + resizable: true + } + TableViewColumn { + id: fileMofifiedColumn + role: "fileModified" + title: "Date" + width: 0.3 * fileTableView.width + movable: false + resizable: true + visible: !selectDirectory + } + TableViewColumn { + role: "fileSize" + title: "Size" + width: fileTableView.width - fileNameColumn.width - fileMofifiedColumn.width + movable: false + resizable: true + visible: !selectDirectory + } + + function navigateToRow(row) { + currentRow = row; + navigateToCurrentRow(); + } + + function navigateToCurrentRow() { + var row = fileTableView.currentRow + var isFolder = model.isFolder(row); + var file = model.get(row).filePath; + if (isFolder) { + fileTableView.model.folder = helper.pathToUrl(file); + } else { + okAction.trigger(); + } + } + + property string prefix: "" + + function addToPrefix(event) { + if (!event.text || event.text === "") { + return false; + } + var newPrefix = prefix + event.text.toLowerCase(); + var matchedIndex = -1; + for (var i = 0; i < model.count; ++i) { + var name = model.get(i).fileName.toLowerCase(); + if (0 === name.indexOf(newPrefix)) { + matchedIndex = i; + break; + } + } + + if (matchedIndex !== -1) { + fileTableView.selection.clear(); + fileTableView.selection.select(matchedIndex); + fileTableView.currentRow = matchedIndex; + fileTableView.prefix = newPrefix; + } + prefixClearTimer.restart(); + return true; + } + + Timer { + id: prefixClearTimer + interval: 1000 + repeat: false + running: false + onTriggered: fileTableView.prefix = ""; + } + + Keys.onPressed: { + switch (event.key) { + case Qt.Key_Backspace: + case Qt.Key_Tab: + case Qt.Key_Backtab: + event.accepted = false; + break; + + default: + if (addToPrefix(event)) { + event.accepted = true + } else { + event.accepted = false; + } + break; + } + } + } + + TextField { + id: currentSelection + label: selectDirectory ? "Directory:" : "File name:" + anchors { + left: parent.left + right: selectionType.visible ? selectionType.left: parent.right + rightMargin: selectionType.visible ? hifi.dimensions.contentSpacing.x : 0 + bottom: keyboard.top + bottomMargin: hifi.dimensions.contentSpacing.y + } + readOnly: !root.saveDialog + activeFocusOnTab: !readOnly + onActiveFocusChanged: if (activeFocus) { selectAll(); } + onAccepted: okAction.trigger(); + } + + FileTypeSelection { + id: selectionType + anchors { + top: currentSelection.top + left: buttonRow.left + right: parent.right + } + visible: !selectDirectory && filtersCount > 1 + KeyNavigation.left: fileTableView + KeyNavigation.right: openButton + } + + Keyboard { + id: keyboard + raised: parent.keyboardEnabled && parent.keyboardRaised + numeric: parent.punctuationMode + anchors { + left: parent.left + right: parent.right + bottom: buttonRow.top + bottomMargin: visible ? hifi.dimensions.contentSpacing.y : 0 + } + } + + Row { + id: buttonRow + anchors { + right: parent.right + bottom: parent.bottom + } + spacing: hifi.dimensions.contentSpacing.y + + Button { + id: openButton + color: hifi.buttons.blue + action: okAction + Keys.onReturnPressed: okAction.trigger() + KeyNavigation.up: selectionType + KeyNavigation.left: selectionType + KeyNavigation.right: cancelButton + } + + Button { + id: cancelButton + action: cancelAction + KeyNavigation.up: selectionType + KeyNavigation.left: openButton + KeyNavigation.right: fileTableView.contentItem + Keys.onReturnPressed: { canceled(); root.enabled = false } + } + } + + Action { + id: okAction + text: currentSelection.text ? (root.selectDirectory && fileTableView.currentRow === -1 ? "Choose" : (root.saveDialog ? "Save" : "Open")) : "Open" + enabled: currentSelection.text || !root.selectDirectory && d.currentSelectionIsFolder ? true : false + onTriggered: { + if (!root.selectDirectory && !d.currentSelectionIsFolder + || root.selectDirectory && fileTableView.currentRow === -1) { + okActionTimer.start(); + } else { + fileTableView.navigateToCurrentRow(); + } + } + } + + Timer { + id: okActionTimer + interval: 50 + running: false + repeat: false + onTriggered: { + if (!root.saveDialog) { + selectedFile(d.currentSelectionUrl); + root.destroy(); + return; + } + + // Handle the ambiguity between different cases + // * typed name (with or without extension) + // * full path vs relative vs filename only + var selection = helper.saveHelper(currentSelection.text, root.dir, selectionType.currentFilter); + + if (!selection) { + desktop.messageBox({ icon: OriginalDialogs.StandardIcon.Warning, text: "Unable to parse selection" }) + return; + } + + if (helper.urlIsDir(selection)) { + root.dir = selection; + currentSelection.text = ""; + return; + } + + // Check if the file is a valid target + if (!helper.urlIsWritable(selection)) { + desktop.messageBox({ + icon: OriginalDialogs.StandardIcon.Warning, + text: "Unable to write to location " + selection + }) + return; + } + + if (helper.urlExists(selection)) { + var messageBox = desktop.messageBox({ + icon: OriginalDialogs.StandardIcon.Question, + buttons: OriginalDialogs.StandardButton.Yes | OriginalDialogs.StandardButton.No, + text: "Do you wish to overwrite " + selection + "?", + }); + var result = messageBox.exec(); + if (OriginalDialogs.StandardButton.Yes !== result) { + return; + } + } + + console.log("Selecting " + selection) + selectedFile(selection); + root.destroy(); + } + } + + Action { + id: cancelAction + text: "Cancel" + onTriggered: { canceled();root.destroy(); } + } + } + + Keys.onPressed: { + switch (event.key) { + case Qt.Key_Backspace: + event.accepted = d.navigateUp(); + break; + + case Qt.Key_Home: + event.accepted = d.navigateHome(); + break; + + } + } +} diff --git a/interface/resources/qml/dialogs/TabletMessageBox.qml b/interface/resources/qml/dialogs/TabletMessageBox.qml new file mode 100644 index 0000000000..2102874ffd --- /dev/null +++ b/interface/resources/qml/dialogs/TabletMessageBox.qml @@ -0,0 +1,248 @@ +// +// MessageDialog.qml +// +// Created by Bradley Austin Davis on 15 Jan 2016 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Dialogs 1.2 as OriginalDialogs + +import "../controls-uit" +import "../styles-uit" +import "../windows" + +import "messageDialog" + +TabletModalWindow { + id: root + HifiConstants { id: hifi } + visible: true + + signal selected(int button); + + MouseArea { + id: mouse; + anchors.fill: parent + } + + function click(button) { + clickedButton = button; + selected(button); + destroy(); + } + + function exec() { + return OffscreenUi.waitForMessageBoxResult(root); + } + + property alias detailedText: detailedText.text + property alias text: mainTextContainer.text + property alias informativeText: informativeTextContainer.text + property int buttons: OriginalDialogs.StandardButton.Ok + property int icon: OriginalDialogs.StandardIcon.NoIcon + property string iconText: "" + property int iconSize: 50 + // onIconChanged: updateIcon(); + property int defaultButton: OriginalDialogs.StandardButton.NoButton; + property int clickedButton: OriginalDialogs.StandardButton.NoButton; + //focus: defaultButton === OriginalDialogs.StandardButton.NoButton + + property int titleWidth: 0 + onTitleWidthChanged: d.resize(); + + function updateIcon() { + if (!root) { + return; + } + iconText = hifi.glyphForIcon(root.icon); + } + + TabletModalFrame { + id: messageBox + clip: true + anchors.verticalCenter: parent.verticalCenter + width: parent.width + height: 300 + + QtObject { + id: d + readonly property int minWidth: 200 + readonly property int maxWidth: 1280 + readonly property int minHeight: 120 + readonly property int maxHeight: 720 + + function resize() { + console.log("[DR]-> setting the target height"); + var targetWidth = Math.max(titleWidth, mainTextContainer.contentWidth) + var targetHeight = mainTextContainer.height + 3 * hifi.dimensions.contentSpacing.y + + (informativeTextContainer.text != "" ? informativeTextContainer.contentHeight + 3 * hifi.dimensions.contentSpacing.y : 0) + + buttons.height + + (details.implicitHeight + hifi.dimensions.contentSpacing.y) + messageBox.frameMarginTop + //messageBox.width = (targetWidth < d.minWidth) ? d.minWidth : ((targetWidth > d.maxWidth) ? d.maxWidth : targetWidth) + + console.log("[DR} -> about to set the height"); + messageBox.height = (targetHeight < d.minHeight) ? d.minHeight: ((targetHeight > d.maxHeight) ? d.maxHeight : targetHeight) + } + } + + RalewaySemiBold { + id: mainTextContainer + onTextChanged: d.resize(); + wrapMode: Text.WrapAnywhere + size: hifi.fontSizes.sectionName + color: hifi.colors.baseGrayHighlight + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + messageBox.frameMarginTop + } + lineHeight: 2 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + } + + RalewaySemiBold { + id: informativeTextContainer + onTextChanged: d.resize(); + wrapMode: Text.WrapAnywhere + size: hifi.fontSizes.sectionName + color: hifi.colors.baseGrayHighlight + anchors { + top: mainTextContainer.bottom + left: parent.left + right: parent.right + margins: 0 + topMargin: text != "" ? hifi.dimensions.contentSpacing.y : 0 + } + } + + Flow { + id: buttons + focus: true + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + layoutDirection: Qt.RightToLeft + anchors { + top: informativeTextContainer.text == "" ? mainTextContainer.bottom : informativeTextContainer.bottom + horizontalCenter: parent.horizontalCenter + margins: 0 + topMargin: 2 * hifi.dimensions.contentSpacing.y + } + MessageDialogButton { dialog: root; text: qsTr("Close"); button: OriginalDialogs.StandardButton.Close; } + MessageDialogButton { dialog: root; text: qsTr("Abort"); button: OriginalDialogs.StandardButton.Abort; } + MessageDialogButton { dialog: root; text: qsTr("Cancel"); button: OriginalDialogs.StandardButton.Cancel; } + MessageDialogButton { dialog: root; text: qsTr("Restore Defaults"); button: OriginalDialogs.StandardButton.RestoreDefaults; } + MessageDialogButton { dialog: root; text: qsTr("Reset"); button: OriginalDialogs.StandardButton.Reset; } + MessageDialogButton { dialog: root; text: qsTr("Discard"); button: OriginalDialogs.StandardButton.Discard; } + MessageDialogButton { dialog: root; text: qsTr("No to All"); button: OriginalDialogs.StandardButton.NoToAll; } + MessageDialogButton { dialog: root; text: qsTr("No"); button: OriginalDialogs.StandardButton.No; } + MessageDialogButton { dialog: root; text: qsTr("Yes to All"); button: OriginalDialogs.StandardButton.YesToAll; } + MessageDialogButton { dialog: root; text: qsTr("Yes"); button: OriginalDialogs.StandardButton.Yes; } + MessageDialogButton { dialog: root; text: qsTr("Apply"); button: OriginalDialogs.StandardButton.Apply; } + MessageDialogButton { dialog: root; text: qsTr("Ignore"); button: OriginalDialogs.StandardButton.Ignore; } + MessageDialogButton { dialog: root; text: qsTr("Retry"); button: OriginalDialogs.StandardButton.Retry; } + MessageDialogButton { dialog: root; text: qsTr("Save All"); button: OriginalDialogs.StandardButton.SaveAll; } + MessageDialogButton { dialog: root; text: qsTr("Save"); button: OriginalDialogs.StandardButton.Save; } + MessageDialogButton { dialog: root; text: qsTr("Open"); button: OriginalDialogs.StandardButton.Open; } + MessageDialogButton { dialog: root; text: qsTr("OK"); button: OriginalDialogs.StandardButton.Ok; } + + Button { + id: moreButton + text: qsTr("Show Details...") + width: 160 + onClicked: { content.state = (content.state === "" ? "expanded" : "") } + visible: detailedText && detailedText.length > 0 + } + MessageDialogButton { dialog: root; text: qsTr("Help"); button: OriginalDialogs.StandardButton.Help; } + } + + Item { + id: details + width: parent.width + implicitHeight: detailedText.implicitHeight + height: 0 + clip: true + anchors { + top: buttons.bottom + left: parent.left; + right: parent.right; + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + Flickable { + id: flickable + contentHeight: detailedText.height + anchors.fill: parent + anchors.topMargin: hifi.dimensions.contentSpacing.x + anchors.bottomMargin: hifi.dimensions.contentSpacing.y + TextEdit { + id: detailedText + size: hifi.fontSizes.menuItem + color: hifi.colors.baseGrayHighlight + width: details.width + wrapMode: Text.WordWrap + readOnly: true + selectByMouse: true + anchors.margins: 0 + } + } + } + + states: [ + State { + name: "expanded" + PropertyChanges { target: root; anchors.fill: undefined } + PropertyChanges { target: details; height: 120 } + PropertyChanges { target: moreButton; text: qsTr("Hide Details") } + } + ] + + Component.onCompleted: { + updateIcon(); + d.resize(); + } + onStateChanged: d.resize() + } + + Keys.onPressed: { + if (!visible) { + return + } + + if (event.modifiers === Qt.ControlModifier) + switch (event.key) { + case Qt.Key_A: + event.accepted = true + detailedText.selectAll() + break + case Qt.Key_C: + event.accepted = true + detailedText.copy() + break + case Qt.Key_Period: + if (Qt.platform.os === "osx") { + event.accepted = true + content.reject() + } + break + } else switch (event.key) { + case Qt.Key_Escape: + case Qt.Key_Back: + event.accepted = true + root.click(OriginalDialogs.StandardButton.Cancel) + break + + case Qt.Key_Enter: + case Qt.Key_Return: + event.accepted = true + root.click(root.defaultButton) + break + } + } +} diff --git a/interface/resources/qml/dialogs/TabletQueryDialog.qml b/interface/resources/qml/dialogs/TabletQueryDialog.qml index 0ae18d1c2d..a920971031 100644 --- a/interface/resources/qml/dialogs/TabletQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletQueryDialog.qml @@ -61,10 +61,10 @@ TabletModalWindow { iconText = hifi.glyphForIcon(root.icon); } - Rectangle { + TabletModalFrame { id: modalWindowItem width: parent.width - height: 480 + height: 240 anchors.margins: 0 anchors { verticalCenter: parent.verticalCenter @@ -82,13 +82,13 @@ TabletModalWindow { var targetWidth = Math.max(titleWidth, 480) var targetHeight = (items ? comboBox.controlHeight : textResult.controlHeight) + 5 * hifi.dimensions.contentSpacing.y + buttons.height modalWindowItem.width = (targetWidth < d.minWidth) ? d.minWidth : ((targetWidth > d.maxWdith) ? d.maxWidth : targetWidth); - modalWindowItem.height = ((targetHeight < d.minHeight) ? d.minHeight : ((targetHeight > d.maxHeight) ? d.maxHeight : targetHeight)) + ((keyboardEnabled && keyboardRaised) ? (keyboard.raisedHeight + 2 * hifi.dimensions.contentSpacing.y) : 0) + modalWindowItem.height = ((targetHeight < d.minHeight) ? d.minHeight : ((targetHeight > d.maxHeight) ? d.maxHeight : targetHeight)) + ((keyboardEnabled && keyboardRaised) ? (keyboard.raisedHeight + 2 * hifi.dimensions.contentSpacing.y) : 0) + modalWindowItem.frameMarginTop } } Item { anchors { - top: frameTitle.bottom + top: parent.top bottom: keyboard.top; left: parent.left; right: parent.right; diff --git a/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml b/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml index 235f7103ff..e217a6e38e 100644 --- a/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml +++ b/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml @@ -17,7 +17,7 @@ import "../../styles-uit" import "../../controls-uit" as HifiControls import "../../windows" -Item { +Rectangle { id: root objectName: "RunningScripts" HifiConstants { id: hifi } @@ -28,6 +28,8 @@ Item { property var runningScriptsModel: ListModel { } property bool isHMD: false + color: hifi.colors.baseGray + Connections { target: ScriptDiscoveryService onScriptCountChanged: updateRunningScripts(); diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 79b127098b..348d8167b1 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -9,6 +9,7 @@ Item { property var eventBridge; property var rootMenu; + property var openModal: null; property string subMenu: "" signal showDesktop(); @@ -18,16 +19,22 @@ Item { Component { id: inputDialogBuilder; TabletQueryDialog { } } function inputDialog(properties) { - return inputDialogBuilder.createObject(tabletRoot, properties); + openModal = inputDialogBuilder.createObject(tabletRoot, properties); + return openModal; } - + Component { id: messageBoxBuilder; TabletMessageBox { } } function messageBox(properties) { + openModal = messageBoxBuilder.createObject(tabletRoot, properties); + return openModal; } function customInputDialog(properties) { } + Component { id: fileDialogBuilder; TabletFileDialog { } } function fileDialog(properties) { + openModal = fileDialogBuilder.createObject(tabletRoot, properties); + return openModal; } function setMenuProperties(rootMenu, subMenu) { @@ -104,6 +111,12 @@ Item { loader.item.setRootMenu(tabletRoot.rootMenu, tabletRoot.subMenu); } loader.item.forceActiveFocus(); + + if (openModal) { + openModal.canceled(); + openModal.destroy(); + openModal = null; + } } } diff --git a/interface/resources/qml/windows/TabletModalFrame.qml b/interface/resources/qml/windows/TabletModalFrame.qml index 41775f6b3e..6d357a091a 100644 --- a/interface/resources/qml/windows/TabletModalFrame.qml +++ b/interface/resources/qml/windows/TabletModalFrame.qml @@ -18,68 +18,69 @@ import "../styles-uit" Rectangle { HifiConstants { id: hifi } + id: frameContent - Rectangle { - id: frameContent + readonly property bool hasTitle: root.title != "" - //readonly property bool hasTitle: window.title != "" + readonly property int frameMarginLeft: hifi.dimensions.modalDialogMargin.x + readonly property int frameMarginRight: hifi.dimensions.modalDialogMargin.x + readonly property int frameMarginTop: hifi.dimensions.modalDialogMargin.y + (frameContent.hasTitle ? hifi.dimensions.modalDialogTitleHeight + 10 : 0) + readonly property int frameMarginBottom: hifi.dimensions.modalDialogMargin.y - readonly property int frameMarginLeft: hifi.dimensions.modalDialogMargin.x - readonly property int frameMarginRight: hifi.dimensions.modalDialogMargin.x - readonly property int frameMarginTop: hifi.dimensions.modalDialogMargin.y + (frameContent.hasTitle ? hifi.dimensions.modalDialogTitleHeight + 10 : 0) - readonly property int frameMarginBottom: hifi.dimensions.modalDialogMargin.y - - border { - width: hifi.dimensions.borderWidth - color: hifi.colors.lightGrayText80 + border { + width: hifi.dimensions.borderWidth + color: hifi.colors.lightGrayText80 } + radius: hifi.dimensions.borderRadius color: hifi.colors.faintGray + Item { + id: frameTitle + visible: frameContent.hasTitle + + anchors { + fill: parent + topMargin: frameMarginTop + leftMargin: frameMarginLeft + rightMargin: frameMarginRight + //bottomMargin: frameMarginBottom + } + Item { - id: frameTitle - visible: true//frameContent.hasTitle - //anchors.fill: parent - - anchors { - fill: parent - topMargin: -frameMarginTop - leftMargin: -frameMarginLeft - rightMargin: -frameMarginRight - bottomMargin: -frameMarginBottom - } + width: title.width + (icon.text !== "" ? icon.width + hifi.dimensions.contentSpacing.x : 20) - Item { - width: title.width + (icon.text !== "" ? icon.width + hifi.dimensions.contentSpacing.x : 20) - - onWidthChanged: root.titleWidth = width - - HiFiGlyphs { - id: icon - text: root.iconText ? root.iconText : "hello" - size: root.iconSize ? root.iconSize : 30 - color: hifi.colors.lightGray - visible: true - anchors.verticalCenter: title.verticalCenter - anchors.left: parent.left - } - RalewayRegular { - id: title - text: root.title - elide: Text.ElideRight - color: hifi.colors.baseGrayHighlight - size: hifi.fontSizes.overlayTitle - y: -hifi.dimensions.modalDialogTitleHeight - anchors.right: parent.right - } + onWidthChanged: root.titleWidth = width + + HiFiGlyphs { + id: icon + text: root.iconText ? root.iconText : "" + size: root.iconSize ? root.iconSize : 30 + color: hifi.colors.lightGray + visible: true + anchors.verticalCenter: title.verticalCenter + anchors.leftMargin: 50 + anchors.left: parent.left } - Rectangle { - anchors.left: parent.left + RalewayRegular { + id: title + text: root.title + elide: Text.ElideRight + color: hifi.colors.baseGrayHighlight + size: hifi.fontSizes.overlayTitle + y: -hifi.dimensions.modalDialogTitleHeight + anchors.rightMargin: -50 anchors.right: parent.right - height: 1 - color: hifi.colors.lightGray } } + + Rectangle { + anchors.left: parent.left + anchors.right: parent.right + height: 1 + color: hifi.colors.lightGray + } + } - + } diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index f3cb28b8ce..982d58464f 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -211,9 +211,19 @@ QQuickItem* OffscreenUi::createMessageBox(Icon icon, const QString& title, const map.insert("buttons", buttons.operator int()); map.insert("defaultButton", defaultButton); QVariant result; - bool invokeResult = QMetaObject::invokeMethod(_desktop, "messageBox", - Q_RETURN_ARG(QVariant, result), - Q_ARG(QVariant, QVariant::fromValue(map))); + bool invokeResult; + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet->getToolbarMode()) { + invokeResult = QMetaObject::invokeMethod(_desktop, "messageBox", + Q_RETURN_ARG(QVariant, result), + Q_ARG(QVariant, QVariant::fromValue(map))); + } else { + QQuickItem* tabletRoot = tablet->getTabletRoot(); + invokeResult = QMetaObject::invokeMethod(tabletRoot, "messageBox", + Q_RETURN_ARG(QVariant, result), + Q_ARG(QVariant, QVariant::fromValue(map))); + } if (!invokeResult) { qWarning() << "Failed to create message box"; @@ -434,10 +444,21 @@ QQuickItem* OffscreenUi::createCustomInputDialog(const Icon icon, const QString& map.insert("title", title); map.insert("icon", icon); QVariant result; - bool invokeResult = QMetaObject::invokeMethod(_desktop, "customInputDialog", - Q_RETURN_ARG(QVariant, result), - Q_ARG(QVariant, QVariant::fromValue(map))); + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + bool invokeResult; + if (tablet->getToolbarMode()) { + invokeResult = QMetaObject::invokeMethod(_desktop, "inputDialog", + Q_RETURN_ARG(QVariant, result), + Q_ARG(QVariant, QVariant::fromValue(map))); + } else { + QQuickItem* tabletRoot = tablet->getTabletRoot(); + invokeResult = QMetaObject::invokeMethod(tabletRoot, "inputDialog", + Q_RETURN_ARG(QVariant, result), + Q_ARG(QVariant, QVariant::fromValue(map))); + } + if (!invokeResult) { qWarning() << "Failed to create custom message box"; return nullptr; @@ -581,9 +602,19 @@ private slots: QString OffscreenUi::fileDialog(const QVariantMap& properties) { QVariant buildDialogResult; - bool invokeResult = QMetaObject::invokeMethod(_desktop, "fileDialog", - Q_RETURN_ARG(QVariant, buildDialogResult), - Q_ARG(QVariant, QVariant::fromValue(properties))); + bool invokeResult; + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet->getToolbarMode()) { + invokeResult = QMetaObject::invokeMethod(_desktop, "fileDialog", + Q_RETURN_ARG(QVariant, buildDialogResult), + Q_ARG(QVariant, QVariant::fromValue(properties))); + } else { + QQuickItem* tabletRoot = tablet->getTabletRoot(); + invokeResult = QMetaObject::invokeMethod(tabletRoot, "fileDialog", + Q_RETURN_ARG(QVariant, buildDialogResult), + Q_ARG(QVariant, QVariant::fromValue(properties))); + } if (!invokeResult) { qWarning() << "Failed to create file open dialog"; From c60360b6e070cf29c01a89d8d8bf5b70089cfcbe Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Thu, 23 Feb 2017 16:34:10 -0800 Subject: [PATCH 043/247] particle explorer icon --- interface/resources/qml/hifi/tablet/Edit.qml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index a4e3db73f4..00856f8212 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -1,5 +1,5 @@ import QtQuick 2.5 -import QtQuick.Controls 1.0 +import QtQuick.Controls 1.4 import QtWebEngine 1.1 import QtWebChannel 1.0 import QtQuick.Controls.Styles 1.4 @@ -7,6 +7,7 @@ import "../../controls" import "../toolbars" import HFWebEngineProfile 1.0 import QtGraphicalEffects 1.0 +import "../../styles-uit" StackView { id: editRoot @@ -323,6 +324,17 @@ StackView { font.pixelSize: 16 font.bold: true color: styleData.selected ? "white" : "white" + property string glyphtext: "" + HiFiGlyphs { + anchors.centerIn: parent + size: 30 + color: "#ffffff" + text: text.glyphtext + } + Component.onCompleted: if (styleData.title == "P") { + text.text = " "; + text.glyphtext = "\ue004"; + } } } tabBar: Rectangle { From e43c4c17f508289842a4733217a5097504739eeb Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 23 Feb 2017 21:27:25 -0800 Subject: [PATCH 044/247] in 2d mode, clicks on tablet don't get used for other things --- interface/src/Application.cpp | 40 +++++++++++++------ interface/src/Application.h | 2 + interface/src/ui/overlays/Overlays.cpp | 15 +++---- interface/src/ui/overlays/Overlays.h | 6 +-- scripts/system/controllers/grab.js | 6 +++ scripts/system/edit.js | 5 +++ .../system/libraries/entitySelectionTool.js | 2 +- 7 files changed, 52 insertions(+), 24 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ed8fe8b9b2..dbfd6fb085 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -3097,17 +3097,23 @@ void Application::mouseMoveEvent(QMouseEvent* event) { if (compositor.getReticleVisible() || !isHMDMode() || !compositor.getReticleOverDesktop() || getOverlays().getOverlayAtPoint(glm::vec2(transformedPos.x(), transformedPos.y())) != UNKNOWN_OVERLAY_ID) { - getOverlays().mouseMoveEvent(&mappedEvent); - getEntities()->mouseMoveEvent(&mappedEvent); + if (_mouseToOverlays) { + getOverlays().mouseMoveEvent(&mappedEvent); + } else { + getEntities()->mouseMoveEvent(&mappedEvent); + } + } + + if (!_mouseToOverlays) { + _controllerScriptingInterface->emitMouseMoveEvent(&mappedEvent); // send events to any registered scripts } - _controllerScriptingInterface->emitMouseMoveEvent(&mappedEvent); // send events to any registered scripts // if one of our scripts have asked to capture this event, then stop processing it if (_controllerScriptingInterface->isMouseCaptured()) { return; } - if (_keyboardMouseDevice->isActive()) { + if (!_mouseToOverlays && _keyboardMouseDevice->isActive()) { _keyboardMouseDevice->mouseMoveEvent(event); } } @@ -3115,6 +3121,7 @@ void Application::mouseMoveEvent(QMouseEvent* event) { void Application::mousePressEvent(QMouseEvent* event) { // Inhibit the menu if the user is using alt-mouse dragging _altPressed = false; + _mouseToOverlays = false; auto offscreenUi = DependencyManager::get<OffscreenUi>(); // If we get a mouse press event it means it wasn't consumed by the offscreen UI, @@ -3131,21 +3138,23 @@ void Application::mousePressEvent(QMouseEvent* event) { event->buttons(), event->modifiers()); if (!_aboutToQuit) { - getOverlays().mousePressEvent(&mappedEvent); - - if (!_controllerScriptingInterface->areEntityClicksCaptured()) { + if (getOverlays().mousePressEvent(&mappedEvent)) { + _mouseToOverlays = true; + } else if (!_controllerScriptingInterface->areEntityClicksCaptured()) { getEntities()->mousePressEvent(&mappedEvent); } } - _controllerScriptingInterface->emitMousePressEvent(&mappedEvent); // send events to any registered scripts + if (!_mouseToOverlays) { + _controllerScriptingInterface->emitMousePressEvent(&mappedEvent); // send events to any registered scripts + } // if one of our scripts have asked to capture this event, then stop processing it if (_controllerScriptingInterface->isMouseCaptured()) { return; } - if (hasFocus()) { + if (!_mouseToOverlays && hasFocus()) { if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->mousePressEvent(event); } @@ -3179,18 +3188,23 @@ void Application::mouseReleaseEvent(QMouseEvent* event) { event->buttons(), event->modifiers()); if (!_aboutToQuit) { - getOverlays().mouseReleaseEvent(&mappedEvent); - getEntities()->mouseReleaseEvent(&mappedEvent); + if (_mouseToOverlays) { + getOverlays().mouseReleaseEvent(&mappedEvent); + } else { + getEntities()->mouseReleaseEvent(&mappedEvent); + } } - _controllerScriptingInterface->emitMouseReleaseEvent(&mappedEvent); // send events to any registered scripts + if (!_mouseToOverlays) { + _controllerScriptingInterface->emitMouseReleaseEvent(&mappedEvent); // send events to any registered scripts + } // if one of our scripts have asked to capture this event, then stop processing it if (_controllerScriptingInterface->isMouseCaptured()) { return; } - if (hasFocus()) { + if (!_mouseToOverlays && hasFocus()) { if (_keyboardMouseDevice->isActive()) { _keyboardMouseDevice->mouseReleaseEvent(event); } diff --git a/interface/src/Application.h b/interface/src/Application.h index 13c1458aee..fa98f6bd6e 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -676,6 +676,8 @@ private: void addAssetToWorldInfoDone(QString modelName); void addAssetToWorldError(QString modelName, QString errorText); + bool _mouseToOverlays { false }; + QQuickItem* _addAssetToWorldMessageBox{ nullptr }; QStringList _addAssetToWorldInfoKeys; // Model name QStringList _addAssetToWorldInfoMessages; // Info message diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index a783f14102..5cc0686984 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -759,7 +759,7 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionForMouseEvent(PickRa return findRayIntersection(ray); } -void Overlays::mousePressEvent(QMouseEvent* event) { +bool Overlays::mousePressEvent(QMouseEvent* event) { PerformanceTimer perfTimer("Overlays::mousePressEvent"); PickRay ray = qApp->computePickRay(event->x(), event->y()); @@ -772,15 +772,14 @@ void Overlays::mousePressEvent(QMouseEvent* event) { if (thisOverlay) { auto pointerEvent = calculatePointerEvent(thisOverlay, ray, rayPickResult, event, PointerEvent::Press); emit mousePressOnOverlay(_currentClickingOnOverlayID, pointerEvent); - } else { - emit mousePressOffOverlay(); + return true; } - } else { - emit mousePressOffOverlay(); } + emit mousePressOffOverlay(); + return false; } -void Overlays::mouseReleaseEvent(QMouseEvent* event) { +bool Overlays::mouseReleaseEvent(QMouseEvent* event) { PerformanceTimer perfTimer("Overlays::mouseReleaseEvent"); PickRay ray = qApp->computePickRay(event->x(), event->y()); @@ -796,9 +795,10 @@ void Overlays::mouseReleaseEvent(QMouseEvent* event) { } _currentClickingOnOverlayID = UNKNOWN_OVERLAY_ID; + return false; } -void Overlays::mouseMoveEvent(QMouseEvent* event) { +bool Overlays::mouseMoveEvent(QMouseEvent* event) { PerformanceTimer perfTimer("Overlays::mouseMoveEvent"); PickRay ray = qApp->computePickRay(event->x(), event->y()); @@ -842,6 +842,7 @@ void Overlays::mouseMoveEvent(QMouseEvent* event) { _currentHoverOverOverlayID = UNKNOWN_OVERLAY_ID; } } + return false; } QVector<QUuid> Overlays::findOverlays(const glm::vec3& center, float radius) const { diff --git a/interface/src/ui/overlays/Overlays.h b/interface/src/ui/overlays/Overlays.h index 865df6309a..5c22e46880 100644 --- a/interface/src/ui/overlays/Overlays.h +++ b/interface/src/ui/overlays/Overlays.h @@ -100,9 +100,9 @@ public: OverlayID addOverlay(Overlay* overlay) { return addOverlay(Overlay::Pointer(overlay)); } OverlayID addOverlay(Overlay::Pointer overlay); - void mousePressEvent(QMouseEvent* event); - void mouseReleaseEvent(QMouseEvent* event); - void mouseMoveEvent(QMouseEvent* event); + bool mousePressEvent(QMouseEvent* event); + bool mouseReleaseEvent(QMouseEvent* event); + bool mouseMoveEvent(QMouseEvent* event); void cleanupAllOverlays(); diff --git a/scripts/system/controllers/grab.js b/scripts/system/controllers/grab.js index 74a3c3d25b..f0b6663bec 100644 --- a/scripts/system/controllers/grab.js +++ b/scripts/system/controllers/grab.js @@ -331,6 +331,12 @@ Grabber.prototype.pressEvent = function(event) { } var pickRay = Camera.computePickRay(event.x, event.y); + + var overlayResult = Overlays.findRayIntersection(pickRay, true, [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID]); + if (overlayResult.intersects) { + return; + } + var pickResults = Entities.findRayIntersection(pickRay, true); // accurate picking if (!pickResults.intersects) { // didn't click on anything diff --git a/scripts/system/edit.js b/scripts/system/edit.js index f954f0d258..404cc26fcb 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -538,6 +538,11 @@ function findClickedEntity(event) { var pickRay = Camera.computePickRay(event.x, event.y); + var overlayResult = Overlays.findRayIntersection(pickRay, true, [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID]); + if (overlayResult.intersects) { + return null; + } + var entityResult = Entities.findRayIntersection(pickRay, true); // want precision picking var lightResult = lightOverlayManager.findRayIntersection(pickRay); lightResult.accurate = true; diff --git a/scripts/system/libraries/entitySelectionTool.js b/scripts/system/libraries/entitySelectionTool.js index 59dd73d77e..cacb8b0872 100644 --- a/scripts/system/libraries/entitySelectionTool.js +++ b/scripts/system/libraries/entitySelectionTool.js @@ -3866,7 +3866,7 @@ SelectionDisplay = (function() { var somethingClicked = false; var pickRay = generalComputePickRay(event.x, event.y); - var result = Overlays.findRayIntersection(pickRay, true, [HMD.tabletScreenID, HMD.homeButtonID]); + var result = Overlays.findRayIntersection(pickRay, true, [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID]); if (result.intersects) { // mouse clicks on the tablet should override the edit affordances return false; From f208f5e2d17b70297ff3ea13fd4ae3da43703ac7 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth@highfidelity.io> Date: Fri, 24 Feb 2017 11:34:10 -0800 Subject: [PATCH 045/247] fix a couple of problems related to grabbing tablet while edit.js is active --- interface/src/ui/overlays/Overlays.cpp | 33 +++++++++---------- .../system/controllers/handControllerGrab.js | 10 +++--- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/interface/src/ui/overlays/Overlays.cpp b/interface/src/ui/overlays/Overlays.cpp index 5cc0686984..709d86c305 100644 --- a/interface/src/ui/overlays/Overlays.cpp +++ b/interface/src/ui/overlays/Overlays.cpp @@ -341,27 +341,26 @@ OverlayID Overlays::getOverlayAtPoint(const glm::vec2& point) { return UNKNOWN_OVERLAY_ID; } QMapIterator<OverlayID, Overlay::Pointer> i(_overlaysHUD); - i.toBack(); const float LARGE_NEGATIVE_FLOAT = -9999999; glm::vec3 origin(pointCopy.x, pointCopy.y, LARGE_NEGATIVE_FLOAT); glm::vec3 direction(0, 0, 1); - BoxFace thisFace; + // BoxFace thisFace; glm::vec3 thisSurfaceNormal; - float distance; + // float distance; unsigned int bestStackOrder = 0; OverlayID bestOverlayID = UNKNOWN_OVERLAY_ID; - while (i.hasPrevious()) { - i.previous(); + while (i.hasNext()) { + i.next(); OverlayID thisID = i.key(); if (i.value()->is3D()) { - auto thisOverlay = std::dynamic_pointer_cast<Base3DOverlay>(i.value()); - if (thisOverlay && !thisOverlay->getIgnoreRayIntersection()) { - if (thisOverlay->findRayIntersection(origin, direction, distance, thisFace, thisSurfaceNormal)) { - return thisID; - } - } + // auto thisOverlay = std::dynamic_pointer_cast<Base3DOverlay>(i.value()); + // if (thisOverlay && !thisOverlay->getIgnoreRayIntersection()) { + // if (thisOverlay->findRayIntersection(origin, direction, distance, thisFace, thisSurfaceNormal)) { + // return thisID; + // } + // } } else { auto thisOverlay = std::dynamic_pointer_cast<Overlay2D>(i.value()); if (thisOverlay && thisOverlay->getVisible() && thisOverlay->isLoaded() && @@ -423,9 +422,8 @@ RayToOverlayIntersectionResult Overlays::findRayIntersectionInternal(const PickR RayToOverlayIntersectionResult result; QMapIterator<OverlayID, Overlay::Pointer> i(_overlaysWorld); - i.toBack(); - while (i.hasPrevious()) { - i.previous(); + while (i.hasNext()) { + i.next(); OverlayID thisID = i.key(); auto thisOverlay = std::dynamic_pointer_cast<Base3DOverlay>(i.value()); @@ -849,9 +847,10 @@ QVector<QUuid> Overlays::findOverlays(const glm::vec3& center, float radius) con QVector<QUuid> result; QMapIterator<OverlayID, Overlay::Pointer> i(_overlaysWorld); - i.toBack(); - while (i.hasPrevious()) { - i.previous(); + int checked = 0; + while (i.hasNext()) { + checked++; + i.next(); OverlayID thisID = i.key(); auto overlay = std::dynamic_pointer_cast<Volume3DOverlay>(i.value()); if (overlay && overlay->getVisible() && !overlay->getIgnoreRayIntersection() && overlay->isLoaded()) { diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 015cbf1221..86f080ae8d 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -863,7 +863,7 @@ function MyController(hand) { }; this.setState = function(newState, reason) { - if ((isInEditMode() && this.grabbedEntity !== HMD.tabletID) && + if ((isInEditMode() && this.grabbedThingID !== HMD.tabletID) && (newState !== STATE_OFF && newState !== STATE_SEARCHING && newState !== STATE_OVERLAY_STYLUS_TOUCHING && @@ -1446,7 +1446,7 @@ function MyController(hand) { var okToEquipFromOtherHand = ((this.getOtherHandController().state == STATE_NEAR_GRABBING || this.getOtherHandController().state == STATE_DISTANCE_HOLDING) && - this.getOtherHandController().grabbedEntity == hotspot.entityID); + this.getOtherHandController().grabbedThingID == hotspot.entityID); var hasParent = true; if (props.parentID === NULL_UUID) { hasParent = false; @@ -1666,7 +1666,7 @@ function MyController(hand) { grabbableOverlays.sort(function(a, b) { var aPosition = Overlays.getProperty(a, "position"); var aDistance = Vec3.distance(aPosition, handPosition); - var bPosition = Overlays.getProperty(a, "position"); + var bPosition = Overlays.getProperty(b, "position"); var bDistance = Vec3.distance(bPosition, handPosition); return aDistance - bDistance; }); @@ -3352,8 +3352,8 @@ var handleHandMessages = function(channel, message, sender) { selectedController.release(); var wearableEntity = data.entityID; entityPropertiesCache.addEntity(wearableEntity); - selectedController.grabbedEntity = wearableEntity; - var hotspots = selectedController.collectEquipHotspots(selectedController.grabbedEntity); + selectedController.grabbedThingID = wearableEntity; + var hotspots = selectedController.collectEquipHotspots(selectedController.grabbedThingID); if (hotspots.length > 0) { if (hotspotIndex >= hotspots.length) { hotspotIndex = 0; From 835b23832fc309df61bbb56988729bc6d7a8791b Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Sat, 25 Feb 2017 00:40:38 +0000 Subject: [PATCH 046/247] some modal clean up --- .../qml/dialogs/TabletFileDialog.qml | 14 +++++++---- .../qml/dialogs/TabletMessageBox.qml | 15 ++++++------ .../qml/dialogs/TabletQueryDialog.qml | 11 +++++---- .../resources/qml/hifi/tablet/TabletRoot.qml | 11 ++++++++- .../qml/windows/TabletModalFrame.qml | 3 +++ interface/src/Application.cpp | 20 ++++++++++++---- .../src/TabletScriptingInterface.cpp | 12 ++++++++++ .../src/TabletScriptingInterface.h | 10 ++++++++ scripts/system/libraries/WebTablet.js | 23 ++++++++++++++----- 9 files changed, 91 insertions(+), 28 deletions(-) diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml index 1b0e6d694d..0aef9179e8 100644 --- a/interface/resources/qml/dialogs/TabletFileDialog.qml +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -101,9 +101,13 @@ TabletModalWindow { TabletModalFrame { id: fileDialogItem - width: parent.width - height: parent.height - anchors.margins: 0 + width: parent.width - 6 + height: parent.height - 6 + + anchors { + horizontalCenter: root.horizontalCenter + verticalCenter: root.verticalCenter + } property bool keyboardEnabled: false property bool keyboardRaised: false @@ -123,6 +127,7 @@ TabletModalWindow { top: parent.top topMargin: (fileDialogItem.hasTitle ? (fileDialogItem.frameMarginTop + hifi.dimensions.modalDialogMargin.y) : hifi.dimension.modalDialogMargin.y) left: parent.left + leftMargin: hifi.dimensions.contentSpacing.x } spacing: hifi.dimensions.contentSpacing.x @@ -623,7 +628,8 @@ TabletModalWindow { anchors { left: parent.left right: selectionType.visible ? selectionType.left: parent.right - rightMargin: selectionType.visible ? hifi.dimensions.contentSpacing.x : 0 + rightMargin: hifi.dimensions.contentSpacing.x + leftMargin: hifi.dimensions.contentSpacing.x bottom: keyboard.top bottomMargin: hifi.dimensions.contentSpacing.y } diff --git a/interface/resources/qml/dialogs/TabletMessageBox.qml b/interface/resources/qml/dialogs/TabletMessageBox.qml index 2102874ffd..e9b5f45e7f 100644 --- a/interface/resources/qml/dialogs/TabletMessageBox.qml +++ b/interface/resources/qml/dialogs/TabletMessageBox.qml @@ -66,7 +66,8 @@ TabletModalWindow { id: messageBox clip: true anchors.verticalCenter: parent.verticalCenter - width: parent.width + anchors.horizontalCenter: parent.horizontalCenter + width: parent.width - 6 height: 300 QtObject { @@ -77,15 +78,11 @@ TabletModalWindow { readonly property int maxHeight: 720 function resize() { - console.log("[DR]-> setting the target height"); var targetWidth = Math.max(titleWidth, mainTextContainer.contentWidth) var targetHeight = mainTextContainer.height + 3 * hifi.dimensions.contentSpacing.y + (informativeTextContainer.text != "" ? informativeTextContainer.contentHeight + 3 * hifi.dimensions.contentSpacing.y : 0) + buttons.height + (details.implicitHeight + hifi.dimensions.contentSpacing.y) + messageBox.frameMarginTop - //messageBox.width = (targetWidth < d.minWidth) ? d.minWidth : ((targetWidth > d.maxWidth) ? d.maxWidth : targetWidth) - - console.log("[DR} -> about to set the height"); messageBox.height = (targetHeight < d.minHeight) ? d.minHeight: ((targetHeight > d.maxHeight) ? d.maxHeight : targetHeight) } } @@ -93,24 +90,28 @@ TabletModalWindow { RalewaySemiBold { id: mainTextContainer onTextChanged: d.resize(); - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap size: hifi.fontSizes.sectionName color: hifi.colors.baseGrayHighlight + width: parent.width - 6 anchors { top: parent.top horizontalCenter: parent.horizontalCenter margins: 0 topMargin: hifi.dimensions.contentSpacing.y + messageBox.frameMarginTop } + maximumLineCount: 30 + elide: Text.ElideLeft lineHeight: 2 lineHeightMode: Text.ProportionalHeight horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter } RalewaySemiBold { id: informativeTextContainer onTextChanged: d.resize(); - wrapMode: Text.WrapAnywhere + wrapMode: Text.WordWrap size: hifi.fontSizes.sectionName color: hifi.colors.baseGrayHighlight anchors { diff --git a/interface/resources/qml/dialogs/TabletQueryDialog.qml b/interface/resources/qml/dialogs/TabletQueryDialog.qml index a920971031..3ff3347ebc 100644 --- a/interface/resources/qml/dialogs/TabletQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletQueryDialog.qml @@ -63,9 +63,8 @@ TabletModalWindow { TabletModalFrame { id: modalWindowItem - width: parent.width + width: parent.width - 12 height: 240 - anchors.margins: 0 anchors { verticalCenter: parent.verticalCenter horizontalCenter: parent.horizontalCenter @@ -73,13 +72,13 @@ TabletModalWindow { QtObject { id: d - readonly property int minWidth: 480 - readonly property int maxWdith: 480 + readonly property int minWidth: 470 + readonly property int maxWidth: 470 readonly property int minHeight: 120 readonly property int maxHeight: 720 function resize() { - var targetWidth = Math.max(titleWidth, 480) + var targetWidth = Math.max(titleWidth, 470) var targetHeight = (items ? comboBox.controlHeight : textResult.controlHeight) + 5 * hifi.dimensions.contentSpacing.y + buttons.height modalWindowItem.width = (targetWidth < d.minWidth) ? d.minWidth : ((targetWidth > d.maxWdith) ? d.maxWidth : targetWidth); modalWindowItem.height = ((targetHeight < d.minHeight) ? d.minHeight : ((targetHeight > d.maxHeight) ? d.maxHeight : targetHeight)) + ((keyboardEnabled && keyboardRaised) ? (keyboard.raisedHeight + 2 * hifi.dimensions.contentSpacing.y) : 0) + modalWindowItem.frameMarginTop @@ -106,6 +105,7 @@ TabletModalWindow { left: parent.left; right: parent.right; bottom: parent.bottom + leftMargin: 5 } } @@ -118,6 +118,7 @@ TabletModalWindow { left: parent.left right: parent.right bottom: parent.bottom + rightMargin: 5 } model: items ? items : [] } diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 348d8167b1..102094ae1a 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -10,6 +10,7 @@ Item { property var rootMenu; property var openModal: null; + property var openMessage: null; property string subMenu: "" signal showDesktop(); @@ -24,7 +25,7 @@ Item { } Component { id: messageBoxBuilder; TabletMessageBox { } } function messageBox(properties) { - openModal = messageBoxBuilder.createObject(tabletRoot, properties); + openMessage = messageBoxBuilder.createObject(tabletRoot, properties); return openModal; } @@ -42,6 +43,14 @@ Item { tabletRoot.subMenu = subMenu; } + function isDialogOpen() { + if (openMessage !== null || openModal !== null) { + return true; + } + + return false; + } + function loadSource(url) { loader.source = ""; // make sure we load the qml fresh each time. loader.source = url; diff --git a/interface/resources/qml/windows/TabletModalFrame.qml b/interface/resources/qml/windows/TabletModalFrame.qml index 6d357a091a..550eec8357 100644 --- a/interface/resources/qml/windows/TabletModalFrame.qml +++ b/interface/resources/qml/windows/TabletModalFrame.qml @@ -39,6 +39,8 @@ Rectangle { visible: frameContent.hasTitle anchors { + horizontalCenter: parent.horizontalCenter + verticalCenter: parent.verticalCenter fill: parent topMargin: frameMarginTop leftMargin: frameMarginLeft @@ -71,6 +73,7 @@ Rectangle { y: -hifi.dimensions.modalDialogTitleHeight anchors.rightMargin: -50 anchors.right: parent.right + //anchors.horizontalCenter: parent.horizontalCenter } } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d8b974def2..c0c5a1d748 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1617,9 +1617,13 @@ void Application::toggleTabletUI() const { return; } lastTabletUIToggle = now; - - auto HMD = DependencyManager::get<HMDScriptingInterface>(); - HMD->toggleShouldShowTablet(); + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + bool messageOpen = tablet->isMessageDialogOpen(); + if (!messageOpen) { + auto HMD = DependencyManager::get<HMDScriptingInterface>(); + HMD->toggleShouldShowTablet(); + } } void Application::checkChangeCursor() { @@ -5776,8 +5780,14 @@ void Application::toggleRunningScriptsWidget() const { static const QUrl url("hifi/dialogs/RunningScripts.qml"); DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); } else { - static const QUrl url("../../hifi/dialogs/TabletRunningScripts.qml"); - tablet->pushOntoStack(url); + QQuickItem* tabletRoot = tablet->getTabletRoot(); + if (!tabletRoot && !isHMDMode()) { + static const QUrl url("hifi/dialogs/RunningScripts.qml"); + DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); + } else { + static const QUrl url("../../hifi/dialogs/TabletRunningScripts.qml"); + tablet->pushOntoStack(url); + } } //DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); //if (_runningScriptsWidget->isVisible()) { diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 04e170a8d7..3e0babd086 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -250,6 +250,18 @@ static QString getUsername() { } } +bool TabletProxy::isMessageDialogOpen() { + if (_qmlTabletRoot) { + QVariant result; + QMetaObject::invokeMethod(_qmlTabletRoot, "isDialogOpen",Qt::DirectConnection, + Q_RETURN_ARG(QVariant, result)); + + return result.toBool(); + } + + return false; +} + void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscreenSurface) { std::lock_guard<std::mutex> guard(_mutex); _qmlOffscreenSurface = qmlOffscreenSurface; diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index 8b9bec4013..f17d441023 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -109,6 +109,12 @@ public: Q_INVOKABLE void pushOntoStack(const QVariant& path); Q_INVOKABLE void popFromStack(); + /** jsdoc + * Check if the tablet has a message dialog open + * @function TabletProxy#isMessageDialogOpen + */ + Q_INVOKABLE bool isMessageDialogOpen(); + /**jsdoc * Creates a new button, adds it to this and returns it. * @function TabletProxy#addButton @@ -152,6 +158,10 @@ public: */ Q_INVOKABLE void sendToQml(QVariant msg); + /**jsdoc + * Check if the tablet is on the homescreen + * @function TabletProxy#onHomeScreen() + */ Q_INVOKABLE bool onHomeScreen(); QQuickItem* getTabletRoot() const { return _qmlTabletRoot; } diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 367ef05aea..dbda42e407 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -169,10 +169,16 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var onHomeScreen = tablet.onHomeScreen(); if (onHomeScreen) { - HMD.closeTablet(); + var isMessageOpen = tablet.isMessageDialogOpen(); + if (isMessageOpen === false) { + HMD.closeTablet(); + } } else { - tablet.gotoHomeScreen(); - _this.setHomeButtonTexture(); + var isMessageOpen = tablet.isMessageDialogOpen(); + if (isMessageOpen === false) { + tablet.gotoHomeScreen(); + _this.setHomeButtonTexture(); + } } } }; @@ -432,11 +438,16 @@ WebTablet.prototype.mousePressEvent = function (event) { if (overlayPickResults.intersects && overlayPickResults.overlayID === HMD.homeButtonID) { var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var onHomeScreen = tablet.onHomeScreen(); + var isMessageOpen = tablet.isMessageDialogOpen(); if (onHomeScreen) { - HMD.closeTablet(); + if (isMessageOpen === false) { + HMD.closeTablet(); + } } else { - tablet.gotoHomeScreen(); - this.setHomeButtonTexture(); + if (isMessageOpen === false) { + tablet.gotoHomeScreen(); + this.setHomeButtonTexture(); + } } } else if (!HMD.active && (!overlayPickResults.intersects || !overlayPickResults.overlayID === this.webOverlayID)) { this.dragging = true; From f0f2b8c4dafa62048bddd6aae51b7513feb5016e Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 28 Feb 2017 21:30:25 +0000 Subject: [PATCH 047/247] fix comboBox and PushOntoStack --- .../qml/controls-uit/TabletComboBox.qml | 15 ++++----- .../qml/hifi/tablet/NewModelDialog.qml | 31 +++++++++++++------ .../src/TabletScriptingInterface.cpp | 20 ++++++++++-- 3 files changed, 46 insertions(+), 20 deletions(-) diff --git a/interface/resources/qml/controls-uit/TabletComboBox.qml b/interface/resources/qml/controls-uit/TabletComboBox.qml index e5dec315e5..86a5f6b5cc 100644 --- a/interface/resources/qml/controls-uit/TabletComboBox.qml +++ b/interface/resources/qml/controls-uit/TabletComboBox.qml @@ -14,7 +14,7 @@ import QtQuick.Controls.Styles 1.4 import "../styles-uit" import "../controls-uit" as HifiControls -import "." as VrControls +//import "." as VrControls FocusScope { id: root @@ -119,14 +119,14 @@ FocusScope { } function showList() { - var r = 20//desktop.mapFromItem(root, 0, 0, root.width, root.height); - var y = 200; - var bottom = 0 + scrollView.height; + var r = mapFromItem(root, 0, 0, root.width, root.height); + var y = r.y + r.height; + var bottom = y + scrollView.height; if (bottom > 720) { - y -= bottom - 720 + 8; + y -= bottom - tabletRoot.height + 8; } - scrollView.x = 0; - scrollView.y = 0; + scrollView.x = r.x; + scrollView.y = y; popup.visible = true; popup.forceActiveFocus(); listView.currentIndex = root.currentIndex; @@ -141,6 +141,7 @@ FocusScope { FocusScope { id: popup + z: 12 parent: parent anchors.fill: parent visible: false diff --git a/interface/resources/qml/hifi/tablet/NewModelDialog.qml b/interface/resources/qml/hifi/tablet/NewModelDialog.qml index 13c0d963ea..d57ffdc72f 100644 --- a/interface/resources/qml/hifi/tablet/NewModelDialog.qml +++ b/interface/resources/qml/hifi/tablet/NewModelDialog.qml @@ -11,12 +11,15 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 +import "../../styles-uit" +import "../../controls-uit" Rectangle { id: newModelDialog // width: parent.width // height: parent.height - + HifiConstants { id: hifi } + color: hifi.colors.baseGray; property var eventBridge; signal sendToScript(var message); @@ -32,6 +35,7 @@ Rectangle { Text { id: text1 text: qsTr("Model URL") + color: "#ffffff" font.pixelSize: 12 } @@ -64,6 +68,7 @@ Rectangle { CheckBox { id: dynamic text: qsTr("Dynamic") + } Row { @@ -82,6 +87,7 @@ Rectangle { Text { id: text2 width: 160 + color: "#ffffff" text: qsTr("Models with automatic collisions set to 'Exact' cannot be dynamic") wrapMode: Text.WordWrap font.pixelSize: 12 @@ -97,30 +103,34 @@ Rectangle { Text { id: text3 text: qsTr("Automatic Collisions") + color: "#ffffff" font.pixelSize: 12 } - ComboBox { + TabletComboBox { id: collisionType width: 200 + z: 100 transformOrigin: Item.Center - model: ListModel { - id: collisionDropdown - ListElement { text: "No Collision" } - ListElement { text: "Basic - Whole model" } - ListElement { text: "Good - Sub-meshes" } - ListElement { text: "Exact - All polygons" } - } + model: ["No Collision", + "Basic - Whole model", + "Good - Sub-meshes", + "Exact - All polygons"] } Row { id: row3 width: 200 height: 400 - + spacing: 5 + + anchors { + rightMargin: 15 + } Button { id: button1 text: qsTr("Add") + z: -1 onClicked: { newModelDialog.sendToScript({ method: "newModelDialogAdd", @@ -135,6 +145,7 @@ Rectangle { Button { id: button2 + z: -1 text: qsTr("Cancel") onClicked: { newModelDialog.sendToScript({method: "newModelDialogCancel"}) diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 04e170a8d7..61851e33b0 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -344,8 +344,15 @@ void TabletProxy::pushOntoStack(const QVariant& path) { } else { qCDebug(scriptengine) << "tablet cannot push QML because _qmlTabletRoot doesn't have child stack"; } + } else if (_desktopWindow) { + auto stack = _desktopWindow->asQuickItem()->findChild<QQuickItem*>("stack"); + if (stack) { + QMetaObject::invokeMethod(stack, "pushSource", Q_ARG(const QVariant&, path)); + } else { + qCDebug(scriptengine) << "tablet cannot push QML because _desktopWindow doesn't have child stack"; + } } else { - qCDebug(scriptengine) << "tablet cannot push QML because _qmlTabletRoot is null"; + qCDebug(scriptengine) << "tablet cannot push QML because _qmlTabletRoot or _desktopWindow is null"; } } @@ -355,10 +362,17 @@ void TabletProxy::popFromStack() { if (stack) { QMetaObject::invokeMethod(stack, "popSource"); } else { - qCDebug(scriptengine) << "tablet cannot pop QML because _qmlTabletRoot doesn't have child stack"; + qCDebug(scriptengine) << "tablet cannot push QML because _qmlTabletRoot doesn't have child stack"; + } + } else if (_desktopWindow) { + auto stack = _desktopWindow->asQuickItem()->findChild<QQuickItem*>("stack"); + if (stack) { + QMetaObject::invokeMethod(stack, "popSource"); + } else { + qCDebug(scriptengine) << "tablet cannot pop QML because _desktopWindow doesn't have child stack"; } } else { - qCDebug(scriptengine) << "tablet cannot pop QML because _qmlTabletRoot is null"; + qCDebug(scriptengine) << "tablet cannot pop QML because _qmlTabletRoot or _desktopWindow is null"; } } From 16d3f22e77fa3f9d9d43cd404a65f5b4514c521a Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 28 Feb 2017 21:39:33 +0000 Subject: [PATCH 048/247] remove uncommented code --- interface/resources/qml/controls-uit/TabletComboBox.qml | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/resources/qml/controls-uit/TabletComboBox.qml b/interface/resources/qml/controls-uit/TabletComboBox.qml index 86a5f6b5cc..7361833a45 100644 --- a/interface/resources/qml/controls-uit/TabletComboBox.qml +++ b/interface/resources/qml/controls-uit/TabletComboBox.qml @@ -14,7 +14,6 @@ import QtQuick.Controls.Styles 1.4 import "../styles-uit" import "../controls-uit" as HifiControls -//import "." as VrControls FocusScope { id: root From 9f56d2f6f6f5779b471c4b7465b779770b59a0ce Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 2 Mar 2017 12:30:36 +1300 Subject: [PATCH 049/247] Make tablet general settings dialog naming more consistent with desktop --- .../qml/hifi/dialogs/GeneralPreferencesDialog.qml | 2 +- ...tGeneralSettings.qml => TabletGeneralPreferences.qml} | 9 +++------ scripts/system/generalSettings.js | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) rename interface/resources/qml/hifi/tablet/{TabletGeneralSettings.qml => TabletGeneralPreferences.qml} (85%) diff --git a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml index 9be1c30e55..44cae95696 100644 --- a/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml +++ b/interface/resources/qml/hifi/dialogs/GeneralPreferencesDialog.qml @@ -1,5 +1,5 @@ // -// PreferencesDialog.qml +// GeneralPreferencesDialog.qml // // Created by Bradley Austin Davis on 24 Jan 2016 // Copyright 2015 High Fidelity, Inc. diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralSettings.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml similarity index 85% rename from interface/resources/qml/hifi/tablet/TabletGeneralSettings.qml rename to interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index b445e6a463..dcfd48746d 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralSettings.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -1,9 +1,8 @@ // -// TabletGeneralSettings.qml -// scripts/system/ +// TabletGeneralPreferences.qml // // Created by Dante Ruiz on 9 Feb 2017 -// Copyright 2016 High Fidelity, Inc. +// Copyright 2017 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html @@ -34,11 +33,9 @@ StackView { TabletPreferencesDialog { id: root - objectName: "GeneralPreferencesDialog" + objectName: "TabletGeneralPreferences" width: parent.width height: parent.height showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Sixense Controllers", "Perception Neuron", "Kinect"] - } - } diff --git a/scripts/system/generalSettings.js b/scripts/system/generalSettings.js index 0a9fc823ae..7d97f13757 100644 --- a/scripts/system/generalSettings.js +++ b/scripts/system/generalSettings.js @@ -18,7 +18,7 @@ var buttonName = "Settings"; var toolBar = null; var tablet = null; - var settings = "TabletGeneralSettings.qml" + var settings = "TabletGeneralPreferences.qml" function onClicked(){ if (tablet) { tablet.loadQMLSource(settings); From b9869264badce1cf473d86d3ccfbb64a6f91e419 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 2 Mar 2017 13:16:23 +1300 Subject: [PATCH 050/247] Display avatar settings dialog in tablet --- .../hifi/tablet/TabletAvatarPreferences.qml | 41 +++++++++++++++++++ interface/src/Application.cpp | 10 +++++ interface/src/Application.h | 2 + interface/src/Menu.cpp | 3 +- 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml diff --git a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml new file mode 100644 index 0000000000..a4a0dabd58 --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml @@ -0,0 +1,41 @@ +// +// TabletAvatarPreferences.qml +// +// Created by Davd Rowe on 2 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import "tabletWindows" +import "../../dialogs" +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtGraphicalEffects 1.0 + +StackView { + id: profileRoot + initialItem: root + objectName: "stack" + + property var eventBridge; + signal sendToScript(var message); + + function pushSource(path) { + editRoot.push(Qt.reslovedUrl(path)); + } + + function popSource() { + + } + + TabletPreferencesDialog { + id: root + objectName: "TabletAvatarPreferences" + width: parent.width + height: parent.height + showCategories: ["Avatar Basics", "Avatar Tuning", "Avatar Camera"] + } +} diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8bb2092f94..7f6a6ce2b3 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5853,6 +5853,16 @@ void Application::addAssetToWorldFromURL(QString url) { request->send(); } +void Application::showDialog(const QString& desktopURL, const QString& tabletURL, const QString& name) const { + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet->getToolbarMode() && tablet->getTabletRoot() && !isHMDMode()) { + DependencyManager::get<OffscreenUi>()->show(desktopURL, name); + } else { + tablet->loadQMLSource(tabletURL); + } +} + void Application::addAssetToWorldFromURLRequestFinished() { auto request = qobject_cast<ResourceRequest*>(sender()); auto url = request->getUrl().toString(); diff --git a/interface/src/Application.h b/interface/src/Application.h index 13c1458aee..c4e1fad207 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -331,6 +331,8 @@ public slots: void toggleRunningScriptsWidget() const; Q_INVOKABLE void showAssetServerWidget(QString filePath = ""); + void showDialog(const QString& desktopURL, const QString& tabletURL, const QString& name) const; + // FIXME: Move addAssetToWorld* methods to own class? void addAssetToWorldFromURL(QString url); void addAssetToWorldFromURLRequestFinished(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index acf97ad5f7..f5f624caf1 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -300,7 +300,8 @@ Menu::Menu() { // Settings > Avatar... action = addActionToQMenuAndActionHash(settingsMenu, "Avatar..."); connect(action, &QAction::triggered, [] { - DependencyManager::get<OffscreenUi>()->toggle(QString("hifi/dialogs/AvatarPreferencesDialog.qml"), "AvatarPreferencesDialog"); + qApp->showDialog(QString("hifi/dialogs/AvatarPreferencesDialog.qml"), + QString("../../hifi/tablet/TabletAvatarPreferences.qml"), "AvatarPreferencesDialog"); }); // Settings > LOD... From ebe41bb4438363b991ed8998a19f0a9915804e22 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 2 Mar 2017 14:11:56 +1300 Subject: [PATCH 051/247] Add a title to the tablet settings dialogs --- .../hifi/tablet/TabletAvatarPreferences.qml | 1 + .../hifi/tablet/TabletGeneralPreferences.qml | 1 + .../tabletWindows/TabletPreferencesDialog.qml | 46 +++++++++++++++---- 3 files changed, 38 insertions(+), 10 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml index a4a0dabd58..f5c1ddf8f7 100644 --- a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml @@ -33,6 +33,7 @@ StackView { TabletPreferencesDialog { id: root + property string title: "Avatar Preferences" objectName: "TabletAvatarPreferences" width: parent.width height: parent.height diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index dcfd48746d..4473a997e6 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -33,6 +33,7 @@ StackView { TabletPreferencesDialog { id: root + property string title: "General Preferences" objectName: "TabletGeneralPreferences" width: parent.width height: parent.height diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index 7d214237a3..7a57bd7568 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -43,19 +43,50 @@ Item { } Rectangle { - id: main - height: parent.height - 40 + id: header + height: 90 anchors { top: parent.top - bottom: footer.top left: parent.left right: parent.right } + z: 100 + + gradient: Gradient { + GradientStop { + position: 0 + color: "#2b2b2b" + } + + GradientStop { + position: 1 + color: "#1e1e1e" + } + } + + RalewayBold { + text: title + size: 26 + color: "#34a2c7" + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: hifi.dimensions.contentMargin.x + } + } + + Rectangle { + id: main + anchors { + top: header.bottom + bottom: footer.top + left: parent.left + right: parent.right + } + gradient: Gradient { GradientStop { position: 0 color: "#2b2b2b" - } GradientStop { @@ -110,9 +141,7 @@ Item { } scrollView.contentHeight = scrollView.getSectionsHeight(); - } - Column { id: prefControls @@ -136,7 +165,6 @@ Item { height: 40 anchors { - top: main.bottom bottom: parent.bottom left: parent.left right: parent.right @@ -145,7 +173,6 @@ Item { GradientStop { position: 0 color: "#2b2b2b" - } GradientStop { @@ -156,7 +183,7 @@ Item { Row { anchors { - top: parent,top + verticalCenter: parent.verticalCenter right: parent.right rightMargin: hifi.dimensions.contentMargin.x } @@ -175,5 +202,4 @@ Item { } } } - } From e445fe551f1d68a2f8675d7f9bc9329bab2b50a4 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 2 Mar 2017 15:00:38 +1300 Subject: [PATCH 052/247] Fix showing wrong version of dialog in desktop mode --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7f6a6ce2b3..4875b5dc5f 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5856,7 +5856,7 @@ void Application::addAssetToWorldFromURL(QString url) { void Application::showDialog(const QString& desktopURL, const QString& tabletURL, const QString& name) const { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet->getToolbarMode() && tablet->getTabletRoot() && !isHMDMode()) { + if (tablet->getToolbarMode() || !tablet->getTabletRoot() && !isHMDMode()) { DependencyManager::get<OffscreenUi>()->show(desktopURL, name); } else { tablet->loadQMLSource(tabletURL); From 62f91b4af696e573ed3e1517899510a4d3f043a5 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 2 Mar 2017 15:01:31 +1300 Subject: [PATCH 053/247] Work around MyAvatar not being available in avatar preference control --- .../resources/qml/dialogs/preferences/AvatarPreference.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/dialogs/preferences/AvatarPreference.qml b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml index 0c5c5bf630..53d36b6c79 100644 --- a/interface/resources/qml/dialogs/preferences/AvatarPreference.qml +++ b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml @@ -23,7 +23,10 @@ Preference { Component.onCompleted: { dataTextField.text = preference.value; - console.log("MyAvatar modelName " + MyAvatar.getFullAvatarModelName()) + // FIXME: MyAvatar object isn't available in HMD mode for some reason. + if (typeof MyAvatar !== "undefined") { + console.log("MyAvatar modelName " + MyAvatar.getFullAvatarModelName()) + } console.log("Application : " + ApplicationInterface) ApplicationInterface.fullAvatarURLChanged.connect(processNewAvatar); } From b592205f7e01a247c5d3bfb0739943e828962c3d Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 2 Mar 2017 18:45:42 +1300 Subject: [PATCH 054/247] Fix OSX warning --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 4875b5dc5f..8c8ec6791b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5856,7 +5856,7 @@ void Application::addAssetToWorldFromURL(QString url) { void Application::showDialog(const QString& desktopURL, const QString& tabletURL, const QString& name) const { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet->getToolbarMode() || !tablet->getTabletRoot() && !isHMDMode()) { + if (tablet->getToolbarMode() || (!tablet->getTabletRoot() && !isHMDMode())) { DependencyManager::get<OffscreenUi>()->show(desktopURL, name); } else { tablet->loadQMLSource(tabletURL); From 5ba89e67afdac2dfabba6a3e3df4f5d4d5fae29b Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Thu, 2 Mar 2017 16:50:42 +0000 Subject: [PATCH 055/247] fixed message dialog bug --- interface/resources/qml/dialogs/TabletMessageBox.qml | 4 ++-- interface/resources/qml/hifi/tablet/TabletRoot.qml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/dialogs/TabletMessageBox.qml b/interface/resources/qml/dialogs/TabletMessageBox.qml index e9b5f45e7f..f8876b1ec8 100644 --- a/interface/resources/qml/dialogs/TabletMessageBox.qml +++ b/interface/resources/qml/dialogs/TabletMessageBox.qml @@ -47,10 +47,10 @@ TabletModalWindow { property int icon: OriginalDialogs.StandardIcon.NoIcon property string iconText: "" property int iconSize: 50 - // onIconChanged: updateIcon(); + onIconChanged: updateIcon(); property int defaultButton: OriginalDialogs.StandardButton.NoButton; property int clickedButton: OriginalDialogs.StandardButton.NoButton; - //focus: defaultButton === OriginalDialogs.StandardButton.NoButton + focus: defaultButton === OriginalDialogs.StandardButton.NoButton property int titleWidth: 0 onTitleWidthChanged: d.resize(); diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 102094ae1a..8eaddfb601 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -26,7 +26,7 @@ Item { Component { id: messageBoxBuilder; TabletMessageBox { } } function messageBox(properties) { openMessage = messageBoxBuilder.createObject(tabletRoot, properties); - return openModal; + return openMessage; } function customInputDialog(properties) { From 94b5e6333c744274f37d3ee83f2acce3b9647c29 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 2 Mar 2017 11:02:06 -0800 Subject: [PATCH 056/247] get handControllerGrab overlay lines working again --- scripts/system/controllers/handControllerGrab.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 58ab4febc8..1dad85bb9f 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -796,9 +796,6 @@ function MyController(hand) { // for visualizations this.overlayLine = null; - - // for lights - this.overlayLine = null; this.searchSphere = null; this.waitForTriggerRelease = false; @@ -1033,11 +1030,13 @@ function MyController(hand) { if (farParentID && farParentID != NULL_UUID) { Overlays.editOverlay(this.overlayLine, { color: color, + endParentID: farParentID }); } else { Overlays.editOverlay(this.overlayLine, { length: Vec3.distance(farPoint, closePoint), color: color, + endParentID: farParentID }); } } @@ -2240,7 +2239,7 @@ function MyController(hand) { this.overlayLineOn(rayPickInfo.searchRay.origin, Vec3.subtract(grabbedProperties.position, this.offsetPosition), COLORS_GRAB_DISTANCE_HOLD, - this.grabbedEntity); + this.grabbedThingID); var distanceToObject = Vec3.length(Vec3.subtract(MyAvatar.position, this.currentObjectPosition)); var success = Entities.updateAction(this.grabbedThingID, this.actionID, { @@ -3212,7 +3211,8 @@ function MyController(hand) { children = children.concat(Entities.getChildrenIDsOfJoint(AVATAR_SELF_ID, controllerCRJointIndex)); children.forEach(function(childID) { - if (childID !== _this.stylus) { + if (childID !== _this.stylus && + childID !== _this.overlayLine) { // we appear to be holding something and this script isn't in a state that would be holding something. // unhook it. if we previously took note of this entity's parent, put it back where it was. This // works around some problems that happen when more than one hand or avatar is passing something around. From f321ffdf91cbfd1a84a6b974bf10ba0927409161 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 2 Mar 2017 13:00:52 -0800 Subject: [PATCH 057/247] don't clear EDIT_SETTING flag when creating new entities --- scripts/system/edit.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 404cc26fcb..5ed6bd4f9d 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -170,8 +170,6 @@ var toolBar = (function () { tablet = null; function createNewEntity(properties) { - Settings.setValue(EDIT_SETTING, false); - var dimensions = properties.dimensions ? properties.dimensions : DEFAULT_DIMENSIONS; var position = getPositionToCreateEntity(); var entityID = null; From 2b53cb4722c60f41c8a91bb969b622ab99641ca2 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 3 Mar 2017 11:31:41 +1300 Subject: [PATCH 058/247] Display audio stats in tablet --- scripts/developer/utilities/audio/stats.js | 28 +++++++++++++--------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/scripts/developer/utilities/audio/stats.js b/scripts/developer/utilities/audio/stats.js index 493271ac99..064fd72fe5 100644 --- a/scripts/developer/utilities/audio/stats.js +++ b/scripts/developer/utilities/audio/stats.js @@ -9,17 +9,23 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -var INITIAL_WIDTH = 400; -var INITIAL_OFFSET = 50; +if (HMD.active && !Settings.getValue("HUDUIEnabled")) { + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var qml = Script.resolvePath("stats.qml"); + tablet.loadQMLSource(qml); + Script.stop(); -// Set up the qml ui -var qml = Script.resolvePath('stats.qml'); -var window = new OverlayWindow({ - title: 'Audio Interface Statistics', - source: qml, - width: 500, height: 520 // stats.qml may be too large for some screens -}); -window.setPosition(INITIAL_OFFSET, INITIAL_OFFSET); +} else { + var INITIAL_WIDTH = 400; + var INITIAL_OFFSET = 50; -window.closed.connect(function() { Script.stop(); }); + var qml = Script.resolvePath("stats.qml"); + var window = new OverlayWindow({ + title: "Audio Interface Statistics", + source: qml, + width: 500, height: 520 // stats.qml may be too large for some screens + }); + window.setPosition(INITIAL_OFFSET, INITIAL_OFFSET); + window.closed.connect(function () { Script.stop(); }); +} From 6a4d47738127bb0cf7eeb3ed4d6b86af18817a9d Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 2 Mar 2017 16:15:41 -0800 Subject: [PATCH 059/247] fix up bounds handling in Line3DOverlay --- interface/src/ui/overlays/Line3DOverlay.cpp | 28 ++++++++++++------- .../render-utils/src/RenderDeferredTask.cpp | 3 +- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/interface/src/ui/overlays/Line3DOverlay.cpp b/interface/src/ui/overlays/Line3DOverlay.cpp index 99e418bf4f..6c7ab3f411 100644 --- a/interface/src/ui/overlays/Line3DOverlay.cpp +++ b/interface/src/ui/overlays/Line3DOverlay.cpp @@ -53,7 +53,7 @@ glm::vec3 Line3DOverlay::getEnd() const { if (_endParentID != QUuid()) { glm::vec3 localOffset = _direction * _length; bool success; - worldEnd = localToWorld(localOffset, _endParentID, _endParentJointIndex, success); + worldEnd = localToWorld(getLocalStart() + localOffset, _endParentID, _endParentJointIndex, success); return worldEnd; } @@ -86,8 +86,13 @@ void Line3DOverlay::setEnd(const glm::vec3& end) { qDebug() << "Line3DOverlay::setEnd failed"; return; } - _direction = glm::normalize(offset); + _length = glm::length(offset); + if (_length > 0.0f) { + _direction = glm::normalize(offset); + } else { + _direction = glm::vec3(0.0f); + } } void Line3DOverlay::setLocalEnd(const glm::vec3& localEnd) { @@ -98,16 +103,18 @@ void Line3DOverlay::setLocalEnd(const glm::vec3& localEnd) { glm::vec3 localStart = getLocalStart(); offset = localEnd - localStart; } - _direction = glm::normalize(offset); _length = glm::length(offset); + if (_length > 0.0f) { + _direction = glm::normalize(offset); + } else { + _direction = glm::vec3(0.0f); + } } AABox Line3DOverlay::getBounds() const { auto extents = Extents{}; extents.addPoint(getStart()); extents.addPoint(getEnd()); - extents.transform(getTransform()); - return AABox(extents); } @@ -122,19 +129,20 @@ void Line3DOverlay::render(RenderArgs* args) { glm::vec4 colorv4(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha); auto batch = args->_batch; if (batch) { - // batch->setModelTransform(getTransform()); + batch->setModelTransform(Transform()); + glm::vec3 start = getStart(); + glm::vec3 end = getEnd(); auto geometryCache = DependencyManager::get<GeometryCache>(); if (getIsDashedLine()) { // TODO: add support for color to renderDashedLine() geometryCache->bindSimpleProgram(*batch, false, false, false, true, true); - geometryCache->renderDashedLine(*batch, getStart(), getEnd(), colorv4, _geometryCacheID); + geometryCache->renderDashedLine(*batch, start, end, colorv4, _geometryCacheID); } else if (_glow > 0.0f) { - geometryCache->renderGlowLine(*batch, getStart(), getEnd(), - colorv4, _glow, _glowWidth, _geometryCacheID); + geometryCache->renderGlowLine(*batch, start, end, colorv4, _glow, _glowWidth, _geometryCacheID); } else { geometryCache->bindSimpleProgram(*batch, false, false, false, true, true); - geometryCache->renderLine(*batch, getStart(), getEnd(), colorv4, _geometryCacheID); + geometryCache->renderLine(*batch, start, end, colorv4, _geometryCacheID); } } } diff --git a/libraries/render-utils/src/RenderDeferredTask.cpp b/libraries/render-utils/src/RenderDeferredTask.cpp index 55a9c8b9e4..8ab65efd24 100644 --- a/libraries/render-utils/src/RenderDeferredTask.cpp +++ b/libraries/render-utils/src/RenderDeferredTask.cpp @@ -160,13 +160,14 @@ RenderDeferredTask::RenderDeferredTask(RenderFetchCullSortTask::Output items) { addJob<DrawOverlay3D>("DrawOverlay3DOpaque", overlayOpaquesInputs, true); addJob<DrawOverlay3D>("DrawOverlay3DTransparent", overlayTransparentsInputs, false); - // Debugging stages { // Bounds do not draw on stencil buffer, so they must come last addJob<DrawBounds>("DrawMetaBounds", metas); + addJob<DrawBounds>("DrawOverlayOpaqueBounds", overlayOpaques); + addJob<DrawBounds>("DrawOverlayTransparentBounds", overlayTransparents); // Debugging Deferred buffer job const auto debugFramebuffers = render::Varying(DebugDeferredBuffer::Inputs(deferredFramebuffer, linearDepthTarget, surfaceGeometryFramebuffer, ambientOcclusionFramebuffer)); From f055711c76d0653b546b2c75e736215c80065cc4 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 2 Mar 2017 16:47:19 -0800 Subject: [PATCH 060/247] refix --- interface/src/ui/overlays/Line3DOverlay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/overlays/Line3DOverlay.cpp b/interface/src/ui/overlays/Line3DOverlay.cpp index 6c7ab3f411..e1ea06c599 100644 --- a/interface/src/ui/overlays/Line3DOverlay.cpp +++ b/interface/src/ui/overlays/Line3DOverlay.cpp @@ -53,7 +53,7 @@ glm::vec3 Line3DOverlay::getEnd() const { if (_endParentID != QUuid()) { glm::vec3 localOffset = _direction * _length; bool success; - worldEnd = localToWorld(getLocalStart() + localOffset, _endParentID, _endParentJointIndex, success); + worldEnd = localToWorld(localOffset, _endParentID, _endParentJointIndex, success); return worldEnd; } From 02a2bb6fc3461bbf20db4a90f6667e7866a8bd1c Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 3 Mar 2017 16:25:15 +1300 Subject: [PATCH 061/247] Rename QML file --- scripts/developer/utilities/audio/{stats.qml => DesktopStats.qml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename scripts/developer/utilities/audio/{stats.qml => DesktopStats.qml} (100%) diff --git a/scripts/developer/utilities/audio/stats.qml b/scripts/developer/utilities/audio/DesktopStats.qml similarity index 100% rename from scripts/developer/utilities/audio/stats.qml rename to scripts/developer/utilities/audio/DesktopStats.qml From 3285816fca60d813bdc97aea6e4b16993dea2855 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 3 Mar 2017 16:45:35 +1300 Subject: [PATCH 062/247] Fix up audio stats displayed in tablet --- interface/src/ui/overlays/Web3DOverlay.cpp | 2 + .../audio/{DesktopStats.qml => Stats.qml} | 7 +- .../developer/utilities/audio/TabletStats.qml | 89 +++++++++++++++++++ scripts/developer/utilities/audio/stats.js | 4 +- 4 files changed, 94 insertions(+), 8 deletions(-) rename scripts/developer/utilities/audio/{DesktopStats.qml => Stats.qml} (96%) create mode 100644 scripts/developer/utilities/audio/TabletStats.qml diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 8d72f877b6..508ac00c5f 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -40,6 +40,7 @@ #include <Preferences.h> #include <ScriptEngines.h> #include "FileDialogHelper.h" +#include "AudioClient.h" static const float DPI = 30.47f; @@ -170,6 +171,7 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("offscreenFlags", flags); _webSurface->getRootContext()->setContextProperty("AddressManager", DependencyManager::get<AddressManager>().data()); _webSurface->getRootContext()->setContextProperty("Account", AccountScriptingInterface::getInstance()); + _webSurface->getRootContext()->setContextProperty("AudioStats", DependencyManager::get<AudioClient>()->getStats().data()); _webSurface->getRootContext()->setContextProperty("HMD", DependencyManager::get<HMDScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("fileDialogHelper", new FileDialogHelper()); _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); diff --git a/scripts/developer/utilities/audio/DesktopStats.qml b/scripts/developer/utilities/audio/Stats.qml similarity index 96% rename from scripts/developer/utilities/audio/DesktopStats.qml rename to scripts/developer/utilities/audio/Stats.qml index 346e5e3544..614c682f98 100644 --- a/scripts/developer/utilities/audio/DesktopStats.qml +++ b/scripts/developer/utilities/audio/Stats.qml @@ -1,5 +1,5 @@ // -// stats.qml +// Stats.qml // scripts/developer/utilities/audio // // Created by Zach Pomerantz on 9/22/2016 @@ -15,7 +15,6 @@ import QtQuick.Layouts 1.3 Column { id: stats width: parent.width - height: parent.height property bool showGraphs: toggleGraphs.checked RowLayout { @@ -35,11 +34,9 @@ Column { Grid { width: parent.width - height: parent.height - 30 Column { width: parent.width / 2 - height: parent.height Section { label: "Latency" @@ -76,7 +73,6 @@ Column { Column { width: parent.width / 2 - height: parent.height Section { label: "Mixer (upstream)" @@ -92,4 +88,3 @@ Column { } } } - diff --git a/scripts/developer/utilities/audio/TabletStats.qml b/scripts/developer/utilities/audio/TabletStats.qml new file mode 100644 index 0000000000..130b90f032 --- /dev/null +++ b/scripts/developer/utilities/audio/TabletStats.qml @@ -0,0 +1,89 @@ +// +// TabletStats.qml +// scripts/developer/utilities/audio +// +// Created by David Rowe on 3 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html +// +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Layouts 1.3 + +import "../../../../resources/qml/styles-uit" + +Item { + id: dialog + width: 480 + height: 720 + + HifiConstants { id: hifi } + + Rectangle { + id: header + height: 90 + anchors { + top: parent.top + left: parent.left + right: parent.right + } + z: 100 + + gradient: Gradient { + GradientStop { + position: 0 + color: "#2b2b2b" + } + + GradientStop { + position: 1 + color: "#1e1e1e" + } + } + + RalewayBold { + text: "Audio Interface Statistics" + size: 26 + color: "#34a2c7" + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: hifi.dimensions.contentMargin.x // ####### hifi is not defined + } + } + + Rectangle { + id: main + anchors { + top: header.bottom + bottom: parent.bottom + left: parent.left + right: parent.right + } + + gradient: Gradient { + GradientStop { + position: 0 + color: "#2b2b2b" + } + + GradientStop { + position: 1 + color: "#0f212e" + } + } + + Flickable { + id: scrollView + width: parent.width + height: parent.height + contentWidth: parent.width + contentHeight: stats.height + + Stats { + id: stats + } + } + } +} diff --git a/scripts/developer/utilities/audio/stats.js b/scripts/developer/utilities/audio/stats.js index 064fd72fe5..382e14df5f 100644 --- a/scripts/developer/utilities/audio/stats.js +++ b/scripts/developer/utilities/audio/stats.js @@ -11,7 +11,7 @@ if (HMD.active && !Settings.getValue("HUDUIEnabled")) { var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - var qml = Script.resolvePath("stats.qml"); + var qml = Script.resolvePath("TabletStats.qml"); tablet.loadQMLSource(qml); Script.stop(); @@ -19,7 +19,7 @@ if (HMD.active && !Settings.getValue("HUDUIEnabled")) { var INITIAL_WIDTH = 400; var INITIAL_OFFSET = 50; - var qml = Script.resolvePath("stats.qml"); + var qml = Script.resolvePath("Stats.qml"); var window = new OverlayWindow({ title: "Audio Interface Statistics", source: qml, From b31cf23c8d57253d604f5a703657ec20d4db31eb Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 3 Mar 2017 17:45:23 +1300 Subject: [PATCH 063/247] Fix tablet QML fonts path This is the path for running scripts from build/install directory rather than from source directory. --- interface/src/ui/overlays/Web3DOverlay.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 508ac00c5f..e2001d7766 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -175,7 +175,7 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("HMD", DependencyManager::get<HMDScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("fileDialogHelper", new FileDialogHelper()); _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); - _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../../"); + _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); // Override min fps for tablet UI, for silky smooth scrolling From 55963c4418f79731cba27e2bfa5699beb3d78621 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 3 Mar 2017 17:46:12 +1300 Subject: [PATCH 064/247] Style audio stats dialog button --- scripts/developer/utilities/audio/Stats.qml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/developer/utilities/audio/Stats.qml b/scripts/developer/utilities/audio/Stats.qml index 614c682f98..7f559ea664 100644 --- a/scripts/developer/utilities/audio/Stats.qml +++ b/scripts/developer/utilities/audio/Stats.qml @@ -12,21 +12,21 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.Layouts 1.3 +import "../../../../resources/qml/controls-uit" as HifiControls + Column { id: stats width: parent.width property bool showGraphs: toggleGraphs.checked - RowLayout { + Item { width: parent.width height: 30 - Button { + HifiControls.Button { id: toggleGraphs property bool checked: false - - Layout.alignment: Qt.AlignCenter - + anchors.horizontalCenter: parent.horizontalCenter text: checked ? "Hide graphs" : "Show graphs" onClicked: function() { checked = !checked; } } From 88c0db969c56c70867cce43dbef9190fd1fa8c07 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 3 Mar 2017 17:14:00 +0000 Subject: [PATCH 065/247] added tabletComboBox to tabletFileDialog --- interface/resources/qml/dialogs/TabletFileDialog.qml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml index 0aef9179e8..b55eca7493 100644 --- a/interface/resources/qml/dialogs/TabletFileDialog.qml +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -151,11 +151,12 @@ TabletModalWindow { } } - /*TabletComboBox { + TabletComboBox { id: pathSelector - anchors { + z: 10 + anchors { top: parent.top - topMargin: hifi.dimensions.contentMargin.y + topMargin: (fileDialogItem.hasTitle ? (fileDialogItem.frameMarginTop + hifi.dimensions.modalDialogMargin.y) : hifi.dimension.modalDialogMargin.y) left: navControls.right leftMargin: hifi.dimensions.contentSpacing.x right: parent.right @@ -219,7 +220,7 @@ TabletModalWindow { fileTableView.forceActiveFocus(); } } - }*/ + } QtObject { id: d From 53cfad65cd89de003fb8c293be67b503e3304141 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 4 Mar 2017 13:01:02 +1300 Subject: [PATCH 066/247] Add keyboard to preferences dialogs --- .../tabletWindows/TabletPreferencesDialog.qml | 50 ++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index 7a57bd7568..fa6d2bb923 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -27,6 +27,10 @@ Item { HifiConstants { id: hifi } property var sections: [] property var showCategories: [] + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false function saveAll() { for (var i = 0; i < sections.length; ++i) { @@ -41,7 +45,7 @@ Item { section.restoreAll(); } } - + Rectangle { id: header height: 90 @@ -165,7 +169,7 @@ Item { height: 40 anchors { - bottom: parent.bottom + bottom: keyboard.top left: parent.left right: parent.right } @@ -202,4 +206,46 @@ Item { } } } + + HifiControls.Keyboard { + id: keyboard + raised: parent.keyboardEnabled && parent.keyboardRaised + numeric: parent.punctuationMode + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right + } + } + + Component.onCompleted: { + keyboardEnabled = HMD.active; + } + + onKeyboardRaisedChanged: { + if (keyboardEnabled && keyboardRaised) { + var delta = mouseArea.mouseY - (dialog.height - footer.height - keyboard.raisedHeight -hifi.dimensions.controlLineHeight); + if (delta > 0) { + scrollView.contentY += delta; + } + } + } + + MouseArea { + // Defocuses the current control so that the HMD keyboard gets hidden. + id: mouseArea + anchors { + top: parent.top + left: parent.left + right: parent.right + bottom: keyboard.top + } + propagateComposedEvents: true + acceptedButtons: Qt.AllButtons + enabled: window.visible + onPressed: { + parent.forceActiveFocus(); + mouse.accepted = false; + } + } } From 0333122b2370d2e65a739b4387884d014a37e75e Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 4 Mar 2017 15:27:31 +1300 Subject: [PATCH 067/247] Make Save and Cancel buttons close preferences dialog --- .../tabletWindows/TabletPreferencesDialog.qml | 53 ++++++++++++------- interface/src/ui/overlays/Web3DOverlay.cpp | 1 + 2 files changed, 34 insertions(+), 20 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index fa6d2bb923..95ce7f5a1d 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -31,12 +31,18 @@ Item { property bool keyboardEnabled: false property bool keyboardRaised: false property bool punctuationMode: false + + property var tablet; function saveAll() { + dialog.forceActiveFocus(); // Accept any text box edits in progress. + for (var i = 0; i < sections.length; ++i) { var section = sections[i]; section.saveAll(); } + + closeDialog(); } function restoreAll() { @@ -44,6 +50,12 @@ Item { var section = sections[i]; section.restoreAll(); } + + closeDialog(); + } + + function closeDialog() { + Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } Rectangle { @@ -164,6 +176,24 @@ Item { } } + MouseArea { + // Defocuses the current control so that the HMD keyboard gets hidden. + // Created under the footer so that the non-button part of the footer can defocus a control. + id: mouseArea + anchors { + top: parent.top + left: parent.left + right: parent.right + bottom: keyboard.top + } + propagateComposedEvents: true + acceptedButtons: Qt.AllButtons + onPressed: { + parent.forceActiveFocus(); + mouse.accepted = false; + } + } + Rectangle { id: footer height: 40 @@ -196,13 +226,13 @@ Item { HifiControls.Button { text: "Save changes" color: hifi.buttons.blue - onClicked: root.saveAll() + onClicked: dialog.saveAll() } HifiControls.Button { text: "Cancel" color: hifi.buttons.white - onClicked: root.restoreAll() + onClicked: dialog.restoreAll() } } } @@ -219,6 +249,7 @@ Item { } Component.onCompleted: { + tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); keyboardEnabled = HMD.active; } @@ -230,22 +261,4 @@ Item { } } } - - MouseArea { - // Defocuses the current control so that the HMD keyboard gets hidden. - id: mouseArea - anchors { - top: parent.top - left: parent.left - right: parent.right - bottom: keyboard.top - } - propagateComposedEvents: true - acceptedButtons: Qt.AllButtons - enabled: window.visible - onPressed: { - parent.forceActiveFocus(); - mouse.accepted = false; - } - } } diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 8d72f877b6..f86844430a 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -173,6 +173,7 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("HMD", DependencyManager::get<HMDScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("fileDialogHelper", new FileDialogHelper()); _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); + _webSurface->getRootContext()->setContextProperty("Tablet", DependencyManager::get<TabletScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); From 6385bb2b8003031c1dbb568d22867527cfed6652 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 4 Mar 2017 15:57:58 +1300 Subject: [PATCH 068/247] Open general settings dialog in tablet from tablet menu --- interface/src/Menu.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 5b0c67e350..92da1b0d83 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -294,7 +294,8 @@ Menu::Menu() { // Settings > General... action = addActionToQMenuAndActionHash(settingsMenu, MenuOption::Preferences, Qt::CTRL | Qt::Key_Comma, nullptr, nullptr, QAction::PreferencesRole); connect(action, &QAction::triggered, [] { - DependencyManager::get<OffscreenUi>()->toggle(QString("hifi/dialogs/GeneralPreferencesDialog.qml"), "GeneralPreferencesDialog"); + qApp->showDialog(QString("hifi/dialogs/GeneralPreferencesDialog.qml"), + QString("../../hifi/tablet/TabletGeneralPreferences.qml"), "GeneralPreferencesDialog"); }); // Settings > Avatar... From 4886f1cbfcbebeeff7aefe42344707b6d62d29c8 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Mon, 6 Mar 2017 12:38:19 -0800 Subject: [PATCH 069/247] don't run stylus-on-overlay code unless the overlay is a web3d overlay --- interface/src/ui/overlays/Overlay.cpp | 3 +++ scripts/system/controllers/handControllerGrab.js | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/interface/src/ui/overlays/Overlay.cpp b/interface/src/ui/overlays/Overlay.cpp index 0ad2c94241..764422019e 100644 --- a/interface/src/ui/overlays/Overlay.cpp +++ b/interface/src/ui/overlays/Overlay.cpp @@ -100,6 +100,9 @@ void Overlay::setProperties(const QVariantMap& properties) { } QVariant Overlay::getProperty(const QString& property) { + if (property == "type") { + return QVariant(getType()); + } if (property == "color") { return xColorToVariant(_color); } diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 86461c0c0a..4dfa0b8f79 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -2031,6 +2031,9 @@ function MyController(hand) { var pointerEvent; if (rayPickInfo.overlayID) { var overlay = rayPickInfo.overlayID; + if (Overlays.getProperty(overlay, "type") != "web3d") { + return false; + } if (Overlays.keyboardFocusOverlay != overlay) { Entities.keyboardFocusEntity = null; Overlays.keyboardFocusOverlay = overlay; @@ -3388,7 +3391,7 @@ function MyController(hand) { if (this.state == STATE_OVERLAY_STYLUS_TOUCHING && intersectInfo.distance > max) { this.grabbedThingID = null; - this.setState(STATE_OFF, "pulled away from overlay"); + this.setState(STATE_OFF, "pulled away from overlay -- " + intersectInfo.distance + " max = " + max); return; } From 6d9e7de6dcb8d1555332ca2f5314a55827f5c75a Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Mon, 6 Mar 2017 21:45:55 +0100 Subject: [PATCH 070/247] Implemented AssetBrowser in Tablet view --- CMakeLists.txt | 11 + interface/CMakeLists.txt | 11 + .../qml/dialogs/TabletCustomQueryDialog.qml | 339 ++++++++++ .../qml/hifi/dialogs/TabletAssetServer.qml | 614 ++++++++++++++++++ .../resources/qml/hifi/tablet/TabletRoot.qml | 3 + .../qml/styles-uit/HifiConstants.qml | 1 + interface/src/Application.cpp | 19 +- interface/src/main.cpp | 2 + .../AssetMappingsScriptingInterface.h | 8 +- interface/src/ui/overlays/Web3DOverlay.cpp | 7 + 10 files changed, 1011 insertions(+), 4 deletions(-) create mode 100644 interface/resources/qml/dialogs/TabletCustomQueryDialog.qml create mode 100644 interface/resources/qml/hifi/dialogs/TabletAssetServer.qml diff --git a/CMakeLists.txt b/CMakeLists.txt index 1ab7e55343..d7ea297637 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -201,6 +201,17 @@ set(HF_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake") set(MACRO_DIR "${HF_CMAKE_DIR}/macros") set(EXTERNAL_PROJECT_DIR "${HF_CMAKE_DIR}/externals") +file(GLOB_RECURSE JS_SRC scripts/*.js) +add_custom_target(js SOURCES ${JS_SRC}) + +if (UNIX) + install( + DIRECTORY "${CMAKE_SOURCE_DIR}/scripts" + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/interface + COMPONENT ${CLIENT_COMPONENT} + ) +endif() + file(GLOB HIFI_CUSTOM_MACROS "cmake/macros/*.cmake") foreach(CUSTOM_MACRO ${HIFI_CUSTOM_MACROS}) include(${CUSTOM_MACRO}) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 868a2cf933..0ae7539448 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -54,6 +54,17 @@ find_package( WebChannel WebSockets ) +file(GLOB_RECURSE QML_SRC resources/qml/*.qml resources/qml/*.js) +add_custom_target(qml SOURCES ${QML_SRC}) + +if (UNIX) + install( + DIRECTORY "${CMAKE_SOURCE_DIR}/interface/resources/qml" + DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/resources + COMPONENT ${CLIENT_COMPONENT} + ) +endif() + # grab the ui files in resources/ui file (GLOB_RECURSE QT_UI_FILES ui/*.ui) source_group("UI Files" FILES ${QT_UI_FILES}) diff --git a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml new file mode 100644 index 0000000000..6e5bc50d32 --- /dev/null +++ b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml @@ -0,0 +1,339 @@ +// +// TabletCustomQueryDialog.qml +// +// Created by Vlad Stelmahovsky on 3/27/17 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Dialogs 1.2 as OriginalDialogs + +import "../controls-uit" as ControlsUIT +import "../styles-uit" +import "../windows" + +TabletModalWindow { + id: root; + HifiConstants { id: hifi; } + + y: hifi.dimensions.tabletMenuHeader + + title: "" + visible: true; + property bool keyboardOverride: true + + signal selected(var result); + signal canceled(); + + property int icon: hifi.icons.none; + property string iconText: ""; + property int iconSize: 35; + onIconChanged: updateIcon(); + + property var textInput; + property var comboBox; + property var checkBox; + onTextInputChanged: { + if (textInput && textInput.text !== undefined) { + textField.text = textInput.text; + } + } + onComboBoxChanged: { + if (comboBox && comboBox.index !== undefined) { + comboBoxField.currentIndex = comboBox.index; + } + } + onCheckBoxChanged: { + if (checkBox && checkBox.checked !== undefined) { + checkBoxField.checked = checkBox.checked; + } + } + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + onKeyboardRaisedChanged: d.resize(); + + property var warning: ""; + property var result; + + property var implicitCheckState: null; + + property int titleWidth: 0; + onTitleWidthChanged: d.resize(); + + MouseArea { + width: parent.width + height: parent.height + } + + function updateIcon() { + if (!root) { + return; + } + iconText = hifi.glyphForIcon(root.icon); + } + + function updateCheckbox() { + if (checkBox.disableForItems) { + var currentItemInDisableList = false; + for (var i in checkBox.disableForItems) { + if (comboBoxField.currentIndex === checkBox.disableForItems[i]) { + currentItemInDisableList = true; + break; + } + } + + if (currentItemInDisableList) { + checkBoxField.enabled = false; + if (checkBox.checkStateOnDisable !== null && checkBox.checkStateOnDisable !== undefined) { + root.implicitCheckState = checkBoxField.checked; + checkBoxField.checked = checkBox.checkStateOnDisable; + } + root.warning = checkBox.warningOnDisable; + } else { + checkBoxField.enabled = true; + if (root.implicitCheckState !== null) { + checkBoxField.checked = root.implicitCheckState; + root.implicitCheckState = null; + } + root.warning = ""; + } + } + } + + TabletModalFrame { + id: modalWindowItem + width: parent.width - 12 + height: 240 + anchors { + verticalCenter: parent.verticalCenter + horizontalCenter: parent.horizontalCenter + } + + QtObject { + id: d; + readonly property int minWidth: 470 + readonly property int maxWidth: 470 + readonly property int minHeight: 240 + readonly property int maxHeight: 720 + + function resize() { + var targetWidth = Math.max(titleWidth, 470); + var targetHeight = (textField.visible ? textField.controlHeight + hifi.dimensions.contentSpacing.y : 0) + + (extraInputs.visible ? extraInputs.height + hifi.dimensions.contentSpacing.y : 0) + + (buttons.height + 3 * hifi.dimensions.contentSpacing.y) + + ((keyboardEnabled && keyboardRaised) ? (keyboard.raisedHeight + hifi.dimensions.contentSpacing.y) : 0); + + root.width = (targetWidth < d.minWidth) ? d.minWidth : ((targetWidth > d.maxWdith) ? d.maxWidth : targetWidth); + root.height = (targetHeight < d.minHeight) ? d.minHeight : ((targetHeight > d.maxHeight) ? + d.maxHeight : targetHeight); + if (checkBoxField.visible && comboBoxField.visible) { + checkBoxField.width = extraInputs.width / 2; + comboBoxField.width = extraInputs.width / 2; + } else if (!checkBoxField.visible && comboBoxField.visible) { + comboBoxField.width = extraInputs.width; + } + } + } +// Item { +// anchors { +// // top: parent.top; +// // bottom: extraInputs.visible ? extraInputs.top : buttons.top; +// left: parent.left; +// right: parent.right; +// topMargin: 20 +// } + + // FIXME make a text field type that can be bound to a history for autocompletion + ControlsUIT.TextField { + id: textField; + label: root.textInput.label; + focus: root.textInput ? true : false; + visible: root.textInput ? true : false; + anchors { + top: parent.top + left: parent.left; + right: parent.right; + leftMargin: 5; rightMargin: 5; + topMargin: textField.controlHeight - textField.height + 5 + } + } + + ControlsUIT.Keyboard { + id: keyboard + raised: keyboardEnabled && keyboardRaised + numeric: punctuationMode + anchors { + left: parent.left + right: parent.right + leftMargin: 5; rightMargin: 5; + top: textField.bottom + topMargin: raised ? hifi.dimensions.contentSpacing.y : 0 + } + } + // } + + Row { + id: extraInputs; + visible: Boolean(root.checkBox || root.comboBox); + anchors { + left: parent.left; + right: parent.right; + leftMargin: 5; rightMargin: 5; + top: keyboard.bottom; + topMargin: hifi.dimensions.contentSpacing.y + 20; + } + height: comboBoxField.controlHeight; + onHeightChanged: d.resize(); + onWidthChanged: d.resize(); + + ControlsUIT.CheckBox { + id: checkBoxField; + text: root.checkBox.label; + focus: Boolean(root.checkBox); + visible: Boolean(root.checkBox); + // anchors { + // left: parent.left; + // bottom: parent.bottom; + // leftMargin: 6; // Magic number to align with warning icon + // bottomMargin: 6; + // } + } + + ControlsUIT.TabletComboBox { + id: comboBoxField; + label: root.comboBox.label; + focus: Boolean(root.comboBox); + visible: Boolean(root.comboBox); + // anchors { + // right: parent.right; + // bottom: parent.bottom; + // } + model: root.comboBox ? root.comboBox.items : []; + onAccepted: { + updateCheckbox(); + focus = true; + } + } + } + + Row { + id: buttons; + focus: true; + spacing: hifi.dimensions.contentSpacing.x; + layoutDirection: Qt.RightToLeft; + onHeightChanged: d.resize(); + onWidthChanged: { + d.resize(); + resizeWarningText(); + } + + anchors { + bottom: parent.bottom; + left: parent.left; + right: parent.right; + bottomMargin: hifi.dimensions.contentSpacing.y; + leftMargin: 5; rightMargin: 5; + } + + function resizeWarningText() { + var rowWidth = buttons.width; + var buttonsWidth = acceptButton.width + cancelButton.width + hifi.dimensions.contentSpacing.x * 2; + var warningIconWidth = warningIcon.width + hifi.dimensions.contentSpacing.x; + warningText.width = rowWidth - buttonsWidth - warningIconWidth; + } + + ControlsUIT.Button { + id: cancelButton; + action: cancelAction; + } + + ControlsUIT.Button { + id: acceptButton; + action: acceptAction; + } + + Text { + id: warningText; + visible: Boolean(root.warning); + text: root.warning; + wrapMode: Text.WordWrap; + font.italic: true; + maximumLineCount: 2; + } + + HiFiGlyphs { + id: warningIcon; + visible: Boolean(root.warning); + text: hifi.glyphs.alert; + size: hifi.dimensions.controlLineHeight; + } + } +// }//column + Action { + id: cancelAction; + text: qsTr("Cancel"); + shortcut: Qt.Key_Escape; + onTriggered: { + root.result = null; + root.canceled(); + root.destroy(); + } + } + + Action { + id: acceptAction; + text: qsTr("Add"); + shortcut: Qt.Key_Return; + onTriggered: { + var result = {}; + if (textInput) { + result.textInput = textField.text; + } + if (comboBox) { + result.comboBox = comboBoxField.currentIndex; + result.comboBoxText = comboBoxField.currentText; + } + if (checkBox) { + result.checkBox = checkBoxField.enabled ? checkBoxField.checked : null; + } + root.result = JSON.stringify(result); + root.selected(root.result); + root.destroy(); + } + } + } + + Keys.onPressed: { + if (!visible) { + return; + } + + switch (event.key) { + case Qt.Key_Escape: + case Qt.Key_Back: + cancelAction.trigger(); + event.accepted = true; + break; + + case Qt.Key_Return: + case Qt.Key_Enter: + acceptAction.trigger(); + event.accepted = true; + break; + } + } + + Component.onCompleted: { + keyboardEnabled = HMD.active; + updateIcon(); + updateCheckbox(); + d.resize(); + textField.forceActiveFocus(); + } +} diff --git a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml new file mode 100644 index 0000000000..93e18c7aba --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml @@ -0,0 +1,614 @@ +// +// TabletAssetServer.qml +// +// Created by Vlad Stelmahovsky on 3/3/17 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtQuick.Dialogs 1.2 as OriginalDialogs +import Qt.labs.settings 1.0 + +import "../../styles-uit" +import "../../controls-uit" as HifiControls +import "../../windows" + +Rectangle { + id: root + objectName: "AssetServer" + + property var eventBridge; + signal sendToScript(var message); + property bool isHMD: false + + color: hifi.colors.baseGray + + property int colorScheme: hifi.colorSchemes.dark + + HifiConstants { id: hifi } + + property var scripts: ScriptDiscoveryService; + property var assetProxyModel: Assets.proxyModel; + property var assetMappingsModel: Assets.mappingModel; + property var currentDirectory; + + Settings { + category: "Overlay.AssetServer" + property alias directory: root.currentDirectory + } + + Component.onCompleted: { + isHMD = HMD.active; + ApplicationInterface.uploadRequest.connect(uploadClicked); + assetMappingsModel.errorGettingMappings.connect(handleGetMappingsError); + reload(); + } + + function doDeleteFile(path) { + console.log("Deleting " + path); + + Assets.deleteMappings(path, function(err) { + if (err) { + console.log("Asset browser - error deleting path: ", path, err); + + box = errorMessageBox("There was an error deleting:\n" + path + "\n" + err); + box.selected.connect(reload); + } else { + console.log("Asset browser - finished deleting path: ", path); + reload(); + } + }); + + } + + function doRenameFile(oldPath, newPath) { + + if (newPath[0] !== "/") { + newPath = "/" + newPath; + } + + if (oldPath[oldPath.length - 1] === '/' && newPath[newPath.length - 1] != '/') { + // this is a folder rename but the user neglected to add a trailing slash when providing a new path + newPath = newPath + "/"; + } + + if (Assets.isKnownFolder(newPath)) { + box = errorMessageBox("Cannot overwrite existing directory."); + box.selected.connect(reload); + } + + console.log("Asset browser - renaming " + oldPath + " to " + newPath); + + Assets.renameMapping(oldPath, newPath, function(err) { + if (err) { + console.log("Asset browser - error renaming: ", oldPath, "=>", newPath, " - error ", err); + box = errorMessageBox("There was an error renaming:\n" + oldPath + " to " + newPath + "\n" + err); + box.selected.connect(reload); + } else { + console.log("Asset browser - finished rename: ", oldPath, "=>", newPath); + } + + reload(); + }); + } + + function fileExists(path) { + return Assets.isKnownMapping(path); + } + + function askForOverwrite(path, callback) { + var object = tabletRoot.messageBox({ + icon: hifi.icons.question, + buttons: OriginalDialogs.StandardButton.Yes | OriginalDialogs.StandardButton.No, + defaultButton: OriginalDialogs.StandardButton.No, + title: "Overwrite File", + text: path + "\n" + "This file already exists. Do you want to overwrite it?" + }); + object.selected.connect(function(button) { + if (button === OriginalDialogs.StandardButton.Yes) { + callback(); + } + }); + } + + function canAddToWorld(path) { + var supportedExtensions = [/\.fbx\b/i, /\.obj\b/i]; + + return supportedExtensions.reduce(function(total, current) { + return total | new RegExp(current).test(path); + }, false); + } + + function clear() { + Assets.mappingModel.clear(); + } + + function reload() { + Assets.mappingModel.refresh(); + treeView.selection.clear(); + } + + function handleGetMappingsError(errorString) { + errorMessageBox( + "There was a problem retreiving the list of assets from your Asset Server.\n" + + errorString + ); + } + + function addToWorld() { + var defaultURL = assetProxyModel.data(treeView.selection.currentIndex, 0x103); + + if (!defaultURL || !canAddToWorld(defaultURL)) { + return; + } + + var SHAPE_TYPE_NONE = 0; + var SHAPE_TYPE_SIMPLE_HULL = 1; + var SHAPE_TYPE_SIMPLE_COMPOUND = 2; + var SHAPE_TYPE_STATIC_MESH = 3; + + var SHAPE_TYPES = []; + SHAPE_TYPES[SHAPE_TYPE_NONE] = "No Collision"; + SHAPE_TYPES[SHAPE_TYPE_SIMPLE_HULL] = "Basic - Whole model"; + SHAPE_TYPES[SHAPE_TYPE_SIMPLE_COMPOUND] = "Good - Sub-meshes"; + SHAPE_TYPES[SHAPE_TYPE_STATIC_MESH] = "Exact - All polygons"; + + var SHAPE_TYPE_DEFAULT = SHAPE_TYPE_STATIC_MESH; + var DYNAMIC_DEFAULT = false; + var prompt = tabletRoot.customInputDialog({ + textInput: { + label: "Model URL", + text: defaultURL + }, + comboBox: { + label: "Automatic Collisions", + index: SHAPE_TYPE_DEFAULT, + items: SHAPE_TYPES + }, + checkBox: { + label: "Dynamic", + checked: DYNAMIC_DEFAULT, + disableForItems: [ + SHAPE_TYPE_STATIC_MESH + ], + checkStateOnDisable: false, + warningOnDisable: "Models with automatic collisions set to 'Exact' cannot be dynamic" + } + }); + + prompt.selected.connect(function (jsonResult) { + if (jsonResult) { + var result = JSON.parse(jsonResult); + var url = result.textInput.trim(); + var shapeType; + switch (result.comboBox) { + case SHAPE_TYPE_SIMPLE_HULL: + shapeType = "simple-hull"; + break; + case SHAPE_TYPE_SIMPLE_COMPOUND: + shapeType = "simple-compound"; + break; + case SHAPE_TYPE_STATIC_MESH: + shapeType = "static-mesh"; + break; + default: + shapeType = "none"; + } + + var dynamic = result.checkBox !== null ? result.checkBox : DYNAMIC_DEFAULT; + if (shapeType === "static-mesh" && dynamic) { + // The prompt should prevent this case + print("Error: model cannot be both static mesh and dynamic. This should never happen."); + } else if (url) { + var name = assetProxyModel.data(treeView.selection.currentIndex); + var addPosition = Vec3.sum(MyAvatar.position, Vec3.multiply(2, Quat.getFront(MyAvatar.orientation))); + var gravity; + if (dynamic) { + // Create a vector <0, -10, 0>. { x: 0, y: -10, z: 0 } won't work because Qt is dumb and this is a + // different scripting engine from QTScript. + gravity = Vec3.multiply(Vec3.fromPolar(Math.PI / 2, 0), 10); + } else { + gravity = Vec3.multiply(Vec3.fromPolar(Math.PI / 2, 0), 0); + } + + print("Asset browser - adding asset " + url + " (" + name + ") to world."); + + // Entities.addEntity doesn't work from QML, so we use this. + Entities.addModelEntity(name, url, shapeType, dynamic, addPosition, gravity); + } + } + }); + } + + function copyURLToClipboard(index) { + if (!index) { + index = treeView.selection.currentIndex; + } + + var url = assetProxyModel.data(treeView.selection.currentIndex, 0x103); + if (!url) { + return; + } + Window.copyToClipboard(url); + } + + function renameEl(index, data) { + if (!index) { + return false; + } + + var path = assetProxyModel.data(index, 0x100); + if (!path) { + return false; + } + + var destinationPath = path.split('/'); + destinationPath[destinationPath.length - (path[path.length - 1] === '/' ? 2 : 1)] = data; + destinationPath = destinationPath.join('/').trim(); + + if (path === destinationPath) { + return; + } + if (!fileExists(destinationPath)) { + doRenameFile(path, destinationPath); + } + } + function renameFile(index) { + if (!index) { + index = treeView.selection.currentIndex; + } + + var path = assetProxyModel.data(index, 0x100); + if (!path) { + return; + } + + var object = tabletRoot.inputDialog({ + label: "Enter new path:", + current: path, + placeholderText: "Enter path here" + }); + object.selected.connect(function(destinationPath) { + destinationPath = destinationPath.trim(); + + if (path === destinationPath) { + return; + } + if (fileExists(destinationPath)) { + askForOverwrite(destinationPath, function() { + doRenameFile(path, destinationPath); + }); + } else { + doRenameFile(path, destinationPath); + } + }); + } + function deleteFile(index) { + if (!index) { + index = treeView.selection.currentIndex; + } + var path = assetProxyModel.data(index, 0x100); + if (!path) { + return; + } + + var isFolder = assetProxyModel.data(treeView.selection.currentIndex, 0x101); + var typeString = isFolder ? 'folder' : 'file'; + + var object = tabletRoot.messageBox({ + icon: hifi.icons.question, + buttons: OriginalDialogs.StandardButton.Yes + OriginalDialogs.StandardButton.No, + defaultButton: OriginalDialogs.StandardButton.Yes, + title: "Delete", + text: "You are about to delete the following " + typeString + ":\n" + path + "\nDo you want to continue?" + }); + object.selected.connect(function(button) { + if (button === OriginalDialogs.StandardButton.Yes) { + doDeleteFile(path); + } + }); + } + + Timer { + id: doUploadTimer + property var url + property bool isConnected: false + interval: 5 + repeat: false + running: false + } + + property bool uploadOpen: false; + Timer { + id: timer + } + function uploadClicked(fileUrl) { + if (uploadOpen) { + return; + } + uploadOpen = true; + + function doUpload(url, dropping) { + var fileUrl = fileDialogHelper.urlToPath(url); + + var path = assetProxyModel.data(treeView.selection.currentIndex, 0x100); + var directory = path ? path.slice(0, path.lastIndexOf('/') + 1) : "/"; + var filename = fileUrl.slice(fileUrl.lastIndexOf('/') + 1); + + Assets.uploadFile(fileUrl, directory + filename, + function() { + // Upload started + uploadSpinner.visible = true; + uploadButton.enabled = false; + uploadProgressLabel.text = "In progress..."; + }, + function(err, path) { + print(err, path); + if (err === "") { + uploadProgressLabel.text = "Upload Complete"; + timer.interval = 1000; + timer.repeat = false; + timer.triggered.connect(function() { + uploadSpinner.visible = false; + uploadButton.enabled = true; + uploadOpen = false; + }); + timer.start(); + console.log("Asset Browser - finished uploading: ", fileUrl); + reload(); + } else { + uploadSpinner.visible = false; + uploadButton.enabled = true; + uploadOpen = false; + + if (err !== -1) { + console.log("Asset Browser - error uploading: ", fileUrl, " - error ", err); + var box = errorMessageBox("There was an error uploading:\n" + fileUrl + "\n" + err); + box.selected.connect(reload); + } + } + }, dropping); + } + + function initiateUpload(url) { + doUpload(doUploadTimer.url, false); + } + + if (fileUrl) { + doUpload(fileUrl, true); + } else { + var browser = tabletRoot.fileDialog({ + selectDirectory: false, + dir: currentDirectory + }); + + browser.canceled.connect(function() { + uploadOpen = false; + }); + + browser.selectedFile.connect(function(url) { + currentDirectory = browser.dir; + + // Initiate upload from a timer so that file browser dialog can close beforehand. + doUploadTimer.url = url; + if (!doUploadTimer.isConnected) { + doUploadTimer.triggered.connect(function() { initiateUpload(); }); + doUploadTimer.isConnected = true; + } + doUploadTimer.start(); + }); + } + } + + function errorMessageBox(message) { + return tabletRoot.messageBox({ + icon: hifi.icons.warning, + defaultButton: OriginalDialogs.StandardButton.Ok, + title: "Error", + text: message + }); + } + + Column { + width: parent.width + y: hifi.dimensions.tabletMenuHeader //-bgNavBar + spacing: 10 + + HifiControls.TabletContentSection { + id: assetDirectory + name: "Asset Directory" + isFirst: true + + HifiControls.VerticalSpacer {} + + Row { + id: buttonRow + width: parent.width + height: 30 + spacing: hifi.dimensions.contentSpacing.x + + HifiControls.GlyphButton { + glyph: hifi.glyphs.reload + color: hifi.buttons.black + colorScheme: root.colorScheme + width: hifi.dimensions.controlLineHeight + + onClicked: root.reload() + } + + HifiControls.Button { + text: "Add To World" + color: hifi.buttons.black + colorScheme: root.colorScheme + width: 120 + + enabled: canAddToWorld(assetProxyModel.data(treeView.selection.currentIndex, 0x100)) + + onClicked: root.addToWorld() + } + + HifiControls.Button { + text: "Rename" + color: hifi.buttons.black + colorScheme: root.colorScheme + width: 80 + + onClicked: root.renameFile() + enabled: treeView.selection.hasSelection + } + + HifiControls.Button { + id: deleteButton + + text: "Delete" + color: hifi.buttons.red + colorScheme: root.colorScheme + width: 80 + + onClicked: root.deleteFile() + enabled: treeView.selection.hasSelection + } + } + + Menu { + id: contextMenu + title: "Edit" + property var url: "" + property var currentIndex: null + + MenuItem { + text: "Copy URL" + onTriggered: { + copyURLToClipboard(contextMenu.currentIndex); + } + } + + MenuItem { + text: "Rename" + onTriggered: { + renameFile(contextMenu.currentIndex); + } + } + + MenuItem { + text: "Delete" + onTriggered: { + deleteFile(contextMenu.currentIndex); + } + } + } + + } + HifiControls.Tree { + id: treeView + height: 430 + anchors.leftMargin: hifi.dimensions.contentMargin.x + 2 // Extra for border + anchors.rightMargin: hifi.dimensions.contentMargin.x + 2 // Extra for border + anchors.left: parent.left + anchors.right: parent.right + + treeModel: assetProxyModel + canEdit: true + colorScheme: root.colorScheme + + modifyEl: renameEl + + MouseArea { + propagateComposedEvents: true + anchors.fill: parent + acceptedButtons: Qt.RightButton + onClicked: { + if (!HMD.active) { // Popup only displays properly on desktop + var index = treeView.indexAt(mouse.x, mouse.y); + treeView.selection.setCurrentIndex(index, 0x0002); + contextMenu.currentIndex = index; + contextMenu.popup(); + } + } + } + } + + + HifiControls.TabletContentSection { + id: uploadSection + name: "Upload A File" + spacing: hifi.dimensions.contentSpacing.y + //anchors.bottom: parent.bottom + height: 65 + anchors.left: parent.left + anchors.right: parent.right + + Item { + height: parent.height + width: parent.width + HifiControls.Button { + id: uploadButton + anchors.right: parent.right + + text: "Choose File" + color: hifi.buttons.blue + colorScheme: root.colorScheme + height: 30 + width: 155 + + onClicked: uploadClickedTimer.running = true + + // For some reason trigginer an API that enters + // an internal event loop directly from the button clicked + // trigger below causes the appliction to behave oddly. + // Most likely because the button onClicked handling is never + // completed until the function returns. + // FIXME find a better way of handling the input dialogs that + // doesn't trigger this. + Timer { + id: uploadClickedTimer + interval: 5 + repeat: false + running: false + onTriggered: uploadClicked(); + } + } + + Item { + id: uploadSpinner + visible: false + anchors.top: parent.top + anchors.left: parent.left + width: 40 + height: 32 + + Image { + id: image + width: 24 + height: 24 + source: "../../../images/Loading-Outer-Ring.png" + RotationAnimation on rotation { + loops: Animation.Infinite + from: 0 + to: 360 + duration: 2000 + } + } + Image { + width: 24 + height: 24 + source: "../../../images/Loading-Inner-H.png" + } + HifiControls.Label { + id: uploadProgressLabel + anchors.left: image.right + anchors.leftMargin: 10 + anchors.verticalCenter: image.verticalCenter + text: "In progress..." + colorScheme: root.colorScheme + } + } + } + } + } +} + diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 8eaddfb601..99c9351993 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -2,6 +2,7 @@ import QtQuick 2.0 import Hifi 1.0 import QtQuick.Controls 1.4 import "../../dialogs" + Item { id: tabletRoot objectName: "tabletRoot" @@ -29,7 +30,9 @@ Item { return openMessage; } + Component { id: customInputDialogBuilder; TabletCustomQueryDialog { } } function customInputDialog(properties) { + return customInputDialogBuilder.createObject(tabletRoot, properties); } Component { id: fileDialogBuilder; TabletFileDialog { } } diff --git a/interface/resources/qml/styles-uit/HifiConstants.qml b/interface/resources/qml/styles-uit/HifiConstants.qml index 031e80283e..38534d4243 100644 --- a/interface/resources/qml/styles-uit/HifiConstants.qml +++ b/interface/resources/qml/styles-uit/HifiConstants.qml @@ -159,6 +159,7 @@ Item { readonly property vector2d menuPadding: Qt.vector2d(14, 102) readonly property real scrollbarBackgroundWidth: 18 readonly property real scrollbarHandleWidth: scrollbarBackgroundWidth - 2 + readonly property real tabletMenuHeader: 90 } Item { diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index be385a0cac..af5a93a905 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -499,6 +499,7 @@ bool setupEssentials(int& argc, char** argv) { DependencyManager::set<TabletScriptingInterface>(); DependencyManager::set<ToolbarScriptingInterface>(); DependencyManager::set<UserActivityLoggerScriptingInterface>(); + DependencyManager::set<AssetMappingsScriptingInterface>(); #if defined(Q_OS_MAC) || defined(Q_OS_WIN) DependencyManager::set<SpeechRecognizer>(); @@ -1972,7 +1973,7 @@ void Application::initializeUi() { rootContext->setContextProperty("Quat", new Quat()); rootContext->setContextProperty("Vec3", new Vec3()); rootContext->setContextProperty("Uuid", new ScriptUUID()); - rootContext->setContextProperty("Assets", new AssetMappingsScriptingInterface()); + rootContext->setContextProperty("Assets", DependencyManager::get<AssetMappingsScriptingInterface>().data()); rootContext->setContextProperty("AvatarList", DependencyManager::get<AvatarManager>().data()); rootContext->setContextProperty("Users", DependencyManager::get<UsersScriptingInterface>().data()); @@ -5838,7 +5839,21 @@ void Application::showAssetServerWidget(QString filePath) { emit uploadRequest(filePath); } }; - DependencyManager::get<OffscreenUi>()->show(url, "AssetServer", startUpload); + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + + if (tablet->getToolbarMode()) { + DependencyManager::get<OffscreenUi>()->show(url, "AssetServer", startUpload); + } else { + QQuickItem* tabletRoot = tablet->getTabletRoot(); + if (!tabletRoot && !isHMDMode()) { + DependencyManager::get<OffscreenUi>()->show(url, "AssetServer", startUpload); + } else { + static const QUrl url("../../hifi/dialogs/TabletAssetServer.qml"); + tablet->pushOntoStack(url); + } + } + startUpload(nullptr, nullptr); } diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 39b37e3d19..b64541a9f4 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -29,6 +29,7 @@ #include "UserActivityLogger.h" #include "MainWindow.h" #include <QtCore/QProcess> +#include <QNetworkProxyFactory> #ifdef HAS_BUGSPLAT #include <BugSplat.h> @@ -194,6 +195,7 @@ int main(int argc, const char* argv[]) { { Application app(argc, const_cast<char**>(argv), startupTime, runServer, serverContentPathOptionValue); + QNetworkProxyFactory::setUseSystemConfiguration(true); // If we failed the OpenGLVersion check, log it. if (override) { auto accountManager = DependencyManager::get<AccountManager>(); diff --git a/interface/src/scripting/AssetMappingsScriptingInterface.h b/interface/src/scripting/AssetMappingsScriptingInterface.h index 459f01b512..b7fcea2491 100644 --- a/interface/src/scripting/AssetMappingsScriptingInterface.h +++ b/interface/src/scripting/AssetMappingsScriptingInterface.h @@ -20,6 +20,8 @@ #include <AssetClient.h> #include <QSortFilterProxyModel> +#include "DependencyManager.h" + class AssetMappingModel : public QStandardItemModel { Q_OBJECT @@ -39,10 +41,12 @@ private: QHash<QString, QStandardItem*> _pathToItemMap; }; -Q_DECLARE_METATYPE(AssetMappingModel*); +Q_DECLARE_METATYPE(AssetMappingModel*) -class AssetMappingsScriptingInterface : public QObject { +class AssetMappingsScriptingInterface : public QObject, public Dependency { Q_OBJECT + SINGLETON_DEPENDENCY + Q_PROPERTY(AssetMappingModel* mappingModel READ getAssetMappingModel CONSTANT) Q_PROPERTY(QAbstractProxyModel* proxyModel READ getProxyModel CONSTANT) public: diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index b817960f0d..996615d234 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -37,9 +37,11 @@ #include <AddressManager.h> #include "scripting/AccountScriptingInterface.h" #include "scripting/HMDScriptingInterface.h" +#include "scripting/AssetMappingsScriptingInterface.h" #include <Preferences.h> #include <ScriptEngines.h> #include "FileDialogHelper.h" +#include "avatar/AvatarManager.h" static const float DPI = 30.47f; @@ -163,6 +165,10 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("HMD", DependencyManager::get<HMDScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("UserActivityLogger", DependencyManager::get<UserActivityLoggerScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("Preferences", DependencyManager::get<Preferences>().data()); + _webSurface->getRootContext()->setContextProperty("Vec3", new Vec3()); + _webSurface->getRootContext()->setContextProperty("Quat", new Quat()); + _webSurface->getRootContext()->setContextProperty("MyAvatar", DependencyManager::get<AvatarManager>()->getMyAvatar().get()); + _webSurface->getRootContext()->setContextProperty("Entities", DependencyManager::get<EntityScriptingInterface>().data()); if (_webSurface->getRootItem() && _webSurface->getRootItem()->objectName() == "tabletRoot") { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); @@ -173,6 +179,7 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("HMD", DependencyManager::get<HMDScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("fileDialogHelper", new FileDialogHelper()); _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); + _webSurface->getRootContext()->setContextProperty("Assets", DependencyManager::get<AssetMappingsScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); From af4bdd5943a63689ffc4c1d046c7c7611c22b149 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 7 Mar 2017 09:57:02 +1300 Subject: [PATCH 071/247] Port Developer > Audio > Buffers to tablet --- .../hifi/tablet/TabletAudioPreferences.qml | 42 +++++++++++++++++++ interface/src/Menu.cpp | 3 +- 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml diff --git a/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml new file mode 100644 index 0000000000..efb7b5d50d --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml @@ -0,0 +1,42 @@ +// +// TabletAudioPreferences.qml +// +// Created by Davd Rowe on 7 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import "tabletWindows" +import "../../dialogs" +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtGraphicalEffects 1.0 + +StackView { + id: profileRoot + initialItem: root + objectName: "stack" + + property var eventBridge; + signal sendToScript(var message); + + function pushSource(path) { + editRoot.push(Qt.reslovedUrl(path)); + } + + function popSource() { + + } + + TabletPreferencesDialog { + id: root + property string title: "Audio Settings" + objectName: "TabletAudioPreferences" + width: parent.width + height: parent.height + showCategories: ["Audio"] + } +} diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 92da1b0d83..3dd87dc0f8 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -616,7 +616,8 @@ Menu::Menu() { action = addActionToQMenuAndActionHash(audioDebugMenu, "Buffers..."); connect(action, &QAction::triggered, [] { - DependencyManager::get<OffscreenUi>()->toggle(QString("hifi/dialogs/AudioPreferencesDialog.qml"), "AudioPreferencesDialog"); + qApp->showDialog(QString("hifi/dialogs/AudioPreferencesDialog.qml"), + QString("../../hifi/tablet/TabletAudioPreferences.qml"), "AudioPreferencesDialog"); }); addCheckableActionToQMenuAndActionHash(audioDebugMenu, MenuOption::AudioNoiseReduction, 0, true, From 0a36ebc5a0a3e3c36e069a57904dd78a8ef4f6b4 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Mon, 6 Mar 2017 22:11:46 +0100 Subject: [PATCH 072/247] Remove non relevant changes --- CMakeLists.txt | 11 ----------- interface/CMakeLists.txt | 11 ----------- interface/src/main.cpp | 2 -- 3 files changed, 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d7ea297637..1ab7e55343 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -201,17 +201,6 @@ set(HF_CMAKE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/cmake") set(MACRO_DIR "${HF_CMAKE_DIR}/macros") set(EXTERNAL_PROJECT_DIR "${HF_CMAKE_DIR}/externals") -file(GLOB_RECURSE JS_SRC scripts/*.js) -add_custom_target(js SOURCES ${JS_SRC}) - -if (UNIX) - install( - DIRECTORY "${CMAKE_SOURCE_DIR}/scripts" - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/interface - COMPONENT ${CLIENT_COMPONENT} - ) -endif() - file(GLOB HIFI_CUSTOM_MACROS "cmake/macros/*.cmake") foreach(CUSTOM_MACRO ${HIFI_CUSTOM_MACROS}) include(${CUSTOM_MACRO}) diff --git a/interface/CMakeLists.txt b/interface/CMakeLists.txt index 0ae7539448..868a2cf933 100644 --- a/interface/CMakeLists.txt +++ b/interface/CMakeLists.txt @@ -54,17 +54,6 @@ find_package( WebChannel WebSockets ) -file(GLOB_RECURSE QML_SRC resources/qml/*.qml resources/qml/*.js) -add_custom_target(qml SOURCES ${QML_SRC}) - -if (UNIX) - install( - DIRECTORY "${CMAKE_SOURCE_DIR}/interface/resources/qml" - DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/resources - COMPONENT ${CLIENT_COMPONENT} - ) -endif() - # grab the ui files in resources/ui file (GLOB_RECURSE QT_UI_FILES ui/*.ui) source_group("UI Files" FILES ${QT_UI_FILES}) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index b64541a9f4..39b37e3d19 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -29,7 +29,6 @@ #include "UserActivityLogger.h" #include "MainWindow.h" #include <QtCore/QProcess> -#include <QNetworkProxyFactory> #ifdef HAS_BUGSPLAT #include <BugSplat.h> @@ -195,7 +194,6 @@ int main(int argc, const char* argv[]) { { Application app(argc, const_cast<char**>(argv), startupTime, runServer, serverContentPathOptionValue); - QNetworkProxyFactory::setUseSystemConfiguration(true); // If we failed the OpenGLVersion check, log it. if (override) { auto accountManager = DependencyManager::get<AccountManager>(); From 5156564f044813f1251e8c6dc6e212afc0f9c465 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 7 Mar 2017 00:53:36 +0000 Subject: [PATCH 073/247] cant call gotohomescreen when tablet is closed --- libraries/script-engine/src/TabletScriptingInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 32bd7f422e..b90b971193 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -335,7 +335,7 @@ void TabletProxy::loadQMLSource(const QVariant& path) { } void TabletProxy::gotoHomeScreen() { - if (_state != State::Home) { + if (_state != State::Home || _state != State::Uninitialized) { if (!_toolbarMode && _qmlTabletRoot) { auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen()), Qt::DirectConnection); From fb1ff5be8941833ad47dcb2028db31c1820ced30 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 7 Mar 2017 17:02:29 +1300 Subject: [PATCH 074/247] Port Developer > Network > Networking to tablet --- .../tablet/TabletNetworkingPreferences.qml | 42 +++++++++++++++++++ interface/src/Menu.cpp | 4 +- 2 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml diff --git a/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml b/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml new file mode 100644 index 0000000000..9b12d3c69e --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml @@ -0,0 +1,42 @@ +// +// TabletNetworkingPreferences.qml +// +// Created by Davd Rowe on 7 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import "tabletWindows" +import "../../dialogs" +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtGraphicalEffects 1.0 + +StackView { + id: profileRoot + initialItem: root + objectName: "stack" + + property var eventBridge; + signal sendToScript(var message); + + function pushSource(path) { + editRoot.push(Qt.reslovedUrl(path)); + } + + function popSource() { + + } + + TabletPreferencesDialog { + id: root + property string title: "Networking Settings" + objectName: "NetworkingPreferences" + width: parent.width + height: parent.height + showCategories: ["Networking"] + } +} diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 3dd87dc0f8..3ceb7bcbba 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -552,8 +552,8 @@ Menu::Menu() { MenuWrapper* networkMenu = developerMenu->addMenu("Network"); action = addActionToQMenuAndActionHash(networkMenu, MenuOption::Networking); connect(action, &QAction::triggered, [] { - DependencyManager::get<OffscreenUi>()->toggle(QUrl("hifi/dialogs/NetworkingPreferencesDialog.qml"), - "NetworkingPreferencesDialog"); + qApp->showDialog(QString("hifi/dialogs/NetworkingPreferencesDialog.qml"), + QString("../../hifi/tablet/TabletNetworkingPreferences.qml"), "NetworkingPreferencesDialog"); }); addActionToQMenuAndActionHash(networkMenu, MenuOption::ReloadContent, 0, qApp, SLOT(reloadResourceCaches())); addCheckableActionToQMenuAndActionHash(networkMenu, From b0ad9a8110b8206115700e30ddd48d26959218a7 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 7 Mar 2017 10:03:38 -0800 Subject: [PATCH 075/247] Bug fix for potential crash when getting DebugDraw::instance --- interface/src/Application.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ba63f4f064..12ee2d09b3 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -608,6 +608,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } } + // make sure the debug draw singleton is initialized on the main thread. + DebugDraw::getInstance().removeMarker(""); _runningMarker.startRunningMarker(); From 1b8a624edb81e8f62e2cb257b74e588653daaab2 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 7 Mar 2017 16:07:30 -0800 Subject: [PATCH 076/247] Fix for potential crash due to DebugDraw data race. --- libraries/render-utils/src/AnimDebugDraw.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/libraries/render-utils/src/AnimDebugDraw.cpp b/libraries/render-utils/src/AnimDebugDraw.cpp index c8746d5c60..6066385847 100644 --- a/libraries/render-utils/src/AnimDebugDraw.cpp +++ b/libraries/render-utils/src/AnimDebugDraw.cpp @@ -346,7 +346,9 @@ void AnimDebugDraw::update() { numVerts += (int)markerMap.size() * VERTICES_PER_BONE; auto myAvatarMarkerMap = DebugDraw::getInstance().getMyAvatarMarkerMap(); numVerts += (int)myAvatarMarkerMap.size() * VERTICES_PER_BONE; - numVerts += (int)DebugDraw::getInstance().getRays().size() * VERTICES_PER_RAY; + auto rays = DebugDraw::getInstance().getRays(); + DebugDraw::getInstance().clearRays(); + numVerts += (int)rays.size() * VERTICES_PER_RAY; // allocate verts! std::vector<AnimDebugDrawData::Vertex> vertices; @@ -398,10 +400,9 @@ void AnimDebugDraw::update() { } // draw rays from shared DebugDraw singleton - for (auto& iter : DebugDraw::getInstance().getRays()) { + for (auto& iter : rays) { addLine(std::get<0>(iter), std::get<1>(iter), std::get<2>(iter), v); } - DebugDraw::getInstance().clearRays(); data._vertexBuffer->resize(sizeof(AnimDebugDrawData::Vertex) * numVerts); data._vertexBuffer->setSubData<AnimDebugDrawData::Vertex>(0, vertices); From c7cd0fdc3821ac932ad4e86e02c2797c5800182c Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 7 Mar 2017 18:13:42 -0800 Subject: [PATCH 077/247] Add DebugDraw to .eslintrc config file --- .eslintrc.js | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc.js b/.eslintrc.js index c708decc51..9635142d1a 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -17,6 +17,7 @@ module.exports = { "Clipboard": false, "Controller": false, "DialogsManager": false, + "DebugDraw": false, "Entities": false, "FaceTracker": false, "GlobalServices": false, From 836c701cb3113572193fcbe735d2c21ed58f7921 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 7 Mar 2017 18:19:32 -0800 Subject: [PATCH 078/247] More accurate and responsive stylus and finger touching. The algorithm used to detect when and where the stylus or finger is touching the tablet has been improved. * hovering the finger/stylus over the surface of the tablet should cause buttons to highlight. * flicking or using the stylus like a drum stick, should more accurately click buttons on the tablet. * stabbing the tablet quickly, should also more accurately trigger button presses. * moving the hand/stylus from behind the tablet should be less likely to cause press events. --- .../system/controllers/handControllerGrab.js | 861 ++++++++++-------- scripts/system/libraries/WebTablet.js | 3 +- 2 files changed, 491 insertions(+), 373 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index aa0a3d9abd..d966279e51 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -71,12 +71,6 @@ var EQUIP_SPHERE_SCALE_FACTOR = 0.65; var WEB_DISPLAY_STYLUS_DISTANCE = 0.5; var WEB_STYLUS_LENGTH = 0.2; var WEB_TOUCH_Y_OFFSET = 0.05; // how far forward (or back with a negative number) to slide stylus in hand -var WEB_TOUCH_TOO_CLOSE = 0.03; // if the stylus is pushed far though the web surface, don't consider it touching -var WEB_TOUCH_Y_TOUCH_DEADZONE_SIZE = 0.01; - -var FINGER_TOUCH_Y_OFFSET = -0.02; -var FINGER_TOUCH_MIN = -0.01 - FINGER_TOUCH_Y_OFFSET; -var FINGER_TOUCH_MAX = 0.01 - FINGER_TOUCH_Y_OFFSET; // // distant manipulation @@ -137,7 +131,6 @@ var GRAB_POINT_SPHERE_ALPHA = 0.85; // // other constants // - var RIGHT_HAND = 1; var LEFT_HAND = 0; @@ -214,10 +207,9 @@ var STATE_NEAR_GRABBING = 4; var STATE_NEAR_TRIGGER = 5; var STATE_FAR_TRIGGER = 6; var STATE_HOLD = 7; -var STATE_ENTITY_STYLUS_TOUCHING = 8; -var STATE_ENTITY_LASER_TOUCHING = 9; -var STATE_OVERLAY_STYLUS_TOUCHING = 10; -var STATE_OVERLAY_LASER_TOUCHING = 11; +var STATE_ENTITY_LASER_TOUCHING = 8; +var STATE_OVERLAY_LASER_TOUCHING = 9; +var STATE_STYLUS_TOUCHING = 10; var CONTROLLER_STATE_MACHINE = {}; @@ -261,29 +253,23 @@ CONTROLLER_STATE_MACHINE[STATE_FAR_TRIGGER] = { enterMethod: "farTriggerEnter", updateMethod: "farTrigger" }; -CONTROLLER_STATE_MACHINE[STATE_ENTITY_STYLUS_TOUCHING] = { - name: "entityStylusTouching", - enterMethod: "entityTouchingEnter", - exitMethod: "entityTouchingExit", - updateMethod: "entityTouching" -}; CONTROLLER_STATE_MACHINE[STATE_ENTITY_LASER_TOUCHING] = { name: "entityLaserTouching", - enterMethod: "entityTouchingEnter", - exitMethod: "entityTouchingExit", - updateMethod: "entityTouching" -}; -CONTROLLER_STATE_MACHINE[STATE_OVERLAY_STYLUS_TOUCHING] = { - name: "overlayStylusTouching", - enterMethod: "overlayTouchingEnter", - exitMethod: "overlayTouchingExit", - updateMethod: "overlayTouching" + enterMethod: "entityLaserTouchingEnter", + exitMethod: "entityLaserTouchingExit", + updateMethod: "entityLaserTouching" }; CONTROLLER_STATE_MACHINE[STATE_OVERLAY_LASER_TOUCHING] = { name: "overlayLaserTouching", - enterMethod: "overlayTouchingEnter", - exitMethod: "overlayTouchingExit", - updateMethod: "overlayTouching" + enterMethod: "overlayLaserTouchingEnter", + exitMethod: "overlayLaserTouchingExit", + updateMethod: "overlayLaserTouching" +}; +CONTROLLER_STATE_MACHINE[STATE_STYLUS_TOUCHING] = { + name: "stylusTouching", + enterMethod: "stylusTouchingEnter", + exitMethod: "stylusTouchingExit", + updateMethod: "stylusTouching" }; function getFingerWorldLocation(hand) { @@ -295,13 +281,8 @@ function getFingerWorldLocation(hand) { var worldFingerRotation = Quat.multiply(MyAvatar.orientation, fingerRotation); var worldFingerPosition = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, fingerPosition)); - // local y offset. - var localYOffset = Vec3.multiplyQbyV(worldFingerRotation, {x: 0, y: FINGER_TOUCH_Y_OFFSET, z: 0}); - - var offsetWorldFingerPosition = Vec3.sum(worldFingerPosition, localYOffset); - return { - position: offsetWorldFingerPosition, + position: worldFingerPosition, orientation: worldFingerRotation, rotation: worldFingerRotation, valid: true @@ -567,6 +548,122 @@ function restore2DMode() { } } +function stylusTargetHasKeyboardFocus(stylusTarget) { + if (stylusTarget.entityID && stylusTarget.entityID !== NULL_UUID) { + return Entities.keyboardFocusEntity === stylusTarget.entityID; + } else if (stylusTarget.overlayID && stylusTarget.overlayID !== NULL_UUID) { + return Overlays.keyboardFocusOverlay === stylusTarget.overlayID; + } +} + +function setKeyboardFocusOnStylusTarget(stylusTarget) { + if (stylusTarget.entityID && stylusTarget.entityID !== NULL_UUID && Entities.wantsHandControllerPointerEvents(stylusTarget.entityID)) { + Overlays.keyboardFocusOverlay = NULL_UUID; + Entities.keyboardFocusEntity = stylusTarget.entityID; + } else if (stylusTarget.overlayID && stylusTarget.overlayID !== NULL_UUID) { + Overlays.keyboardFocusOverlay = stylusTarget.overlayID; + Entities.keyboardFocusEntity = NULL_UUID; + } +} + +function sendHoverEnterEventToStylusTarget(hand, stylusTarget) { + var pointerEvent = { + type: "Move", + id: hand + 1, // 0 is reserved for hardware mouse + pos2D: stylusTarget.position2D, + pos3D: stylusTarget.position, + normal: stylusTarget.normal, + direction: Vec3.subtract(ZERO_VEC, stylusTarget.normal), + button: "None" + }; + + if (stylusTarget.entityID && stylusTarget.entityID !== NULL_UUID) { + Entities.sendHoverEnterEntity(stylusTarget.entityID, pointerEvent); + } else if (stylusTarget.overlayID && stylusTarget.overlayID !== NULL_UUID) { + Overlays.sendHoverEnterOverlay(stylusTarget.overlayID, pointerEvent); + } +} + +function sendHoverOverEventToStylusTarget(hand, stylusTarget) { + var pointerEvent = { + type: "Move", + id: hand + 1, // 0 is reserved for hardware mouse + pos2D: stylusTarget.position2D, + pos3D: stylusTarget.position, + normal: stylusTarget.normal, + direction: Vec3.subtract(ZERO_VEC, stylusTarget.normal), + button: "None" + }; + + if (stylusTarget.entityID && stylusTarget.entityID !== NULL_UUID) { + Entities.sendMouseMoveOnEntity(stylusTarget.entityID, pointerEvent); + Entities.sendHoverOverEntity(stylusTarget.entityID, pointerEvent); + } else if (stylusTarget.overlayID && stylusTarget.overlayID !== NULL_UUID) { + Overlays.sendMouseMoveOnOverlay(stylusTarget.overlayID, pointerEvent); + Overlays.sendHoverOverOverlay(stylusTarget.overlayID, pointerEvent); + } +} + +function sendTouchStartEventToStylusTarget(hand, stylusTarget) { + var pointerEvent = { + type: "Press", + id: hand + 1, // 0 is reserved for hardware mouse + pos2D: stylusTarget.position2D, + pos3D: stylusTarget.position, + normal: stylusTarget.normal, + direction: Vec3.subtract(ZERO_VEC, stylusTarget.normal), + button: "Primary", + isPrimaryHeld: true + }; + + if (stylusTarget.entityID && stylusTarget.entityID !== NULL_UUID) { + Entities.sendMousePressOnEntity(stylusTarget.entityID, pointerEvent); + Entities.sendClickDownOnEntity(stylusTarget.entityID, pointerEvent); + } else if (stylusTarget.overlayID && stylusTarget.overlayID !== NULL_UUID) { + Overlays.sendMousePressOnOverlay(stylusTarget.overlayID, pointerEvent); + } +} + +function sendTouchEndEventToStylusTarget(hand, stylusTarget) { + var pointerEvent = { + type: "Release", + id: hand + 1, // 0 is reserved for hardware mouse + pos2D: stylusTarget.position2D, + pos3D: stylusTarget.position, + normal: stylusTarget.normal, + direction: Vec3.subtract(ZERO_VEC, stylusTarget.normal), + button: "Primary" + }; + + if (stylusTarget.entityID && stylusTarget.entityID !== NULL_UUID) { + Entities.sendMouseReleaseOnEntity(stylusTarget.entityID, pointerEvent); + Entities.sendClickReleaseOnEntity(stylusTarget.entityID, pointerEvent); + Entities.sendHoverLeaveEntity(stylusTarget.entityID, pointerEvent); + } else if (stylusTarget.overlayID && stylusTarget.overlayID !== NULL_UUID) { + Overlays.sendMouseReleaseOnOverlay(stylusTarget.overlayID, pointerEvent); + } +} + +function sendTouchMoveEventToStylusTarget(hand, stylusTarget) { + var pointerEvent = { + type: "Move", + id: hand + 1, // 0 is reserved for hardware mouse + pos2D: stylusTarget.position2D, + pos3D: stylusTarget.position, + normal: stylusTarget.normal, + direction: Vec3.subtract(ZERO_VEC, stylusTarget.normal), + button: "Primary", + isPrimaryHeld: true + }; + + if (stylusTarget.entityID && stylusTarget.entityID !== NULL_UUID) { + Entities.sendMouseMoveOnEntity(stylusTarget.entityID, pointerEvent); + Entities.sendHoldingClickOnEntity(stylusTarget.entityID, pointerEvent); + } else if (stylusTarget.overlayID && stylusTarget.overlayID !== NULL_UUID) { + Overlays.sendMouseMoveOnOverlay(stylusTarget.overlayID, pointerEvent); + } +} + // EntityPropertiesCache is a helper class that contains a cache of entity properties. // the hope is to prevent excess calls to Entity.getEntityProperties() // @@ -888,6 +985,16 @@ function MyController(hand) { this.useFingerInsteadOfStylus = false; + // initialize stylus tip + var DEFAULT_STYLUS_TIP = { + position: {x: 0, y: 0, z: 0}, + orientation: {x: 0, y: 0, z: 0, w: 0}, + rotation: {x: 0, y: 0, z: 0, w: 0}, + velocity: {x: 0, y: 0, z: 0}, + valid: false + }; + this.stylusTip = DEFAULT_STYLUS_TIP; + var _this = this; var suppressedIn2D = [STATE_OFF, STATE_SEARCHING]; @@ -897,10 +1004,36 @@ function MyController(hand) { return (-1 !== suppressedIn2D.indexOf(this.state)) && isIn2DMode(); }; + this.updateStylusTip = function() { + if (this.useFingerInsteadOfStylus) { + this.stylusTip = getFingerWorldLocation(this.hand); + } else { + this.stylusTip = getControllerWorldLocation(this.handToController(), true); + + // translate tip forward according to constant. + var TIP_OFFSET = {x: 0, y: WEB_STYLUS_LENGTH - WEB_TOUCH_Y_OFFSET, z: 0}; + this.stylusTip.position = Vec3.sum(this.stylusTip.position, Vec3.multiplyQbyV(this.stylusTip.orientation, TIP_OFFSET)); + } + + // compute tip velocity from hand controller motion, it is more accurate then computing it from previous positions. + var pose = Controller.getPoseValue(this.handToController()); + if (pose.valid) { + var worldControllerPos = Vec3.sum(MyAvatar.position, Vec3.multiplyQbyV(MyAvatar.orientation, pose.translation)); + var worldControllerLinearVel = Vec3.multiplyQbyV(MyAvatar.orientation, pose.velocity); + var worldControllerAngularVel = Vec3.multiplyQbyV(MyAvatar.orientation, pose.angularVelocity); + var tipVelocity = Vec3.sum(worldControllerLinearVel, Vec3.cross(worldControllerAngularVel, Vec3.subtract(this.stylusTip.position, worldControllerPos))); + this.stylusTip.velocity = tipVelocity; + } else { + this.stylusTip.velocity = {x: 0, y: 0, z: 0}; + } + }; + this.update = function(deltaTime, timestamp) { this.updateSmoothedTrigger(); this.maybeScaleMyAvatar(); + this.updateStylusTip(); + var DEFAULT_USE_FINGER_AS_STYLUS = false; var USE_FINGER_AS_STYLUS = Settings.getValue("preferAvatarFingerOverStylus"); if (USE_FINGER_AS_STYLUS === "") { @@ -916,10 +1049,7 @@ function MyController(hand) { // Most hand input is disabled, because we are interacting with the 2d hud. // However, we still should check for collisions of the stylus with the web overlay. - - var controllerLocation = getControllerWorldLocation(this.handToController(), true); - this.processStylus(controllerLocation.position); - + this.processStylus(); this.turnOffVisualizations(); return; } @@ -949,7 +1079,7 @@ function MyController(hand) { if ((isInEditMode() && this.grabbedThingID !== HMD.tabletID) && (newState !== STATE_OFF && newState !== STATE_SEARCHING && - newState !== STATE_OVERLAY_STYLUS_TOUCHING && + newState !== STATE_STYLUS_TOUCHING && newState !== STATE_OVERLAY_LASER_TOUCHING)) { return; } @@ -1084,10 +1214,6 @@ function MyController(hand) { } Overlays.deleteOverlay(this.stylus); this.stylus = null; - if (this.stylusTip) { - Overlays.deleteOverlay(this.stylusTip); - this.stylusTip = null; - } }; this.overlayLineOn = function(closePoint, farPoint, color, farParentID) { @@ -1291,66 +1417,250 @@ function MyController(hand) { return _this.rawThumbValue < THUMB_ON_VALUE; }; - this.processStylus = function(worldHandPosition) { + // returns object with the following fields + // * entityID - if non null, this entityID is the closest to the stylusTip. + // * overlayID - if non null, this overlayID is the closest to the stylusTip. + // * distance - distance in meters from the stylus to the surface of the stylusTarget. + // * position - position on the surface of the stylusTarget that is nearest to the stylusTip. (world space) + // * position2D - postion on surface of the stylusTarget ready for use for pointerEvent.pos2D + // * normal - normal vector of the surface. (world space) + // * valid - if false, all other fields are invalid. + this.calculateNearestStylusTargetFromCandidates = function (candidates, cullSide) { - var performRayTest = false; - if (this.useFingerInsteadOfStylus) { - this.hideStylus(); - performRayTest = true; - } else { - var i; + // now attempt to find the nearest stylusTarget. - // see if the hand is near a tablet or web-entity - var candidateEntities = Entities.findEntities(worldHandPosition, WEB_DISPLAY_STYLUS_DISTANCE); - entityPropertiesCache.addEntities(candidateEntities); - for (i = 0; i < candidateEntities.length; i++) { - var props = entityPropertiesCache.getProps(candidateEntities[i]); - if (props && (props.type == "Web" || this.isTablet(candidateEntities[i]))) { - performRayTest = true; - break; + var nearestStylusTarget = { + entityID: null, + overlayID: null, + distance: WEB_DISPLAY_STYLUS_DISTANCE, + position: {x: 0, y: 0, z: 0}, + normalizedPosition: {x: 0, y: 0, z: 0}, + normal: {x: 0, y: 0, z: 1}, + valid: false + }; + + if (candidates.entities.length > 0 || candidates.overlays.length > 0) { + var i, props, entityID, normal, distance, position, invRot, localPos, invDimensions, normalizedPos, position2D; + for (i = 0; i < candidates.entities.length; i++) { + entityID = candidates.entities[i]; + props = entityPropertiesCache.getProps(entityID); + + // entity could have been deleted. + if (props === undefined) { + continue; } - } - if (!performRayTest) { - var candidateOverlays = Overlays.findOverlays(worldHandPosition, WEB_DISPLAY_STYLUS_DISTANCE); - for (i = 0; i < candidateOverlays.length; i++) { - if (this.isTablet(candidateOverlays[i])) { - performRayTest = true; - break; + normal = Vec3.multiplyQbyV(props.rotation, {x: 0, y: 0, z: 1}); + Vec3.multiplyQbyV(props.rotation, {x: 0, y: 1, z: 0}); + distance = Vec3.dot(Vec3.subtract(this.stylusTip.position, props.position), normal); + position = Vec3.subtract(this.stylusTip.position, Vec3.multiply(normal, distance)); + + if (distance < nearestStylusTarget.distance) { + + invRot = Quat.inverse(props.rotation); + localPos = Vec3.multiplyQbyV(invRot, Vec3.subtract(position, props.position)); + invDimensions = { x: 1 / props.dimensions.x, y: 1 / props.dimensions.y, z: 1 / props.dimensions.z }; + normalizedPos = Vec3.sum(Vec3.multiplyVbyV(localPos, invDimensions), props.registrationPoint); + + if (normalizedPos.x >= 0 && normalizedPos.y >= 0 && normalizedPos.x <= 1 && normalizedPos.y <= 1) { + position2D = { x: normalizedPos.x * props.dimensions.x, y: (1 - normalizedPos.y) * props.dimensions.y }; // flip y-axis + nearestStylusTarget = { + entityID: entityID, + overlayID: null, + distance: distance, + position: position, + position2D: position2D, + normal: normal, + valid: true + }; } } } - if (performRayTest) { - this.showStylus(); - } else { - this.hideStylus(); + for (i = 0; i < candidates.overlays.length; i++) { + var overlayID = candidates.overlays[i]; + var overlayPosition = Overlays.getProperty(overlayID, "position"); + + // overlay could have been deleted. + if (overlayPosition === undefined) { + continue; + } + + var overlayRotation = Overlays.getProperty(overlayID, "rotation"); + normal = Vec3.multiplyQbyV(overlayRotation, {x: 0, y: 0, z: 1}); + distance = Vec3.dot(Vec3.subtract(this.stylusTip.position, overlayPosition), normal); + position = Vec3.subtract(this.stylusTip.position, Vec3.multiply(normal, distance)); + + if (distance < nearestStylusTarget.distance) { + + invRot = Quat.inverse(overlayRotation); + localPos = Vec3.multiplyQbyV(invRot, Vec3.subtract(position, overlayPosition)); + + var dpi = Overlays.getProperty(overlayID, "dpi"); + var dimensions; + if (dpi) { + // Calculate physical dimensions for web3d overlay from resolution and dpi; "dimensions" property is used as a scale. + var resolution = Overlays.getProperty(overlayID, "resolution"); + resolution.z = 1; // Circumvent divide-by-zero. + var scale = Overlays.getProperty(overlayID, "dimensions"); + scale.z = 0.01; // overlay dimensions are 2D, not 3D. + dimensions = Vec3.multiplyVbyV(Vec3.multiply(resolution, INCHES_TO_METERS / dpi), scale); + } else { + dimensions = Overlays.getProperty(overlayID, "dimensions"); + if (!dimensions.z) { + dimensions.z = 0.01; // sometimes overlay dimensions are 2D, not 3D. + } + } + + invDimensions = { x: 1 / dimensions.x, y: 1 / dimensions.y, z: 1 / dimensions.z }; + normalizedPos = Vec3.sum(Vec3.multiplyVbyV(localPos, invDimensions), DEFAULT_REGISTRATION_POINT); + + if (!cullSide || (normalizedPos.x >= 0 && normalizedPos.y >= 0 && normalizedPos.x <= 1 && normalizedPos.y <= 1)) { + position2D = { x: normalizedPos.x * dimensions.x, y: (1 - normalizedPos.y) * dimensions.y }; // flip y-axis + nearestStylusTarget = { + entityID: null, + overlayID: overlayID, + distance: distance, + position: position, + position2D: position2D, + normal: normal, + valid: true + }; + } + } } } - if (performRayTest) { - var rayPickInfo = this.calcRayPickInfo(this.hand, this.useFingerInsteadOfStylus); - var max, min; - if (this.useFingerInsteadOfStylus) { - max = FINGER_TOUCH_MAX; - min = FINGER_TOUCH_MIN; - } else { - max = WEB_STYLUS_LENGTH / 2.0 + WEB_TOUCH_Y_OFFSET; - min = WEB_STYLUS_LENGTH / 2.0 + WEB_TOUCH_TOO_CLOSE; - } + return nearestStylusTarget; + }; - if (rayPickInfo.distance < max && rayPickInfo.distance > min) { - this.handleStylusOnHomeButton(rayPickInfo); - if (this.handleStylusOnWebEntity(rayPickInfo)) { - return; - } - if (this.handleStylusOnWebOverlay(rayPickInfo)) { - return; - } - } else { - this.homeButtonTouched = false; + this.stealTouchFocus = function(stylusTarget) { + // send hover events to target + // record the entity or overlay we are hovering over. + if ((stylusTarget.entityID === this.getOtherHandController().hoverEntity) || + (stylusTarget.overlayID === this.getOtherHandController().hoverOverlay)) { + this.getOtherHandController().relinquishTouchFocus(); + } + this.requestTouchFocus(stylusTarget); + }; + + this.requestTouchFocus = function(stylusTarget) { + + // send hover events to target if we can. + // record the entity or overlay we are hovering over. + if (stylusTarget.entityID && stylusTarget.entityID !== this.hoverEntity && stylusTarget.entityID !== this.getOtherHandController().hoverEntity) { + this.hoverEntity = stylusTarget.entityID; + sendHoverEnterEventToStylusTarget(this.hand, stylusTarget); + } else if (stylusTarget.overlayID && stylusTarget.overlayID !== this.hoverOverlay && stylusTarget.overlayID !== this.getOtherHandController().hoverOverlay) { + this.hoverOverlay = stylusTarget.overlayID; + sendHoverEnterEventToStylusTarget(this.hand, stylusTarget); + } + }; + + this.hasTouchFocus = function(stylusTarget) { + return ((stylusTarget.entityID && stylusTarget.entityID === this.hoverEntity) || + (stylusTarget.overlayID && stylusTarget.overlayID === this.hoverOverlay)); + }; + + this.relinquishTouchFocus = function() { + + // send hover leave event. + var pointerEvent = { type: "Move", id: this.hand + 1 }; + if (this.hoverEntity) { + Entities.sendHoverLeaveEntity(this.hoverEntity, pointerEvent); + this.hoverEntity = null; + } else if (this.hoverOverlay) { + Overlays.sendMouseMoveOnOverlay(this.hoverOverlay, pointerEvent); + Overlays.sendHoverOverOverlay(this.hoverOverlay, pointerEvent); + Overlays.sendHoverLeaveOverlay(this.hoverOverlay, pointerEvent); + this.hoverOverlay = null; + } + }; + + this.processStylus = function() { + if (!this.stylusTip.valid) { + this.hideStylus(); + return; + } + + if (this.useFingerInsteadOfStylus) { + this.hideStylus(); + } + + var tipPosition = this.stylusTip.position; + + var candidates = { + entities: [], + overlays: [] + }; + + // find web-entites near the stylusTip. + var candidateEntities = Entities.findEntities(tipPosition, WEB_DISPLAY_STYLUS_DISTANCE); + entityPropertiesCache.addEntities(candidateEntities); + var i, props; + for (i = 0; i < candidateEntities.length; i++) { + props = entityPropertiesCache.getProps(candidateEntities[i]); + if (props && (props.type === "Web" || this.isTablet(candidateEntities[i]))) { + candidates.entities.push(candidateEntities[i]); } } + + // add the tabletScreen, if it is valid + if (HMD.tabletScreenID && HMD.tabletScreenID !== NULL_UUID) { + candidates.overlays.push(HMD.tabletScreenID); + } + + // add the tablet home button. + if (HMD.homeButtonID && HMD.homeButtonID !== NULL_UUID) { + candidates.overlays.push(HMD.homeButtonID); + } + + var nearestStylusTarget = this.calculateNearestStylusTargetFromCandidates(candidates, true); + + if (!this.useFingerInsteadOfStylus && nearestStylusTarget.valid) { + this.showStylus(); + } else { + this.hideStylus(); + } + + var TABLET_MIN_HOVER_DISTANCE = 0.01; + var TABLET_MAX_HOVER_DISTANCE = 0.1; + var TABLET_MIN_TOUCH_DISTANCE = -0.05; + var TABLET_MAX_TOUCH_DISTANCE = TABLET_MIN_HOVER_DISTANCE; + + if (nearestStylusTarget.valid && nearestStylusTarget.distance > TABLET_MIN_TOUCH_DISTANCE && + nearestStylusTarget.distance < TABLET_MAX_HOVER_DISTANCE) { + + this.requestTouchFocus(nearestStylusTarget); + + if (!stylusTargetHasKeyboardFocus(nearestStylusTarget)) { + setKeyboardFocusOnStylusTarget(nearestStylusTarget); + } + + if (this.hasTouchFocus(nearestStylusTarget)) { + sendHoverOverEventToStylusTarget(this.hand, nearestStylusTarget); + } + + // filter out presses when tip is moving away from tablet. + if (nearestStylusTarget.valid && nearestStylusTarget.distance > TABLET_MIN_TOUCH_DISTANCE && + nearestStylusTarget.distance < TABLET_MAX_TOUCH_DISTANCE && Vec3.dot(this.stylusTip.velocity, nearestStylusTarget.normal) < 0) { + + var name; + if (nearestStylusTarget.entityID) { + name = entityPropertiesCache.getProps(nearestStylusTarget.entityID).name; + this.stylusTarget = nearestStylusTarget; + this.setState(STATE_STYLUS_TOUCHING, "begin touching entity '" + name + "'"); + } else if (nearestStylusTarget.overlayID) { + name = Overlays.getProperty(nearestStylusTarget.overlayID, "name"); + this.stylusTarget = nearestStylusTarget; + this.setState(STATE_STYLUS_TOUCHING, "begin touching overlay '" + name + "'"); + } + } + } else { + this.relinquishTouchFocus(); + } + + this.homeButtonTouched = false; }; this.off = function(deltaTime, timestamp) { @@ -1406,25 +1716,7 @@ function MyController(hand) { this.grabPointSphereOff(); } - this.processStylus(worldHandPosition); - }; - - this.handleStylusOnHomeButton = function(rayPickInfo) { - if (rayPickInfo.overlayID) { - var homeButton = rayPickInfo.overlayID; - var hmdHomeButton = HMD.homeButtonID; - if (homeButton === hmdHomeButton) { - if (this.homeButtonTouched === false) { - this.homeButtonTouched = true; - Controller.triggerHapticPulse(HAPTIC_STYLUS_STRENGTH, HAPTIC_STYLUS_DURATION, this.hand); - Messages.sendLocalMessage("home", homeButton); - } - } else { - this.homeButtonTouched = false; - } - } else { - this.homeButtonTouched = false; - } + this.processStylus(); }; this.handleLaserOnHomeButton = function(rayPickInfo) { @@ -1464,27 +1756,27 @@ function MyController(hand) { // Performs ray pick test from the hand controller into the world // @param {number} which hand to use, RIGHT_HAND or LEFT_HAND - // @param {bool} if true use the world position/orientation of the index finger to cast the ray from. + // @param {object} if set, use this as as the pick ray, expects origin, direction, and length fields. // @returns {object} returns object with two keys entityID and distance // - this.calcRayPickInfo = function(hand, useFingerInsteadOfController) { + this.calcRayPickInfo = function(hand, pickRayOverride) { - var controllerLocation; - if (useFingerInsteadOfController) { - controllerLocation = getFingerWorldLocation(hand); + var pickRay; + if (pickRayOverride) { + pickRay = pickRayOverride; } else { - controllerLocation = getControllerWorldLocation(this.handToController(), true); - } - var worldHandPosition = controllerLocation.position; - var worldHandRotation = controllerLocation.orientation; + var controllerLocation = getControllerWorldLocation(this.handToController(), true); + var worldHandPosition = controllerLocation.position; + var worldHandRotation = controllerLocation.orientation; - var pickRay = { - origin: PICK_WITH_HAND_RAY ? worldHandPosition : Camera.position, - direction: PICK_WITH_HAND_RAY ? Quat.getUp(worldHandRotation) : Vec3.mix(Quat.getUp(worldHandRotation), - Quat.getFront(Camera.orientation), - HAND_HEAD_MIX_RATIO), - length: PICK_MAX_DISTANCE - }; + pickRay = { + origin: PICK_WITH_HAND_RAY ? worldHandPosition : Camera.position, + direction: PICK_WITH_HAND_RAY ? Quat.getUp(worldHandRotation) : Vec3.mix(Quat.getUp(worldHandRotation), + Quat.getFront(Camera.orientation), + HAND_HEAD_MIX_RATIO), + length: PICK_MAX_DISTANCE + }; + } var result = { entityID: null, @@ -1943,134 +2235,6 @@ function MyController(hand) { return false; }; - this.handleStylusOnWebEntity = function (rayPickInfo) { - var pointerEvent; - - if (rayPickInfo.entityID && Entities.wantsHandControllerPointerEvents(rayPickInfo.entityID)) { - var entity = rayPickInfo.entityID; - var name = entityPropertiesCache.getProps(entity).name; - - if (Entities.keyboardFocusEntity != entity) { - Overlays.keyboardFocusOverlay = 0; - Entities.keyboardFocusEntity = entity; - - pointerEvent = { - type: "Move", - id: this.hand + 1, // 0 is reserved for hardware mouse - pos2D: projectOntoEntityXYPlane(entity, rayPickInfo.intersection), - pos3D: rayPickInfo.intersection, - normal: rayPickInfo.normal, - direction: rayPickInfo.searchRay.direction, - button: "None" - }; - - this.hoverEntity = entity; - Entities.sendHoverEnterEntity(entity, pointerEvent); - } - - // send mouse events for button highlights and tooltips. - if (this.hand == mostRecentSearchingHand || - (this.hand !== mostRecentSearchingHand && - this.getOtherHandController().state !== STATE_SEARCHING && - this.getOtherHandController().state !== STATE_ENTITY_STYLUS_TOUCHING && - this.getOtherHandController().state !== STATE_ENTITY_LASER_TOUCHING && - this.getOtherHandController().state !== STATE_OVERLAY_STYLUS_TOUCHING && - this.getOtherHandController().state !== STATE_OVERLAY_LASER_TOUCHING)) { - - // most recently searching hand has priority over other hand, for the purposes of button highlighting. - pointerEvent = { - type: "Move", - id: this.hand + 1, // 0 is reserved for hardware mouse - pos2D: projectOntoEntityXYPlane(entity, rayPickInfo.intersection), - pos3D: rayPickInfo.intersection, - normal: rayPickInfo.normal, - direction: rayPickInfo.searchRay.direction, - button: "None" - }; - - Entities.sendMouseMoveOnEntity(entity, pointerEvent); - Entities.sendHoverOverEntity(entity, pointerEvent); - } - - this.grabbedThingID = entity; - this.grabbedIsOverlay = false; - this.setState(STATE_ENTITY_STYLUS_TOUCHING, "begin touching entity '" + name + "'"); - return true; - - } else if (this.hoverEntity) { - pointerEvent = { - type: "Move", - id: this.hand + 1 - }; - Entities.sendHoverLeaveEntity(this.hoverEntity, pointerEvent); - this.hoverEntity = null; - } - - return false; - }; - - this.handleStylusOnWebOverlay = function (rayPickInfo) { - var pointerEvent; - if (rayPickInfo.overlayID) { - var overlay = rayPickInfo.overlayID; - if (Overlays.keyboardFocusOverlay != overlay) { - Entities.keyboardFocusEntity = null; - Overlays.keyboardFocusOverlay = overlay; - - pointerEvent = { - type: "Move", - id: HARDWARE_MOUSE_ID, - pos2D: projectOntoOverlayXYPlane(overlay, rayPickInfo.intersection), - pos3D: rayPickInfo.intersection, - normal: rayPickInfo.normal, - direction: rayPickInfo.searchRay.direction, - button: "None" - }; - - this.hoverOverlay = overlay; - Overlays.sendHoverEnterOverlay(overlay, pointerEvent); - } - - // Send mouse events for button highlights and tooltips. - if (this.hand == mostRecentSearchingHand || - (this.hand !== mostRecentSearchingHand && - this.getOtherHandController().state !== STATE_SEARCHING && - this.getOtherHandController().state !== STATE_ENTITY_STYLUS_TOUCHING && - this.getOtherHandController().state !== STATE_ENTITY_LASER_TOUCHING && - this.getOtherHandController().state !== STATE_OVERLAY_STYLUS_TOUCHING && - this.getOtherHandController().state !== STATE_OVERLAY_LASER_TOUCHING)) { - - // most recently searching hand has priority over other hand, for the purposes of button highlighting. - pointerEvent = { - type: "Move", - id: HARDWARE_MOUSE_ID, - pos2D: projectOntoOverlayXYPlane(overlay, rayPickInfo.intersection), - pos3D: rayPickInfo.intersection, - normal: rayPickInfo.normal, - direction: rayPickInfo.searchRay.direction, - button: "None" - }; - - Overlays.sendMouseMoveOnOverlay(overlay, pointerEvent); - Overlays.sendHoverOverOverlay(overlay, pointerEvent); - } - - this.grabbedOverlay = overlay; - this.setState(STATE_OVERLAY_STYLUS_TOUCHING, "begin touching overlay '" + overlay + "'"); - return true; - - } else if (this.hoverOverlay) { - pointerEvent = { - type: "Move", - id: HARDWARE_MOUSE_ID - }; - Overlays.sendHoverLeaveOverlay(this.hoverOverlay, pointerEvent); - this.hoverOverlay = null; - } - - return false; - }; - this.handleLaserOnWebEntity = function(rayPickInfo) { var pointerEvent; if (rayPickInfo.entityID && Entities.wantsHandControllerPointerEvents(rayPickInfo.entityID)) { @@ -2100,9 +2264,8 @@ function MyController(hand) { if (this.hand == mostRecentSearchingHand || (this.hand !== mostRecentSearchingHand && this.getOtherHandController().state !== STATE_SEARCHING && - this.getOtherHandController().state !== STATE_ENTITY_STYLUS_TOUCHING && + this.getOtherHandController().state !== STATE_STYLUS_TOUCHING && this.getOtherHandController().state !== STATE_ENTITY_LASER_TOUCHING && - this.getOtherHandController().state !== STATE_OVERLAY_STYLUS_TOUCHING && this.getOtherHandController().state !== STATE_OVERLAY_LASER_TOUCHING)) { // most recently searching hand has priority over other hand, for the purposes of button highlighting. @@ -2167,9 +2330,8 @@ function MyController(hand) { if (this.hand == mostRecentSearchingHand || (this.hand !== mostRecentSearchingHand && this.getOtherHandController().state !== STATE_SEARCHING && - this.getOtherHandController().state !== STATE_ENTITY_STYLUS_TOUCHING && + this.getOtherHandController().state !== STATE_STYLUS_TOUCHING && this.getOtherHandController().state !== STATE_ENTITY_LASER_TOUCHING && - this.getOtherHandController().state !== STATE_OVERLAY_STYLUS_TOUCHING && this.getOtherHandController().state !== STATE_OVERLAY_LASER_TOUCHING)) { // most recently searching hand has priority over other hand, for the purposes of button highlighting. @@ -2699,10 +2861,6 @@ function MyController(hand) { isClone = true; if (count > limit) { - delete cloneableProps; - delete lifetime; - delete cUserData; - delete cProperties; return; } @@ -3096,14 +3254,9 @@ function MyController(hand) { this.release(); }; - this.entityTouchingEnter = function() { + this.entityLaserTouchingEnter = function() { // test for intersection between controller laser and web entity plane. - var controllerLocation; - if (this.useFingerInsteadOfStylus && this.state === STATE_ENTITY_STYLUS_TOUCHING) { - controllerLocation = getFingerWorldLocation(this.hand); - } else { - controllerLocation = getControllerWorldLocation(this.handToController(), true); - } + var controllerLocation = getControllerWorldLocation(this.handToController(), true); var intersectInfo = handLaserIntersectEntity(this.grabbedThingID, controllerLocation); if (intersectInfo) { var pointerEvent = { @@ -3126,26 +3279,15 @@ function MyController(hand) { this.deadspotExpired = false; var LASER_PRESS_TO_MOVE_DEADSPOT_ANGLE = 0.026; // radians ~ 1.2 degrees - var STYLUS_PRESS_TO_MOVE_DEADSPOT_ANGLE = 0.314; // radians ~ 18 degrees - var theta = this.state === STATE_ENTITY_STYLUS_TOUCHING ? STYLUS_PRESS_TO_MOVE_DEADSPOT_ANGLE : LASER_PRESS_TO_MOVE_DEADSPOT_ANGLE; - this.deadspotRadius = Math.tan(theta) * intersectInfo.distance; // dead spot radius in meters + this.deadspotRadius = Math.tan(LASER_PRESS_TO_MOVE_DEADSPOT_ANGLE) * intersectInfo.distance; // dead spot radius in meters } - if (this.state == STATE_ENTITY_STYLUS_TOUCHING) { - Controller.triggerHapticPulse(HAPTIC_STYLUS_STRENGTH, HAPTIC_STYLUS_DURATION, this.hand); - } else if (this.state == STATE_ENTITY_LASER_TOUCHING) { - Controller.triggerHapticPulse(HAPTIC_LASER_UI_STRENGTH, HAPTIC_LASER_UI_DURATION, this.hand); - } + Controller.triggerHapticPulse(HAPTIC_LASER_UI_STRENGTH, HAPTIC_LASER_UI_DURATION, this.hand); }; - this.entityTouchingExit = function() { + this.entityLaserTouchingExit = function() { // test for intersection between controller laser and web entity plane. - var controllerLocation; - if (this.useFingerInsteadOfStylus && this.state === STATE_ENTITY_STYLUS_TOUCHING) { - controllerLocation = getFingerWorldLocation(this.hand); - } else { - controllerLocation = getControllerWorldLocation(this.handToController(), true); - } + var controllerLocation = getControllerWorldLocation(this.handToController(), true); var intersectInfo = handLaserIntersectEntity(this.grabbedThingID, controllerLocation); if (intersectInfo) { var pointerEvent; @@ -3174,7 +3316,7 @@ function MyController(hand) { this.grabbedOverlay = null; }; - this.entityTouching = function(dt) { + this.entityLaserTouching = function(dt) { this.touchingEnterTimer += dt; @@ -3186,28 +3328,10 @@ function MyController(hand) { } // test for intersection between controller laser and web entity plane. - var controllerLocation; - if (this.useFingerInsteadOfStylus && this.state === STATE_ENTITY_STYLUS_TOUCHING) { - controllerLocation = getFingerWorldLocation(this.hand); - } else { - controllerLocation = getControllerWorldLocation(this.handToController(), true); - } + var controllerLocation = getControllerWorldLocation(this.handToController(), true); var intersectInfo = handLaserIntersectEntity(this.grabbedThingID, controllerLocation); if (intersectInfo) { - var max; - if (this.useFingerInsteadOfStylus && this.state === STATE_ENTITY_STYLUS_TOUCHING) { - max = FINGER_TOUCH_MAX; - } else { - max = WEB_STYLUS_LENGTH / 2.0 + WEB_TOUCH_Y_OFFSET; - } - - if (this.state == STATE_ENTITY_STYLUS_TOUCHING && - intersectInfo.distance > max) { - this.setState(STATE_OFF, "pulled away from web entity"); - return; - } - if (Entities.keyboardFocusEntity != this.grabbedThingID) { Overlays.keyboardFocusOverlay = 0; Entities.keyboardFocusEntity = this.grabbedThingID; @@ -3244,14 +3368,9 @@ function MyController(hand) { } }; - this.overlayTouchingEnter = function () { + this.overlayLaserTouchingEnter = function () { // Test for intersection between controller laser and Web overlay plane. - var controllerLocation; - if (this.useFingerInsteadOfStylus && this.state === STATE_OVERLAY_STYLUS_TOUCHING) { - controllerLocation = getFingerWorldLocation(this.hand); - } else { - controllerLocation = getControllerWorldLocation(this.handToController(), true); - } + var controllerLocation = getControllerWorldLocation(this.handToController(), true); var intersectInfo = handLaserIntersectOverlay(this.grabbedOverlay, controllerLocation); if (intersectInfo) { var pointerEvent = { @@ -3273,26 +3392,15 @@ function MyController(hand) { this.deadspotExpired = false; var LASER_PRESS_TO_MOVE_DEADSPOT_ANGLE = 0.026; // radians ~ 1.2 degrees - var STYLUS_PRESS_TO_MOVE_DEADSPOT_ANGLE = 0.314; // radians ~ 18 degrees - var theta = this.state === STATE_OVERLAY_STYLUS_TOUCHING ? STYLUS_PRESS_TO_MOVE_DEADSPOT_ANGLE : LASER_PRESS_TO_MOVE_DEADSPOT_ANGLE; - this.deadspotRadius = Math.tan(theta) * intersectInfo.distance; // dead spot radius in meters + this.deadspotRadius = Math.tan(LASER_PRESS_TO_MOVE_DEADSPOT_ANGLE) * intersectInfo.distance; // dead spot radius in meters } - if (this.state == STATE_OVERLAY_STYLUS_TOUCHING) { - Controller.triggerHapticPulse(HAPTIC_STYLUS_STRENGTH, HAPTIC_STYLUS_DURATION, this.hand); - } else if (this.state == STATE_OVERLAY_LASER_TOUCHING) { - Controller.triggerHapticPulse(HAPTIC_LASER_UI_STRENGTH, HAPTIC_LASER_UI_DURATION, this.hand); - } + Controller.triggerHapticPulse(HAPTIC_LASER_UI_STRENGTH, HAPTIC_LASER_UI_DURATION, this.hand); }; - this.overlayTouchingExit = function () { + this.overlayLaserTouchingExit = function () { // Test for intersection between controller laser and Web overlay plane. - var controllerLocation; - if (this.useFingerInsteadOfStylus && this.state === STATE_OVERLAY_STYLUS_TOUCHING) { - controllerLocation = getFingerWorldLocation(this.hand); - } else { - controllerLocation = getControllerWorldLocation(this.handToController(), true); - } + var controllerLocation = getControllerWorldLocation(this.handToController(), true); var intersectInfo = handLaserIntersectOverlay(this.grabbedOverlay, controllerLocation); if (intersectInfo) { var pointerEvent; @@ -3337,66 +3445,22 @@ function MyController(hand) { this.grabbedOverlay = null; }; - this.overlayTouching = function (dt) { + this.overlayLaserTouching = function (dt) { this.touchingEnterTimer += dt; - if (this.state == STATE_OVERLAY_STYLUS_TOUCHING && this.triggerSmoothedSqueezed()) { - return; - } - if (this.state == STATE_OVERLAY_LASER_TOUCHING && !this.triggerSmoothedGrab()) { this.setState(STATE_OFF, "released trigger"); return; } // Test for intersection between controller laser and Web overlay plane. - var controllerLocation; - if (this.useFingerInsteadOfStylus && this.state === STATE_OVERLAY_STYLUS_TOUCHING) { - controllerLocation = getFingerWorldLocation(this.hand); - } else { - controllerLocation = getControllerWorldLocation(this.handToController(), true); - } + var controllerLocation = getControllerWorldLocation(this.handToController(), true); var intersectInfo = handLaserIntersectOverlay(this.grabbedOverlay, controllerLocation); if (intersectInfo) { - var max, min; - if (this.useFingerInsteadOfStylus && this.state === STATE_OVERLAY_STYLUS_TOUCHING) { - max = FINGER_TOUCH_MAX; - min = FINGER_TOUCH_MIN; - } else { - max = WEB_STYLUS_LENGTH / 2.0 + WEB_TOUCH_Y_OFFSET + WEB_TOUCH_Y_TOUCH_DEADZONE_SIZE; - min = WEB_STYLUS_LENGTH / 2.0 + WEB_TOUCH_TOO_CLOSE; - } - - if (this.state == STATE_OVERLAY_STYLUS_TOUCHING && intersectInfo.distance > max) { - this.grabbedThingID = null; - this.setState(STATE_OFF, "pulled away from overlay"); - return; - } - var pos2D = projectOntoOverlayXYPlane(this.grabbedOverlay, intersectInfo.point); var pos3D = intersectInfo.point; - if (this.state == STATE_OVERLAY_STYLUS_TOUCHING && - !this.tabletStabbed && - intersectInfo.distance < min) { - // they've stabbed the tablet, don't send events until they pull back - this.tabletStabbed = true; - this.tabletStabbedPos2D = pos2D; - this.tabletStabbedPos3D = pos3D; - return; - } - - if (this.tabletStabbed) { - var origin = {x: this.tabletStabbedPos2D.x, y: this.tabletStabbedPos2D.y, z: 0}; - var point = {x: pos2D.x, y: pos2D.y, z: 0}; - var offset = Vec3.distance(origin, point); - var radius = 0.05; - if (offset < radius) { - return; - } - } - if (Overlays.keyboardFocusOverlay != this.grabbedOverlay) { Entities.keyboardFocusEntity = null; Overlays.keyboardFocusOverlay = this.grabbedOverlay; @@ -3432,6 +3496,61 @@ function MyController(hand) { } }; + this.stylusTouchingEnter = function () { + this.stealTouchFocus(this.stylusTarget); + sendTouchStartEventToStylusTarget(this.hand, this.stylusTarget); + Controller.triggerHapticPulse(HAPTIC_STYLUS_STRENGTH, HAPTIC_STYLUS_DURATION, this.hand); + + this.touchingEnterTimer = 0; + this.touchingEnterStylusTarget = this.stylusTarget; + this.deadspotExpired = false; + + var TOUCH_PRESS_TO_MOVE_DEADSPOT = 0.025; + this.deadspotRadius = TOUCH_PRESS_TO_MOVE_DEADSPOT; // meters + }; + + this.stylusTouchingExit = function () { + + // special case to handle home button. + if (this.stylusTarget.overlayID === HMD.homeButtonID) { + Messages.sendLocalMessage("home", this.stylusTarget.overlayID); + } + + // send press event + if (this.deadspotExpired) { + sendTouchEndEventToStylusTarget(this.hand, this.stylusTarget); + } else { + sendTouchEndEventToStylusTarget(this.hand, this.touchingEnterStylusTarget); + } + }; + + this.stylusTouching = function (dt) { + + this.touchingEnterTimer += dt; + + var candidates = { entities: [], overlays: [] }; + if (this.stylusTarget.entityID && this.stylusTarget.entityID !== NULL_UUID) { + candidates.entities.push(this.stylusTarget.entityID); + } else if (this.stylusTarget.overlayID && this.stylusTarget.overlayID !== NULL_UUID) { + candidates.overlays.push(this.stylusTarget.overlayID); + } + this.stylusTarget = this.calculateNearestStylusTargetFromCandidates(candidates, false); + + var TABLET_MIN_TOUCH_DISTANCE = -0.1; + var TABLET_MAX_TOUCH_DISTANCE = 0.01; + + if (this.stylusTarget.valid && this.stylusTarget.distance > TABLET_MIN_TOUCH_DISTANCE && this.stylusTarget.distance < TABLET_MAX_TOUCH_DISTANCE) { + + var POINTER_PRESS_TO_MOVE_DELAY = 0.25; // seconds + if (this.deadspotExpired || this.touchingEnterTimer > POINTER_PRESS_TO_MOVE_DELAY || + Vec3.distance(this.stylusTarget.position, this.touchingEnterPointerEvent.pos3D) > this.deadspotRadius) { + sendTouchMoveEventToStylusTarget(this.hand, this.stylusTarget); + } + } else { + this.setState(STATE_OFF, "hand moved away from tablet"); + } + }; + this.release = function() { this.turnOffVisualizations(); diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index dd2aaf346b..8859b13624 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -167,11 +167,10 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { isAA: HMD.active }); - var HOME_BUTTON_Y_OFFSET = (this.height / 2) - 0.009; + var HOME_BUTTON_Y_OFFSET = (this.height / 2) - (this.height / 20); this.homeButtonID = Overlays.addOverlay("sphere", { name: "homeButton", localPosition: {x: -0.001, y: -HOME_BUTTON_Y_OFFSET, z: 0.0}, - localRotation: Quat.angleAxis(0, Y_AXIS), dimensions: { x: 4 * tabletScaleFactor, y: 4 * tabletScaleFactor, z: 4 * tabletScaleFactor}, alpha: 0.0, visible: true, From 6acf2340a26fb18417dfcca251b2bf49653c066a Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 8 Mar 2017 17:42:24 +0000 Subject: [PATCH 079/247] better way to determine if we can go to the homescreen --- .../script-engine/src/TabletScriptingInterface.cpp | 10 +++++++--- libraries/script-engine/src/TabletScriptingInterface.h | 1 + 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index b90b971193..59027da102 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -275,7 +275,8 @@ void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscr QMetaObject::invokeMethod(_qmlTabletRoot, "loadSource", Q_ARG(const QVariant&, QVariant(TABLET_SOURCE_URL))); } - gotoHomeScreen(); + // force to the tablet to go to the homescreen + gotoHomeScreen(true); QMetaObject::invokeMethod(_qmlTabletRoot, "setUsername", Q_ARG(const QVariant&, QVariant(getUsername()))); @@ -293,6 +294,9 @@ void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscr } } +void TabletProxy::gotoHomeScreen() { + gotoHomeScreen(false); +} void TabletProxy::gotoMenuScreen(const QString& submenu) { QObject* root = nullptr; @@ -334,8 +338,8 @@ void TabletProxy::loadQMLSource(const QVariant& path) { } } -void TabletProxy::gotoHomeScreen() { - if (_state != State::Home || _state != State::Uninitialized) { +void TabletProxy::gotoHomeScreen(bool forceOntoHomeScreen) { + if (_state != State::Home && ( _state != State::Uninitialized || forceOntoHomeScreen)) { if (!_toolbarMode && _qmlTabletRoot) { auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen()), Qt::DirectConnection); diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index e450923758..42f32ff219 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -188,6 +188,7 @@ protected slots: void desktopWindowClosed(); protected: void removeButtonsFromHomeScreen(); + void gotoHomeScreen(bool forceOntoHomeScreen); void addButtonsToToolbar(); void removeButtonsFromToolbar(); From e9086460e3bd7f2ef3603ca1273096b51d74790c Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 8 Mar 2017 18:14:32 +0000 Subject: [PATCH 080/247] changed function names --- libraries/script-engine/src/TabletScriptingInterface.cpp | 6 +++--- libraries/script-engine/src/TabletScriptingInterface.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 59027da102..6cfd26b230 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -276,7 +276,7 @@ void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscr } // force to the tablet to go to the homescreen - gotoHomeScreen(true); + loadHomeScreen(true); QMetaObject::invokeMethod(_qmlTabletRoot, "setUsername", Q_ARG(const QVariant&, QVariant(getUsername()))); @@ -295,7 +295,7 @@ void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscr } void TabletProxy::gotoHomeScreen() { - gotoHomeScreen(false); + loadHomeScreen(false); } void TabletProxy::gotoMenuScreen(const QString& submenu) { @@ -338,7 +338,7 @@ void TabletProxy::loadQMLSource(const QVariant& path) { } } -void TabletProxy::gotoHomeScreen(bool forceOntoHomeScreen) { +void TabletProxy::loadHomeScreen(bool forceOntoHomeScreen) { if (_state != State::Home && ( _state != State::Uninitialized || forceOntoHomeScreen)) { if (!_toolbarMode && _qmlTabletRoot) { auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index 42f32ff219..12cb2f4d2d 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -188,7 +188,7 @@ protected slots: void desktopWindowClosed(); protected: void removeButtonsFromHomeScreen(); - void gotoHomeScreen(bool forceOntoHomeScreen); + void loadHomeScreen(bool forceOntoHomeScreen); void addButtonsToToolbar(); void removeButtonsFromToolbar(); From 371c20ee250a7ceab3f13559547a3ea506c6d4d4 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 8 Mar 2017 10:33:59 -0800 Subject: [PATCH 081/247] hide tablet by making it not visible rather than destroying it --- scripts/system/libraries/WebTablet.js | 19 ++++- scripts/system/tablet-ui/tabletUI.js | 101 ++++++++++++++++++++++---- 2 files changed, 101 insertions(+), 19 deletions(-) diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 8a0831a3cd..1acc12b3f1 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -45,6 +45,10 @@ function calcSpawnInfo(hand, height) { var headPos = (HMD.active && Camera.mode === "first person") ? HMD.position : Camera.position; var headRot = (HMD.active && Camera.mode === "first person") ? HMD.orientation : Camera.orientation; + if (!hand) { + hand = NO_HANDS; + } + if (HMD.active && hand !== NO_HANDS) { var handController = getControllerWorldLocation(hand, true); var controllerPosition = handController.position; @@ -96,7 +100,7 @@ function calcSpawnInfo(hand, height) { * @param hand [number] -1 indicates no hand, Controller.Standard.RightHand or Controller.Standard.LeftHand * @param clientOnly [bool] true indicates tablet model is only visible to client. */ -WebTablet = function (url, width, dpi, hand, clientOnly) { +WebTablet = function (url, width, dpi, hand, clientOnly, location, invisisble) { var _this = this; @@ -129,11 +133,16 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { "grabbableKey": {"grabbable": true} }), dimensions: {x: this.width, y: this.height, z: this.depth}, - parentID: AVATAR_SELF_ID + parentID: AVATAR_SELF_ID, + visible: !invisisble }; // compute position, rotation & parentJointIndex of the tablet this.calculateTabletAttachmentProperties(hand, true, tabletProperties); + if (location) { + tabletProperties.localPosition = location.localPosition; + tabletProperties.localRotation = location.localRotation; + } this.cleanUpOldTablets(); @@ -164,7 +173,8 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { parentID: this.tabletEntityID, parentJointIndex: -1, showKeyboardFocusHighlight: false, - isAA: HMD.active + isAA: HMD.active, + visible: !invisisble }); var HOME_BUTTON_Y_OFFSET = (this.height / 2) - 0.009; @@ -177,7 +187,8 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { visible: true, drawInFront: false, parentID: this.tabletEntityID, - parentJointIndex: -1 + parentJointIndex: -1, + visible: !invisisble }); this.receive = function (channel, senderID, senderUUID, localOnly) { diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index d5065cb826..14eb7e7ecc 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -12,21 +12,22 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -/* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablet, Overlays, MyAvatar */ +/* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablet, Overlays, + MyAvatar, Menu, Vec3 */ (function() { // BEGIN LOCAL_SCOPE var tabletShown = false; + var tabletRezzed = false; var tabletLocation = null; var activeHand = null; + var DEFAULT_WIDTH = 0.4375; + var DEFAULT_TABLET_SCALE = 100; + UIWebTablet = null; Script.include("../libraries/WebTablet.js"); - function showTabletUI() { - tabletShown = true; - print("show tablet-ui"); - - var DEFAULT_WIDTH = 0.4375; - var DEFAULT_TABLET_SCALE = 100; + function rezTablet(invisible) { + print("XXX show tablet-ui, not rezzed. position is " + JSON.stringify(tabletLocation)); var toolbarMode = Tablet.getTablet("com.highfidelity.interface.tablet.system").toolbarMode; var TABLET_SCALE = DEFAULT_TABLET_SCALE; if (toolbarMode) { @@ -34,37 +35,88 @@ } else { TABLET_SCALE = Settings.getValue("hmdTabletScale") || DEFAULT_TABLET_SCALE; } - UIWebTablet = new WebTablet("qml/hifi/tablet/TabletRoot.qml", DEFAULT_WIDTH * (TABLET_SCALE / 100), null, activeHand, true); + + UIWebTablet = new WebTablet("qml/hifi/tablet/TabletRoot.qml", + DEFAULT_WIDTH * (TABLET_SCALE / 100), + null, activeHand, true, tabletLocation, invisible); UIWebTablet.register(); HMD.tabletID = UIWebTablet.tabletEntityID; HMD.homeButtonID = UIWebTablet.homeButtonID; HMD.tabletScreenID = UIWebTablet.webOverlayID; + tabletRezzed = true; + } + + function showTabletUI() { + tabletShown = true; + + if (!tabletRezzed) { + rezTablet(false); + } + + if (UIWebTablet && tabletRezzed) { + if (tabletLocation) { + print("XXX show tablet-ui, already rezzed, already position: " + JSON.stringify(tabletLocation)); + Overlays.editOverlay(HMD.tabletID, { + localPosition: tabletLocation.localPosition, + localRotation: tabletLocation.localRotation, + visible: true + }); + } else { + print("XXX show tablet-ui, already rezzed, no position"); + var tabletProperties = {}; + UIWebTablet.calculateTabletAttachmentProperties(activeHand, true, tabletProperties); + tabletProperties.visible = true; + Overlays.editOverlay(HMD.tabletID, tabletProperties); + } + Overlays.editOverlay(HMD.homeButtonID, { visible: true }); + Overlays.editOverlay(HMD.tabletScreenID, { visible: true }); + } } function hideTabletUI() { tabletShown = false; - print("hide tablet-ui"); + if (UIWebTablet) { + tabletLocation = UIWebTablet.getLocation(); + print("XXX hide tablet-ui, position was " + JSON.stringify(tabletLocation)); + // Overlays.editOverlay(HMD.tabletID, { localPosition: { x: -1000, y: 0, z:0 } }); + Overlays.editOverlay(HMD.tabletID, { visible: false }); + Overlays.editOverlay(HMD.homeButtonID, { visible: false }); + Overlays.editOverlay(HMD.tabletScreenID, { visible: false }); + } else { + print("XXX hide tablet-ui, UIWebTablet is null"); + } + } + + function closeTabletUI() { + tabletShown = false; if (UIWebTablet) { if (UIWebTablet.onClose) { UIWebTablet.onClose(); } tabletLocation = UIWebTablet.getLocation(); + print("XXX close tablet-ui, position was " + JSON.stringify(tabletLocation)); UIWebTablet.unregister(); UIWebTablet.destroy(); UIWebTablet = null; HMD.tabletID = null; HMD.homeButtonID = null; HMD.tabletScreenID = null; + } else { + print("XXX close tablet-ui, UIWebTablet is null"); } + tabletRezzed = false; } + function updateShowTablet() { // close the WebTablet if it we go into toolbar mode. var toolbarMode = Tablet.getTablet("com.highfidelity.interface.tablet.system").toolbarMode; + var visibleToOthers = Settings.getValue("tabletVisibleToOthers"); + if (tabletShown && toolbarMode) { - hideTabletUI(); + closeTabletUI(); HMD.closeTablet(); return; } @@ -78,18 +130,37 @@ tablet.updateAudioBar(currentMicLevel); } - if (tabletShown && UIWebTablet && Overlays.getOverlayType(UIWebTablet.webOverlayID) != "web3d") { + // XXX don't do this check every time? + if (tabletRezzed && UIWebTablet && Overlays.getOverlayType(UIWebTablet.webOverlayID) != "web3d") { // when we switch domains, the tablet entity gets destroyed and recreated. this causes // the overlay to be deleted, but not recreated. If the overlay is deleted for this or any // other reason, close the tablet. - hideTabletUI(); + closeTabletUI(); HMD.closeTablet(); - } else if (HMD.showTablet && !tabletShown && !toolbarMode) { - UserActivityLogger.openedTablet(Settings.getValue("tabletVisibleToOthers")); + print("XXX autodestroying tablet"); + } + + + if (HMD.showTablet && !tabletShown && !toolbarMode) { + UserActivityLogger.openedTablet(visibleToOthers); showTabletUI(); } else if (!HMD.showTablet && tabletShown) { UserActivityLogger.closedTablet(); - hideTabletUI(); + if (visibleToOthers) { + closeTabletUI(); + } else { + hideTabletUI(); + } + } else if (!toolbarMode && !visibleToOthers && !tabletRezzed) { + // pre-make the tablet so it will appear quickly + tabletLocation = { + localPosition: Vec3.sum(MyAvatar.position, { x: -1000, y: 0, z: 0 }), + localRotation: { x: 0, y: 0, z: 0, w: 1 } + }; + print("XXX pre-creating tablet at " + JSON.stringify(tabletLocation)); + rezTablet(true); + tabletLocation = null; + tabletShown = false; } } From 1e3c717fd4e3f65d30792eba0c18bd128250fb03 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 9 Mar 2017 09:55:47 +1300 Subject: [PATCH 082/247] Method to show appropriate desktop or tablet dialog --- interface/src/Application.cpp | 10 ++++++++++ interface/src/Application.h | 2 ++ 2 files changed, 12 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d659ec0a94..a32acc474b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5862,6 +5862,16 @@ void Application::addAssetToWorldFromURL(QString url) { request->send(); } +void Application::showDialog(const QString& desktopURL, const QString& tabletURL, const QString& name) const { + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet->getToolbarMode() || (!tablet->getTabletRoot() && !isHMDMode())) { + DependencyManager::get<OffscreenUi>()->show(desktopURL, name); + } else { + tablet->loadQMLSource(tabletURL); + } +} + void Application::addAssetToWorldFromURLRequestFinished() { auto request = qobject_cast<ResourceRequest*>(sender()); auto url = request->getUrl().toString(); diff --git a/interface/src/Application.h b/interface/src/Application.h index c4ba760153..9fab4aef81 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -333,6 +333,8 @@ public slots: void toggleRunningScriptsWidget() const; Q_INVOKABLE void showAssetServerWidget(QString filePath = ""); + void showDialog(const QString& desktopURL, const QString& tabletURL, const QString& name) const; + // FIXME: Move addAssetToWorld* methods to own class? void addAssetToWorldFromURL(QString url); void addAssetToWorldFromURLRequestFinished(); From 22e52290369fc20358a192d2cb0baf879d2e8005 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 9 Mar 2017 09:57:45 +1300 Subject: [PATCH 083/247] Use existing attachments dialog as base dialog content --- .../{AttachmentsDialog.qml => content/AttachmentsContent.qml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename interface/resources/qml/hifi/dialogs/{AttachmentsDialog.qml => content/AttachmentsContent.qml} (100%) diff --git a/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml similarity index 100% rename from interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml rename to interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml From ae48dae96f08722388c830acbf19d5dc77b50568 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 8 Mar 2017 15:29:46 -0800 Subject: [PATCH 084/247] get rid of toggleTabletUI lockout period --- interface/src/Application.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d659ec0a94..60d6adc5d1 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1620,14 +1620,7 @@ QString Application::getUserAgent() { return userAgent; } -uint64_t lastTabletUIToggle { 0 }; -const uint64_t toggleTabletUILockout { 500000 }; void Application::toggleTabletUI() const { - uint64_t now = usecTimestampNow(); - if (now - lastTabletUIToggle < toggleTabletUILockout) { - return; - } - lastTabletUIToggle = now; auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); bool messageOpen = tablet->isMessageDialogOpen(); From 28ade45f97f12bf9d9d50dab5a8f85422c3fcd77 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 8 Mar 2017 15:30:15 -0800 Subject: [PATCH 085/247] make maxFPS a property --- interface/src/ui/overlays/Web3DOverlay.cpp | 26 ++++++++++++++++++++-- interface/src/ui/overlays/Web3DOverlay.h | 4 ++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index d8bead0a07..dd161a9994 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -179,12 +179,20 @@ void Web3DOverlay::loadSourceURL() { tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); // Override min fps for tablet UI, for silky smooth scrolling - _webSurface->setMaxFps(90); + setMaxFPS(90); } } _webSurface->getRootContext()->setContextProperty("globalPosition", vec3toVariant(getPosition())); } +void Web3DOverlay::setMaxFPS(uint8_t maxFPS) { + _desiredMaxFPS = maxFPS; + if (_webSurface) { + _webSurface->setMaxFps(_desiredMaxFPS); + _currentMaxFPS = _desiredMaxFPS; + } +} + void Web3DOverlay::render(RenderArgs* args) { if (!_visible || !getParentVisible()) { return; @@ -194,9 +202,11 @@ void Web3DOverlay::render(RenderArgs* args) { QSurface * currentSurface = currentContext->surface(); if (!_webSurface) { _webSurface = DependencyManager::get<OffscreenQmlSurfaceCache>()->acquire(pickURL()); - _webSurface->setMaxFps(10); // FIXME, the max FPS could be better managed by being dynamic (based on the number of current surfaces // and the current rendering load) + if (_currentMaxFPS != _desiredMaxFPS) { + setMaxFPS(_desiredMaxFPS); + } loadSourceURL(); _webSurface->resume(); _webSurface->resize(QSize(_resolution.x, _resolution.y)); @@ -246,6 +256,10 @@ void Web3DOverlay::render(RenderArgs* args) { _emitScriptEventConnection = connect(this, &Web3DOverlay::scriptEventReceived, _webSurface.data(), &OffscreenQmlSurface::emitScriptEvent); _webEventReceivedConnection = connect(_webSurface.data(), &OffscreenQmlSurface::webEventReceived, this, &Web3DOverlay::webEventReceived); + } else { + if (_currentMaxFPS != _desiredMaxFPS) { + setMaxFPS(_desiredMaxFPS); + } } vec2 halfSize = getSize() / 2.0f; @@ -401,6 +415,11 @@ void Web3DOverlay::setProperties(const QVariantMap& properties) { _dpi = dpi.toFloat(); } + auto maxFPS = properties["maxFPS"]; + if (maxFPS.isValid()) { + _desiredMaxFPS = maxFPS.toInt(); + } + auto showKeyboardFocusHighlight = properties["showKeyboardFocusHighlight"]; if (showKeyboardFocusHighlight.isValid()) { _showKeyboardFocusHighlight = showKeyboardFocusHighlight.toBool(); @@ -420,6 +439,9 @@ QVariant Web3DOverlay::getProperty(const QString& property) { if (property == "dpi") { return _dpi; } + if (property == "maxFPS") { + return _desiredMaxFPS; + } if (property == "showKeyboardFocusHighlight") { return _showKeyboardFocusHighlight; } diff --git a/interface/src/ui/overlays/Web3DOverlay.h b/interface/src/ui/overlays/Web3DOverlay.h index 2b9686919d..e71cac2452 100644 --- a/interface/src/ui/overlays/Web3DOverlay.h +++ b/interface/src/ui/overlays/Web3DOverlay.h @@ -31,6 +31,7 @@ public: QString pickURL(); void loadSourceURL(); + void setMaxFPS(uint8_t maxFPS); virtual void render(RenderArgs* args) override; virtual const render::ShapeKey getShapeKey() override; @@ -75,6 +76,9 @@ private: bool _pressed{ false }; QTouchDevice _touchDevice; + uint8_t _desiredMaxFPS { 10 }; + uint8_t _currentMaxFPS { 0 }; + QMetaObject::Connection _mousePressConnection; QMetaObject::Connection _mouseReleaseConnection; QMetaObject::Connection _mouseMoveConnection; From de2dd7383db495782efcc3e30d9fd2f4140640bf Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 8 Mar 2017 15:30:49 -0800 Subject: [PATCH 086/247] didn't need invis flag, after all --- scripts/system/libraries/WebTablet.js | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 1acc12b3f1..ed0b0e75f7 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -100,7 +100,7 @@ function calcSpawnInfo(hand, height) { * @param hand [number] -1 indicates no hand, Controller.Standard.RightHand or Controller.Standard.LeftHand * @param clientOnly [bool] true indicates tablet model is only visible to client. */ -WebTablet = function (url, width, dpi, hand, clientOnly, location, invisisble) { +WebTablet = function (url, width, dpi, hand, clientOnly, location) { var _this = this; @@ -133,8 +133,7 @@ WebTablet = function (url, width, dpi, hand, clientOnly, location, invisisble) { "grabbableKey": {"grabbable": true} }), dimensions: {x: this.width, y: this.height, z: this.depth}, - parentID: AVATAR_SELF_ID, - visible: !invisisble + parentID: AVATAR_SELF_ID }; // compute position, rotation & parentJointIndex of the tablet @@ -173,8 +172,7 @@ WebTablet = function (url, width, dpi, hand, clientOnly, location, invisisble) { parentID: this.tabletEntityID, parentJointIndex: -1, showKeyboardFocusHighlight: false, - isAA: HMD.active, - visible: !invisisble + isAA: HMD.active }); var HOME_BUTTON_Y_OFFSET = (this.height / 2) - 0.009; @@ -187,8 +185,7 @@ WebTablet = function (url, width, dpi, hand, clientOnly, location, invisisble) { visible: true, drawInFront: false, parentID: this.tabletEntityID, - parentJointIndex: -1, - visible: !invisisble + parentJointIndex: -1 }); this.receive = function (channel, senderID, senderUUID, localOnly) { From 6aac2eb338be3e7c66f6b378a6dd1f1124c33370 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 8 Mar 2017 15:31:24 -0800 Subject: [PATCH 087/247] for overlay tablets, precreate them so that they show up quickly when summoned --- scripts/system/tablet-ui/tabletUI.js | 139 ++++++++++++++++++--------- 1 file changed, 92 insertions(+), 47 deletions(-) diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index 14eb7e7ecc..53989201d2 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -13,21 +13,46 @@ // /* global Script, HMD, WebTablet, UIWebTablet, UserActivityLogger, Settings, Entities, Messages, Tablet, Overlays, - MyAvatar, Menu, Vec3 */ + MyAvatar, Menu */ (function() { // BEGIN LOCAL_SCOPE var tabletShown = false; var tabletRezzed = false; - var tabletLocation = null; var activeHand = null; var DEFAULT_WIDTH = 0.4375; var DEFAULT_TABLET_SCALE = 100; + var preMakeTime = Date.now(); + var validCheckTime = Date.now(); + var debugTablet = false; UIWebTablet = null; Script.include("../libraries/WebTablet.js"); - function rezTablet(invisible) { - print("XXX show tablet-ui, not rezzed. position is " + JSON.stringify(tabletLocation)); + function tabletIsValid() { + if (!UIWebTablet) { + return false; + } + if (UIWebTablet.tabletIsOverlay && Overlays.getProperty(HMD.tabletID, "type") != "model") { + if (debugTablet) { + print("TABLET is invalid due to frame: " + JSON.stringify(Overlays.getProperty(HMD.tabletID, "type"))); + } + return false; + } + if (Overlays.getProperty(HMD.homeButtonID, "type") != "sphere" || + Overlays.getProperty(HMD.tabletScreenID, "type") != "web3d") { + if (debugTablet) { + print("TABLET is invalid due to other"); + } + return false; + } + return true; + } + + + function rezTablet() { + if (debugTablet) { + print("TABLET rezzing"); + } var toolbarMode = Tablet.getTablet("com.highfidelity.interface.tablet.system").toolbarMode; var TABLET_SCALE = DEFAULT_TABLET_SCALE; if (toolbarMode) { @@ -38,11 +63,12 @@ UIWebTablet = new WebTablet("qml/hifi/tablet/TabletRoot.qml", DEFAULT_WIDTH * (TABLET_SCALE / 100), - null, activeHand, true, tabletLocation, invisible); + null, activeHand, true); UIWebTablet.register(); HMD.tabletID = UIWebTablet.tabletEntityID; HMD.homeButtonID = UIWebTablet.homeButtonID; HMD.tabletScreenID = UIWebTablet.webOverlayID; + tabletRezzed = true; } @@ -54,36 +80,42 @@ } if (UIWebTablet && tabletRezzed) { - if (tabletLocation) { - print("XXX show tablet-ui, already rezzed, already position: " + JSON.stringify(tabletLocation)); - Overlays.editOverlay(HMD.tabletID, { - localPosition: tabletLocation.localPosition, - localRotation: tabletLocation.localRotation, - visible: true - }); - } else { - print("XXX show tablet-ui, already rezzed, no position"); - var tabletProperties = {}; - UIWebTablet.calculateTabletAttachmentProperties(activeHand, true, tabletProperties); - tabletProperties.visible = true; + if (debugTablet) { + print("TABLET in showTabletUI, already rezzed"); + } + var tabletProperties = {}; + UIWebTablet.calculateTabletAttachmentProperties(activeHand, true, tabletProperties); + tabletProperties.visible = true; + if (UIWebTablet.tabletIsOverlay) { Overlays.editOverlay(HMD.tabletID, tabletProperties); } Overlays.editOverlay(HMD.homeButtonID, { visible: true }); Overlays.editOverlay(HMD.tabletScreenID, { visible: true }); + Overlays.editOverlay(HMD.tabletScreenID, { maxFPS: 90 }); } } function hideTabletUI() { tabletShown = false; - if (UIWebTablet) { - tabletLocation = UIWebTablet.getLocation(); - print("XXX hide tablet-ui, position was " + JSON.stringify(tabletLocation)); - // Overlays.editOverlay(HMD.tabletID, { localPosition: { x: -1000, y: 0, z:0 } }); - Overlays.editOverlay(HMD.tabletID, { visible: false }); - Overlays.editOverlay(HMD.homeButtonID, { visible: false }); - Overlays.editOverlay(HMD.tabletScreenID, { visible: false }); + if (!UIWebTablet) { + return; + } + + if (UIWebTablet.tabletIsOverlay) { + if (debugTablet) { + print("TABLET hide"); + } + if (Settings.getValue("tabletVisibleToOthers")) { + closeTabletUI(); + } else { + // Overlays.editOverlay(HMD.tabletID, { localPosition: { x: -1000, y: 0, z:0 } }); + Overlays.editOverlay(HMD.tabletID, { visible: false }); + Overlays.editOverlay(HMD.homeButtonID, { visible: false }); + Overlays.editOverlay(HMD.tabletScreenID, { visible: false }); + Overlays.editOverlay(HMD.tabletScreenID, { maxFPS: 1 }); + } } else { - print("XXX hide tablet-ui, UIWebTablet is null"); + closeTabletUI(); } } @@ -94,22 +126,25 @@ UIWebTablet.onClose(); } - tabletLocation = UIWebTablet.getLocation(); - print("XXX close tablet-ui, position was " + JSON.stringify(tabletLocation)); + if (debugTablet) { + print("TABLET close"); + } UIWebTablet.unregister(); UIWebTablet.destroy(); UIWebTablet = null; HMD.tabletID = null; HMD.homeButtonID = null; HMD.tabletScreenID = null; - } else { - print("XXX close tablet-ui, UIWebTablet is null"); + } else if (debugTablet) { + print("TABLET closeTabletUI, UIWebTablet is null"); } tabletRezzed = false; } function updateShowTablet() { + var MSECS_PER_SEC = 1000.0; + var now = Date.now(); // close the WebTablet if it we go into toolbar mode. var toolbarMode = Tablet.getTablet("com.highfidelity.interface.tablet.system").toolbarMode; @@ -130,14 +165,18 @@ tablet.updateAudioBar(currentMicLevel); } - // XXX don't do this check every time? - if (tabletRezzed && UIWebTablet && Overlays.getOverlayType(UIWebTablet.webOverlayID) != "web3d") { - // when we switch domains, the tablet entity gets destroyed and recreated. this causes - // the overlay to be deleted, but not recreated. If the overlay is deleted for this or any - // other reason, close the tablet. - closeTabletUI(); - HMD.closeTablet(); - print("XXX autodestroying tablet"); + if (validCheckTime - now > MSECS_PER_SEC) { + validCheckTime = now; + if (tabletRezzed && UIWebTablet && !tabletIsValid()) { + // when we switch domains, the tablet entity gets destroyed and recreated. this causes + // the overlay to be deleted, but not recreated. If the overlay is deleted for this or any + // other reason, close the tablet. + closeTabletUI(); + HMD.closeTablet(); + if (debugTablet) { + print("TABLET autodestroying"); + } + } } @@ -151,17 +190,23 @@ } else { hideTabletUI(); } - } else if (!toolbarMode && !visibleToOthers && !tabletRezzed) { - // pre-make the tablet so it will appear quickly - tabletLocation = { - localPosition: Vec3.sum(MyAvatar.position, { x: -1000, y: 0, z: 0 }), - localRotation: { x: 0, y: 0, z: 0, w: 1 } - }; - print("XXX pre-creating tablet at " + JSON.stringify(tabletLocation)); - rezTablet(true); - tabletLocation = null; - tabletShown = false; } + + // if the tablet is an overlay, attempt to pre-create it and then hide it so that when it's + // summoned, it will appear quickly. + if (!toolbarMode && !visibleToOthers) { + if (now - preMakeTime > MSECS_PER_SEC) { + preMakeTime = now; + if (!tabletIsValid()) { + closeTabletUI(); + rezTablet(false); + tabletShown = false; + } else if (!tabletShown) { + hideTabletUI(); + } + } + } + } function toggleHand(channel, hand, senderUUID, localOnly) { From 1fc6d824560b47943f360f052c378e6bb37addab Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 9 Mar 2017 13:04:57 +1300 Subject: [PATCH 088/247] Tablet and desktop versions of avatar attachments dialog --- .../qml/hifi/dialogs/AttachmentsDialog.qml | 45 +++++++++++ .../dialogs/content/AttachmentsContent.qml | 43 ++++------- .../hifi/tablet/TabletAttachmentsDialog.qml | 77 +++++++++++++++++++ interface/src/Menu.cpp | 4 +- interface/src/ui/overlays/Web3DOverlay.cpp | 3 + 5 files changed, 141 insertions(+), 31 deletions(-) create mode 100644 interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml create mode 100644 interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml diff --git a/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml b/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml new file mode 100644 index 0000000000..a833c0fe61 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml @@ -0,0 +1,45 @@ +// +// AttachmentsDialog.qml +// +// Created by David Rowe on 9 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import Qt.labs.settings 1.0 + +import "../../styles-uit" +import "../../windows" +import "content" + +ScrollingWindow { + id: root + title: "Attachments" + objectName: "AttachmentsDialog" + width: 600 + height: 600 + resizable: true + destroyOnHidden: true + minSize: Qt.vector2d(400, 500) + + HifiConstants { id: hifi } + + property var settings: Settings { + category: "AttachmentsDialog" + property alias x: root.x + property alias y: root.y + property alias width: root.width + property alias height: root.height + } + + function closeDialog() { + root.destroy(); + } + + AttachmentsContent { } + +} diff --git a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml index 27d225b58e..b36b7080bc 100644 --- a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml +++ b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml @@ -1,47 +1,29 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.Dialogs 1.2 as OriginalDialogs -import Qt.labs.settings 1.0 import QtQuick.Controls.Styles 1.4 -import "../../styles-uit" -import "../../controls-uit" as HifiControls -import "../../windows" -import "attachments" +import "../../../styles-uit" +import "../../../controls-uit" as HifiControls +import "../../../windows" +import "../attachments" -ScrollingWindow { - id: root - title: "Attachments" - objectName: "AttachmentsDialog" - width: 600 - height: 600 - resizable: true - destroyOnHidden: true - minSize: Qt.vector2d(400, 500) - - HifiConstants { id: hifi } +Item { + id: content readonly property var originalAttachments: MyAvatar.getAttachmentsVariant(); property var attachments: []; - property var settings: Settings { - category: "AttachmentsDialog" - property alias x: root.x - property alias y: root.y - property alias width: root.width - property alias height: root.height - } - Component.onCompleted: { for (var i = 0; i < originalAttachments.length; ++i) { var attachment = originalAttachments[i]; - root.attachments.push(attachment); + content.attachments.push(attachment); listView.model.append({}); } } Column { - width: pane.contentWidth + width: pane.width Rectangle { width: parent.width @@ -118,7 +100,7 @@ ScrollingWindow { Attachment { id: attachmentView width: scrollView.width - attachment: root.attachments[index] + attachment: content.attachments[index] onDeleteAttachment: { attachments.splice(index, 1); listView.model.remove(index, 1); @@ -190,7 +172,7 @@ ScrollingWindow { text: "Cancel" onTriggered: { MyAvatar.setAttachmentsVariant(originalAttachments); - root.destroy() + closeDialog(); } } @@ -203,12 +185,14 @@ ScrollingWindow { } MyAvatar.setAttachmentsVariant(attachments); - root.destroy() + closeDialog(); } } } } + // FIXME + /* onKeyboardRaisedChanged: { if (keyboardEnabled && keyboardRaised) { // Scroll to item with focus if necessary. @@ -225,5 +209,6 @@ ScrollingWindow { } } } + */ } diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml new file mode 100644 index 0000000000..5dd7e75eed --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -0,0 +1,77 @@ +// +// TabletAttachmentsDialog.qml +// +// Created by David Rowe on 9 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +import "../../controls-uit" as HifiControls +import "../../styles-uit" +import "../dialogs/content" + +Item { + id: root + objectName: "AttachmentsDialog" + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + + anchors.fill: parent + + HifiConstants { id: hifi } + + Rectangle { + id: pane // Surrogate for ScrollingWindow's pane. + anchors.fill: parent + color: hifi.colors.baseGray // Match that of dialog so that dialog's rounded corners don't show. + } + + function closeDialog() { + Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); + } + + AttachmentsContent { + id: attachments + + anchors { + top: parent.top + left: parent.left + right: parent.right + bottom: keyboard.top + } + + MouseArea { + // Defocuses any current control so that the keyboard gets hidden. + id: mouseArea + anchors.fill: parent + propagateComposedEvents: true + acceptedButtons: Qt.AllButtons + onPressed: { + parent.forceActiveFocus(); + mouse.accepted = false; + } + } + } + + HifiControls.Keyboard { + id: keyboard + raised: parent.keyboardEnabled && parent.keyboardRaised + numeric: parent.punctuationMode + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + } + + Component.onCompleted: { + keyboardEnabled = HMD.active; + } +} diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index beacbaccab..5fa7c192df 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -171,10 +171,10 @@ Menu::Menu() { // Avatar > Attachments... auto action = addActionToQMenuAndActionHash(avatarMenu, MenuOption::Attachments); connect(action, &QAction::triggered, [] { - DependencyManager::get<OffscreenUi>()->show(QString("hifi/dialogs/AttachmentsDialog.qml"), "AttachmentsDialog"); + qApp->showDialog(QString("hifi/dialogs/AttachmentsDialog.qml"), + QString("../../hifi/tablet/TabletAttachmentsDialog.qml"), "AttachmentsDialog"); }); - // Avatar > Size MenuWrapper* avatarSizeMenu = avatarMenu->addMenu("Size"); diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index d8bead0a07..b2d75a0bbf 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -41,6 +41,7 @@ #include <ScriptEngines.h> #include "FileDialogHelper.h" #include "AudioClient.h" +#include <avatar/AvatarManager.h> static const float DPI = 30.47f; @@ -174,7 +175,9 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("AudioStats", DependencyManager::get<AudioClient>()->getStats().data()); _webSurface->getRootContext()->setContextProperty("HMD", DependencyManager::get<HMDScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("fileDialogHelper", new FileDialogHelper()); + _webSurface->getRootContext()->setContextProperty("MyAvatar", DependencyManager::get<AvatarManager>()->getMyAvatar().get()); _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); + _webSurface->getRootContext()->setContextProperty("Tablet", DependencyManager::get<TabletScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); From 1acc5ea760e5fe1d8a4eafad055e3620a8f998f5 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Wed, 8 Mar 2017 19:03:56 -0800 Subject: [PATCH 089/247] Finger now points when near tablet + deadspot added when touching the tablet --- scripts/defaultScripts.js | 2 +- .../system/controllers/handControllerGrab.js | 341 +++++++++++------- scripts/system/controllers/squeezeHands.js | 84 ++++- scripts/system/fingerPaint.js | 14 +- scripts/system/libraries/WebTablet.js | 1 + 5 files changed, 281 insertions(+), 161 deletions(-) diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index 5d8813e988..27efab134a 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -27,10 +27,10 @@ var DEFAULT_SCRIPTS = [ "system/tablet-users.js", "system/selectAudioDevice.js", "system/notifications.js", + "system/controllers/squeezeHands.js", "system/controllers/controllerDisplayManager.js", "system/controllers/handControllerGrab.js", "system/controllers/handControllerPointer.js", - "system/controllers/squeezeHands.js", "system/controllers/grab.js", "system/controllers/teleport.js", "system/controllers/toggleAdvancedMovementForHandControllers.js", diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index d966279e51..abd0484ec4 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -272,6 +272,12 @@ CONTROLLER_STATE_MACHINE[STATE_STYLUS_TOUCHING] = { updateMethod: "stylusTouching" }; +function distance2D(a, b) { + var dx = (a.x - b.x); + var dy = (a.y - b.y); + return Math.sqrt(dx * dx + dy * dy); +} + function getFingerWorldLocation(hand) { var fingerJointName = (hand === RIGHT_HAND) ? "RightHandIndex4" : "LeftHandIndex4"; @@ -664,6 +670,125 @@ function sendTouchMoveEventToStylusTarget(hand, stylusTarget) { } } +function calculateStylusTargetFromEntity(stylusTip, entityID) { + var props = entityPropertiesCache.getProps(entityID); + + // entity could have been deleted. + if (props === undefined) { + return undefined; + } + + // project stylus tip onto entity plane. + var normal = Vec3.multiplyQbyV(props.rotation, {x: 0, y: 0, z: 1}); + Vec3.multiplyQbyV(props.rotation, {x: 0, y: 1, z: 0}); + var distance = Vec3.dot(Vec3.subtract(stylusTip.position, props.position), normal); + var position = Vec3.subtract(stylusTip.position, Vec3.multiply(normal, distance)); + + // generate normalized coordinates + var invRot = Quat.inverse(props.rotation); + var localPos = Vec3.multiplyQbyV(invRot, Vec3.subtract(position, props.position)); + var invDimensions = { x: 1 / props.dimensions.x, y: 1 / props.dimensions.y, z: 1 / props.dimensions.z }; + var normalizedPosition = Vec3.sum(Vec3.multiplyVbyV(localPos, invDimensions), props.registrationPoint); + + // 2D position on entity plane in meters, relative to the bounding box upper-left hand corner. + var position2D = { x: normalizedPosition.x * props.dimensions.x, y: (1 - normalizedPosition.y) * props.dimensions.y }; // flip y-axis + + return { + entityID: entityID, + overlayID: null, + distance: distance, + position: position, + position2D: position2D, + normal: normal, + normalizedPosition: normalizedPosition, + dimensions: props.dimensions, + valid: true + }; +} + +function calculateStylusTargetFromOverlay(stylusTip, overlayID) { + var overlayPosition = Overlays.getProperty(overlayID, "position"); + + // overlay could have been deleted. + if (overlayPosition === undefined) { + return undefined; + } + + // project stylusTip onto overlay plane. + var overlayRotation = Overlays.getProperty(overlayID, "rotation"); + var normal = Vec3.multiplyQbyV(overlayRotation, {x: 0, y: 0, z: 1}); + var distance = Vec3.dot(Vec3.subtract(stylusTip.position, overlayPosition), normal); + var position = Vec3.subtract(stylusTip.position, Vec3.multiply(normal, distance)); + + // calclulate normalized position + var invRot = Quat.inverse(overlayRotation); + var localPos = Vec3.multiplyQbyV(invRot, Vec3.subtract(position, overlayPosition)); + var dpi = Overlays.getProperty(overlayID, "dpi"); + var dimensions; + if (dpi) { + // Calculate physical dimensions for web3d overlay from resolution and dpi; "dimensions" property is used as a scale. + var resolution = Overlays.getProperty(overlayID, "resolution"); + resolution.z = 1; // Circumvent divide-by-zero. + var scale = Overlays.getProperty(overlayID, "dimensions"); + scale.z = 0.01; // overlay dimensions are 2D, not 3D. + dimensions = Vec3.multiplyVbyV(Vec3.multiply(resolution, INCHES_TO_METERS / dpi), scale); + } else { + dimensions = Overlays.getProperty(overlayID, "dimensions"); + if (!dimensions.z) { + dimensions.z = 0.01; // sometimes overlay dimensions are 2D, not 3D. + } + } + var invDimensions = { x: 1 / dimensions.x, y: 1 / dimensions.y, z: 1 / dimensions.z }; + var normalizedPosition = Vec3.sum(Vec3.multiplyVbyV(localPos, invDimensions), DEFAULT_REGISTRATION_POINT); + + // 2D position on overlay plane in meters, relative to the bounding box upper-left hand corner. + var position2D = { x: normalizedPosition.x * dimensions.x, y: (1 - normalizedPosition.y) * dimensions.y }; // flip y-axis + + return { + entityID: null, + overlayID: overlayID, + distance: distance, + position: position, + position2D: position2D, + normal: normal, + normalizedPosition: normalizedPosition, + dimensions: dimensions, + valid: true + }; +} + +function isNearStylusTarget(stylusTargets, edgeBorder, minNormalDistance, maxNormalDistance) { + for (var i = 0; i < stylusTargets.length; i++) { + var stylusTarget = stylusTargets[i]; + + // check to see if the projected stylusTip is within within the 2d border + var borderMin = {x: -edgeBorder, y: -edgeBorder}; + var borderMax = {x: stylusTarget.dimensions.x + edgeBorder, y: stylusTarget.dimensions.y + edgeBorder}; + if (stylusTarget.distance >= minNormalDistance && stylusTarget.distance <= maxNormalDistance && + stylusTarget.position2D.x >= borderMin.x && stylusTarget.position2D.y >= borderMin.y && + stylusTarget.position2D.x <= borderMax.x && stylusTarget.position2D.y <= borderMax.y) { + return true; + } + } + return false; +} + +function calculateNearestStylusTarget(stylusTargets) { + var nearestStylusTarget; + + for (var i = 0; i < stylusTargets.length; i++) { + var stylusTarget = stylusTargets[i]; + + if ((!nearestStylusTarget || stylusTarget.distance < nearestStylusTarget.distance) && + stylusTarget.normalizedPosition.x >= 0 && stylusTarget.normalizedPosition.y >= 0 && + stylusTarget.normalizedPosition.x <= 1 && stylusTarget.normalizedPosition.y <= 1) { + nearestStylusTarget = stylusTarget; + } + } + + return nearestStylusTarget; +}; + // EntityPropertiesCache is a helper class that contains a cache of entity properties. // the hope is to prevent excess calls to Entity.getEntityProperties() // @@ -984,6 +1109,7 @@ function MyController(hand) { this.tabletStabbedPos3D = null; this.useFingerInsteadOfStylus = false; + this.fingerPointing = false; // initialize stylus tip var DEFAULT_STYLUS_TIP = { @@ -1417,123 +1543,6 @@ function MyController(hand) { return _this.rawThumbValue < THUMB_ON_VALUE; }; - // returns object with the following fields - // * entityID - if non null, this entityID is the closest to the stylusTip. - // * overlayID - if non null, this overlayID is the closest to the stylusTip. - // * distance - distance in meters from the stylus to the surface of the stylusTarget. - // * position - position on the surface of the stylusTarget that is nearest to the stylusTip. (world space) - // * position2D - postion on surface of the stylusTarget ready for use for pointerEvent.pos2D - // * normal - normal vector of the surface. (world space) - // * valid - if false, all other fields are invalid. - this.calculateNearestStylusTargetFromCandidates = function (candidates, cullSide) { - - // now attempt to find the nearest stylusTarget. - - var nearestStylusTarget = { - entityID: null, - overlayID: null, - distance: WEB_DISPLAY_STYLUS_DISTANCE, - position: {x: 0, y: 0, z: 0}, - normalizedPosition: {x: 0, y: 0, z: 0}, - normal: {x: 0, y: 0, z: 1}, - valid: false - }; - - if (candidates.entities.length > 0 || candidates.overlays.length > 0) { - var i, props, entityID, normal, distance, position, invRot, localPos, invDimensions, normalizedPos, position2D; - for (i = 0; i < candidates.entities.length; i++) { - entityID = candidates.entities[i]; - props = entityPropertiesCache.getProps(entityID); - - // entity could have been deleted. - if (props === undefined) { - continue; - } - - normal = Vec3.multiplyQbyV(props.rotation, {x: 0, y: 0, z: 1}); - Vec3.multiplyQbyV(props.rotation, {x: 0, y: 1, z: 0}); - distance = Vec3.dot(Vec3.subtract(this.stylusTip.position, props.position), normal); - position = Vec3.subtract(this.stylusTip.position, Vec3.multiply(normal, distance)); - - if (distance < nearestStylusTarget.distance) { - - invRot = Quat.inverse(props.rotation); - localPos = Vec3.multiplyQbyV(invRot, Vec3.subtract(position, props.position)); - invDimensions = { x: 1 / props.dimensions.x, y: 1 / props.dimensions.y, z: 1 / props.dimensions.z }; - normalizedPos = Vec3.sum(Vec3.multiplyVbyV(localPos, invDimensions), props.registrationPoint); - - if (normalizedPos.x >= 0 && normalizedPos.y >= 0 && normalizedPos.x <= 1 && normalizedPos.y <= 1) { - position2D = { x: normalizedPos.x * props.dimensions.x, y: (1 - normalizedPos.y) * props.dimensions.y }; // flip y-axis - nearestStylusTarget = { - entityID: entityID, - overlayID: null, - distance: distance, - position: position, - position2D: position2D, - normal: normal, - valid: true - }; - } - } - } - - for (i = 0; i < candidates.overlays.length; i++) { - var overlayID = candidates.overlays[i]; - var overlayPosition = Overlays.getProperty(overlayID, "position"); - - // overlay could have been deleted. - if (overlayPosition === undefined) { - continue; - } - - var overlayRotation = Overlays.getProperty(overlayID, "rotation"); - normal = Vec3.multiplyQbyV(overlayRotation, {x: 0, y: 0, z: 1}); - distance = Vec3.dot(Vec3.subtract(this.stylusTip.position, overlayPosition), normal); - position = Vec3.subtract(this.stylusTip.position, Vec3.multiply(normal, distance)); - - if (distance < nearestStylusTarget.distance) { - - invRot = Quat.inverse(overlayRotation); - localPos = Vec3.multiplyQbyV(invRot, Vec3.subtract(position, overlayPosition)); - - var dpi = Overlays.getProperty(overlayID, "dpi"); - var dimensions; - if (dpi) { - // Calculate physical dimensions for web3d overlay from resolution and dpi; "dimensions" property is used as a scale. - var resolution = Overlays.getProperty(overlayID, "resolution"); - resolution.z = 1; // Circumvent divide-by-zero. - var scale = Overlays.getProperty(overlayID, "dimensions"); - scale.z = 0.01; // overlay dimensions are 2D, not 3D. - dimensions = Vec3.multiplyVbyV(Vec3.multiply(resolution, INCHES_TO_METERS / dpi), scale); - } else { - dimensions = Overlays.getProperty(overlayID, "dimensions"); - if (!dimensions.z) { - dimensions.z = 0.01; // sometimes overlay dimensions are 2D, not 3D. - } - } - - invDimensions = { x: 1 / dimensions.x, y: 1 / dimensions.y, z: 1 / dimensions.z }; - normalizedPos = Vec3.sum(Vec3.multiplyVbyV(localPos, invDimensions), DEFAULT_REGISTRATION_POINT); - - if (!cullSide || (normalizedPos.x >= 0 && normalizedPos.y >= 0 && normalizedPos.x <= 1 && normalizedPos.y <= 1)) { - position2D = { x: normalizedPos.x * dimensions.x, y: (1 - normalizedPos.y) * dimensions.y }; // flip y-axis - nearestStylusTarget = { - entityID: null, - overlayID: overlayID, - distance: distance, - position: position, - position2D: position2D, - normal: normal, - valid: true - }; - } - } - } - } - - return nearestStylusTarget; - }; - this.stealTouchFocus = function(stylusTarget) { // send hover events to target // record the entity or overlay we are hovering over. @@ -1577,8 +1586,23 @@ function MyController(hand) { } }; + this.pointFinger = function(value) { + var HIFI_POINT_INDEX_MESSAGE_CHANNEL = "Hifi-Point-Index"; + if (this.fingerPointing !== value) { + var message; + if (this.hand === RIGHT_HAND) { + message = { pointRightIndex: value }; + } else { + message = { pointLeftIndex: value }; + } + Messages.sendMessage(HIFI_POINT_INDEX_MESSAGE_CHANNEL, JSON.stringify(message), true); + this.fingerPointing = value; + } + }; + this.processStylus = function() { if (!this.stylusTip.valid) { + this.pointFinger(false); this.hideStylus(); return; } @@ -1615,20 +1639,53 @@ function MyController(hand) { candidates.overlays.push(HMD.homeButtonID); } - var nearestStylusTarget = this.calculateNearestStylusTargetFromCandidates(candidates, true); + // build list of stylus targets + var stylusTargets = []; + if (candidates.entities.length > 0 || candidates.overlays.length > 0) { + var stylusTarget; + for (i = 0; i < candidates.entities.length; i++) { + stylusTarget = calculateStylusTargetFromEntity(this.stylusTip, candidates.entities[i]); + if (stylusTarget) { + stylusTargets.push(stylusTarget); + } + } - if (!this.useFingerInsteadOfStylus && nearestStylusTarget.valid) { - this.showStylus(); - } else { - this.hideStylus(); + for (i = 0; i < candidates.overlays.length; i++) { + stylusTarget = calculateStylusTargetFromOverlay(this.stylusTip, candidates.overlays[i]); + if (stylusTarget) { + stylusTargets.push(stylusTarget); + } + } } var TABLET_MIN_HOVER_DISTANCE = 0.01; var TABLET_MAX_HOVER_DISTANCE = 0.1; var TABLET_MIN_TOUCH_DISTANCE = -0.05; var TABLET_MAX_TOUCH_DISTANCE = TABLET_MIN_HOVER_DISTANCE; + var EDGE_BORDER = 0.075; - if (nearestStylusTarget.valid && nearestStylusTarget.distance > TABLET_MIN_TOUCH_DISTANCE && + var hysteresisOffset = 0.0; + if (this.isNearStylusTarget) { + hysteresisOffset = 0.05; + } + + this.isNearStylusTarget = isNearStylusTarget(stylusTargets, EDGE_BORDER + hysteresisOffset, + TABLET_MIN_TOUCH_DISTANCE - hysteresisOffset, WEB_DISPLAY_STYLUS_DISTANCE + hysteresisOffset); + + if (this.isNearStylusTarget) { + if (!this.useFingerInsteadOfStylus) { + this.showStylus(); + } else { + this.pointFinger(true); + } + } else { + this.hideStylus(); + this.pointFinger(false); + } + + var nearestStylusTarget = calculateNearestStylusTarget(stylusTargets); + + if (nearestStylusTarget && nearestStylusTarget.distance > TABLET_MIN_TOUCH_DISTANCE && nearestStylusTarget.distance < TABLET_MAX_HOVER_DISTANCE) { this.requestTouchFocus(nearestStylusTarget); @@ -1642,8 +1699,11 @@ function MyController(hand) { } // filter out presses when tip is moving away from tablet. + // ensure that stylus is within bounding box by checking normalizedPosition if (nearestStylusTarget.valid && nearestStylusTarget.distance > TABLET_MIN_TOUCH_DISTANCE && - nearestStylusTarget.distance < TABLET_MAX_TOUCH_DISTANCE && Vec3.dot(this.stylusTip.velocity, nearestStylusTarget.normal) < 0) { + nearestStylusTarget.distance < TABLET_MAX_TOUCH_DISTANCE && Vec3.dot(this.stylusTip.velocity, nearestStylusTarget.normal) < 0 && + nearestStylusTarget.normalizedPosition.x >= 0 && nearestStylusTarget.normalizedPosition.x <= 1 && + nearestStylusTarget.normalizedPosition.y >= 0 && nearestStylusTarget.normalizedPosition.y <= 1) { var name; if (nearestStylusTarget.entityID) { @@ -3505,8 +3565,8 @@ function MyController(hand) { this.touchingEnterStylusTarget = this.stylusTarget; this.deadspotExpired = false; - var TOUCH_PRESS_TO_MOVE_DEADSPOT = 0.025; - this.deadspotRadius = TOUCH_PRESS_TO_MOVE_DEADSPOT; // meters + var TOUCH_PRESS_TO_MOVE_DEADSPOT = 0.0381; + this.deadspotRadius = TOUCH_PRESS_TO_MOVE_DEADSPOT; }; this.stylusTouchingExit = function () { @@ -3528,26 +3588,29 @@ function MyController(hand) { this.touchingEnterTimer += dt; - var candidates = { entities: [], overlays: [] }; - if (this.stylusTarget.entityID && this.stylusTarget.entityID !== NULL_UUID) { - candidates.entities.push(this.stylusTarget.entityID); - } else if (this.stylusTarget.overlayID && this.stylusTarget.overlayID !== NULL_UUID) { - candidates.overlays.push(this.stylusTarget.overlayID); + if (this.stylusTarget.entityID) { + entityPropertiesCache.addEntity(this.stylusTarget.entityID); + this.stylusTarget = calcualteStylusTargetFromEntity(this.stylusTip, this.stylusTarget.entityID); + } else if (this.stylusTarget.overlayID) { + this.stylusTarget = calculateStylusTargetFromOverlay(this.stylusTip, this.stylusTarget.overlayID); } - this.stylusTarget = this.calculateNearestStylusTargetFromCandidates(candidates, false); var TABLET_MIN_TOUCH_DISTANCE = -0.1; var TABLET_MAX_TOUCH_DISTANCE = 0.01; - if (this.stylusTarget.valid && this.stylusTarget.distance > TABLET_MIN_TOUCH_DISTANCE && this.stylusTarget.distance < TABLET_MAX_TOUCH_DISTANCE) { - - var POINTER_PRESS_TO_MOVE_DELAY = 0.25; // seconds - if (this.deadspotExpired || this.touchingEnterTimer > POINTER_PRESS_TO_MOVE_DELAY || - Vec3.distance(this.stylusTarget.position, this.touchingEnterPointerEvent.pos3D) > this.deadspotRadius) { - sendTouchMoveEventToStylusTarget(this.hand, this.stylusTarget); + if (this.stylusTarget) { + if (this.stylusTarget.distance > TABLET_MIN_TOUCH_DISTANCE && this.stylusTarget.distance < TABLET_MAX_TOUCH_DISTANCE) { + var POINTER_PRESS_TO_MOVE_DELAY = 0.33; // seconds + if (this.deadspotExpired || this.touchingEnterTimer > POINTER_PRESS_TO_MOVE_DELAY || + distance2D(this.stylusTarget.position2D, this.touchingEnterStylusTarget.position2D) > this.deadspotRadius) { + sendTouchMoveEventToStylusTarget(this.hand, this.stylusTarget); + this.deadspotExpired = true; + } + } else { + this.setState(STATE_OFF, "hand moved away from touch surface"); } } else { - this.setState(STATE_OFF, "hand moved away from tablet"); + this.setState(STATE_OFF, "touch surface was destroyed"); } }; diff --git a/scripts/system/controllers/squeezeHands.js b/scripts/system/controllers/squeezeHands.js index 75e6249dd6..c9de473e28 100644 --- a/scripts/system/controllers/squeezeHands.js +++ b/scripts/system/controllers/squeezeHands.js @@ -11,6 +11,7 @@ // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +/* eslint indent: ["error", 4, { "outerIIFEBody": 0 }] */ (function() { // BEGIN LOCAL_SCOPE @@ -25,7 +26,11 @@ var OVERLAY_RAMP_RATE = 8.0; var animStateHandlerID; -var isBothIndexesPointing = false; +var leftIndexPointingOverride = 0; +var rightIndexPointingOverride = 0; +var leftThumbRaisedOverride = 0; +var rightThumbRaisedOverride = 0; + var HIFI_POINT_INDEX_MESSAGE_CHANNEL = "Hifi-Point-Index"; var isLeftIndexPointing = false; @@ -53,7 +58,7 @@ function init() { "leftHandOverlayAlpha", "leftHandGraspAlpha", "rightHandOverlayAlpha", "rightHandGraspAlpha", "isLeftHandGrasp", "isLeftIndexPoint", "isLeftThumbRaise", "isLeftIndexPointAndThumbRaise", - "isRightHandGrasp", "isRightIndexPoint", "isRightThumbRaise", "isRightIndexPointAndThumbRaise", + "isRightHandGrasp", "isRightIndexPoint", "isRightThumbRaise", "isRightIndexPointAndThumbRaise" ] ); Messages.subscribe(HIFI_POINT_INDEX_MESSAGE_CHANNEL); @@ -66,21 +71,23 @@ function animStateHandler(props) { leftHandGraspAlpha: lastLeftTrigger, rightHandOverlayAlpha: rightHandOverlayAlpha, rightHandGraspAlpha: lastRightTrigger, - isLeftHandGrasp: !isBothIndexesPointing && !isLeftIndexPointing && !isLeftThumbRaised, - isLeftIndexPoint: (isBothIndexesPointing || isLeftIndexPointing) && !isLeftThumbRaised, - isLeftThumbRaise: !isBothIndexesPointing && !isLeftIndexPointing && isLeftThumbRaised, - isLeftIndexPointAndThumbRaise: (isBothIndexesPointing || isLeftIndexPointing) && isLeftThumbRaised, - isRightHandGrasp: !isBothIndexesPointing && !isRightIndexPointing && !isRightThumbRaised, - isRightIndexPoint: (isBothIndexesPointing || isRightIndexPointing) && !isRightThumbRaised, - isRightThumbRaise: !isBothIndexesPointing && !isRightIndexPointing && isRightThumbRaised, - isRightIndexPointAndThumbRaise: (isBothIndexesPointing || isRightIndexPointing) && isRightThumbRaised + + isLeftHandGrasp: !isLeftIndexPointing && !isLeftThumbRaised, + isLeftIndexPoint: isLeftIndexPointing && !isLeftThumbRaised, + isLeftThumbRaise: !isLeftIndexPointing && isLeftThumbRaised, + isLeftIndexPointAndThumbRaise: isLeftIndexPointing && isLeftThumbRaised, + + isRightHandGrasp: !isRightIndexPointing && !isRightThumbRaised, + isRightIndexPoint: isRightIndexPointing && !isRightThumbRaised, + isRightThumbRaise: !isRightIndexPointing && isRightThumbRaised, + isRightIndexPointAndThumbRaise: isRightIndexPointing && isRightThumbRaised }; } function update(dt) { var leftTrigger = clamp(Controller.getValue(Controller.Standard.LT) + Controller.getValue(Controller.Standard.LeftGrip), 0, 1); var rightTrigger = clamp(Controller.getValue(Controller.Standard.RT) + Controller.getValue(Controller.Standard.RightGrip), 0, 1); - + // Average last few trigger values together for a bit of smoothing var tau = clamp(dt / TRIGGER_SMOOTH_TIMESCALE, 0, 1); lastLeftTrigger = lerp(leftTrigger, lastLeftTrigger, tau); @@ -103,18 +110,61 @@ function update(dt) { } // Pointing index fingers and raising thumbs - isLeftIndexPointing = leftHandPose.valid && Controller.getValue(Controller.Standard.LeftIndexPoint) === 1; - isRightIndexPointing = rightHandPose.valid && Controller.getValue(Controller.Standard.RightIndexPoint) === 1; - isLeftThumbRaised = leftHandPose.valid && Controller.getValue(Controller.Standard.LeftThumbUp) === 1; - isRightThumbRaised = rightHandPose.valid && Controller.getValue(Controller.Standard.RightThumbUp) === 1; + isLeftIndexPointing = (leftIndexPointingOverride > 0) || (leftHandPose.valid && Controller.getValue(Controller.Standard.LeftIndexPoint) === 1); + isRightIndexPointing = (rightIndexPointingOverride > 0) || (rightHandPose.valid && Controller.getValue(Controller.Standard.RightIndexPoint) === 1); + isLeftThumbRaised = (leftThumbRaisedOverride > 0) || (leftHandPose.valid && Controller.getValue(Controller.Standard.LeftThumbUp) === 1); + isRightThumbRaised = (rightThumbRaisedOverride > 0) || (rightHandPose.valid && Controller.getValue(Controller.Standard.RightThumbUp) === 1); } function handleMessages(channel, message, sender) { if (sender === MyAvatar.sessionUUID && channel === HIFI_POINT_INDEX_MESSAGE_CHANNEL) { var data = JSON.parse(message); + if (data.pointIndex !== undefined) { - print("pointIndex: " + data.pointIndex); - isBothIndexesPointing = data.pointIndex; + if (data.pointIndex) { + leftIndexPointingOverride++; + rightIndexPointingOverride++; + } else { + leftIndexPointingOverride--; + rightIndexPointingOverride--; + } + } + if (data.pointLeftIndex !== undefined) { + if (data.pointLeftIndex) { + leftIndexPointingOverride++; + } else { + leftIndexPointingOverride--; + } + } + if (data.pointRightIndex !== undefined) { + if (data.pointRightIndex) { + rightIndexPointingOverride++; + } else { + rightIndexPointingOverride--; + } + } + if (data.raiseThumbs !== undefined) { + if (data.raiseThumbs) { + leftThumbRaisedOverride++; + rightThumbRaisedOverride++; + } else { + leftThumbRaisedOverride--; + rightThumbRaisedOverride--; + } + } + if (data.raiseLeftThumb !== undefined) { + if (data.raiseLeftThumb) { + leftThumbRaisedOverride++; + } else { + leftThumbRaisedOverride--; + } + } + if (data.raiseRightThumb !== undefined) { + if (data.raiseRightThumb) { + rightThumbRaisedOverride++; + } else { + rightThumbRaisedOverride--; + } } } } diff --git a/scripts/system/fingerPaint.js b/scripts/system/fingerPaint.js index 959f594212..27206ef9fa 100644 --- a/scripts/system/fingerPaint.js +++ b/scripts/system/fingerPaint.js @@ -13,6 +13,7 @@ button, BUTTON_NAME = "PAINT", isFingerPainting = false, + shouldPointFingers = false, leftHand = null, rightHand = null, leftBrush = null, @@ -308,9 +309,14 @@ Messages.sendMessage(HIFI_POINTER_DISABLE_MESSAGE_CHANNEL, JSON.stringify({ pointerEnabled: enabled }), true); - Messages.sendMessage(HIFI_POINT_INDEX_MESSAGE_CHANNEL, JSON.stringify({ - pointIndex: !enabled - }), true); + + var newShouldPointFingers = !enabled; + if (newShouldPointFingers !== shouldPointFingers) { + Messages.sendMessage(HIFI_POINT_INDEX_MESSAGE_CHANNEL, JSON.stringify({ + pointIndex: newShouldPointFingers + }), true); + shouldPointFingers = newShouldPointFingers; + } } function enableProcessing() { @@ -430,4 +436,4 @@ setUp(); Script.scriptEnding.connect(tearDown); -}()); \ No newline at end of file +}()); diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 8859b13624..c7706da28b 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -171,6 +171,7 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { this.homeButtonID = Overlays.addOverlay("sphere", { name: "homeButton", localPosition: {x: -0.001, y: -HOME_BUTTON_Y_OFFSET, z: 0.0}, + localRotation: {x: 0, y: 1, z: 0, w: 0}, dimensions: { x: 4 * tabletScaleFactor, y: 4 * tabletScaleFactor, z: 4 * tabletScaleFactor}, alpha: 0.0, visible: true, From 66dded5e2888aabc2921d36e3c8486642b146fd7 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 9 Mar 2017 18:13:26 +1300 Subject: [PATCH 090/247] Scroll attachments if necessary when raise keyboard to keep focus --- .../qml/hifi/dialogs/AttachmentsDialog.qml | 10 ++++++++ .../dialogs/content/AttachmentsContent.qml | 20 ++-------------- .../hifi/tablet/TabletAttachmentsDialog.qml | 23 ++++++++++++++++++- 3 files changed, 34 insertions(+), 19 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml b/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml index a833c0fe61..66338666cf 100644 --- a/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml +++ b/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml @@ -42,4 +42,14 @@ ScrollingWindow { AttachmentsContent { } + onKeyboardRaisedChanged: { + if (keyboardEnabled && keyboardRaised) { + var buttonHeight = 40; // Allow for New Attachment button. + var keyboardRaisedHeight = 200; + var delta = activator.mouseY - (root.height - keyboardRaisedHeight - buttonHeight); + if (delta > 0) { + content.scrollBy(delta); + } + } + } } diff --git a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml index b36b7080bc..4793d83e21 100644 --- a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml +++ b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml @@ -191,24 +191,8 @@ Item { } } - // FIXME - /* - onKeyboardRaisedChanged: { - if (keyboardEnabled && keyboardRaised) { - // Scroll to item with focus if necessary. - var footerHeight = newAttachmentButton.height + buttonRow.height + 3 * hifi.dimensions.contentSpacing.y; - var delta = activator.mouseY - - (activator.height + activator.y - 200 - footerHeight - hifi.dimensions.controlLineHeight); - - if (delta > 0) { - scrollView.scrollBy(delta); - } else { - // HACK: Work around for case where are 100% scrolled; stops window from erroneously scrolling to 100% when show keyboard. - scrollView.scrollBy(-1); - scrollView.scrollBy(1); - } - } + function scrollBy(delta) { + scrollView.scrollBy(delta); } - */ } diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml index 5dd7e75eed..0bb43fccd2 100644 --- a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -49,7 +49,7 @@ Item { MouseArea { // Defocuses any current control so that the keyboard gets hidden. - id: mouseArea + id: defocuser anchors.fill: parent propagateComposedEvents: true acceptedButtons: Qt.AllButtons @@ -71,6 +71,27 @@ Item { } } + onKeyboardRaisedChanged: { + if (keyboardEnabled && keyboardRaised) { + var buttonsHeight = 120; // Allow for New Attachment plus Cancel & OK buttons. + var delta = activator.mouseY - (root.height - keyboard.raisedHeight - buttonsHeight); + if (delta > 0) { + attachments.scrollBy(delta); + } + } + } + + MouseArea { + id: activator + anchors.fill: parent + propagateComposedEvents: true + enabled: true + acceptedButtons: Qt.AllButtons + onPressed: { + mouse.accepted = false; + } + } + Component.onCompleted: { keyboardEnabled = HMD.active; } From 4be106cbae93a57352786a2d55e8cacfc8654de9 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 9 Mar 2017 18:20:26 +1300 Subject: [PATCH 091/247] Remove obsolete rounded border --- .../resources/qml/hifi/dialogs/content/AttachmentsContent.qml | 1 - interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml | 1 - 2 files changed, 2 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml index 4793d83e21..47cd633f76 100644 --- a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml +++ b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml @@ -28,7 +28,6 @@ Item { Rectangle { width: parent.width height: root.height - (keyboardEnabled && keyboardRaised ? 200 : 0) - radius: 4 color: hifi.colors.baseGray Rectangle { diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml index 0bb43fccd2..743d0305c6 100644 --- a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -30,7 +30,6 @@ Item { Rectangle { id: pane // Surrogate for ScrollingWindow's pane. anchors.fill: parent - color: hifi.colors.baseGray // Match that of dialog so that dialog's rounded corners don't show. } function closeDialog() { From 53dcf80cc0f332af855466c69261732062e81217 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 9 Mar 2017 22:38:49 +1300 Subject: [PATCH 092/247] Add dialog title --- .../hifi/tablet/TabletAttachmentsDialog.qml | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml index 743d0305c6..46d285ddb5 100644 --- a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -19,6 +19,8 @@ Item { id: root objectName: "AttachmentsDialog" + property string title: "Avatar Attachments" + property bool keyboardEnabled: false property bool keyboardRaised: false property bool punctuationMode: false @@ -36,11 +38,46 @@ Item { Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } + anchors.topMargin: 90 // Space for header. + + // FIXME: Refactor with other tablet headers. + Rectangle { + id: header + height: 90 + anchors { + left: parent.left + right: parent.right + bottom: parent.top + } + z: 100 + + gradient: Gradient { + GradientStop { + position: 0 + color: "#2b2b2b" + } + + GradientStop { + position: 1 + color: "#1e1e1e" + } + } + + RalewayBold { + text: title + size: 26 + color: "#34a2c7" + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: hifi.dimensions.contentMargin.x + } + } + AttachmentsContent { id: attachments anchors { - top: parent.top + top: header.bottom left: parent.left right: parent.right bottom: keyboard.top From c7d1aa8ff46e1c34d6bfeca3a612c6e13b61813a Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 10 Mar 2017 08:26:00 +1300 Subject: [PATCH 093/247] Make attachments list flickable --- .../dialogs/content/AttachmentsContent.qml | 86 +++++-------------- 1 file changed, 21 insertions(+), 65 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml index 47cd633f76..55a5deeb60 100644 --- a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml +++ b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml @@ -40,78 +40,34 @@ Item { color: hifi.colors.baseGrayShadow radius: 4 - ScrollView { - id: scrollView + ListView { + id: listView anchors.fill: parent anchors.margins: 4 + clip: true + focus: true - style: ScrollViewStyle { - - padding { - top: 0 - right: 0 - bottom: 0 - } - - decrementControl: Item { - visible: false - } - incrementControl: Item { - visible: false - } - scrollBarBackground: Rectangle{ - implicitWidth: 14 - color: hifi.colors.baseGray - radius: 4 - Rectangle { - // Make top left corner of scrollbar appear square - width: 8 - height: 4 - color: hifi.colors.baseGray - anchors.top: parent.top - anchors.horizontalCenter: parent.left + model: ListModel {} + delegate: Item { + id: attachmentDelegate + implicitHeight: attachmentView.height + 8; + implicitWidth: attachmentView.width + Attachment { + id: attachmentView + width: listView.width + attachment: content.attachments[index] + onDeleteAttachment: { + attachments.splice(index, 1); + listView.model.remove(index, 1); } - - } - handle: - Rectangle { - implicitWidth: 8 - anchors { - left: parent.left - leftMargin: 3 - top: parent.top - topMargin: 3 - bottom: parent.bottom - bottomMargin: 4 - } - radius: 4 - color: hifi.colors.lightGrayText + onUpdateAttachment: MyAvatar.setAttachmentsVariant(attachments); } } - - ListView { - id: listView - model: ListModel {} - delegate: Item { - id: attachmentDelegate - implicitHeight: attachmentView.height + 8; - implicitWidth: attachmentView.width - Attachment { - id: attachmentView - width: scrollView.width - attachment: content.attachments[index] - onDeleteAttachment: { - attachments.splice(index, 1); - listView.model.remove(index, 1); - } - onUpdateAttachment: MyAvatar.setAttachmentsVariant(attachments); - } - } - onCountChanged: MyAvatar.setAttachmentsVariant(attachments); - } + onCountChanged: MyAvatar.setAttachmentsVariant(attachments); function scrollBy(delta) { - flickableItem.contentY += delta; + // @@@@@@@ + //flickableItem.contentY += delta; } } } @@ -191,7 +147,7 @@ Item { } function scrollBy(delta) { - scrollView.scrollBy(delta); + listView.scrollBy(delta); } } From 6f53aaed5c42a704c12aee69e3b60c2915c79ccb Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidleity.io> Date: Thu, 9 Mar 2017 14:04:13 -0800 Subject: [PATCH 094/247] Small simplification of building stylusTarget list. --- .../system/controllers/handControllerGrab.js | 28 ++++--------------- 1 file changed, 5 insertions(+), 23 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index abd0484ec4..284bb3af15 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1618,44 +1618,26 @@ function MyController(hand) { overlays: [] }; - // find web-entites near the stylusTip. + // build list of stylus targets, near the stylusTip + var stylusTargets = []; var candidateEntities = Entities.findEntities(tipPosition, WEB_DISPLAY_STYLUS_DISTANCE); entityPropertiesCache.addEntities(candidateEntities); var i, props; for (i = 0; i < candidateEntities.length; i++) { props = entityPropertiesCache.getProps(candidateEntities[i]); if (props && (props.type === "Web" || this.isTablet(candidateEntities[i]))) { - candidates.entities.push(candidateEntities[i]); + stylusTargets.push(calculateStylusTargetFromEntity(this.stylusTip, candidateEntities[i])); } } // add the tabletScreen, if it is valid if (HMD.tabletScreenID && HMD.tabletScreenID !== NULL_UUID) { - candidates.overlays.push(HMD.tabletScreenID); + stylusTargets.push(calculateStylusTargetFromOverlay(this.stylusTip, HMD.tabletScreenID)); } // add the tablet home button. if (HMD.homeButtonID && HMD.homeButtonID !== NULL_UUID) { - candidates.overlays.push(HMD.homeButtonID); - } - - // build list of stylus targets - var stylusTargets = []; - if (candidates.entities.length > 0 || candidates.overlays.length > 0) { - var stylusTarget; - for (i = 0; i < candidates.entities.length; i++) { - stylusTarget = calculateStylusTargetFromEntity(this.stylusTip, candidates.entities[i]); - if (stylusTarget) { - stylusTargets.push(stylusTarget); - } - } - - for (i = 0; i < candidates.overlays.length; i++) { - stylusTarget = calculateStylusTargetFromOverlay(this.stylusTip, candidates.overlays[i]); - if (stylusTarget) { - stylusTargets.push(stylusTarget); - } - } + stylusTargets.push(calculateStylusTargetFromOverlay(this.stylusTip, HMD.homeButtonID)); } var TABLET_MIN_HOVER_DISTANCE = 0.01; From b539c55c025ea82311c1ce0626093be7ed00d621 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 10 Mar 2017 14:33:51 +1300 Subject: [PATCH 095/247] Scroll and snap to attachment with focus --- .../resources/qml/controls-uit/CheckBox.qml | 2 ++ .../hifi/dialogs/attachments/Attachment.qml | 20 +++++++++++ .../qml/hifi/dialogs/attachments/Vector3.qml | 32 ++++++++++++++++- .../dialogs/content/AttachmentsContent.qml | 35 ++++++++++++++----- .../hifi/tablet/TabletAttachmentsDialog.qml | 10 ------ 5 files changed, 79 insertions(+), 20 deletions(-) diff --git a/interface/resources/qml/controls-uit/CheckBox.qml b/interface/resources/qml/controls-uit/CheckBox.qml index 09a0e04148..9fc484586a 100644 --- a/interface/resources/qml/controls-uit/CheckBox.qml +++ b/interface/resources/qml/controls-uit/CheckBox.qml @@ -25,6 +25,8 @@ Original.CheckBox { readonly property int checkSize: Math.max(boxSize - 8, 10) readonly property int checkRadius: 2 + activeFocusOnPress: true + style: CheckBoxStyle { indicator: Rectangle { id: box diff --git a/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml b/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml index 6d371741ea..5c11a87d12 100644 --- a/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml +++ b/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml @@ -17,10 +17,24 @@ Item { HifiConstants { id: hifi } + signal selectAttachment(); signal deleteAttachment(var attachment); signal updateAttachment(); property bool completed: false; + function doSelectAttachment(control, focus) { + if (focus) { + selectAttachment(); + + // Refocus control after possibly changing focus to attachment. + if (control.setControlFocus !== undefined) { + control.setControlFocus(); + } else { + control.focus = true; + } + } + } + Rectangle { color: hifi.colors.baseGray; anchors.fill: parent; radius: 4 } Component.onCompleted: { @@ -50,6 +64,7 @@ Item { updateAttachment(); } } + onFocusChanged: doSelectAttachment(this, focus); } HifiControls.Button { id: modelChooserButton; @@ -91,6 +106,7 @@ Item { updateAttachment(); } } + onFocusChanged: doSelectAttachment(this, focus); } } @@ -108,6 +124,7 @@ Item { updateAttachment(); } } + onControlFocusChanged: doSelectAttachment(this, controlFocus); } } @@ -125,6 +142,7 @@ Item { updateAttachment(); } } + onControlFocusChanged: doSelectAttachment(this, controlFocus); } } @@ -153,6 +171,7 @@ Item { updateAttachment(); } } + onFocusChanged: doSelectAttachment(this, focus); } } @@ -178,6 +197,7 @@ Item { updateAttachment(); } } + onFocusChanged: doSelectAttachment(this, focus); } } } diff --git a/interface/resources/qml/hifi/dialogs/attachments/Vector3.qml b/interface/resources/qml/hifi/dialogs/attachments/Vector3.qml index 3d109cc2a5..29f2c0ebf4 100644 --- a/interface/resources/qml/hifi/dialogs/attachments/Vector3.qml +++ b/interface/resources/qml/hifi/dialogs/attachments/Vector3.qml @@ -15,9 +15,37 @@ Item { property real stepSize: 1 property real maximumValue: 99 property real minimumValue: 0 + property bool controlFocus: false; // True if one of the ordinate controls has focus. + property var controlFocusControl: undefined signal valueChanged(); + function setControlFocus() { + if (controlFocusControl) { + controlFocusControl.focus = true; + // The controlFocus value is updated via onFocusChanged. + } + } + + function setFocus(control, focus) { + if (focus) { + controlFocusControl = control; + setControlFocusTrue.start(); // After any subsequent false from previous control. + } else { + controlFocus = false; + } + } + + Timer { + id: setControlFocusTrue + interval: 50 + repeat: false + running: false + onTriggered: { + controlFocus = true; + } + } + HifiConstants { id: hifi } HifiControls.SpinBox { @@ -38,6 +66,7 @@ Item { root.valueChanged(); } } + onFocusChanged: setFocus(this, focus); } HifiControls.SpinBox { @@ -58,6 +87,7 @@ Item { root.valueChanged(); } } + onFocusChanged: setFocus(this, focus); } HifiControls.SpinBox { @@ -78,6 +108,6 @@ Item { root.valueChanged(); } } + onFocusChanged: setFocus(this, focus); } } - diff --git a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml index 55a5deeb60..ac271c5793 100644 --- a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml +++ b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml @@ -45,17 +45,32 @@ Item { anchors.fill: parent anchors.margins: 4 clip: true - focus: true + snapMode: ListView.SnapToItem model: ListModel {} delegate: Item { id: attachmentDelegate implicitHeight: attachmentView.height + 8; implicitWidth: attachmentView.width + + MouseArea { + // User can click on whitespace to select item. + anchors.fill: parent + propagateComposedEvents: true + onClicked: { + listView.currentIndex = index; + attachmentsBackground.forceActiveFocus(); // Unfocus from any control. + mouse.accepted = false; + } + } + Attachment { id: attachmentView width: listView.width attachment: content.attachments[index] + onSelectAttachment: { + listView.currentIndex = index; + } onDeleteAttachment: { attachments.splice(index, 1); listView.model.remove(index, 1); @@ -63,11 +78,18 @@ Item { onUpdateAttachment: MyAvatar.setAttachmentsVariant(attachments); } } + onCountChanged: MyAvatar.setAttachmentsVariant(attachments); - function scrollBy(delta) { - // @@@@@@@ - //flickableItem.contentY += delta; + /* */ + // DEBUG + highlight: Rectangle { color: "#40ffff00" } + highlightFollowsCurrentItem: true + /* */ + + onHeightChanged: { + // Keyboard has been raised / lowered. + positionViewAtIndex(currentIndex, ListView.SnapPosition); } } } @@ -145,9 +167,4 @@ Item { } } } - - function scrollBy(delta) { - listView.scrollBy(delta); - } } - diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml index 46d285ddb5..dac43c9c3c 100644 --- a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -107,16 +107,6 @@ Item { } } - onKeyboardRaisedChanged: { - if (keyboardEnabled && keyboardRaised) { - var buttonsHeight = 120; // Allow for New Attachment plus Cancel & OK buttons. - var delta = activator.mouseY - (root.height - keyboard.raisedHeight - buttonsHeight); - if (delta > 0) { - attachments.scrollBy(delta); - } - } - } - MouseArea { id: activator anchors.fill: parent From 9291d272fe5510a94fad9c7c2e17adac5a61d809 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 10 Mar 2017 18:25:16 +1300 Subject: [PATCH 096/247] Add scrollbar --- .../dialogs/content/AttachmentsContent.qml | 97 ++++++++++++++++++- 1 file changed, 92 insertions(+), 5 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml index ac271c5793..bd6a2fecf9 100644 --- a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml +++ b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml @@ -42,8 +42,13 @@ Item { ListView { id: listView - anchors.fill: parent - anchors.margins: 4 + anchors { + top: parent.top + left: parent.left + right: scrollBar.left + bottom: parent.bottom + margins: 4 + } clip: true snapMode: ListView.SnapToItem @@ -81,15 +86,97 @@ Item { onCountChanged: MyAvatar.setAttachmentsVariant(attachments); - /* */ + /* // DEBUG highlight: Rectangle { color: "#40ffff00" } highlightFollowsCurrentItem: true - /* */ + */ onHeightChanged: { // Keyboard has been raised / lowered. - positionViewAtIndex(currentIndex, ListView.SnapPosition); + positionViewAtIndex(listView.currentIndex, ListView.SnapPosition); + } + + onCurrentIndexChanged: { + scrollSlider.y = currentIndex * (scrollBar.height - scrollSlider.height) / (listView.count - 1); + } + + onContentYChanged: { + // User may have dragged content up/down. + yScrollTimer.restart(); + } + + Timer { + id: yScrollTimer + interval: 50 + repeat: false + running: false + onTriggered: { + var index = listView.contentY / (scrollBar.height - scrollSlider.height); + index = Math.round(index); + listView.currentIndex = index; + } + } + } + + Rectangle { + id: scrollBar + + property bool scrolling: listView.contentHeight > listView.height + + anchors { + top: parent.top + right: parent.right + bottom: parent.bottom + topMargin: 4 + bottomMargin: 4 + } + width: scrolling ? 18 : 0 + radius: attachmentsBackground.radius + color: hifi.colors.baseGrayShadow + + MouseArea { + anchors.fill: parent + + onClicked: { + var index = listView.currentIndex; + index = index + (mouse.y <= scrollSlider.y ? -1 : 1); + if (index < 0) { + index = 0; + } + if (index > listView.count - 1) { + index = listView.count - 1; + } + listView.currentIndex = index; + } + } + + Rectangle { + id: scrollSlider + anchors { + right: parent.right + rightMargin: 3 + } + width: 16 + height: (listView.height / listView.contentHeight) * listView.height + radius: width / 2 + color: hifi.colors.lightGray + + visible: scrollBar.scrolling; + + onYChanged: { + var index = y * (listView.count - 1) / (scrollBar.height - scrollSlider.height); + index = Math.round(index); + listView.currentIndex = index; + } + + MouseArea { + anchors.fill: parent + drag.target: scrollSlider + drag.axis: Drag.YAxis + drag.minimumY: 0 + drag.maximumY: scrollBar.height - scrollSlider.height + } } } } From 7af9f879dd1f3e3b89ad805ab7e23d01747027bd Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 10 Mar 2017 21:44:20 +1300 Subject: [PATCH 097/247] Fix scrollbar and keyboard behavior --- .../qml/hifi/dialogs/content/AttachmentsContent.qml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml index bd6a2fecf9..4adb485c2b 100644 --- a/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml +++ b/interface/resources/qml/hifi/dialogs/content/AttachmentsContent.qml @@ -98,7 +98,9 @@ Item { } onCurrentIndexChanged: { - scrollSlider.y = currentIndex * (scrollBar.height - scrollSlider.height) / (listView.count - 1); + if (!yScrollTimer.running) { + scrollSlider.y = currentIndex * (scrollBar.height - scrollSlider.height) / (listView.count - 1); + } } onContentYChanged: { @@ -108,13 +110,14 @@ Item { Timer { id: yScrollTimer - interval: 50 + interval: 200 repeat: false running: false onTriggered: { - var index = listView.contentY / (scrollBar.height - scrollSlider.height); + var index = (listView.count - 1) * listView.contentY / (listView.contentHeight - scrollBar.height); index = Math.round(index); listView.currentIndex = index; + scrollSlider.y = index * (scrollBar.height - scrollSlider.height) / (listView.count - 1); } } } From d792559d9abc2b4adca943f994cde9f038ec9853 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Fri, 10 Mar 2017 09:59:23 -0800 Subject: [PATCH 098/247] have edit.js resend properties of selected entity to entityProperties.js once it's ready --- scripts/system/edit.js | 7 +++++-- scripts/system/html/js/entityProperties.js | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 74080dbe09..55bd11b286 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -1548,7 +1548,7 @@ var PropertiesTool = function (opts) { }); } - selectionManager.addEventListener(function (selectionUpdated) { + function updateSelections(selectionUpdated) { var data = { type: 'update' }; @@ -1589,7 +1589,8 @@ var PropertiesTool = function (opts) { } data.selections = selections; webView.emitScriptEvent(JSON.stringify(data)); - }); + } + selectionManager.addEventListener(updateSelections); webView.webEventReceived.connect(function (data) { try { @@ -1751,6 +1752,8 @@ var PropertiesTool = function (opts) { } } } + } else if (data.type === "propertiesPageReady") { + updateSelections(true); } }); diff --git a/scripts/system/html/js/entityProperties.js b/scripts/system/html/js/entityProperties.js index 4f774e5305..2f109597d7 100644 --- a/scripts/system/html/js/entityProperties.js +++ b/scripts/system/html/js/entityProperties.js @@ -1704,4 +1704,8 @@ function loaded() { document.addEventListener("contextmenu", function(event) { event.preventDefault(); }, false); + + setTimeout(function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'propertiesPageReady' })); + }, 1000); } From 9b3810814e17426ca34786db09b34d43f5190581 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 10 Mar 2017 18:40:18 +0000 Subject: [PATCH 099/247] fiexed putting menu items on the hud when tablet not open when on desktop screen --- interface/src/Application.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 66d138103d..b575cb07b1 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5793,12 +5793,12 @@ void Application::toggleRunningScriptsWidget() const { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + auto hmd = DependencyManager::get<HMDScriptingInterface>(); if (tablet->getToolbarMode()) { static const QUrl url("hifi/dialogs/RunningScripts.qml"); DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); - if (!tabletRoot && !isHMDMode()) { + if (!hmd->getShouldShowTablet() && !isHMDMode()) { static const QUrl url("hifi/dialogs/RunningScripts.qml"); DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); } else { @@ -5835,12 +5835,11 @@ void Application::showAssetServerWidget(QString filePath) { }; auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - + auto hmd = DependencyManager::get<HMDScriptingInterface>(); if (tablet->getToolbarMode()) { DependencyManager::get<OffscreenUi>()->show(url, "AssetServer", startUpload); } else { - QQuickItem* tabletRoot = tablet->getTabletRoot(); - if (!tabletRoot && !isHMDMode()) { + if (!hmd->getShouldShowTablet() && !isHMDMode()) { DependencyManager::get<OffscreenUi>()->show(url, "AssetServer", startUpload); } else { static const QUrl url("../../hifi/dialogs/TabletAssetServer.qml"); @@ -5873,7 +5872,8 @@ void Application::addAssetToWorldFromURL(QString url) { void Application::showDialog(const QString& desktopURL, const QString& tabletURL, const QString& name) const { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - if (tablet->getToolbarMode() || (!tablet->getTabletRoot() && !isHMDMode())) { + auto hmd = DependencyManager::get<HMDScriptingInterface>(); + if (tablet->getToolbarMode() || (!hmd->getShouldShowTablet() && !isHMDMode())) { DependencyManager::get<OffscreenUi>()->show(desktopURL, name); } else { tablet->loadQMLSource(tabletURL); From e27ccab2f4f960e11cf7b210e5177cfcbc171cda Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Fri, 10 Mar 2017 19:53:12 +0100 Subject: [PATCH 100/247] Eliminate pathToFonts not found errors at startup. Change TableFiledialog folder on click --- interface/resources/qml/dialogs/TabletFileDialog.qml | 3 +-- libraries/gl/src/gl/OffscreenQmlSurface.cpp | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml index b55eca7493..4fecd4b523 100644 --- a/interface/resources/qml/dialogs/TabletFileDialog.qml +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -66,8 +66,6 @@ TabletModalWindow { signal canceled(); Component.onCompleted: { - console.log("Helper " + helper + " drives " + drives); - fileDialogItem.keyboardEnabled = HMD.active; // HACK: The following lines force the model to initialize properly such that the go-up button @@ -459,6 +457,7 @@ TabletModalWindow { bottomMargin: hifi.dimensions.contentSpacing.y + currentSelection.controlHeight - currentSelection.height } headerVisible: !selectDirectory + onClicked: navigateToRow(row); onDoubleClicked: navigateToRow(row); focus: true Keys.onReturnPressed: navigateToCurrentRow(); diff --git a/libraries/gl/src/gl/OffscreenQmlSurface.cpp b/libraries/gl/src/gl/OffscreenQmlSurface.cpp index 2d940d6755..de0caf56a9 100644 --- a/libraries/gl/src/gl/OffscreenQmlSurface.cpp +++ b/libraries/gl/src/gl/OffscreenQmlSurface.cpp @@ -434,6 +434,7 @@ void OffscreenQmlSurface::create(QOpenGLContext* shareContext) { auto rootContext = getRootContext(); rootContext->setContextProperty("urlHandler", new UrlHandler()); rootContext->setContextProperty("resourceDirectoryUrl", QUrl::fromLocalFile(PathUtils::resourcesPath())); + rootContext->setContextProperty("pathToFonts", "../../"); } static uvec2 clampSize(const uvec2& size, uint32_t maxDimension) { From b63ab05eec6495fbb5986f6082b8c72dc8b0cfa2 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 10 Mar 2017 19:33:14 +0000 Subject: [PATCH 101/247] improved general settting coloring --- .../tabletWindows/TabletPreferencesDialog.qml | 46 ++++--------------- 1 file changed, 9 insertions(+), 37 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index 95ce7f5a1d..e3138e8979 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -21,8 +21,8 @@ import "../../../controls-uit" as HifiControls Item { id: dialog - width: 480 - height: 720 + width: parent.width + height: parent.height HifiConstants { id: hifi } property var sections: [] @@ -31,6 +31,7 @@ Item { property bool keyboardEnabled: false property bool keyboardRaised: false property bool punctuationMode: false + property var tablet; @@ -68,22 +69,11 @@ Item { } z: 100 - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - } - - GradientStop { - position: 1 - color: "#1e1e1e" - } - } - + color: hifi.colors.darkGray RalewayBold { text: title size: 26 - color: "#34a2c7" + color: hifi.colors.white anchors.verticalCenter: parent.verticalCenter anchors.left: parent.left anchors.leftMargin: hifi.dimensions.contentMargin.x @@ -99,17 +89,8 @@ Item { right: parent.right } - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - } - - GradientStop { - position: 1 - color: "#0f212e" - } - } + color: hifi.colors.baseGray + Flickable { id: scrollView width: parent.width @@ -203,17 +184,8 @@ Item { left: parent.left right: parent.right } - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - } - - GradientStop { - position: 1 - color: "#0f212e" - } - } + + color: hifi.colors.baseGray Row { anchors { From 2cd194104fae0b616d54e57190c21528d5fdde43 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 10 Mar 2017 20:46:01 +0000 Subject: [PATCH 102/247] force on to home screen --- libraries/script-engine/src/TabletScriptingInterface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 5fd96f0f02..e26b3a3f63 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -393,7 +393,7 @@ void TabletProxy::popFromStack() { } void TabletProxy::loadHomeScreen(bool forceOntoHomeScreen) { - if (_state != State::Home && ( _state != State::Uninitialized || forceOntoHomeScreen)) { + if ((_state != State::Home && _state != State::Uninitialized) || forceOntoHomeScreen) { if (!_toolbarMode && _qmlTabletRoot) { auto loader = _qmlTabletRoot->findChild<QQuickItem*>("loader"); QObject::connect(loader, SIGNAL(loaded()), this, SLOT(addButtonsToHomeScreen()), Qt::DirectConnection); From 88e74251a160fb8efb6e3b889abba32589bde61b Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Fri, 10 Mar 2017 12:51:34 -0800 Subject: [PATCH 103/247] cleanups --- scripts/system/tablet-ui/tabletUI.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index 263c8822df..3b15eb4edb 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -75,8 +75,9 @@ function showTabletUI() { tabletShown = true; - if (!tabletRezzed) { - rezTablet(false); + if (!tabletRezzed || !tabletIsValid()) { + closeTabletUI() + rezTablet(); } if (UIWebTablet && tabletRezzed) { @@ -199,7 +200,7 @@ preMakeTime = now; if (!tabletIsValid()) { closeTabletUI(); - rezTablet(false); + rezTablet(); tabletShown = false; } else if (!tabletShown) { hideTabletUI(); From 2098cd5b5e8266d1f539a4135e3af7845bd33156 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Fri, 10 Mar 2017 13:02:16 -0800 Subject: [PATCH 104/247] remove stylus and search-beams when grab script is shut down --- scripts/system/controllers/handControllerGrab.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 6f60f36556..ba3f06de23 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -3516,6 +3516,8 @@ function MyController(hand) { this.cleanup = function() { this.release(); this.grabPointSphereOff(); + this.hideStylus(); + this.overlayLineOff(); }; this.thisHandIsParent = function(props) { From 189eee01a6b2e8994db853886fc2f608bd332789 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 11:02:09 +1300 Subject: [PATCH 105/247] Refactor TabletComboBox.qml into ComboBox.qml --- .../resources/qml/controls-uit/ComboBox.qml | 23 +- .../qml/controls-uit/TabletComboBox.qml | 211 ------------------ .../qml/dialogs/TabletCustomQueryDialog.qml | 2 +- .../qml/dialogs/TabletFileDialog.qml | 2 +- .../qml/dialogs/TabletQueryDialog.qml | 2 +- .../qml/hifi/tablet/NewModelDialog.qml | 2 +- .../tablet/tabletWindows/TabletFileDialog.qml | 2 +- 7 files changed, 22 insertions(+), 222 deletions(-) delete mode 100644 interface/resources/qml/controls-uit/TabletComboBox.qml diff --git a/interface/resources/qml/controls-uit/ComboBox.qml b/interface/resources/qml/controls-uit/ComboBox.qml index 573fed4ef9..582e5f6d83 100644 --- a/interface/resources/qml/controls-uit/ComboBox.qml +++ b/interface/resources/qml/controls-uit/ComboBox.qml @@ -14,7 +14,6 @@ import QtQuick.Controls.Styles 1.4 import "../styles-uit" import "../controls-uit" as HifiControls -import "." as VrControls FocusScope { id: root @@ -32,6 +31,8 @@ FocusScope { readonly property ComboBox control: comboBox + property bool isDesktop: true + signal accepted(); implicitHeight: comboBox.height; @@ -119,11 +120,17 @@ FocusScope { } function showList() { - var r = desktop.mapFromItem(root, 0, 0, root.width, root.height); + var r; + if (isDesktop) { + r = desktop.mapFromItem(root, 0, 0, root.width, root.height); + } else { + r = mapFromItem(root, 0, 0, root.width, root.height); + } var y = r.y + r.height; var bottom = y + scrollView.height; - if (bottom > desktop.height) { - y -= bottom - desktop.height + 8; + var height = isDesktop ? desktop.height : tabletRoot.height; + if (bottom > height) { + y -= bottom - height + 8; } scrollView.x = r.x; scrollView.y = y; @@ -141,9 +148,9 @@ FocusScope { FocusScope { id: popup - parent: desktop + parent: isDesktop ? desktop : parent anchors.fill: parent - z: desktop.zLevels.menu + z: isDesktop ? desktop.zLevels.menu : 12 visible: false focus: true @@ -233,4 +240,8 @@ FocusScope { anchors.bottomMargin: 4 visible: label != "" } + + Component.onCompleted: { + isDesktop = (typeof desktop !== "undefined"); + } } diff --git a/interface/resources/qml/controls-uit/TabletComboBox.qml b/interface/resources/qml/controls-uit/TabletComboBox.qml deleted file mode 100644 index 7361833a45..0000000000 --- a/interface/resources/qml/controls-uit/TabletComboBox.qml +++ /dev/null @@ -1,211 +0,0 @@ -// -// ComboBox.qml -// -// Created by Dante Ruiz on 13 Feb 2017 -// Copyright 2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -import QtQuick 2.5 -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 - -import "../styles-uit" -import "../controls-uit" as HifiControls - -FocusScope { - id: root - HifiConstants { id: hifi } - - property alias model: comboBox.model; - property alias comboBox: comboBox - readonly property alias currentText: comboBox.currentText; - property alias currentIndex: comboBox.currentIndex; - - property int colorScheme: hifi.colorSchemes.light - readonly property bool isLightColorScheme: colorScheme == hifi.colorSchemes.light - property string label: "" - property real controlHeight: height + (comboBoxLabel.visible ? comboBoxLabel.height + comboBoxLabel.anchors.bottomMargin : 0) - - readonly property ComboBox control: comboBox - - signal accepted(); - - implicitHeight: comboBox.height; - focus: true - - Rectangle { - id: background - gradient: Gradient { - GradientStop { - position: 0.2 - color: popup.visible - ? (isLightColorScheme ? hifi.colors.dropDownPressedLight : hifi.colors.dropDownPressedDark) - : (isLightColorScheme ? hifi.colors.dropDownLightStart : hifi.colors.dropDownDarkStart) - } - GradientStop { - position: 1.0 - color: popup.visible - ? (isLightColorScheme ? hifi.colors.dropDownPressedLight : hifi.colors.dropDownPressedDark) - : (isLightColorScheme ? hifi.colors.dropDownLightFinish : hifi.colors.dropDownDarkFinish) - } - } - anchors.fill: parent - } - - SystemPalette { id: palette } - - ComboBox { - id: comboBox - anchors.fill: parent - visible: false - height: hifi.fontSizes.textFieldInput + 13 // Match height of TextField control. - } - - FiraSansSemiBold { - id: textField - anchors { - left: parent.left - leftMargin: hifi.dimensions.textPadding - right: dropIcon.left - verticalCenter: parent.verticalCenter - } - size: hifi.fontSizes.textFieldInput - text: comboBox.currentText - elide: Text.ElideRight - color: controlHover.containsMouse || popup.visible ? hifi.colors.baseGray : (isLightColorScheme ? hifi.colors.lightGray : hifi.colors.lightGrayText ) - } - - Item { - id: dropIcon - anchors { right: parent.right; verticalCenter: parent.verticalCenter } - height: background.height - width: height - Rectangle { - width: 1 - height: parent.height - anchors.top: parent.top - anchors.left: parent.left - color: isLightColorScheme ? hifi.colors.faintGray : hifi.colors.baseGray - } - HiFiGlyphs { - anchors { - top: parent.top - topMargin: -11 - horizontalCenter: parent.horizontalCenter - } - size: hifi.dimensions.spinnerSize - text: hifi.glyphs.caratDn - color: controlHover.containsMouse || popup.visible ? hifi.colors.baseGray : (isLightColorScheme ? hifi.colors.lightGray : hifi.colors.lightGrayText) - } - } - - MouseArea { - id: controlHover - hoverEnabled: true - anchors.fill: parent - onClicked: toggleList(); - } - - function toggleList() { - if (popup.visible) { - hideList(); - } else { - showList(); - } - } - - function showList() { - var r = mapFromItem(root, 0, 0, root.width, root.height); - var y = r.y + r.height; - var bottom = y + scrollView.height; - if (bottom > 720) { - y -= bottom - tabletRoot.height + 8; - } - scrollView.x = r.x; - scrollView.y = y; - popup.visible = true; - popup.forceActiveFocus(); - listView.currentIndex = root.currentIndex; - scrollView.hoverEnabled = true; - } - - function hideList() { - popup.visible = false; - scrollView.hoverEnabled = false; - root.accepted(); - } - - FocusScope { - id: popup - z: 12 - parent: parent - anchors.fill: parent - visible: false - focus: true - - MouseArea { - anchors.fill: parent - onClicked: hideList(); - } - - function previousItem() { listView.currentIndex = (listView.currentIndex + listView.count - 1) % listView.count; } - function nextItem() { listView.currentIndex = (listView.currentIndex + listView.count + 1) % listView.count; } - function selectCurrentItem() { root.currentIndex = listView.currentIndex; hideList(); } - function selectSpecificItem(index) { root.currentIndex = index; hideList(); } - - Keys.onUpPressed: previousItem(); - Keys.onDownPressed: nextItem(); - Keys.onSpacePressed: selectCurrentItem(); - Keys.onRightPressed: selectCurrentItem(); - Keys.onReturnPressed: selectCurrentItem(); - Keys.onEscapePressed: hideList(); - - ScrollView { - id: scrollView - height: 480 - width: root.width + 4 - property bool hoverEnabled: false; - - ListView { - id: listView - height: textField.height * count * 1.4 - model: root.model - delegate: Rectangle { - width: root.width + 4 - height: popupText.implicitHeight * 1.4 - color: (listView.currentIndex === index) ? hifi.colors.primaryHighlight : - (isLightColorScheme ? hifi.colors.dropDownPressedLight : hifi.colors.dropDownPressedDark) - FiraSansSemiBold { - anchors.left: parent.left - anchors.leftMargin: hifi.dimensions.textPadding - anchors.verticalCenter: parent.verticalCenter - id: popupText - text: listView.model[index] ? listView.model[index] : "" - size: hifi.fontSizes.textFieldInput - color: hifi.colors.baseGray - } - MouseArea { - id: popupHover - anchors.fill: parent; - hoverEnabled: scrollView.hoverEnabled; - onEntered: listView.currentIndex = index; - onClicked: popup.selectSpecificItem(index); - } - } - } - } - } - - HifiControls.Label { - id: comboBoxLabel - text: root.label - colorScheme: root.colorScheme - anchors.left: parent.left - anchors.bottom: parent.top - anchors.bottomMargin: 4 - visible: label != "" - } -} diff --git a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml index 6e5bc50d32..3f6e07da4f 100644 --- a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml @@ -205,7 +205,7 @@ TabletModalWindow { // } } - ControlsUIT.TabletComboBox { + ControlsUIT.ComboBox { id: comboBoxField; label: root.comboBox.label; focus: Boolean(root.comboBox); diff --git a/interface/resources/qml/dialogs/TabletFileDialog.qml b/interface/resources/qml/dialogs/TabletFileDialog.qml index 4fecd4b523..5e33663436 100644 --- a/interface/resources/qml/dialogs/TabletFileDialog.qml +++ b/interface/resources/qml/dialogs/TabletFileDialog.qml @@ -149,7 +149,7 @@ TabletModalWindow { } } - TabletComboBox { + ComboBox { id: pathSelector z: 10 anchors { diff --git a/interface/resources/qml/dialogs/TabletQueryDialog.qml b/interface/resources/qml/dialogs/TabletQueryDialog.qml index 3ff3347ebc..e21677c12c 100644 --- a/interface/resources/qml/dialogs/TabletQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletQueryDialog.qml @@ -109,7 +109,7 @@ TabletModalWindow { } } - TabletComboBox { + ComboBox { id: comboBox label: root.label focus: true diff --git a/interface/resources/qml/hifi/tablet/NewModelDialog.qml b/interface/resources/qml/hifi/tablet/NewModelDialog.qml index d57ffdc72f..2fa48cac07 100644 --- a/interface/resources/qml/hifi/tablet/NewModelDialog.qml +++ b/interface/resources/qml/hifi/tablet/NewModelDialog.qml @@ -107,7 +107,7 @@ Rectangle { font.pixelSize: 12 } - TabletComboBox { + ComboBox { id: collisionType width: 200 z: 100 diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml index a3e94152b8..26e35c4dcf 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletFileDialog.qml @@ -145,7 +145,7 @@ Item { } } - TabletComboBox { + ComboBox { id: pathSelector anchors { top: parent.top From 8a973dae3c077b7c5da386c0deb66a55d5ecf570 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 10 Mar 2017 23:21:29 +0000 Subject: [PATCH 106/247] fixed bring menu dialogs in tablet --- .../resources/qml/hifi/dialogs/TabletRunningScripts.qml | 1 + .../resources/qml/hifi/tablet/TabletAudioPreferences.qml | 2 +- .../resources/qml/hifi/tablet/TabletAvatarPreferences.qml | 2 +- .../resources/qml/hifi/tablet/TabletGeneralPreferences.qml | 5 +++-- interface/resources/qml/hifi/tablet/TabletMenuStack.qml | 2 +- .../qml/hifi/tablet/TabletNetworkingPreferences.qml | 2 +- interface/src/Application.cpp | 2 +- 7 files changed, 9 insertions(+), 7 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml b/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml index e217a6e38e..b4a1ab01b6 100644 --- a/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml +++ b/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml @@ -20,6 +20,7 @@ import "../../windows" Rectangle { id: root objectName: "RunningScripts" + property var title: "Running Scripts" HifiConstants { id: hifi } signal sendToScript(var message); property var eventBridge; diff --git a/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml index efb7b5d50d..1c18c44a97 100644 --- a/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml @@ -19,7 +19,7 @@ StackView { id: profileRoot initialItem: root objectName: "stack" - + property var title: "Audio Preferences" property var eventBridge; signal sendToScript(var message); diff --git a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml index f5c1ddf8f7..b29164a30f 100644 --- a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml @@ -19,7 +19,7 @@ StackView { id: profileRoot initialItem: root objectName: "stack" - + property var title: "Avatar Preferences" property var eventBridge; signal sendToScript(var message); diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index 4473a997e6..47e6a05f78 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -19,10 +19,11 @@ StackView { id: profileRoot initialItem: root objectName: "stack" - + property var title: "General Prefernces" + property var eventBridge; signal sendToScript(var message); - + function pushSource(path) { editRoot.push(Qt.reslovedUrl(path)); } diff --git a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml index a75a9fcd86..64d42acabb 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml @@ -51,7 +51,7 @@ Item { d.push(Qt.resolvedUrl(path)); d.currentItem.eventBridge = tabletMenu.eventBridge d.currentItem.sendToScript.connect(tabletMenu.sendToScript); - breadcrumbText.text = d.currentItem.objectName; + breadcrumbText.text = d.currentItem.title; } function popSource() { diff --git a/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml b/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml index 9b12d3c69e..f48d270646 100644 --- a/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml @@ -19,7 +19,7 @@ StackView { id: profileRoot initialItem: root objectName: "stack" - + property var title: "Network Preferences" property var eventBridge; signal sendToScript(var message); diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b575cb07b1..6be36f18ac 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5876,7 +5876,7 @@ void Application::showDialog(const QString& desktopURL, const QString& tabletURL if (tablet->getToolbarMode() || (!hmd->getShouldShowTablet() && !isHMDMode())) { DependencyManager::get<OffscreenUi>()->show(desktopURL, name); } else { - tablet->loadQMLSource(tabletURL); + tablet->pushOntoStack(tabletURL); } } From 713c50f2e860ba7947f7651b589a96a8a437b4cd Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 12:52:22 +1300 Subject: [PATCH 107/247] Fix attachments dialog joint dropdown in tablet --- interface/resources/qml/controls-uit/ComboBox.qml | 5 +++-- .../resources/qml/hifi/dialogs/attachments/Attachment.qml | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/controls-uit/ComboBox.qml b/interface/resources/qml/controls-uit/ComboBox.qml index 582e5f6d83..1cb1446658 100644 --- a/interface/resources/qml/controls-uit/ComboBox.qml +++ b/interface/resources/qml/controls-uit/ComboBox.qml @@ -24,6 +24,7 @@ FocusScope { readonly property alias currentText: comboBox.currentText; property alias currentIndex: comboBox.currentIndex; + property int dropdownHeight: 480 property int colorScheme: hifi.colorSchemes.light readonly property bool isLightColorScheme: colorScheme == hifi.colorSchemes.light property string label: "" @@ -148,7 +149,7 @@ FocusScope { FocusScope { id: popup - parent: isDesktop ? desktop : parent + parent: isDesktop ? desktop : root anchors.fill: parent z: isDesktop ? desktop.zLevels.menu : 12 visible: false @@ -173,7 +174,7 @@ FocusScope { ScrollView { id: scrollView - height: 480 + height: root.dropdownHeight width: root.width + 4 property bool hoverEnabled: false; diff --git a/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml b/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml index 5c11a87d12..d10b8be58f 100644 --- a/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml +++ b/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml @@ -87,6 +87,7 @@ Item { } Item { + z: 1000 height: jointChooser.height + jointLabel.height + 4 anchors { left: parent.left; right: parent.right; } HifiControls.Label { @@ -97,6 +98,7 @@ Item { } HifiControls.ComboBox { id: jointChooser; + dropdownHeight: (typeof desktop !== "undefined") ? 480 : 206 anchors { bottom: parent.bottom; left: parent.left; right: parent.right } colorScheme: hifi.colorSchemes.dark currentIndex: attachment ? model.indexOf(attachment.jointName) : -1 From 25364c06286af1e9aa8a29bda836899f88ef2a3f Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 12:59:15 +1300 Subject: [PATCH 108/247] Make dropdown scrollbar wider --- interface/resources/qml/controls-uit/ComboBox.qml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/controls-uit/ComboBox.qml b/interface/resources/qml/controls-uit/ComboBox.qml index 1cb1446658..2dea535c06 100644 --- a/interface/resources/qml/controls-uit/ComboBox.qml +++ b/interface/resources/qml/controls-uit/ComboBox.qml @@ -186,18 +186,18 @@ FocusScope { visible: false } scrollBarBackground: Rectangle{ - implicitWidth: 14 + implicitWidth: 20 color: hifi.colors.baseGray } handle: Rectangle { - implicitWidth: 8 + implicitWidth: 16 anchors.left: parent.left anchors.leftMargin: 3 anchors.top: parent.top anchors.bottom: parent.bottom - radius: 3 + radius: 6 color: hifi.colors.lightGrayText } } From 3abc78e7d365fe298c60c8624d6f3d6c2a99887e Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidleity.io> Date: Fri, 10 Mar 2017 17:18:13 -0800 Subject: [PATCH 109/247] Fix for finger/sytlus on invisible/hidden tablet. --- scripts/system/controllers/handControllerGrab.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 1ccf443a00..1693a6137a 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1632,12 +1632,12 @@ function MyController(hand) { } // add the tabletScreen, if it is valid - if (HMD.tabletScreenID && HMD.tabletScreenID !== NULL_UUID) { + if (HMD.tabletScreenID && HMD.tabletScreenID !== NULL_UUID && Overlays.getProperty(HMD.tabletScreenID, "visible")) { stylusTargets.push(calculateStylusTargetFromOverlay(this.stylusTip, HMD.tabletScreenID)); } // add the tablet home button. - if (HMD.homeButtonID && HMD.homeButtonID !== NULL_UUID) { + if (HMD.homeButtonID && HMD.homeButtonID !== NULL_UUID && Overlays.getProperty(HMD.homeButtonID, "visible")) { stylusTargets.push(calculateStylusTargetFromOverlay(this.stylusTip, HMD.homeButtonID)); } From d261e48b9d11068865f5e81ca6dc1159dbf56d66 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 14:33:03 +1300 Subject: [PATCH 110/247] Use existing model browser dialog as base content --- .../{ModelBrowserDialog.qml => content/ModelBrowserContent.qml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename interface/resources/qml/hifi/dialogs/{ModelBrowserDialog.qml => content/ModelBrowserContent.qml} (100%) diff --git a/interface/resources/qml/hifi/dialogs/ModelBrowserDialog.qml b/interface/resources/qml/hifi/dialogs/content/ModelBrowserContent.qml similarity index 100% rename from interface/resources/qml/hifi/dialogs/ModelBrowserDialog.qml rename to interface/resources/qml/hifi/dialogs/content/ModelBrowserContent.qml From ffbb04d3bce5ac0a1d3e120a1c23729268702fc1 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 15:38:21 +1300 Subject: [PATCH 111/247] Tablet and desktop versions of attachment model browser dialog --- .../qml/hifi/dialogs/ModelBrowserDialog.qml | 36 +++++ .../hifi/dialogs/attachments/Attachment.qml | 21 ++- .../dialogs/content/ModelBrowserContent.qml | 124 +++++++----------- .../hifi/tablet/TabletModelBrowserDialog.qml | 78 +++++++++++ 4 files changed, 179 insertions(+), 80 deletions(-) create mode 100644 interface/resources/qml/hifi/dialogs/ModelBrowserDialog.qml create mode 100644 interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml diff --git a/interface/resources/qml/hifi/dialogs/ModelBrowserDialog.qml b/interface/resources/qml/hifi/dialogs/ModelBrowserDialog.qml new file mode 100644 index 0000000000..c427052904 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/ModelBrowserDialog.qml @@ -0,0 +1,36 @@ +// +// ModelBrowserDialog.qml +// +// Created by David Rowe on 11 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +import "../../windows" +import "content" + +ScrollingWindow { + id: root + objectName: "ModelBrowserDialog" + title: "Attachment Model" + resizable: true + width: 600 + height: 480 + closable: false + + //HifiConstants { id: hifi } + + property var result + + signal selected(var modelUrl) + signal canceled() + + ModelBrowserContent { + id: modelBrowserContent + } +} diff --git a/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml b/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml index d10b8be58f..941d665b18 100644 --- a/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml +++ b/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml @@ -6,6 +6,7 @@ import Qt.labs.settings 1.0 import "." import ".." +import "../../tablet" import "../../../styles-uit" import "../../../controls-uit" as HifiControls import "../../../windows" @@ -76,12 +77,24 @@ Item { id: modelBrowserBuilder; ModelBrowserDialog {} } + Component { + id: tabletModelBrowserBuilder; + TabletModelBrowserDialog {} + } onClicked: { - var browser = modelBrowserBuilder.createObject(desktop); - browser.selected.connect(function(newModelUrl){ - modelUrl.text = newModelUrl; - }) + var browser; + if (typeof desktop !== "undefined") { + browser = modelBrowserBuilder.createObject(desktop); + browser.selected.connect(function(newModelUrl){ + modelUrl.text = newModelUrl; + }); + } else { + browser = tabletModelBrowserBuilder.createObject(tabletRoot); + browser.selected.connect(function(newModelUrl){ + modelUrl.text = newModelUrl; + }); + } } } } diff --git a/interface/resources/qml/hifi/dialogs/content/ModelBrowserContent.qml b/interface/resources/qml/hifi/dialogs/content/ModelBrowserContent.qml index 7a63c0604c..50fca94ff1 100644 --- a/interface/resources/qml/hifi/dialogs/content/ModelBrowserContent.qml +++ b/interface/resources/qml/hifi/dialogs/content/ModelBrowserContent.qml @@ -1,92 +1,64 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 -import QtQuick.XmlListModel 2.0 -import QtQuick.Controls.Styles 1.4 -import "../../windows" -import "../../js/Utils.js" as Utils -import "../models" +import "../../../controls-uit" as HifiControls -import "../../styles-uit" -import "../../controls-uit" as HifiControls -import "../../windows" +Column { + width: pane.contentWidth -ScrollingWindow { - id: root - resizable: true - width: 600 - height: 480 - closable: false + Rectangle { + width: parent.width + height: root.height - (keyboardEnabled && keyboardRaised ? 200 : 0) + color: hifi.colors.baseGray - property var result; + HifiControls.TextField { + id: filterEdit + anchors { left: parent.left; right: parent.right; top: parent.top ; margins: 8} + placeholderText: "filter" + onTextChanged: tableView.model.filter = text + colorScheme: hifi.colorSchemes.dark + } - signal selected(var modelUrl); - signal canceled(); - - HifiConstants {id: hifi} - - Column { - width: pane.contentWidth - - Rectangle { - width: parent.width - height: root.height - (keyboardEnabled && keyboardRaised ? 200 : 0) - radius: 4 - color: hifi.colors.baseGray - - HifiControls.TextField { - id: filterEdit - anchors { left: parent.left; right: parent.right; top: parent.top ; margins: 8} - placeholderText: "filter" - onTextChanged: tableView.model.filter = text - colorScheme: hifi.colorSchemes.dark - } - - HifiControls.AttachmentsTable { - id: tableView - anchors { left: parent.left; right: parent.right; top: filterEdit.bottom; bottom: buttonRow.top; margins: 8; } - colorScheme: hifi.colorSchemes.dark - onCurrentRowChanged: { - if (currentRow == -1) { - root.result = null; - return; - } - result = model.baseUrl + "/" + model.get(tableView.currentRow).key; + HifiControls.AttachmentsTable { + id: tableView + anchors { left: parent.left; right: parent.right; top: filterEdit.bottom; bottom: buttonRow.top; margins: 8; } + colorScheme: hifi.colorSchemes.dark + onCurrentRowChanged: { + if (currentRow == -1) { + root.result = null; + return; } + result = model.baseUrl + "/" + model.get(tableView.currentRow).key; } + } - Row { - id: buttonRow - spacing: 8 - anchors { right: parent.right; rightMargin: 8; bottom: parent.bottom; bottomMargin: 8; } - HifiControls.Button { action: acceptAction ; color: hifi.buttons.black; colorScheme: hifi.colorSchemes.dark } - HifiControls.Button { action: cancelAction ; color: hifi.buttons.black; colorScheme: hifi.colorSchemes.dark } + Row { + id: buttonRow + spacing: 8 + anchors { right: parent.right; rightMargin: 8; bottom: parent.bottom; bottomMargin: 8; } + HifiControls.Button { action: acceptAction ; color: hifi.buttons.black; colorScheme: hifi.colorSchemes.dark } + HifiControls.Button { action: cancelAction ; color: hifi.buttons.black; colorScheme: hifi.colorSchemes.dark } + } + + Action { + id: acceptAction + text: qsTr("OK") + enabled: root.result ? true : false + shortcut: Qt.Key_Return + onTriggered: { + root.selected(root.result); + root.destroy(); } + } - Action { - id: acceptAction - text: qsTr("OK") - enabled: root.result ? true : false - shortcut: Qt.Key_Return - onTriggered: { - root.selected(root.result); - root.destroy(); - } - } - - Action { - id: cancelAction - text: qsTr("Cancel") - shortcut: Qt.Key_Escape - onTriggered: { - root.canceled(); - root.destroy(); - } + Action { + id: cancelAction + text: qsTr("Cancel") + shortcut: Qt.Key_Escape + onTriggered: { + root.canceled(); + root.destroy(); } } } } - - - - diff --git a/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml b/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml new file mode 100644 index 0000000000..956e175f1e --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml @@ -0,0 +1,78 @@ +// +// TabletModelBrowserDialog.qml +// +// Created by David Rowe on 11 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +import "../../styles-uit" +import "../dialogs/content" + +Item { + id: root + objectName: "ModelBrowserDialog" + + property string title: "Attachment Model" + + property var result + + signal selected(var modelUrl) + signal canceled() + + anchors.fill: parent + + Rectangle { + id: pane // Surrogate for ScrollingWindow's pane. + anchors.fill: parent + } + + anchors.topMargin: 90 // Space for header. + + // FIXME: Refactor with other tablet headers. + Rectangle { + id: header + height: 90 + anchors { + left: parent.left + right: parent.right + bottom: parent.top + } + z: 100 + + gradient: Gradient { + GradientStop { + position: 0 + color: "#2b2b2b" + } + + GradientStop { + position: 1 + color: "#1e1e1e" + } + } + + RalewayBold { + text: title + size: 26 + color: "#34a2c7" + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: hifi.dimensions.contentMargin.x + } + } + + ModelBrowserContent { + anchors { + top: header.bottom + left: parent.left + right: parent.right + bottom: parent.top + } + } +} From 0a2976deab28aecfde0eef70828abdb727679f3b Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 15:43:33 +1300 Subject: [PATCH 112/247] Add tablet keyboard --- .../hifi/tablet/TabletModelBrowserDialog.qml | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml b/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml index 956e175f1e..e098c59e4e 100644 --- a/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml @@ -11,6 +11,7 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 +import "../../controls-uit" as HifiControls import "../../styles-uit" import "../dialogs/content" @@ -25,6 +26,10 @@ Item { signal selected(var modelUrl) signal canceled() + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + anchors.fill: parent Rectangle { @@ -72,7 +77,33 @@ Item { top: header.bottom left: parent.left right: parent.right - bottom: parent.top + bottom: keyboard.top } } + + HifiControls.Keyboard { + id: keyboard + raised: parent.keyboardEnabled && parent.keyboardRaised + numeric: parent.punctuationMode + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + } + + MouseArea { + id: activator + anchors.fill: parent + propagateComposedEvents: true + enabled: true + acceptedButtons: Qt.AllButtons + onPressed: { + mouse.accepted = false; + } + } + + Component.onCompleted: { + keyboardEnabled = HMD.active; + } } From 327e3c9973ecf8c809231bc51d25cfc676074c45 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 15:46:43 +1300 Subject: [PATCH 113/247] Don't expand height of higlighted row --- interface/resources/qml/controls-uit/AttachmentsTable.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/controls-uit/AttachmentsTable.qml b/interface/resources/qml/controls-uit/AttachmentsTable.qml index 7d0280b72d..8ee9909ab8 100644 --- a/interface/resources/qml/controls-uit/AttachmentsTable.qml +++ b/interface/resources/qml/controls-uit/AttachmentsTable.qml @@ -120,7 +120,7 @@ TableView { } rowDelegate: Rectangle { - height: (styleData.selected ? 1.2 : 1) * hifi.dimensions.tableRowHeight + height: hifi.dimensions.tableRowHeight color: styleData.selected ? hifi.colors.primaryHighlight : tableView.isLightColorScheme From 6a8d0b1064c94dbfa55e2b771be28f53fa1bcfe1 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 16:55:22 +1300 Subject: [PATCH 114/247] Refactor some tablet dialog headers --- .../qml/controls-uit/TabletHeader.qml | 45 +++++++++++++++++++ .../hifi/tablet/TabletAttachmentsDialog.qml | 30 ++----------- .../hifi/tablet/TabletModelBrowserDialog.qml | 30 ++----------- .../tabletWindows/TabletPreferencesDialog.qml | 27 ++--------- 4 files changed, 56 insertions(+), 76 deletions(-) create mode 100644 interface/resources/qml/controls-uit/TabletHeader.qml diff --git a/interface/resources/qml/controls-uit/TabletHeader.qml b/interface/resources/qml/controls-uit/TabletHeader.qml new file mode 100644 index 0000000000..f9482f995f --- /dev/null +++ b/interface/resources/qml/controls-uit/TabletHeader.qml @@ -0,0 +1,45 @@ +// +// TabletHeader.qml +// +// Created by David Rowe on 11 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or https://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +import "../styles-uit" + +Rectangle { + + property string title: "" + + HifiConstants { id: hifi } + + height: hifi.dimensions.tabletMenuHeader + z: 100 + + gradient: Gradient { + GradientStop { + position: 0 + color: "#2b2b2b" + } + + GradientStop { + position: 1 + color: "#1e1e1e" + } + } + + RalewayBold { + text: title + size: 26 + color: "#34a2c7" + anchors.verticalCenter: parent.verticalCenter + anchors.left: parent.left + anchors.leftMargin: hifi.dimensions.contentMargin.x + } +} diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml index dac43c9c3c..868b35398b 100644 --- a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -38,39 +38,17 @@ Item { Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } - anchors.topMargin: 90 // Space for header. + anchors.topMargin: hifi.dimensions.tabletMenuHeader // Space for header. - // FIXME: Refactor with other tablet headers. - Rectangle { + HifiControls.TabletHeader { id: header - height: 90 + title: root.title + anchors { left: parent.left right: parent.right bottom: parent.top } - z: 100 - - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - } - - GradientStop { - position: 1 - color: "#1e1e1e" - } - } - - RalewayBold { - text: title - size: 26 - color: "#34a2c7" - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: hifi.dimensions.contentMargin.x - } } AttachmentsContent { diff --git a/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml b/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml index e098c59e4e..60bd7a88e0 100644 --- a/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletModelBrowserDialog.qml @@ -37,39 +37,17 @@ Item { anchors.fill: parent } - anchors.topMargin: 90 // Space for header. + anchors.topMargin: hifi.dimensions.tabletMenuHeader // Space for header. - // FIXME: Refactor with other tablet headers. - Rectangle { + HifiControls.TabletHeader { id: header - height: 90 + title: parent.title + anchors { left: parent.left right: parent.right bottom: parent.top } - z: 100 - - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - } - - GradientStop { - position: 1 - color: "#1e1e1e" - } - } - - RalewayBold { - text: title - size: 26 - color: "#34a2c7" - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: hifi.dimensions.contentMargin.x - } } ModelBrowserContent { diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index 95ce7f5a1d..c76735cb3c 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -58,36 +58,15 @@ Item { Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } - Rectangle { + HifiControls.TabletHeader { id: header - height: 90 + title: parent.title + anchors { top: parent.top left: parent.left right: parent.right } - z: 100 - - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - } - - GradientStop { - position: 1 - color: "#1e1e1e" - } - } - - RalewayBold { - text: title - size: 26 - color: "#34a2c7" - anchors.verticalCenter: parent.verticalCenter - anchors.left: parent.left - anchors.leftMargin: hifi.dimensions.contentMargin.x - } } Rectangle { From 0fc45799ed1c8e768124110e8bb1fcd2f0ae4aa6 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sat, 11 Mar 2017 17:04:55 +1300 Subject: [PATCH 115/247] Remove redundant keyboard handling code --- .../resources/qml/hifi/dialogs/AttachmentsDialog.qml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml b/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml index 66338666cf..12e8de3bfc 100644 --- a/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml +++ b/interface/resources/qml/hifi/dialogs/AttachmentsDialog.qml @@ -41,15 +41,4 @@ ScrollingWindow { } AttachmentsContent { } - - onKeyboardRaisedChanged: { - if (keyboardEnabled && keyboardRaised) { - var buttonHeight = 40; // Allow for New Attachment button. - var keyboardRaisedHeight = 200; - var delta = activator.mouseY - (root.height - keyboardRaisedHeight - buttonHeight); - if (delta > 0) { - content.scrollBy(delta); - } - } - } } From 9f7c5a16033d4341ef13e67e4e8a4f25ae3818cf Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Sat, 11 Mar 2017 11:54:44 +0100 Subject: [PATCH 116/247] Add LOD settings to Tablet UI --- .../qml/hifi/tablet/TabletLodPreferences.qml | 34 +++++++++++++++++++ interface/src/Menu.cpp | 3 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 interface/resources/qml/hifi/tablet/TabletLodPreferences.qml diff --git a/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml b/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml new file mode 100644 index 0000000000..8f03bdb0c5 --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml @@ -0,0 +1,34 @@ +import QtQuick 2.5 +import Qt.labs.settings 1.0 + +import "tabletWindows" +import "../../dialogs" +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtGraphicalEffects 1.0 + +StackView { + id: profileRoot + initialItem: root + objectName: "stack" + + property var eventBridge; + signal sendToScript(var message); + + function pushSource(path) { + editRoot.push(Qt.reslovedUrl(path)); + } + + function popSource() { + + } + + TabletPreferencesDialog { + id: root + property string title: "LOD Settings" + objectName: "TabletLodPreferences" + width: parent.width + height: parent.height + showCategories: ["Level of Detail Tuning"] + } +} diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 241f908190..7eb5f4ea60 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -308,7 +308,8 @@ Menu::Menu() { // Settings > LOD... action = addActionToQMenuAndActionHash(settingsMenu, "LOD..."); connect(action, &QAction::triggered, [] { - DependencyManager::get<OffscreenUi>()->toggle(QString("hifi/dialogs/LodPreferencesDialog.qml"), "LodPreferencesDialog"); + qApp->showDialog(QString("hifi/dialogs/LodPreferencesDialog.qml"), + QString("../../hifi/tablet/TabletLodPreferences.qml"), "LodPreferencesDialog"); }); // Settings > Control with Speech [advanced] From d70943dd6c37ebc36760c1bc1caeaf8a86302b02 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Sat, 11 Mar 2017 12:23:31 +0100 Subject: [PATCH 117/247] Add Graphics preferences to Tablet. Use TabletComboBox instead of desktop ComboBox for Tablet preferences --- .../hifi/tablet/TabletGraphicsPreferences.qml | 34 ++++++++++ .../tabletWindows/preferences/Section.qml | 2 +- .../preferences/TabletComboBoxPreference.qml | 65 +++++++++++++++++++ interface/src/Menu.cpp | 3 +- 4 files changed, 102 insertions(+), 2 deletions(-) create mode 100644 interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml create mode 100644 interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletComboBoxPreference.qml diff --git a/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml new file mode 100644 index 0000000000..2ca9634ee6 --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml @@ -0,0 +1,34 @@ +import QtQuick 2.5 +import Qt.labs.settings 1.0 + +import "tabletWindows" +import "../../dialogs" +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import QtGraphicalEffects 1.0 + +StackView { + id: profileRoot + initialItem: root + objectName: "stack" + + property var eventBridge; + signal sendToScript(var message); + + function pushSource(path) { + editRoot.push(Qt.reslovedUrl(path)); + } + + function popSource() { + + } + + TabletPreferencesDialog { + id: root + property string title: "Graphics Settings" + objectName: "TabletGraphicsPreferences" + width: parent.width + height: parent.height + showCategories: ["Graphics"] + } +} diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml index 3d6dfa10ce..54f616e0f4 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml @@ -80,7 +80,7 @@ Preference { property var sliderBuilder: Component { SliderPreference { } } property var avatarBuilder: Component { AvatarPreference { } } property var buttonBuilder: Component { ButtonPreference { } } - property var comboBoxBuilder: Component { ComboBoxPreference { } } + property var comboBoxBuilder: Component { TabletComboBoxPreference { } } property var preferences: [] property int checkBoxCount: 0 diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletComboBoxPreference.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletComboBoxPreference.qml new file mode 100644 index 0000000000..0ff000f3e1 --- /dev/null +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletComboBoxPreference.qml @@ -0,0 +1,65 @@ +// +// ComboBoxPreference.qml +// +// Created by Bradley Austin Davis on 18 Jan 2016 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 + +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 +import "../../../../controls-uit" as HiFiControls +import "../../../../styles-uit" + +Preference { + id: root + height: control.height + hifi.dimensions.controlInterlineHeight + + Component.onCompleted: { + dataComboBox.currentIndex = dataComboBox.comboBox.find(preference.value); + } + + function save() { + preference.value = dataComboBox.currentText; + preference.save(); + } + + Item { + id: control + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + height: Math.max(labelText.height, dataComboBox.controlHeight) + + HiFiControls.Label { + id: labelText + text: root.label + ":" + colorScheme: hifi.colorSchemes.dark + anchors { + left: parent.left + right: dataComboBox.left + rightMargin: hifi.dimensions.labelPadding + verticalCenter: parent.verticalCenter + } + horizontalAlignment: Text.AlignRight + wrapMode: Text.Wrap + } + + HiFiControls.TabletComboBox { + id: dataComboBox + model: preference.items + width: 150 + anchors { + right: parent.right + verticalCenter: parent.verticalCenter + } + colorScheme: hifi.colorSchemes.dark + } + } +} diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 241f908190..d53f6b6c7a 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -329,7 +329,8 @@ Menu::Menu() { // Developer > Graphics... action = addActionToQMenuAndActionHash(developerMenu, "Graphics..."); connect(action, &QAction::triggered, [] { - DependencyManager::get<OffscreenUi>()->toggle(QString("hifi/dialogs/GraphicsPreferencesDialog.qml"), "GraphicsPreferencesDialog"); + qApp->showDialog(QString("hifi/dialogs/GraphicsPreferencesDialog.qml"), + QString("../../hifi/tablet/TabletGraphicsPreferences.qml"), "GraphicsPreferencesDialog"); }); // Developer > Render >>> From 81bc56f124fb0e507e5852c5d9a7b1584bb6b296 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Sat, 11 Mar 2017 14:44:33 +0100 Subject: [PATCH 118/247] Fixed slider groove size calculation. Added LOD Tools to Tablet UI --- .../resources/qml/controls-uit/Slider.qml | 2 +- .../qml/hifi/dialogs/TabletLODTools.qml | 119 ++++++++++++++++++ interface/src/Application.cpp | 12 ++ interface/src/Application.h | 1 + interface/src/Menu.cpp | 3 +- interface/src/ui/overlays/Web3DOverlay.cpp | 2 + 6 files changed, 137 insertions(+), 2 deletions(-) create mode 100644 interface/resources/qml/hifi/dialogs/TabletLODTools.qml diff --git a/interface/resources/qml/controls-uit/Slider.qml b/interface/resources/qml/controls-uit/Slider.qml index cf59e1d989..39831546e1 100644 --- a/interface/resources/qml/controls-uit/Slider.qml +++ b/interface/resources/qml/controls-uit/Slider.qml @@ -36,7 +36,7 @@ Slider { Rectangle { width: parent.height - 2 - height: slider.value * slider.width - 1 + height: slider.value * (slider.width/(slider.maximumValue - slider.minimumValue)) - 1 radius: height / 2 anchors { top: parent.top diff --git a/interface/resources/qml/hifi/dialogs/TabletLODTools.qml b/interface/resources/qml/hifi/dialogs/TabletLODTools.qml new file mode 100644 index 0000000000..26e9759e0d --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/TabletLODTools.qml @@ -0,0 +1,119 @@ +// +// TabletLODTools.qml +// +// Created by Vlad Stelmahovsky on 3/11/17 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import Qt.labs.settings 1.0 + +import "../../styles-uit" +import "../../controls-uit" as HifiControls +import "../../windows" + +Rectangle { + id: root + objectName: "LODTools" + + property var eventBridge; + signal sendToScript(var message); + property bool isHMD: false + + color: hifi.colors.baseGray + + property int colorScheme: hifi.colorSchemes.dark + + HifiConstants { id: hifi } + + readonly property real treeScale: 32768; // ~20 miles.. This is the number of meters of the 0.0 to 1.0 voxel universe + readonly property real halfTreeScale: treeScale / 2; + + // This controls the LOD. Larger number will make smaller voxels visible at greater distance. + readonly property real defaultOctreeSizeScale: treeScale * 400.0 + + Column { + anchors.margins: 10 + anchors.left: parent.left + anchors.right: parent.right + y: hifi.dimensions.tabletMenuHeader //-bgNavBar + spacing: 20 + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("You can see...") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: whatYouCanSeeLabel + color: "red" + size: 20 + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + Row { + anchors.left: parent.left + anchors.right: parent.right + spacing: 10 + + HifiControls.Label { + size: 20 + text: qsTr("Manually Adjust Level of Detail:") + anchors.verticalCenter: parent.verticalCenter + colorScheme: root.colorScheme + } + + HifiControls.CheckBox { + id: adjustCheckbox + boxSize: 20 + anchors.verticalCenter: parent.verticalCenter + onCheckedChanged: LODManager.setAutomaticLODAdjust(!checked); + } + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Level of Detail:") + colorScheme: root.colorScheme + } + HifiControls.Slider { + id: slider + enabled: adjustCheckbox.checked + anchors.left: parent.left + anchors.right: parent.right + minimumValue: 5 + maximumValue: 2000 + value: LODManager.getOctreeSizeScale() / treeScale + tickmarksEnabled: false + onValueChanged: { + LODManager.setOctreeSizeScale(value * treeScale); + whatYouCanSeeLabel.text = LODManager.getLODFeedbackText() + } + } + + HifiControls.Button { + id: uploadButton + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Reset") + color: hifi.buttons.blue + colorScheme: root.colorScheme + height: 30 + onClicked: { + slider.value = defaultOctreeSizeScale/treeScale + adjustCheckbox.checked = false + LODManager.setAutomaticLODAdjust(adjustCheckbox.checked); + } + } + } +} + diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 27dd65ab8d..94a71e01b0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -6363,6 +6363,18 @@ void Application::loadScriptURLDialog() const { } } +void Application::loadLODToolsDialog() { + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet->getToolbarMode() || (!tablet->getTabletRoot() && !isHMDMode())) { + auto dialogsManager = DependencyManager::get<DialogsManager>(); + dialogsManager->lodTools(); + } else { + tablet->pushOntoStack("../../hifi/dialogs/TabletLODTools.qml"); + } + +} + void Application::toggleLogDialog() { if (! _logDialog) { _logDialog = new LogDialog(nullptr, getLogger()); diff --git a/interface/src/Application.h b/interface/src/Application.h index 9fab4aef81..5c72f0fa90 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -403,6 +403,7 @@ public slots: void addAssetToWorldMessageClose(); Q_INVOKABLE void toggleMuteAudio(); + void loadLODToolsDialog(); private slots: void showDesktop(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 241f908190..dcbcfed6a0 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -408,7 +408,8 @@ Menu::Menu() { // Developer > Render > LOD Tools - addActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::LodTools, 0, dialogsManager.data(), SLOT(lodTools())); + addActionToQMenuAndActionHash(renderOptionsMenu, MenuOption::LodTools, 0, + qApp, SLOT(loadLODToolsDialog())); // HACK enable texture decimation { diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 32fe26a697..de0218843a 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -43,6 +43,7 @@ #include "FileDialogHelper.h" #include "avatar/AvatarManager.h" #include "AudioClient.h" +#include "LODManager.h" static const float DPI = 30.47f; static const float INCHES_TO_METERS = 1.0f / 39.3701f; @@ -182,6 +183,7 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); _webSurface->getRootContext()->setContextProperty("Tablet", DependencyManager::get<TabletScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("Assets", DependencyManager::get<AssetMappingsScriptingInterface>().data()); + _webSurface->getRootContext()->setContextProperty("LODManager", DependencyManager::get<LODManager>().data()); _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); From 05e4c2a1bb32831a4340304e402a06c11e28e718 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Sun, 12 Mar 2017 09:59:52 +1300 Subject: [PATCH 119/247] MyAvatar is available in tablet now --- .../resources/qml/dialogs/preferences/AvatarPreference.qml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/interface/resources/qml/dialogs/preferences/AvatarPreference.qml b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml index 53d36b6c79..0c5c5bf630 100644 --- a/interface/resources/qml/dialogs/preferences/AvatarPreference.qml +++ b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml @@ -23,10 +23,7 @@ Preference { Component.onCompleted: { dataTextField.text = preference.value; - // FIXME: MyAvatar object isn't available in HMD mode for some reason. - if (typeof MyAvatar !== "undefined") { - console.log("MyAvatar modelName " + MyAvatar.getFullAvatarModelName()) - } + console.log("MyAvatar modelName " + MyAvatar.getFullAvatarModelName()) console.log("Application : " + ApplicationInterface) ApplicationInterface.fullAvatarURLChanged.connect(processNewAvatar); } From 49055cfa5cab406d864e090b6f8fe81160f7aedb Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Mon, 13 Mar 2017 16:31:29 +0100 Subject: [PATCH 120/247] Some statistics showed --- .../hifi/dialogs/TabletEntityStatistics.qml | 312 ++++++++++ interface/src/Application.cpp | 15 + interface/src/Application.h | 1 + interface/src/Menu.cpp | 4 +- interface/src/ui/OctreeStatsProvider.cpp | 561 ++++++++++++++++++ interface/src/ui/OctreeStatsProvider.h | 128 ++++ interface/src/ui/overlays/Web3DOverlay.cpp | 2 + 7 files changed, 1022 insertions(+), 1 deletion(-) create mode 100644 interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml create mode 100644 interface/src/ui/OctreeStatsProvider.cpp create mode 100644 interface/src/ui/OctreeStatsProvider.h diff --git a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml new file mode 100644 index 0000000000..21f63dd070 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml @@ -0,0 +1,312 @@ +// +// TabletEntityStatistics.qml +// +// Created by Vlad Stelmahovsky on 3/11/17 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import Qt.labs.settings 1.0 + +import "../../styles-uit" +import "../../controls-uit" as HifiControls +import "../../windows" + +Rectangle { + id: root + objectName: "EntityStatistics" + + property var eventBridge; + signal sendToScript(var message); + property bool isHMD: false + + color: hifi.colors.baseGray + + property int colorScheme: hifi.colorSchemes.dark + + HifiConstants { id: hifi } + + Component.onCompleted: { + OctreeStats.startUpdates() + } + + Component.onDestruction: { + OctreeStats.stopUpdates() + } + + Flickable { + id: scrollView + width: parent.width + anchors.top: parent.top + anchors.bottom: parent.bottom + anchors.bottomMargin: hifi.dimensions.tabletMenuHeader + contentWidth: column.implicitWidth + contentHeight: column.implicitHeight + + Column { + id: column + anchors.margins: 10 + anchors.left: parent.left + anchors.right: parent.right + y: hifi.dimensions.tabletMenuHeader //-bgNavBar + spacing: 20 + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Elements on Servers:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: elementsOnServerLabel + size: 20 + text: OctreeStats.serverElements + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Local Elements:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: localElementsLabel + size: 20 + text: OctreeStats.localElements + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Elements Memory:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: elementsMemoryLabel + size: 20 + text: OctreeStats.localElementsMemory + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Sending Mode:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: sendingModeLabel + size: 20 + text: OctreeStats.sendingMode + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Incoming Entity Packets:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: incomingEntityPacketsLabel + size: 20 + text: OctreeStats.processedPackets + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Processed Packets Elements:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: processedPacketsElementsLabel + size: 20 + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Processed Packets Entities:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: processedPacketsEntitiesLabel + size: 20 + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Processed Packets Timing:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: processedPacketsTimingLabel + size: 20 + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Outbound Entity Packets:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: outboundEntityPacketsLabel + size: 20 + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Entity Update Time:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: entityUpdateTimeLabel + size: 20 + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + HifiControls.Label { + size: 20 + anchors.left: parent.left + anchors.right: parent.right + text: qsTr("Entity Updates:") + colorScheme: root.colorScheme + } + HifiControls.Label { + id: entityUpdatesLabel + size: 20 + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + Repeater { + model: OctreeStats.serversNum + + delegate: Column { + id: serverColumn + width: scrollView.width - 10 + x: 5 + spacing: 5 + + state: "less" + + HifiControls.Label { + size: 20 + width: parent.width + text: qsTr("Entity Server ") + (index+1) + ":" + colorScheme: root.colorScheme + } + HifiControls.Label { + id: entityServer1Label + size: 20 + width: parent.width + colorScheme: root.colorScheme + } + Row { + id: buttonsRow + width: parent.width + height: 30 + spacing: 10 + + HifiControls.Button { + id: moreButton + color: hifi.buttons.blue + colorScheme: root.colorScheme + width: parent.width / 2 - 10 + height: 30 + onClicked: { + if (serverColumn.state === "less") { + serverColumn.state = "more" + } else if (serverColumn.state === "more") { + serverColumn.state = "most" + } else { + serverColumn.state = "less" + } + } + } + HifiControls.Button { + id: mostButton + color: hifi.buttons.blue + colorScheme: root.colorScheme + height: 30 + width: parent.width / 2 - 10 + onClicked: { + if (serverColumn.state === "less") { + serverColumn.state = "most" + } else if (serverColumn.state === "more") { + serverColumn.state = "less" + } else { + serverColumn.state = "more" + } + } + + } + } + states: [ + State { + name: "less" + PropertyChanges { target: moreButton; text: qsTr("more..."); } + PropertyChanges { target: mostButton; text: qsTr("most..."); } + }, + State { + name: "more" + PropertyChanges { target: moreButton; text: qsTr("most..."); } + PropertyChanges { target: mostButton; text: qsTr("less..."); } + }, + State { + name: "most" + PropertyChanges { target: moreButton; text: qsTr("less..."); } + PropertyChanges { target: mostButton; text: qsTr("least..."); } + } + ] + } //servers column + } //repeater + } //column + } //flickable +} diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index dcd47979f1..5faf2b8ff0 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -173,6 +173,7 @@ #include "ui/overlays/Overlays.h" #include "Util.h" #include "InterfaceParentFinder.h" +#include "ui/OctreeStatsProvider.h" #include "FrameTimingsScriptingInterface.h" #include <GPUIdent.h> @@ -523,6 +524,7 @@ bool setupEssentials(int& argc, char** argv) { DependencyManager::set<OffscreenQmlSurfaceCache>(); DependencyManager::set<EntityScriptClient>(); DependencyManager::set<EntityScriptServerLogClient>(); + DependencyManager::set<OctreeStatsProvider>(nullptr, qApp->getOcteeSceneStats()); return previousSessionCrashed; } @@ -1803,6 +1805,7 @@ Application::~Application() { DependencyManager::destroy<GeometryCache>(); DependencyManager::destroy<ScriptCache>(); DependencyManager::destroy<SoundCache>(); + DependencyManager::destroy<OctreeStatsProvider>(); ResourceManager::cleanup(); @@ -6363,6 +6366,18 @@ void Application::loadScriptURLDialog() const { } } + +void Application::loadEntityStatisticsDialog() { + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet->getToolbarMode() || (!tablet->getTabletRoot() && !isHMDMode())) { + auto dialogsManager = DependencyManager::get<DialogsManager>(); + dialogsManager->octreeStatsDetails(); + } else { + tablet->pushOntoStack("../../hifi/dialogs/TabletEntityStatistics.qml"); + } + +} void Application::toggleLogDialog() { if (! _logDialog) { _logDialog = new LogDialog(nullptr, getLogger()); diff --git a/interface/src/Application.h b/interface/src/Application.h index 9fab4aef81..e4715ac41f 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -403,6 +403,7 @@ public slots: void addAssetToWorldMessageClose(); Q_INVOKABLE void toggleMuteAudio(); + void loadEntityStatisticsDialog(); private slots: void showDesktop(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 241f908190..15fc46d6cb 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -544,8 +544,10 @@ Menu::Menu() { // Developer > Entities >>> MenuWrapper* entitiesOptionsMenu = developerMenu->addMenu("Entities"); + addActionToQMenuAndActionHash(entitiesOptionsMenu, MenuOption::OctreeStats, 0, - dialogsManager.data(), SLOT(octreeStatsDetails())); + qApp, SLOT(loadEntityStatisticsDialog())); + addCheckableActionToQMenuAndActionHash(entitiesOptionsMenu, MenuOption::ShowRealtimeEntityStats); // Developer > Network >>> diff --git a/interface/src/ui/OctreeStatsProvider.cpp b/interface/src/ui/OctreeStatsProvider.cpp new file mode 100644 index 0000000000..9c6fdcea8f --- /dev/null +++ b/interface/src/ui/OctreeStatsProvider.cpp @@ -0,0 +1,561 @@ +// +// OctreeStatsProvider.cpp +// interface/src/ui +// +// Created by Vlad Stelmahovsky on 3/12/17. +// Copyright 2013 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include <sstream> + +#include <QPalette> +#include <QColor> + +#include "Application.h" + +#include "../octree/OctreePacketProcessor.h" +#include "ui/OctreeStatsProvider.h" + +OctreeStatsProvider::OctreeStatsProvider(QObject* parent, NodeToOctreeSceneStats* model) : + QObject(parent), + _model(model) + //, _averageUpdatesPerSecond(SAMPLES_PER_SECOND) +{ + + _statCount = 0; +// _octreeServerLabelsCount = 0; + +// for (int i = 0; i < MAX_VOXEL_SERVERS; i++) { +// _octreeServerLables[i] = 0; +// } + + // Setup stat items +// _serverElements = AddStatItem("Elements on Servers"); + _localElements = AddStatItem("Local Elements"); + _localElementsMemory = AddStatItem("Elements Memory"); + _sendingMode = AddStatItem("Sending Mode"); + + _processedPackets = AddStatItem("Incoming Entity Packets"); + _processedPacketsElements = AddStatItem("Processed Packets Elements"); + _processedPacketsEntities = AddStatItem("Processed Packets Entities"); + _processedPacketsTiming = AddStatItem("Processed Packets Timing"); + + _outboundEditPackets = AddStatItem("Outbound Entity Packets"); + + _entityUpdateTime = AddStatItem("Entity Update Time"); + _entityUpdates = AddStatItem("Entity Updates"); + + //schedule updates + connect(&_updateTimer, &QTimer::timeout, this, &OctreeStatsProvider::updateOctreeStatsData); + _updateTimer.setInterval(100); + //timer will be rescheduled on each new timeout + _updateTimer.setSingleShot(true); + +} + +void OctreeStatsProvider::moreless(const QString& link) { + QStringList linkDetails = link.split("-"); + const int COMMAND_ITEM = 0; + const int SERVER_NUMBER_ITEM = 1; + QString serverNumberString = linkDetails[SERVER_NUMBER_ITEM]; + QString command = linkDetails[COMMAND_ITEM]; + int serverNumber = serverNumberString.toInt(); + +// if (command == "more") { +// _extraServerDetails[serverNumber-1] = MORE; +// } else if (command == "most") { +// _extraServerDetails[serverNumber-1] = MOST; +// } else { +// _extraServerDetails[serverNumber-1] = LESS; +// } +} + +/* + * Start updates statistics +*/ +void OctreeStatsProvider::startUpdates() { + _updateTimer.start(); +} + +/* + * Stop updates statistics +*/ +void OctreeStatsProvider::stopUpdates() { + _updateTimer.stop(); +} + + +int OctreeStatsProvider::AddStatItem(const char* caption, unsigned colorRGBA) { + const int STATS_LABEL_WIDTH = 600; + + _statCount++; // increment our current stat count + + if (colorRGBA == 0) { + static unsigned rotatingColors[] = { GREENISH, YELLOWISH, GREYISH }; + colorRGBA = rotatingColors[_statCount % (sizeof(rotatingColors)/sizeof(rotatingColors[0]))]; + } + //QLabel* label = _labels[_statCount] = new QLabel(); + + // Set foreground color to 62.5% brightness of the meter (otherwise will be hard to read on the bright background) + //QPalette palette = label->palette(); + + // This goofiness came from the bandwidth meter code, it basically stores a color in an unsigned and extracts it + unsigned rgb = colorRGBA >> 8; + const unsigned colorpart1 = 0xfefefeu; + const unsigned colorpart2 = 0xf8f8f8; + rgb = ((rgb & colorpart1) >> 1) + ((rgb & colorpart2) >> 3); +// palette.setColor(QPalette::WindowText, QColor::fromRgb(rgb)); +// label->setPalette(palette); +// _form->addRow(QString(" %1:").arg(caption), label); +// label->setFixedWidth(STATS_LABEL_WIDTH); + + return _statCount; +} + +OctreeStatsProvider::~OctreeStatsProvider() { + _updateTimer.stop(); +} + +int OctreeStatsProvider::serversNum() const { + return m_serversNum; +} + +void OctreeStatsProvider::updateOctreeStatsData() { + + // Processed Entities Related stats + auto entities = qApp->getEntities(); + auto entitiesTree = entities->getTree(); + + // Do this ever paint event... even if we don't update + auto totalTrackedEdits = entitiesTree->getTotalTrackedEdits(); + + + // Only refresh our stats every once in a while, unless asked for realtime + //if no realtime, then update once per second. Otherwise consider 60FPS update, ie 16ms interval + int updateinterval = Menu::getInstance()->isOptionChecked(MenuOption::ShowRealtimeEntityStats) ? 16 : 1000; + _updateTimer.start(updateinterval); + + const int FLOATING_POINT_PRECISION = 3; + + // Update labels + + //QLabel* label; + QLocale locale(QLocale::English); + std::stringstream statsValue; +// statsValue.precision(4); + + // Octree Elements Memory Usage + //label = _labels[_localElementsMemory]; +// statsValue.str(""); +// statsValue << "Elements RAM: " << OctreeElement::getTotalMemoryUsage() / 1000000.0f << "MB "; + //label->setText(statsValue.str().c_str()); + m_localElementsMemory = QString("Elements RAM: %1MB").arg(OctreeElement::getTotalMemoryUsage() / 1000000.0f, 5, 'f', 4); + emit localElementsMemoryChanged(m_localElementsMemory); + // Local Elements + //label = _labels[_localElements]; +// unsigned long localTotal = OctreeElement::getNodeCount(); +// unsigned long localInternal = OctreeElement::getInternalNodeCount(); +// unsigned long localLeaves = OctreeElement::getLeafNodeCount(); +// QString localTotalString = locale.toString((uint)localTotal); // consider adding: .rightJustified(10, ' '); +// QString localInternalString = locale.toString((uint)localInternal); +// QString localLeavesString = locale.toString((uint)localLeaves); + +// statsValue.str(""); +// statsValue << +// "Total: " << qPrintable(localTotalString) << " / " << +// "Internal: " << qPrintable(localInternalString) << " / " << +// "Leaves: " << qPrintable(localLeavesString) << ""; + + m_localElements = QString("Total: %1 / Internal: %2 / Leaves: %3"). + arg(OctreeElement::getNodeCount()). + arg(OctreeElement::getInternalNodeCount()). + arg(OctreeElement::getLeafNodeCount()); + emit localElementsChanged(m_localElements); + + //label->setText(statsValue.str().c_str()); + + // iterate all the current octree stats, and list their sending modes, total their octree elements, etc... + std::stringstream sendingMode(""); + + int serverCount = 0; + int movingServerCount = 0; + unsigned long totalNodes = 0; + unsigned long totalInternal = 0; + unsigned long totalLeaves = 0; + + NodeToOctreeSceneStats* sceneStats = qApp->getOcteeSceneStats(); + sceneStats->withReadLock([&] { + for (NodeToOctreeSceneStatsIterator i = sceneStats->begin(); i != sceneStats->end(); i++) { + //const QUuid& uuid = i->first; + OctreeSceneStats& stats = i->second; + serverCount++; + + // calculate server node totals + totalNodes += stats.getTotalElements(); + totalInternal += stats.getTotalInternal(); + totalLeaves += stats.getTotalLeaves(); + + // Sending mode + if (serverCount > 1) { + sendingMode << ","; + } + if (stats.isMoving()) { + sendingMode << "M"; + movingServerCount++; + } else { + sendingMode << "S"; + } + if (stats.isFullScene()) { + sendingMode << "F"; + } else { + sendingMode << "p"; + } + } + }); + sendingMode << " - " << serverCount << " servers"; + if (movingServerCount > 0) { + sendingMode << " <SCENE NOT STABLE>"; + } else { + sendingMode << " <SCENE STABLE>"; + } + +// label = _labels[_sendingMode]; +// label->setText(sendingMode.str().c_str()); + + // Server Elements + m_serverElements = QString("Total: %1/ Internal: %2/ Leaves: %3"). + arg(totalNodes).arg(totalInternal).arg(totalLeaves); + emit serverElementsChanged(m_serverElements); +// QString serversTotalString = locale.toString((uint)totalNodes); // consider adding: .rightJustified(10, ' '); +// QString serversInternalString = locale.toString((uint)totalInternal); +// QString serversLeavesString = locale.toString((uint)totalLeaves); +//// label = _labels[_serverElements]; +// statsValue.str(""); +// statsValue << +// "Total: " << qPrintable(serversTotalString) << " / " << +// "Internal: " << qPrintable(serversInternalString) << " / " << +// "Leaves: " << qPrintable(serversLeavesString) << ""; +//// label->setText(statsValue.str().c_str()); + + // Processed Packets Elements + auto averageElementsPerPacket = entities->getAverageElementsPerPacket(); + auto averageEntitiesPerPacket = entities->getAverageEntitiesPerPacket(); + + auto averageElementsPerSecond = entities->getAverageElementsPerSecond(); + auto averageEntitiesPerSecond = entities->getAverageEntitiesPerSecond(); + + auto averageWaitLockPerPacket = entities->getAverageWaitLockPerPacket(); + auto averageUncompressPerPacket = entities->getAverageUncompressPerPacket(); + auto averageReadBitstreamPerPacket = entities->getAverageReadBitstreamPerPacket(); + + QString averageElementsPerPacketString = locale.toString(averageElementsPerPacket, 'f', FLOATING_POINT_PRECISION); + QString averageEntitiesPerPacketString = locale.toString(averageEntitiesPerPacket, 'f', FLOATING_POINT_PRECISION); + + QString averageElementsPerSecondString = locale.toString(averageElementsPerSecond, 'f', FLOATING_POINT_PRECISION); + QString averageEntitiesPerSecondString = locale.toString(averageEntitiesPerSecond, 'f', FLOATING_POINT_PRECISION); + + QString averageWaitLockPerPacketString = locale.toString(averageWaitLockPerPacket); + QString averageUncompressPerPacketString = locale.toString(averageUncompressPerPacket); + QString averageReadBitstreamPerPacketString = locale.toString(averageReadBitstreamPerPacket); + +// label = _labels[_processedPackets]; + const OctreePacketProcessor& entitiesPacketProcessor = qApp->getOctreePacketProcessor(); + + auto incomingPacketsDepth = entitiesPacketProcessor.packetsToProcessCount(); + auto incomingPPS = entitiesPacketProcessor.getIncomingPPS(); + auto processedPPS = entitiesPacketProcessor.getProcessedPPS(); + auto treeProcessedPPS = entities->getAveragePacketsPerSecond(); + + QString incomingPPSString = locale.toString(incomingPPS, 'f', FLOATING_POINT_PRECISION); + QString processedPPSString = locale.toString(processedPPS, 'f', FLOATING_POINT_PRECISION); + QString treeProcessedPPSString = locale.toString(treeProcessedPPS, 'f', FLOATING_POINT_PRECISION); + + statsValue.str(""); + statsValue << + "Queue Size: " << incomingPacketsDepth << " Packets / " << + "Network IN: " << qPrintable(incomingPPSString) << " PPS / " << + "Queue OUT: " << qPrintable(processedPPSString) << " PPS / " << + "Tree IN: " << qPrintable(treeProcessedPPSString) << " PPS"; + +// label->setText(statsValue.str().c_str()); + +// label = _labels[_processedPacketsElements]; + statsValue.str(""); + statsValue << + "" << qPrintable(averageElementsPerPacketString) << " per packet / " << + "" << qPrintable(averageElementsPerSecondString) << " per second"; + +// label->setText(statsValue.str().c_str()); + +// label = _labels[_processedPacketsEntities]; + statsValue.str(""); + statsValue << + "" << qPrintable(averageEntitiesPerPacketString) << " per packet / " << + "" << qPrintable(averageEntitiesPerSecondString) << " per second"; + +// label->setText(statsValue.str().c_str()); + +// label = _labels[_processedPacketsTiming]; + statsValue.str(""); + statsValue << + "Lock Wait: " << qPrintable(averageWaitLockPerPacketString) << " (usecs) / " << + "Uncompress: " << qPrintable(averageUncompressPerPacketString) << " (usecs) / " << + "Process: " << qPrintable(averageReadBitstreamPerPacketString) << " (usecs)"; + + //label->setText(statsValue.str().c_str()); + + auto entitiesEditPacketSender = qApp->getEntityEditPacketSender(); + + auto outboundPacketsDepth = entitiesEditPacketSender->packetsToSendCount(); + auto outboundQueuedPPS = entitiesEditPacketSender->getLifetimePPSQueued(); + auto outboundSentPPS = entitiesEditPacketSender->getLifetimePPS(); + + QString outboundQueuedPPSString = locale.toString(outboundQueuedPPS, 'f', FLOATING_POINT_PRECISION); + QString outboundSentPPSString = locale.toString(outboundSentPPS, 'f', FLOATING_POINT_PRECISION); + + //label = _labels[_outboundEditPackets]; + statsValue.str(""); + statsValue << + "Queue Size: " << outboundPacketsDepth << " packets / " << + "Queued IN: " << qPrintable(outboundQueuedPPSString) << " PPS / " << + "Sent OUT: " << qPrintable(outboundSentPPSString) << " PPS"; + + //label->setText(statsValue.str().c_str()); + + + // Entity Edits update time + //label = _labels[_entityUpdateTime]; + auto averageEditDelta = entitiesTree->getAverageEditDeltas(); + auto maxEditDelta = entitiesTree->getMaxEditDelta(); + + QString averageEditDeltaString = locale.toString((uint)averageEditDelta); + QString maxEditDeltaString = locale.toString((uint)maxEditDelta); + + statsValue.str(""); + statsValue << + "Average: " << qPrintable(averageEditDeltaString) << " (usecs) / " << + "Max: " << qPrintable(maxEditDeltaString) << " (usecs)"; + + //label->setText(statsValue.str().c_str()); + + // Entity Edits + //label = _labels[_entityUpdates]; + auto bytesPerEdit = entitiesTree->getAverageEditBytes(); + + auto updatesPerSecond = _averageUpdatesPerSecond.getAverage(); + if (updatesPerSecond < 1) { + updatesPerSecond = 0; // we don't really care about small updates per second so suppress those + } + + QString totalTrackedEditsString = locale.toString((uint)totalTrackedEdits); + QString updatesPerSecondString = locale.toString(updatesPerSecond, 'f', FLOATING_POINT_PRECISION); + QString bytesPerEditString = locale.toString(bytesPerEdit); + + statsValue.str(""); + statsValue << + "" << qPrintable(updatesPerSecondString) << " updates per second / " << + "" << qPrintable(totalTrackedEditsString) << " total updates / " << + "Average Size: " << qPrintable(bytesPerEditString) << " bytes "; + + //label->setText(statsValue.str().c_str()); + + updateOctreeServers(); +} + +void OctreeStatsProvider::updateOctreeServers() { + int serverCount = 0; + + showOctreeServersOfType(serverCount, NodeType::EntityServer, "Entity", + qApp->getEntityServerJurisdictions()); + //qDebug() << "vladest: octree servers:" << serverCount; + if (m_serversNum != serverCount) { + m_serversNum = serverCount; + emit serversNumChanged(m_serversNum); + } +} + +void OctreeStatsProvider::showOctreeServersOfType(int& serverCount, NodeType_t serverType, const char* serverTypeName, + NodeToJurisdictionMap& serverJurisdictions) { + + QLocale locale(QLocale::English); + + auto nodeList = DependencyManager::get<NodeList>(); + nodeList->eachNode([&](const SharedNodePointer& node){ + + // only send to the NodeTypes that are NodeType_t_VOXEL_SERVER + if (node->getType() == serverType) { + serverCount++; + +// if (serverCount > _octreeServerLabelsCount) { +// QString label = QString("%1 Server %2").arg(serverTypeName).arg(serverCount); +// //int thisServerRow = _octreeServerLables[serverCount-1] = AddStatItem(label.toUtf8().constData()); +//// _labels[thisServerRow]->setTextFormat(Qt::RichText); +//// _labels[thisServerRow]->setTextInteractionFlags(Qt::TextBrowserInteraction); +//// connect(_labels[thisServerRow], SIGNAL(linkActivated(const QString&)), this, SLOT(moreless(const QString&))); +// _octreeServerLabelsCount++; +// } + + std::stringstream serverDetails(""); + std::stringstream extraDetails(""); + std::stringstream linkDetails(""); + + if (node->getActiveSocket()) { + serverDetails << "active "; + } else { + serverDetails << "inactive "; + } + + QUuid nodeUUID = node->getUUID(); + + // lookup our nodeUUID in the jurisdiction map, if it's missing then we're + // missing at least one jurisdiction + serverJurisdictions.withReadLock([&] { + if (serverJurisdictions.find(nodeUUID) == serverJurisdictions.end()) { + serverDetails << " unknown jurisdiction "; + return; + } + const JurisdictionMap& map = serverJurisdictions[nodeUUID]; + + auto rootCode = map.getRootOctalCode(); + + if (rootCode) { + QString rootCodeHex = octalCodeToHexString(rootCode.get()); + + VoxelPositionSize rootDetails; + voxelDetailsForCode(rootCode.get(), rootDetails); + AACube serverBounds(glm::vec3(rootDetails.x, rootDetails.y, rootDetails.z), rootDetails.s); + serverDetails << " jurisdiction: " + << qPrintable(rootCodeHex) + << " [" + << rootDetails.x << ", " + << rootDetails.y << ", " + << rootDetails.z << ": " + << rootDetails.s << "] "; + } else { + serverDetails << " jurisdiction has no rootCode"; + } // root code + }); + + // now lookup stats details for this server... + if (/*_extraServerDetails[serverCount-1] != LESS*/true) { + NodeToOctreeSceneStats* sceneStats = qApp->getOcteeSceneStats(); + sceneStats->withReadLock([&] { + if (sceneStats->find(nodeUUID) != sceneStats->end()) { + OctreeSceneStats& stats = sceneStats->at(nodeUUID); +/* + switch (_extraServerDetails[serverCount - 1]) { + case MOST: { + extraDetails << "<br/>"; + + float lastFullEncode = stats.getLastFullTotalEncodeTime() / USECS_PER_MSEC; + float lastFullSend = stats.getLastFullElapsedTime() / USECS_PER_MSEC; + float lastFullSendInSeconds = stats.getLastFullElapsedTime() / USECS_PER_SECOND; + float lastFullPackets = stats.getLastFullTotalPackets(); + float lastFullPPS = lastFullPackets; + if (lastFullSendInSeconds > 0) { + lastFullPPS = lastFullPackets / lastFullSendInSeconds; + } + + QString lastFullEncodeString = locale.toString(lastFullEncode); + QString lastFullSendString = locale.toString(lastFullSend); + QString lastFullPacketsString = locale.toString(lastFullPackets); + QString lastFullBytesString = locale.toString((uint)stats.getLastFullTotalBytes()); + QString lastFullPPSString = locale.toString(lastFullPPS); + + extraDetails << "<br/>" << "Last Full Scene... " << + "Encode: " << qPrintable(lastFullEncodeString) << " ms " << + "Send: " << qPrintable(lastFullSendString) << " ms " << + "Packets: " << qPrintable(lastFullPacketsString) << " " << + "Bytes: " << qPrintable(lastFullBytesString) << " " << + "Rate: " << qPrintable(lastFullPPSString) << " PPS"; + + for (int i = 0; i < OctreeSceneStats::ITEM_COUNT; i++) { + OctreeSceneStats::Item item = (OctreeSceneStats::Item)(i); + OctreeSceneStats::ItemInfo& itemInfo = stats.getItemInfo(item); + extraDetails << "<br/>" << itemInfo.caption << " " << stats.getItemValue(item); + } + } // fall through... since MOST has all of MORE + case MORE: { + QString totalString = locale.toString((uint)stats.getTotalElements()); + QString internalString = locale.toString((uint)stats.getTotalInternal()); + QString leavesString = locale.toString((uint)stats.getTotalLeaves()); + + serverDetails << "<br/>" << "Node UUID: " << qPrintable(nodeUUID.toString()) << " "; + + serverDetails << "<br/>" << "Elements: " << + qPrintable(totalString) << " total " << + qPrintable(internalString) << " internal " << + qPrintable(leavesString) << " leaves "; + + QString incomingPacketsString = locale.toString((uint)stats.getIncomingPackets()); + QString incomingBytesString = locale.toString((uint)stats.getIncomingBytes()); + QString incomingWastedBytesString = locale.toString((uint)stats.getIncomingWastedBytes()); + const SequenceNumberStats& seqStats = stats.getIncomingOctreeSequenceNumberStats(); + QString incomingOutOfOrderString = locale.toString((uint)seqStats.getOutOfOrder()); + QString incomingLateString = locale.toString((uint)seqStats.getLate()); + QString incomingUnreasonableString = locale.toString((uint)seqStats.getUnreasonable()); + QString incomingEarlyString = locale.toString((uint)seqStats.getEarly()); + QString incomingLikelyLostString = locale.toString((uint)seqStats.getLost()); + QString incomingRecovered = locale.toString((uint)seqStats.getRecovered()); + + qint64 clockSkewInUsecs = node->getClockSkewUsec(); + QString formattedClockSkewString = formatUsecTime(clockSkewInUsecs); + qint64 clockSkewInMS = clockSkewInUsecs / (qint64)USECS_PER_MSEC; + QString incomingFlightTimeString = locale.toString((int)stats.getIncomingFlightTimeAverage()); + QString incomingPingTimeString = locale.toString(node->getPingMs()); + QString incomingClockSkewString = locale.toString(clockSkewInMS); + + serverDetails << "<br/>" << "Incoming Packets: " << qPrintable(incomingPacketsString) << + "/ Lost: " << qPrintable(incomingLikelyLostString) << + "/ Recovered: " << qPrintable(incomingRecovered); + + serverDetails << "<br/>" << " Out of Order: " << qPrintable(incomingOutOfOrderString) << + "/ Early: " << qPrintable(incomingEarlyString) << + "/ Late: " << qPrintable(incomingLateString) << + "/ Unreasonable: " << qPrintable(incomingUnreasonableString); + + serverDetails << "<br/>" << + " Average Flight Time: " << qPrintable(incomingFlightTimeString) << " msecs"; + + serverDetails << "<br/>" << + " Average Ping Time: " << qPrintable(incomingPingTimeString) << " msecs"; + + serverDetails << "<br/>" << + " Average Clock Skew: " << qPrintable(incomingClockSkewString) << " msecs" << + " [" << qPrintable(formattedClockSkewString) << "]"; + + + serverDetails << "<br/>" << "Incoming" << + " Bytes: " << qPrintable(incomingBytesString) << + " Wasted Bytes: " << qPrintable(incomingWastedBytesString); + + serverDetails << extraDetails.str(); + if (_extraServerDetails[serverCount - 1] == MORE) { + linkDetails << " " << " [<a href='most-" << serverCount << "'>most...</a>]"; + linkDetails << " " << " [<a href='less-" << serverCount << "'>less...</a>]"; + } else { + linkDetails << " " << " [<a href='more-" << serverCount << "'>less...</a>]"; + linkDetails << " " << " [<a href='less-" << serverCount << "'>least...</a>]"; + } + + } break; + case LESS: { + // nothing + } break; + }*/ + } + }); + } else { + linkDetails << " " << " [<a href='more-" << serverCount << "'>more...</a>]"; + linkDetails << " " << " [<a href='most-" << serverCount << "'>most...</a>]"; + } + serverDetails << linkDetails.str(); + //_labels[_octreeServerLables[serverCount - 1]]->setText(serverDetails.str().c_str()); + } // is VOXEL_SERVER + }); +} + + diff --git a/interface/src/ui/OctreeStatsProvider.h b/interface/src/ui/OctreeStatsProvider.h new file mode 100644 index 0000000000..c2fc46218d --- /dev/null +++ b/interface/src/ui/OctreeStatsProvider.h @@ -0,0 +1,128 @@ +// +// OctreeStatsProvider.h +// interface/src/ui +// +// Created by Vlad Stelmahovsky on 3/12/17. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_OctreeStatsProvider_h +#define hifi_OctreeStatsProvider_h + +#include <OctreeSceneStats.h> +#include <QTimer> + +#include "DependencyManager.h" + +#define MAX_STATS 100 +#define MAX_VOXEL_SERVERS 50 +#define DEFAULT_COLOR 0 + +class OctreeStatsProvider : public QObject, public Dependency { + Q_OBJECT + SINGLETON_DEPENDENCY + + Q_PROPERTY(int serversNum READ serversNum NOTIFY serversNumChanged) + Q_PROPERTY(QString serverElements READ serverElements NOTIFY serverElementsChanged) + Q_PROPERTY(QString localElements READ localElements NOTIFY localElementsChanged) + Q_PROPERTY(QString localElementsMemory READ localElementsMemory NOTIFY localElementsMemoryChanged) + Q_PROPERTY(QString sendingMode READ sendingMode NOTIFY sendingModeChanged) + //Incoming Entity Packets + Q_PROPERTY(QString processedPackets READ processedPackets NOTIFY processedPacketsChanged) + +// int _entityUpdateTime; +// int _entityUpdates; +// int _processedPacketsElements; +// int _processedPacketsEntities; +// int _processedPacketsTiming; +// int _outboundEditPackets; + +public: + // Sets up the UI + OctreeStatsProvider(QObject* parent, NodeToOctreeSceneStats* model); + ~OctreeStatsProvider(); + + int serversNum() const; + + QString serverElements() const { + return m_serverElements; + } + + QString localElements() const { + return m_localElements; + } + + QString localElementsMemory() const { + return m_localElementsMemory; + } + + QString sendingMode() const { + return m_sendingMode; + } + + QString processedPackets() const { + return m_processedPackets; + } + +signals: + + void serversNumChanged(int serversNum); + void serverElementsChanged(QString serverElements); + void localElementsChanged(QString localElements); + void sendingModeChanged(QString sendingMode); + void processedPacketsChanged(QString processedPackets); + void localElementsMemoryChanged(QString localElementsMemory); + +public slots: + void moreless(const QString& link); + void startUpdates(); + void stopUpdates(); + +private slots: + void updateOctreeStatsData(); +protected: + + int AddStatItem(const char* caption, unsigned colorRGBA = DEFAULT_COLOR); + void updateOctreeServers(); + void showOctreeServersOfType(int& serverNumber, NodeType_t serverType, + const char* serverTypeName, NodeToJurisdictionMap& serverJurisdictions); + +private: + NodeToOctreeSceneStats* _model; + int _statCount; + + int _sendingMode; + int _serverElements; + int _localElements; + int _localElementsMemory; + + int _entityUpdateTime; + int _entityUpdates; + int _processedPackets; + int _processedPacketsElements; + int _processedPacketsEntities; + int _processedPacketsTiming; + int _outboundEditPackets; + + const int SAMPLES_PER_SECOND = 10; + SimpleMovingAverage _averageUpdatesPerSecond; + quint64 _lastWindowAt = usecTimestampNow(); + quint64 _lastKnownTrackedEdits = 0; + + quint64 _lastRefresh = 0; + +// int _octreeServerLables[MAX_VOXEL_SERVERS]; +// int _octreeServerLabelsCount; + QTimer _updateTimer; + int m_serversNum {0}; + QString m_serverElements; + QString m_localElements; + QString m_localElementsMemory; + QString m_sendingMode; + QString m_processedPackets; +}; + +#endif // hifi_OctreeStatsProvider_h diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 32fe26a697..2aa6725aa2 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -43,6 +43,7 @@ #include "FileDialogHelper.h" #include "avatar/AvatarManager.h" #include "AudioClient.h" +#include "ui/OctreeStatsProvider.h" static const float DPI = 30.47f; static const float INCHES_TO_METERS = 1.0f / 39.3701f; @@ -182,6 +183,7 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); _webSurface->getRootContext()->setContextProperty("Tablet", DependencyManager::get<TabletScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("Assets", DependencyManager::get<AssetMappingsScriptingInterface>().data()); + _webSurface->getRootContext()->setContextProperty("OctreeStats", DependencyManager::get<OctreeStatsProvider>().data()); _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); From 48db6201e5f3aa7f261ae98d2ba401fe77e9a1f8 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Mon, 13 Mar 2017 19:48:50 +0100 Subject: [PATCH 121/247] Basic statistics showed. TODO: servers statistics, coloring, wrapping --- .../hifi/dialogs/TabletEntityStatistics.qml | 28 +- interface/src/ui/OctreeStatsProvider.cpp | 260 ++++++------------ interface/src/ui/OctreeStatsProvider.h | 78 +++--- 3 files changed, 148 insertions(+), 218 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml index 21f63dd070..bd7796927e 100644 --- a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml +++ b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml @@ -64,7 +64,7 @@ Rectangle { } HifiControls.Label { id: elementsOnServerLabel - size: 20 + size: 16 text: OctreeStats.serverElements anchors.left: parent.left anchors.right: parent.right @@ -80,7 +80,7 @@ Rectangle { } HifiControls.Label { id: localElementsLabel - size: 20 + size: 16 text: OctreeStats.localElements anchors.left: parent.left anchors.right: parent.right @@ -96,7 +96,7 @@ Rectangle { } HifiControls.Label { id: elementsMemoryLabel - size: 20 + size: 16 text: OctreeStats.localElementsMemory anchors.left: parent.left anchors.right: parent.right @@ -112,7 +112,7 @@ Rectangle { } HifiControls.Label { id: sendingModeLabel - size: 20 + size: 16 text: OctreeStats.sendingMode anchors.left: parent.left anchors.right: parent.right @@ -128,7 +128,7 @@ Rectangle { } HifiControls.Label { id: incomingEntityPacketsLabel - size: 20 + size: 16 text: OctreeStats.processedPackets anchors.left: parent.left anchors.right: parent.right @@ -144,7 +144,8 @@ Rectangle { } HifiControls.Label { id: processedPacketsElementsLabel - size: 20 + size: 16 + text: OctreeStats.processedPacketsElements anchors.left: parent.left anchors.right: parent.right colorScheme: root.colorScheme @@ -159,7 +160,8 @@ Rectangle { } HifiControls.Label { id: processedPacketsEntitiesLabel - size: 20 + size: 16 + text: OctreeStats.processedPacketsEntities anchors.left: parent.left anchors.right: parent.right colorScheme: root.colorScheme @@ -174,7 +176,8 @@ Rectangle { } HifiControls.Label { id: processedPacketsTimingLabel - size: 20 + size: 16 + text: OctreeStats.processedPacketsTiming anchors.left: parent.left anchors.right: parent.right colorScheme: root.colorScheme @@ -189,7 +192,8 @@ Rectangle { } HifiControls.Label { id: outboundEntityPacketsLabel - size: 20 + size: 16 + text: OctreeStats.outboundEditPackets anchors.left: parent.left anchors.right: parent.right colorScheme: root.colorScheme @@ -204,7 +208,8 @@ Rectangle { } HifiControls.Label { id: entityUpdateTimeLabel - size: 20 + size: 16 + text: OctreeStats.entityUpdateTime anchors.left: parent.left anchors.right: parent.right colorScheme: root.colorScheme @@ -219,7 +224,8 @@ Rectangle { } HifiControls.Label { id: entityUpdatesLabel - size: 20 + size: 16 + text: OctreeStats.entityUpdates anchors.left: parent.left anchors.right: parent.right colorScheme: root.colorScheme diff --git a/interface/src/ui/OctreeStatsProvider.cpp b/interface/src/ui/OctreeStatsProvider.cpp index 9c6fdcea8f..057056d8ce 100644 --- a/interface/src/ui/OctreeStatsProvider.cpp +++ b/interface/src/ui/OctreeStatsProvider.cpp @@ -22,38 +22,14 @@ OctreeStatsProvider::OctreeStatsProvider(QObject* parent, NodeToOctreeSceneStats* model) : QObject(parent), _model(model) - //, _averageUpdatesPerSecond(SAMPLES_PER_SECOND) + , _averageUpdatesPerSecond(SAMPLES_PER_SECOND) + , _statCount(0) { - - _statCount = 0; -// _octreeServerLabelsCount = 0; - -// for (int i = 0; i < MAX_VOXEL_SERVERS; i++) { -// _octreeServerLables[i] = 0; -// } - - // Setup stat items -// _serverElements = AddStatItem("Elements on Servers"); - _localElements = AddStatItem("Local Elements"); - _localElementsMemory = AddStatItem("Elements Memory"); - _sendingMode = AddStatItem("Sending Mode"); - - _processedPackets = AddStatItem("Incoming Entity Packets"); - _processedPacketsElements = AddStatItem("Processed Packets Elements"); - _processedPacketsEntities = AddStatItem("Processed Packets Entities"); - _processedPacketsTiming = AddStatItem("Processed Packets Timing"); - - _outboundEditPackets = AddStatItem("Outbound Entity Packets"); - - _entityUpdateTime = AddStatItem("Entity Update Time"); - _entityUpdates = AddStatItem("Entity Updates"); - //schedule updates connect(&_updateTimer, &QTimer::timeout, this, &OctreeStatsProvider::updateOctreeStatsData); _updateTimer.setInterval(100); //timer will be rescheduled on each new timeout _updateTimer.setSingleShot(true); - } void OctreeStatsProvider::moreless(const QString& link) { @@ -88,32 +64,32 @@ void OctreeStatsProvider::stopUpdates() { } -int OctreeStatsProvider::AddStatItem(const char* caption, unsigned colorRGBA) { - const int STATS_LABEL_WIDTH = 600; +//int OctreeStatsProvider::AddStatItem(const char* caption, unsigned colorRGBA) { +// const int STATS_LABEL_WIDTH = 600; - _statCount++; // increment our current stat count +// _statCount++; // increment our current stat count - if (colorRGBA == 0) { - static unsigned rotatingColors[] = { GREENISH, YELLOWISH, GREYISH }; - colorRGBA = rotatingColors[_statCount % (sizeof(rotatingColors)/sizeof(rotatingColors[0]))]; - } - //QLabel* label = _labels[_statCount] = new QLabel(); +// if (colorRGBA == 0) { +// static unsigned rotatingColors[] = { GREENISH, YELLOWISH, GREYISH }; +// colorRGBA = rotatingColors[_statCount % (sizeof(rotatingColors)/sizeof(rotatingColors[0]))]; +// } +// //QLabel* label = _labels[_statCount] = new QLabel(); - // Set foreground color to 62.5% brightness of the meter (otherwise will be hard to read on the bright background) - //QPalette palette = label->palette(); +// // Set foreground color to 62.5% brightness of the meter (otherwise will be hard to read on the bright background) +// //QPalette palette = label->palette(); - // This goofiness came from the bandwidth meter code, it basically stores a color in an unsigned and extracts it - unsigned rgb = colorRGBA >> 8; - const unsigned colorpart1 = 0xfefefeu; - const unsigned colorpart2 = 0xf8f8f8; - rgb = ((rgb & colorpart1) >> 1) + ((rgb & colorpart2) >> 3); +// // This goofiness came from the bandwidth meter code, it basically stores a color in an unsigned and extracts it +// unsigned rgb = colorRGBA >> 8; +// const unsigned colorpart1 = 0xfefefeu; +// const unsigned colorpart2 = 0xf8f8f8; +// rgb = ((rgb & colorpart1) >> 1) + ((rgb & colorpart2) >> 3); // palette.setColor(QPalette::WindowText, QColor::fromRgb(rgb)); // label->setPalette(palette); // _form->addRow(QString(" %1:").arg(caption), label); // label->setFixedWidth(STATS_LABEL_WIDTH); - return _statCount; -} +// return _statCount; +//} OctreeStatsProvider::~OctreeStatsProvider() { _updateTimer.stop(); @@ -132,54 +108,43 @@ void OctreeStatsProvider::updateOctreeStatsData() { // Do this ever paint event... even if we don't update auto totalTrackedEdits = entitiesTree->getTotalTrackedEdits(); + const quint64 SAMPLING_WINDOW = USECS_PER_SECOND / SAMPLES_PER_SECOND; + quint64 now = usecTimestampNow(); + quint64 sinceLastWindow = now - _lastWindowAt; + auto editsInLastWindow = totalTrackedEdits - _lastKnownTrackedEdits; + float sinceLastWindowInSeconds = (float)sinceLastWindow / (float)USECS_PER_SECOND; + float recentUpdatesPerSecond = (float)editsInLastWindow / sinceLastWindowInSeconds; + if (sinceLastWindow > SAMPLING_WINDOW) { + _averageUpdatesPerSecond.updateAverage(recentUpdatesPerSecond); + _lastWindowAt = now; + _lastKnownTrackedEdits = totalTrackedEdits; + } + // Only refresh our stats every once in a while, unless asked for realtime + quint64 REFRESH_AFTER = Menu::getInstance()->isOptionChecked(MenuOption::ShowRealtimeEntityStats) ? 0 : USECS_PER_SECOND; + quint64 sinceLastRefresh = now - _lastRefresh; + if (sinceLastRefresh < REFRESH_AFTER) { + _updateTimer.start((REFRESH_AFTER - sinceLastRefresh)/1000); + return; + } // Only refresh our stats every once in a while, unless asked for realtime //if no realtime, then update once per second. Otherwise consider 60FPS update, ie 16ms interval - int updateinterval = Menu::getInstance()->isOptionChecked(MenuOption::ShowRealtimeEntityStats) ? 16 : 1000; - _updateTimer.start(updateinterval); + //int updateinterval = Menu::getInstance()->isOptionChecked(MenuOption::ShowRealtimeEntityStats) ? 16 : 1000; + _updateTimer.start(SAMPLING_WINDOW/1000); const int FLOATING_POINT_PRECISION = 3; - // Update labels - - //QLabel* label; - QLocale locale(QLocale::English); - std::stringstream statsValue; -// statsValue.precision(4); - - // Octree Elements Memory Usage - //label = _labels[_localElementsMemory]; -// statsValue.str(""); -// statsValue << "Elements RAM: " << OctreeElement::getTotalMemoryUsage() / 1000000.0f << "MB "; - //label->setText(statsValue.str().c_str()); m_localElementsMemory = QString("Elements RAM: %1MB").arg(OctreeElement::getTotalMemoryUsage() / 1000000.0f, 5, 'f', 4); emit localElementsMemoryChanged(m_localElementsMemory); + // Local Elements - //label = _labels[_localElements]; -// unsigned long localTotal = OctreeElement::getNodeCount(); -// unsigned long localInternal = OctreeElement::getInternalNodeCount(); -// unsigned long localLeaves = OctreeElement::getLeafNodeCount(); -// QString localTotalString = locale.toString((uint)localTotal); // consider adding: .rightJustified(10, ' '); -// QString localInternalString = locale.toString((uint)localInternal); -// QString localLeavesString = locale.toString((uint)localLeaves); - -// statsValue.str(""); -// statsValue << -// "Total: " << qPrintable(localTotalString) << " / " << -// "Internal: " << qPrintable(localInternalString) << " / " << -// "Leaves: " << qPrintable(localLeavesString) << ""; - m_localElements = QString("Total: %1 / Internal: %2 / Leaves: %3"). arg(OctreeElement::getNodeCount()). arg(OctreeElement::getInternalNodeCount()). arg(OctreeElement::getLeafNodeCount()); emit localElementsChanged(m_localElements); - //label->setText(statsValue.str().c_str()); - // iterate all the current octree stats, and list their sending modes, total their octree elements, etc... - std::stringstream sendingMode(""); - int serverCount = 0; int movingServerCount = 0; unsigned long totalNodes = 0; @@ -200,45 +165,35 @@ void OctreeStatsProvider::updateOctreeStatsData() { // Sending mode if (serverCount > 1) { - sendingMode << ","; + m_sendingMode += ","; } if (stats.isMoving()) { - sendingMode << "M"; + m_sendingMode += "M"; movingServerCount++; } else { - sendingMode << "S"; + m_sendingMode += "S"; } if (stats.isFullScene()) { - sendingMode << "F"; + m_sendingMode += "F"; } else { - sendingMode << "p"; + m_sendingMode += "p"; } } }); - sendingMode << " - " << serverCount << " servers"; + m_sendingMode += QString(" - %1 servers").arg(serverCount); if (movingServerCount > 0) { - sendingMode << " <SCENE NOT STABLE>"; + m_sendingMode += " <SCENE NOT STABLE> "; } else { - sendingMode << " <SCENE STABLE>"; + m_sendingMode += " <SCENE STABLE> "; } -// label = _labels[_sendingMode]; -// label->setText(sendingMode.str().c_str()); + emit sendingModeChanged(m_sendingMode); // Server Elements - m_serverElements = QString("Total: %1/ Internal: %2/ Leaves: %3"). + m_serverElements = QString("Total: %1 / Internal: %2 / Leaves: %3"). arg(totalNodes).arg(totalInternal).arg(totalLeaves); emit serverElementsChanged(m_serverElements); -// QString serversTotalString = locale.toString((uint)totalNodes); // consider adding: .rightJustified(10, ' '); -// QString serversInternalString = locale.toString((uint)totalInternal); -// QString serversLeavesString = locale.toString((uint)totalLeaves); -//// label = _labels[_serverElements]; -// statsValue.str(""); -// statsValue << -// "Total: " << qPrintable(serversTotalString) << " / " << -// "Internal: " << qPrintable(serversInternalString) << " / " << -// "Leaves: " << qPrintable(serversLeavesString) << ""; -//// label->setText(statsValue.str().c_str()); + // Processed Packets Elements auto averageElementsPerPacket = entities->getAverageElementsPerPacket(); @@ -251,17 +206,6 @@ void OctreeStatsProvider::updateOctreeStatsData() { auto averageUncompressPerPacket = entities->getAverageUncompressPerPacket(); auto averageReadBitstreamPerPacket = entities->getAverageReadBitstreamPerPacket(); - QString averageElementsPerPacketString = locale.toString(averageElementsPerPacket, 'f', FLOATING_POINT_PRECISION); - QString averageEntitiesPerPacketString = locale.toString(averageEntitiesPerPacket, 'f', FLOATING_POINT_PRECISION); - - QString averageElementsPerSecondString = locale.toString(averageElementsPerSecond, 'f', FLOATING_POINT_PRECISION); - QString averageEntitiesPerSecondString = locale.toString(averageEntitiesPerSecond, 'f', FLOATING_POINT_PRECISION); - - QString averageWaitLockPerPacketString = locale.toString(averageWaitLockPerPacket); - QString averageUncompressPerPacketString = locale.toString(averageUncompressPerPacket); - QString averageReadBitstreamPerPacketString = locale.toString(averageReadBitstreamPerPacket); - -// label = _labels[_processedPackets]; const OctreePacketProcessor& entitiesPacketProcessor = qApp->getOctreePacketProcessor(); auto incomingPacketsDepth = entitiesPacketProcessor.packetsToProcessCount(); @@ -269,80 +213,50 @@ void OctreeStatsProvider::updateOctreeStatsData() { auto processedPPS = entitiesPacketProcessor.getProcessedPPS(); auto treeProcessedPPS = entities->getAveragePacketsPerSecond(); - QString incomingPPSString = locale.toString(incomingPPS, 'f', FLOATING_POINT_PRECISION); - QString processedPPSString = locale.toString(processedPPS, 'f', FLOATING_POINT_PRECISION); - QString treeProcessedPPSString = locale.toString(treeProcessedPPS, 'f', FLOATING_POINT_PRECISION); + m_processedPackets = QString("Queue Size: %1 Packets / Network IN: %2 PPS / Queue OUT: %3 PPS / Tree IN: %4 PPS") + .arg(incomingPacketsDepth) + .arg(incomingPPS, 5, 'f', FLOATING_POINT_PRECISION) + .arg(processedPPS, 5, 'f', FLOATING_POINT_PRECISION) + .arg(treeProcessedPPS, 5, 'f', FLOATING_POINT_PRECISION); + emit processedPacketsChanged(m_processedPackets); - statsValue.str(""); - statsValue << - "Queue Size: " << incomingPacketsDepth << " Packets / " << - "Network IN: " << qPrintable(incomingPPSString) << " PPS / " << - "Queue OUT: " << qPrintable(processedPPSString) << " PPS / " << - "Tree IN: " << qPrintable(treeProcessedPPSString) << " PPS"; - -// label->setText(statsValue.str().c_str()); + m_processedPacketsElements = QString("%1 per packet / %2 per second") + .arg(averageElementsPerPacket, 5, 'f', FLOATING_POINT_PRECISION) + .arg(averageElementsPerSecond, 5, 'f', FLOATING_POINT_PRECISION); + emit processedPacketsElementsChanged(m_processedPacketsElements); -// label = _labels[_processedPacketsElements]; - statsValue.str(""); - statsValue << - "" << qPrintable(averageElementsPerPacketString) << " per packet / " << - "" << qPrintable(averageElementsPerSecondString) << " per second"; - -// label->setText(statsValue.str().c_str()); + m_processedPacketsEntities = QString("%1 per packet / %2 per second") + .arg(averageEntitiesPerPacket, 5, 'f', FLOATING_POINT_PRECISION) + .arg(averageEntitiesPerSecond, 5, 'f', FLOATING_POINT_PRECISION); + emit processedPacketsEntitiesChanged(m_processedPacketsEntities); -// label = _labels[_processedPacketsEntities]; - statsValue.str(""); - statsValue << - "" << qPrintable(averageEntitiesPerPacketString) << " per packet / " << - "" << qPrintable(averageEntitiesPerSecondString) << " per second"; - -// label->setText(statsValue.str().c_str()); - -// label = _labels[_processedPacketsTiming]; - statsValue.str(""); - statsValue << - "Lock Wait: " << qPrintable(averageWaitLockPerPacketString) << " (usecs) / " << - "Uncompress: " << qPrintable(averageUncompressPerPacketString) << " (usecs) / " << - "Process: " << qPrintable(averageReadBitstreamPerPacketString) << " (usecs)"; - - //label->setText(statsValue.str().c_str()); + m_processedPacketsTiming = QString("Lock Wait: %1 (usecs) / Uncompress: %2 (usecs) / Process: %3 (usecs)") + .arg(averageWaitLockPerPacket) + .arg(averageUncompressPerPacket) + .arg(averageReadBitstreamPerPacket); + emit processedPacketsTimingChanged(m_processedPacketsTiming); auto entitiesEditPacketSender = qApp->getEntityEditPacketSender(); - auto outboundPacketsDepth = entitiesEditPacketSender->packetsToSendCount(); auto outboundQueuedPPS = entitiesEditPacketSender->getLifetimePPSQueued(); auto outboundSentPPS = entitiesEditPacketSender->getLifetimePPS(); - QString outboundQueuedPPSString = locale.toString(outboundQueuedPPS, 'f', FLOATING_POINT_PRECISION); - QString outboundSentPPSString = locale.toString(outboundSentPPS, 'f', FLOATING_POINT_PRECISION); - - //label = _labels[_outboundEditPackets]; - statsValue.str(""); - statsValue << - "Queue Size: " << outboundPacketsDepth << " packets / " << - "Queued IN: " << qPrintable(outboundQueuedPPSString) << " PPS / " << - "Sent OUT: " << qPrintable(outboundSentPPSString) << " PPS"; - - //label->setText(statsValue.str().c_str()); - + m_outboundEditPackets = QString("Queue Size: %1 packets / Queued IN: %2 PPS / Sent OUT: %3 PPS") + .arg(outboundPacketsDepth) + .arg(outboundQueuedPPS, 5, 'f', FLOATING_POINT_PRECISION) + .arg(outboundSentPPS, 5, 'f', FLOATING_POINT_PRECISION); + emit outboundEditPacketsChanged(m_outboundEditPackets); // Entity Edits update time - //label = _labels[_entityUpdateTime]; auto averageEditDelta = entitiesTree->getAverageEditDeltas(); auto maxEditDelta = entitiesTree->getMaxEditDelta(); - QString averageEditDeltaString = locale.toString((uint)averageEditDelta); - QString maxEditDeltaString = locale.toString((uint)maxEditDelta); - - statsValue.str(""); - statsValue << - "Average: " << qPrintable(averageEditDeltaString) << " (usecs) / " << - "Max: " << qPrintable(maxEditDeltaString) << " (usecs)"; - - //label->setText(statsValue.str().c_str()); + m_entityUpdateTime = QString("Average: %1 (usecs) / Max: %2 (usecs)") + .arg(averageEditDelta) + .arg(maxEditDelta); + emit entityUpdateTimeChanged(m_entityUpdateTime); // Entity Edits - //label = _labels[_entityUpdates]; auto bytesPerEdit = entitiesTree->getAverageEditBytes(); auto updatesPerSecond = _averageUpdatesPerSecond.getAverage(); @@ -350,17 +264,11 @@ void OctreeStatsProvider::updateOctreeStatsData() { updatesPerSecond = 0; // we don't really care about small updates per second so suppress those } - QString totalTrackedEditsString = locale.toString((uint)totalTrackedEdits); - QString updatesPerSecondString = locale.toString(updatesPerSecond, 'f', FLOATING_POINT_PRECISION); - QString bytesPerEditString = locale.toString(bytesPerEdit); - - statsValue.str(""); - statsValue << - "" << qPrintable(updatesPerSecondString) << " updates per second / " << - "" << qPrintable(totalTrackedEditsString) << " total updates / " << - "Average Size: " << qPrintable(bytesPerEditString) << " bytes "; - - //label->setText(statsValue.str().c_str()); + m_entityUpdates = QString("%1 updates per second / %2 total updates / Average Size: %3 bytes") + .arg(updatesPerSecond, 5, 'f', FLOATING_POINT_PRECISION) + .arg(totalTrackedEdits) + .arg(bytesPerEdit); + emit entityUpdatesChanged(m_entityUpdates); updateOctreeServers(); } diff --git a/interface/src/ui/OctreeStatsProvider.h b/interface/src/ui/OctreeStatsProvider.h index c2fc46218d..6fc3e091f4 100644 --- a/interface/src/ui/OctreeStatsProvider.h +++ b/interface/src/ui/OctreeStatsProvider.h @@ -30,18 +30,15 @@ class OctreeStatsProvider : public QObject, public Dependency { Q_PROPERTY(QString localElements READ localElements NOTIFY localElementsChanged) Q_PROPERTY(QString localElementsMemory READ localElementsMemory NOTIFY localElementsMemoryChanged) Q_PROPERTY(QString sendingMode READ sendingMode NOTIFY sendingModeChanged) - //Incoming Entity Packets Q_PROPERTY(QString processedPackets READ processedPackets NOTIFY processedPacketsChanged) - -// int _entityUpdateTime; -// int _entityUpdates; -// int _processedPacketsElements; -// int _processedPacketsEntities; -// int _processedPacketsTiming; -// int _outboundEditPackets; + Q_PROPERTY(QString processedPacketsElements READ processedPacketsElements NOTIFY processedPacketsElementsChanged) + Q_PROPERTY(QString processedPacketsEntities READ processedPacketsEntities NOTIFY processedPacketsEntitiesChanged) + Q_PROPERTY(QString processedPacketsTiming READ processedPacketsTiming NOTIFY processedPacketsTimingChanged) + Q_PROPERTY(QString outboundEditPackets READ outboundEditPackets NOTIFY outboundEditPacketsChanged) + Q_PROPERTY(QString entityUpdateTime READ entityUpdateTime NOTIFY entityUpdateTimeChanged) + Q_PROPERTY(QString entityUpdates READ entityUpdates NOTIFY entityUpdatesChanged) public: - // Sets up the UI OctreeStatsProvider(QObject* parent, NodeToOctreeSceneStats* model); ~OctreeStatsProvider(); @@ -67,14 +64,44 @@ public: return m_processedPackets; } + QString processedPacketsElements() const { + return m_processedPacketsElements; + } + + QString processedPacketsEntities() const { + return m_processedPacketsEntities; + } + + QString processedPacketsTiming() const { + return m_processedPacketsTiming; + } + + QString outboundEditPackets() const { + return m_outboundEditPackets; + } + + QString entityUpdateTime() const { + return m_entityUpdateTime; + } + + QString entityUpdates() const { + return m_entityUpdates; + } + signals: void serversNumChanged(int serversNum); - void serverElementsChanged(QString serverElements); - void localElementsChanged(QString localElements); - void sendingModeChanged(QString sendingMode); - void processedPacketsChanged(QString processedPackets); - void localElementsMemoryChanged(QString localElementsMemory); + void serverElementsChanged(const QString &serverElements); + void localElementsChanged(const QString &localElements); + void sendingModeChanged(const QString &sendingMode); + void processedPacketsChanged(const QString &processedPackets); + void localElementsMemoryChanged(const QString &localElementsMemory); + void processedPacketsElementsChanged(const QString &processedPacketsElements); + void processedPacketsEntitiesChanged(const QString &processedPacketsEntities); + void processedPacketsTimingChanged(const QString &processedPacketsTiming); + void outboundEditPacketsChanged(const QString &outboundEditPackets); + void entityUpdateTimeChanged(const QString &entityUpdateTime); + void entityUpdatesChanged(const QString &entityUpdates); public slots: void moreless(const QString& link); @@ -84,8 +111,6 @@ public slots: private slots: void updateOctreeStatsData(); protected: - - int AddStatItem(const char* caption, unsigned colorRGBA = DEFAULT_COLOR); void updateOctreeServers(); void showOctreeServersOfType(int& serverNumber, NodeType_t serverType, const char* serverTypeName, NodeToJurisdictionMap& serverJurisdictions); @@ -94,19 +119,6 @@ private: NodeToOctreeSceneStats* _model; int _statCount; - int _sendingMode; - int _serverElements; - int _localElements; - int _localElementsMemory; - - int _entityUpdateTime; - int _entityUpdates; - int _processedPackets; - int _processedPacketsElements; - int _processedPacketsEntities; - int _processedPacketsTiming; - int _outboundEditPackets; - const int SAMPLES_PER_SECOND = 10; SimpleMovingAverage _averageUpdatesPerSecond; quint64 _lastWindowAt = usecTimestampNow(); @@ -114,8 +126,6 @@ private: quint64 _lastRefresh = 0; -// int _octreeServerLables[MAX_VOXEL_SERVERS]; -// int _octreeServerLabelsCount; QTimer _updateTimer; int m_serversNum {0}; QString m_serverElements; @@ -123,6 +133,12 @@ private: QString m_localElementsMemory; QString m_sendingMode; QString m_processedPackets; + QString m_processedPacketsElements; + QString m_processedPacketsEntities; + QString m_processedPacketsTiming; + QString m_outboundEditPackets; + QString m_entityUpdateTime; + QString m_entityUpdates; }; #endif // hifi_OctreeStatsProvider_h From 40b7e34c0be04b4a0c905a2b8734e631a2719775 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Mon, 13 Mar 2017 14:23:13 -0700 Subject: [PATCH 122/247] Fix for visible empty toolbar when switching from desktop to HMD mode. --- interface/resources/qml/hifi/toolbars/Toolbar.qml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/toolbars/Toolbar.qml b/interface/resources/qml/hifi/toolbars/Toolbar.qml index c0d984e822..f80e0f8c14 100644 --- a/interface/resources/qml/hifi/toolbars/Toolbar.qml +++ b/interface/resources/qml/hifi/toolbars/Toolbar.qml @@ -120,8 +120,6 @@ Window { function addButton(properties) { properties = properties || {} - unpinnedAlpha = 1; - // If a name is specified, then check if there's an existing button with that name // and return it if so. This will allow multiple clients to listen to a single button, // and allow scripts to be idempotent so they don't duplicate buttons if they're reloaded @@ -156,7 +154,7 @@ Window { updatePinned(); if (buttons.length === 0) { - unpinnedAlpha = 0; + fadeOut(function () {}); } } From 01c313ad60e253d42920912845ff25e079d81053 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 14 Mar 2017 13:33:20 +1300 Subject: [PATCH 123/247] Fix QML errors --- .../resources/qml/hifi/tablet/TabletAttachmentsDialog.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml index 868b35398b..634c9d41ec 100644 --- a/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAttachmentsDialog.qml @@ -25,6 +25,9 @@ Item { property bool keyboardRaised: false property bool punctuationMode: false + property var eventBridge; + signal sendToScript(var message); + anchors.fill: parent HifiConstants { id: hifi } From 7504c124e40f3d86953951651bd0a7b3a8dfc7d8 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 14 Mar 2017 13:34:06 +1300 Subject: [PATCH 124/247] Make attachment model browser dialog modal --- .../resources/qml/hifi/dialogs/attachments/Attachment.qml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml b/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml index 941d665b18..0e98f79216 100644 --- a/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml +++ b/interface/resources/qml/hifi/dialogs/attachments/Attachment.qml @@ -93,7 +93,14 @@ Item { browser = tabletModelBrowserBuilder.createObject(tabletRoot); browser.selected.connect(function(newModelUrl){ modelUrl.text = newModelUrl; + tabletRoot.openModal = null; }); + browser.canceled.connect(function() { + tabletRoot.openModal = null; + }); + + // Make dialog modal. + tabletRoot.openModal = browser; } } } From f3a99a2437c45cf752c7203fc89d3e1f56fa844d Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 14 Mar 2017 15:36:51 +1300 Subject: [PATCH 125/247] Implement avatar browser for tablet avatar settings --- .../dialogs/preferences/AvatarPreference.qml | 26 ++++-- .../preferences/TabletAvatarBrowser.qml | 79 +++++++++++++++++++ 2 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml diff --git a/interface/resources/qml/dialogs/preferences/AvatarPreference.qml b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml index 0c5c5bf630..848dd3c6e9 100644 --- a/interface/resources/qml/dialogs/preferences/AvatarPreference.qml +++ b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml @@ -10,8 +10,8 @@ import QtQuick 2.5 -import "../../dialogs" import "../../controls-uit" +import "../../hifi/tablet/tabletWindows/preferences" Preference { id: root @@ -82,12 +82,26 @@ Preference { verticalCenter: dataTextField.verticalCenter } onClicked: { - // Load dialog via OffscreenUi so that JavaScript EventBridge is available. - root.browser = OffscreenUi.load("dialogs/preferences/AvatarBrowser.qml"); - root.browser.windowDestroyed.connect(function(){ - root.browser = null; - }); + if (typeof desktop !== "undefined") { + // Load dialog via OffscreenUi so that JavaScript EventBridge is available. + root.browser = OffscreenUi.load("dialogs/preferences/AvatarBrowser.qml"); + root.browser.windowDestroyed.connect(function(){ + root.browser = null; + }); + } else { + root.browser = tabletAvatarBrowserBuilder.createObject(tabletRoot, { + createGlobalEventBridgeSource: eventBridgeJavaScriptToInject + }); + + // Make dialog modal. + tabletRoot.openModal = root.browser; + } } } + + Component { + id: tabletAvatarBrowserBuilder; + TabletAvatarBrowser { } + } } } diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml new file mode 100644 index 0000000000..57ef7b5933 --- /dev/null +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml @@ -0,0 +1,79 @@ +// +// TabletAvatarBrowser.qml +// +// Created by David Rowe on 14 Mar 2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtWebChannel 1.0 +import QtWebEngine 1.2 + +import "../../../../windows" +import "../../../../controls-uit" +import "../../../../styles-uit" + +Item { + id: root + objectName: "ModelBrowserDialog" + + property string title: "Attachment Model" + + property var result + + signal selected(var modelUrl) + signal canceled() + + anchors.fill: parent + + /* + Rectangle { + id: pane // Surrogate for ScrollingWindow's pane. + anchors.fill: parent + } + */ + + BaseWebView { + id: webview + url: "https://metaverse.highfidelity.com/marketplace?category=avatars" + focus: true + + anchors { + top: parent.top + left: parent.left + right: parent.right + bottom: footer.top + } + } + + Rectangle { + id: footer + height: 40 + + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + + color: hifi.colors.baseGray + + Row { + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: hifi.dimensions.contentMargin.x + } + + Button { + text: "Cancel" + color: hifi.buttons.white + onClicked: root.destroy(); + } + } + } +} From d141d5b683badfa9492f191333c49e510049a73d Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 14 Mar 2017 21:36:57 +1300 Subject: [PATCH 126/247] Add keyboard --- .../dialogs/preferences/AvatarPreference.qml | 8 +-- .../preferences/TabletAvatarBrowser.qml | 58 ++++++++++++++++--- 2 files changed, 54 insertions(+), 12 deletions(-) diff --git a/interface/resources/qml/dialogs/preferences/AvatarPreference.qml b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml index 848dd3c6e9..7ae4fe6761 100644 --- a/interface/resources/qml/dialogs/preferences/AvatarPreference.qml +++ b/interface/resources/qml/dialogs/preferences/AvatarPreference.qml @@ -89,9 +89,7 @@ Preference { root.browser = null; }); } else { - root.browser = tabletAvatarBrowserBuilder.createObject(tabletRoot, { - createGlobalEventBridgeSource: eventBridgeJavaScriptToInject - }); + root.browser = tabletAvatarBrowserBuilder.createObject(tabletRoot); // Make dialog modal. tabletRoot.openModal = root.browser; @@ -101,7 +99,9 @@ Preference { Component { id: tabletAvatarBrowserBuilder; - TabletAvatarBrowser { } + TabletAvatarBrowser { + eventBridge: tabletRoot.eventBridge + } } } } diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml index 57ef7b5933..8c415f5ebb 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml @@ -25,17 +25,16 @@ Item { property var result + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + signal selected(var modelUrl) signal canceled() - anchors.fill: parent + property alias eventBridge: eventBridgeWrapper.eventBridge - /* - Rectangle { - id: pane // Surrogate for ScrollingWindow's pane. - anchors.fill: parent - } - */ + anchors.fill: parent BaseWebView { id: webview @@ -48,6 +47,32 @@ Item { right: parent.right bottom: footer.top } + + QtObject { + id: eventBridgeWrapper + WebChannel.id: "eventBridgeWrapper" + property var eventBridge; + } + + webChannel.registeredObjects: [eventBridgeWrapper] + + // Create a global EventBridge object for raiseAndLowerKeyboard. + WebEngineScript { + id: createGlobalEventBridge + sourceCode: eventBridgeJavaScriptToInject + injectionPoint: WebEngineScript.DocumentCreation + worldId: WebEngineScript.MainWorld + } + + // Detect when may want to raise and lower keyboard. + WebEngineScript { + id: raiseAndLowerKeyboard + injectionPoint: WebEngineScript.Deferred + sourceUrl: resourceDirectoryUrl + "html/raiseAndLowerKeyboard.js" + worldId: WebEngineScript.MainWorld + } + + userScripts: [ createGlobalEventBridge, raiseAndLowerKeyboard ] } Rectangle { @@ -57,7 +82,7 @@ Item { anchors { left: parent.left right: parent.right - bottom: parent.bottom + bottom: keyboard.top } color: hifi.colors.baseGray @@ -76,4 +101,21 @@ Item { } } } + + Keyboard { + id: keyboard + + raised: parent.keyboardEnabled && parent.keyboardRaised + numeric: parent.punctuationMode + + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + } + + Component.onCompleted: { + keyboardEnabled = HMD.active; + } } From 43687d4773f4a423ba1c2b3fdca10d8db6ac3557 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 14 Mar 2017 21:41:04 +1300 Subject: [PATCH 127/247] Tidying --- .../tablet/tabletWindows/preferences/TabletAvatarBrowser.qml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml index 8c415f5ebb..029cf7d46b 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletAvatarBrowser.qml @@ -23,15 +23,10 @@ Item { property string title: "Attachment Model" - property var result - property bool keyboardEnabled: false property bool keyboardRaised: false property bool punctuationMode: false - signal selected(var modelUrl) - signal canceled() - property alias eventBridge: eventBridgeWrapper.eventBridge anchors.fill: parent From 0accce5337f7ed1a172f731d4364cea84b958a9e Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Tue, 14 Mar 2017 15:53:41 +0100 Subject: [PATCH 128/247] TabletComboBoxPreference.qml not needed anymore --- .../tabletWindows/preferences/Section.qml | 2 +- .../preferences/TabletComboBoxPreference.qml | 65 ------------------- 2 files changed, 1 insertion(+), 66 deletions(-) delete mode 100644 interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletComboBoxPreference.qml diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml index 54f616e0f4..3d6dfa10ce 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/Section.qml @@ -80,7 +80,7 @@ Preference { property var sliderBuilder: Component { SliderPreference { } } property var avatarBuilder: Component { AvatarPreference { } } property var buttonBuilder: Component { ButtonPreference { } } - property var comboBoxBuilder: Component { TabletComboBoxPreference { } } + property var comboBoxBuilder: Component { ComboBoxPreference { } } property var preferences: [] property int checkBoxCount: 0 diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletComboBoxPreference.qml b/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletComboBoxPreference.qml deleted file mode 100644 index 0ff000f3e1..0000000000 --- a/interface/resources/qml/hifi/tablet/tabletWindows/preferences/TabletComboBoxPreference.qml +++ /dev/null @@ -1,65 +0,0 @@ -// -// ComboBoxPreference.qml -// -// Created by Bradley Austin Davis on 18 Jan 2016 -// Copyright 2016 High Fidelity, Inc. -// -// Distributed under the Apache License, Version 2.0. -// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html -// - -import QtQuick 2.5 - -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import "../../../../controls-uit" as HiFiControls -import "../../../../styles-uit" - -Preference { - id: root - height: control.height + hifi.dimensions.controlInterlineHeight - - Component.onCompleted: { - dataComboBox.currentIndex = dataComboBox.comboBox.find(preference.value); - } - - function save() { - preference.value = dataComboBox.currentText; - preference.save(); - } - - Item { - id: control - anchors { - left: parent.left - right: parent.right - bottom: parent.bottom - } - height: Math.max(labelText.height, dataComboBox.controlHeight) - - HiFiControls.Label { - id: labelText - text: root.label + ":" - colorScheme: hifi.colorSchemes.dark - anchors { - left: parent.left - right: dataComboBox.left - rightMargin: hifi.dimensions.labelPadding - verticalCenter: parent.verticalCenter - } - horizontalAlignment: Text.AlignRight - wrapMode: Text.Wrap - } - - HiFiControls.TabletComboBox { - id: dataComboBox - model: preference.items - width: 150 - anchors { - right: parent.right - verticalCenter: parent.verticalCenter - } - colorScheme: hifi.colorSchemes.dark - } - } -} From d9ca8a826d4ea438db10693f07d7a580e0035b3c Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Tue, 14 Mar 2017 17:02:09 +0100 Subject: [PATCH 129/247] TabletEntityStatistics.qml refactored. Text now wrapped. TODO: coloring, server stats --- .../hifi/dialogs/TabletEntityStatistics.qml | 144 +++--------------- .../dialogs/TabletEntityStatisticsItem.qml | 48 ++++++ interface/src/ui/OctreeStatsProvider.cpp | 1 + 3 files changed, 74 insertions(+), 119 deletions(-) create mode 100644 interface/resources/qml/hifi/dialogs/TabletEntityStatisticsItem.qml diff --git a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml index bd7796927e..f6fdf90474 100644 --- a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml +++ b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml @@ -55,179 +55,91 @@ Rectangle { y: hifi.dimensions.tabletMenuHeader //-bgNavBar spacing: 20 - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Elements on Servers:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: elementsOnServerLabel - size: 16 + titleText: qsTr("Elements on Servers:") text: OctreeStats.serverElements - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Local Elements:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: localElementsLabel - size: 16 + titleText: qsTr("Local Elements:") text: OctreeStats.localElements - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Elements Memory:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: elementsMemoryLabel - size: 16 + titleText: qsTr("Elements Memory:") text: OctreeStats.localElementsMemory - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Sending Mode:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: sendingModeLabel - size: 16 + titleText: qsTr("Sending Mode:") text: OctreeStats.sendingMode - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Incoming Entity Packets:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: incomingEntityPacketsLabel - size: 16 + titleText: qsTr("Incoming Entity Packets:") text: OctreeStats.processedPackets - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Processed Packets Elements:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: processedPacketsElementsLabel - size: 16 + titleText: qsTr("Processed Packets Elements:") text: OctreeStats.processedPacketsElements - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Processed Packets Entities:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: processedPacketsEntitiesLabel - size: 16 + titleText: qsTr("Processed Packets Entities:") text: OctreeStats.processedPacketsEntities - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Processed Packets Timing:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: processedPacketsTimingLabel - size: 16 + titleText: qsTr("Processed Packets Timing:") text: OctreeStats.processedPacketsTiming - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Outbound Entity Packets:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: outboundEntityPacketsLabel - size: 16 + titleText: qsTr("Outbound Entity Packets:") text: OctreeStats.outboundEditPackets - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Entity Update Time:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: entityUpdateTimeLabel - size: 16 + titleText: qsTr("Entity Update Time:") text: OctreeStats.entityUpdateTime - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } - HifiControls.Label { - size: 20 + TabletEntityStatisticsItem { anchors.left: parent.left anchors.right: parent.right - text: qsTr("Entity Updates:") - colorScheme: root.colorScheme - } - HifiControls.Label { - id: entityUpdatesLabel - size: 16 + titleText: qsTr("Entity Updates:") text: OctreeStats.entityUpdates - anchors.left: parent.left - anchors.right: parent.right colorScheme: root.colorScheme } @@ -242,18 +154,12 @@ Rectangle { state: "less" - HifiControls.Label { - size: 20 - width: parent.width - text: qsTr("Entity Server ") + (index+1) + ":" - colorScheme: root.colorScheme - } - HifiControls.Label { - id: entityServer1Label - size: 20 + TabletEntityStatisticsItem { width: parent.width + titleText: qsTr("Entity Server ") + (index+1) + ":" colorScheme: root.colorScheme } + Row { id: buttonsRow width: parent.width diff --git a/interface/resources/qml/hifi/dialogs/TabletEntityStatisticsItem.qml b/interface/resources/qml/hifi/dialogs/TabletEntityStatisticsItem.qml new file mode 100644 index 0000000000..c4509d5a76 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/TabletEntityStatisticsItem.qml @@ -0,0 +1,48 @@ +// +// TabletEntityStatistics.qml +// +// Created by Vlad Stelmahovsky on 3/11/17 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import Qt.labs.settings 1.0 + +import "../../styles-uit" +import "../../controls-uit" as HifiControls + +Column { + id: root + property int colorScheme: hifi.colorSchemes.dark + + property alias titleText: titleLabel.text + property alias text: valueLabel.text + + HifiConstants { id: hifi } + + anchors.left: parent.left + anchors.right: parent.right + spacing: 10 + + HifiControls.Label { + id: titleLabel + size: 20 + anchors.left: parent.left + anchors.right: parent.right + colorScheme: root.colorScheme + } + + RalewaySemiBold { + id: valueLabel + anchors.left: parent.left + anchors.right: parent.right + wrapMode: Text.WordWrap + size: 16 + color: enabled ? (root.colorScheme == hifi.colorSchemes.light ? hifi.colors.lightGray : hifi.colors.lightGrayText) + : (root.colorScheme == hifi.colorSchemes.light ? hifi.colors.lightGrayText : hifi.colors.baseGrayHighlight); + } +} diff --git a/interface/src/ui/OctreeStatsProvider.cpp b/interface/src/ui/OctreeStatsProvider.cpp index 057056d8ce..e8d863e2b8 100644 --- a/interface/src/ui/OctreeStatsProvider.cpp +++ b/interface/src/ui/OctreeStatsProvider.cpp @@ -151,6 +151,7 @@ void OctreeStatsProvider::updateOctreeStatsData() { unsigned long totalInternal = 0; unsigned long totalLeaves = 0; + m_sendingMode.clear(); NodeToOctreeSceneStats* sceneStats = qApp->getOcteeSceneStats(); sceneStats->withReadLock([&] { for (NodeToOctreeSceneStatsIterator i = sceneStats->begin(); i != sceneStats->end(); i++) { From 56d4bfe07742b44bde6cb6e5998b1c3025c476fe Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Tue, 14 Mar 2017 18:38:49 +0100 Subject: [PATCH 130/247] Servers stats added. TODO: coloring --- .../hifi/dialogs/TabletEntityStatistics.qml | 12 +- interface/src/ui/OctreeStatsProvider.cpp | 261 ++++++------------ interface/src/ui/OctreeStatsProvider.h | 11 +- 3 files changed, 112 insertions(+), 172 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml index f6fdf90474..9d3829e743 100644 --- a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml +++ b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml @@ -46,6 +46,7 @@ Rectangle { anchors.bottomMargin: hifi.dimensions.tabletMenuHeader contentWidth: column.implicitWidth contentHeight: column.implicitHeight + boundsBehavior: Flickable.StopAtBounds Column { id: column @@ -155,6 +156,7 @@ Rectangle { state: "less" TabletEntityStatisticsItem { + id: serverStats width: parent.width titleText: qsTr("Entity Server ") + (index+1) + ":" colorScheme: root.colorScheme @@ -178,7 +180,7 @@ Rectangle { } else if (serverColumn.state === "more") { serverColumn.state = "most" } else { - serverColumn.state = "less" + serverColumn.state = "more" } } } @@ -194,7 +196,7 @@ Rectangle { } else if (serverColumn.state === "more") { serverColumn.state = "less" } else { - serverColumn.state = "more" + serverColumn.state = "less" } } @@ -205,16 +207,22 @@ Rectangle { name: "less" PropertyChanges { target: moreButton; text: qsTr("more..."); } PropertyChanges { target: mostButton; text: qsTr("most..."); } + PropertyChanges { target: serverStats; text: OctreeStats.servers[index*3]; } }, State { name: "more" PropertyChanges { target: moreButton; text: qsTr("most..."); } PropertyChanges { target: mostButton; text: qsTr("less..."); } + PropertyChanges { target: serverStats; text: OctreeStats.servers[index*3] + + OctreeStats.servers[index*3 + 1]; } }, State { name: "most" PropertyChanges { target: moreButton; text: qsTr("less..."); } PropertyChanges { target: mostButton; text: qsTr("least..."); } + PropertyChanges { target: serverStats; text: OctreeStats.servers[index*3] + + OctreeStats.servers[index*3 + 1] + + OctreeStats.servers[index*3 + 2]; } } ] } //servers column diff --git a/interface/src/ui/OctreeStatsProvider.cpp b/interface/src/ui/OctreeStatsProvider.cpp index e8d863e2b8..e51172ff55 100644 --- a/interface/src/ui/OctreeStatsProvider.cpp +++ b/interface/src/ui/OctreeStatsProvider.cpp @@ -9,11 +9,6 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include <sstream> - -#include <QPalette> -#include <QColor> - #include "Application.h" #include "../octree/OctreePacketProcessor.h" @@ -32,23 +27,6 @@ OctreeStatsProvider::OctreeStatsProvider(QObject* parent, NodeToOctreeSceneStats _updateTimer.setSingleShot(true); } -void OctreeStatsProvider::moreless(const QString& link) { - QStringList linkDetails = link.split("-"); - const int COMMAND_ITEM = 0; - const int SERVER_NUMBER_ITEM = 1; - QString serverNumberString = linkDetails[SERVER_NUMBER_ITEM]; - QString command = linkDetails[COMMAND_ITEM]; - int serverNumber = serverNumberString.toInt(); - -// if (command == "more") { -// _extraServerDetails[serverNumber-1] = MORE; -// } else if (command == "most") { -// _extraServerDetails[serverNumber-1] = MOST; -// } else { -// _extraServerDetails[serverNumber-1] = LESS; -// } -} - /* * Start updates statistics */ @@ -66,9 +44,9 @@ void OctreeStatsProvider::stopUpdates() { //int OctreeStatsProvider::AddStatItem(const char* caption, unsigned colorRGBA) { // const int STATS_LABEL_WIDTH = 600; - + // _statCount++; // increment our current stat count - + // if (colorRGBA == 0) { // static unsigned rotatingColors[] = { GREENISH, YELLOWISH, GREYISH }; // colorRGBA = rotatingColors[_statCount % (sizeof(rotatingColors)/sizeof(rotatingColors[0]))]; @@ -77,7 +55,7 @@ void OctreeStatsProvider::stopUpdates() { // // Set foreground color to 62.5% brightness of the meter (otherwise will be hard to read on the bright background) // //QPalette palette = label->palette(); - + // // This goofiness came from the bandwidth meter code, it basically stores a color in an unsigned and extracts it // unsigned rgb = colorRGBA >> 8; // const unsigned colorpart1 = 0xfefefeu; @@ -87,7 +65,7 @@ void OctreeStatsProvider::stopUpdates() { // label->setPalette(palette); // _form->addRow(QString(" %1:").arg(caption), label); // label->setFixedWidth(STATS_LABEL_WIDTH); - + // return _statCount; //} @@ -278,8 +256,7 @@ void OctreeStatsProvider::updateOctreeServers() { int serverCount = 0; showOctreeServersOfType(serverCount, NodeType::EntityServer, "Entity", - qApp->getEntityServerJurisdictions()); - //qDebug() << "vladest: octree servers:" << serverCount; + qApp->getEntityServerJurisdictions()); if (m_serversNum != serverCount) { m_serversNum = serverCount; emit serversNumChanged(m_serversNum); @@ -287,34 +264,25 @@ void OctreeStatsProvider::updateOctreeServers() { } void OctreeStatsProvider::showOctreeServersOfType(int& serverCount, NodeType_t serverType, const char* serverTypeName, - NodeToJurisdictionMap& serverJurisdictions) { - - QLocale locale(QLocale::English); - + NodeToJurisdictionMap& serverJurisdictions) { + + m_servers.clear(); + auto nodeList = DependencyManager::get<NodeList>(); - nodeList->eachNode([&](const SharedNodePointer& node){ + nodeList->eachNode([&](const SharedNodePointer& node) { // only send to the NodeTypes that are NodeType_t_VOXEL_SERVER if (node->getType() == serverType) { serverCount++; -// if (serverCount > _octreeServerLabelsCount) { -// QString label = QString("%1 Server %2").arg(serverTypeName).arg(serverCount); -// //int thisServerRow = _octreeServerLables[serverCount-1] = AddStatItem(label.toUtf8().constData()); -//// _labels[thisServerRow]->setTextFormat(Qt::RichText); -//// _labels[thisServerRow]->setTextInteractionFlags(Qt::TextBrowserInteraction); -//// connect(_labels[thisServerRow], SIGNAL(linkActivated(const QString&)), this, SLOT(moreless(const QString&))); -// _octreeServerLabelsCount++; -// } - - std::stringstream serverDetails(""); - std::stringstream extraDetails(""); - std::stringstream linkDetails(""); + QString lesserDetails; + QString moreDetails; + QString mostDetails; if (node->getActiveSocket()) { - serverDetails << "active "; + lesserDetails += "active "; } else { - serverDetails << "inactive "; + lesserDetails += "inactive "; } QUuid nodeUUID = node->getUUID(); @@ -323,9 +291,9 @@ void OctreeStatsProvider::showOctreeServersOfType(int& serverCount, NodeType_t s // missing at least one jurisdiction serverJurisdictions.withReadLock([&] { if (serverJurisdictions.find(nodeUUID) == serverJurisdictions.end()) { - serverDetails << " unknown jurisdiction "; + lesserDetails += " unknown jurisdiction "; return; - } + } const JurisdictionMap& map = serverJurisdictions[nodeUUID]; auto rootCode = map.getRootOctalCode(); @@ -336,135 +304,90 @@ void OctreeStatsProvider::showOctreeServersOfType(int& serverCount, NodeType_t s VoxelPositionSize rootDetails; voxelDetailsForCode(rootCode.get(), rootDetails); AACube serverBounds(glm::vec3(rootDetails.x, rootDetails.y, rootDetails.z), rootDetails.s); - serverDetails << " jurisdiction: " - << qPrintable(rootCodeHex) - << " [" - << rootDetails.x << ", " - << rootDetails.y << ", " - << rootDetails.z << ": " - << rootDetails.s << "] "; + lesserDetails += QString(" jurisdiction: %1 [%2, %3, %4: %5]") + .arg(rootCodeHex) + .arg(rootDetails.x) + .arg(rootDetails.y) + .arg(rootDetails.z) + .arg(rootDetails.s); } else { - serverDetails << " jurisdiction has no rootCode"; + lesserDetails += " jurisdiction has no rootCode"; } // root code }); // now lookup stats details for this server... - if (/*_extraServerDetails[serverCount-1] != LESS*/true) { - NodeToOctreeSceneStats* sceneStats = qApp->getOcteeSceneStats(); - sceneStats->withReadLock([&] { - if (sceneStats->find(nodeUUID) != sceneStats->end()) { - OctreeSceneStats& stats = sceneStats->at(nodeUUID); -/* - switch (_extraServerDetails[serverCount - 1]) { - case MOST: { - extraDetails << "<br/>"; + NodeToOctreeSceneStats* sceneStats = qApp->getOcteeSceneStats(); + sceneStats->withReadLock([&] { + if (sceneStats->find(nodeUUID) != sceneStats->end()) { + OctreeSceneStats& stats = sceneStats->at(nodeUUID); - float lastFullEncode = stats.getLastFullTotalEncodeTime() / USECS_PER_MSEC; - float lastFullSend = stats.getLastFullElapsedTime() / USECS_PER_MSEC; - float lastFullSendInSeconds = stats.getLastFullElapsedTime() / USECS_PER_SECOND; - float lastFullPackets = stats.getLastFullTotalPackets(); - float lastFullPPS = lastFullPackets; - if (lastFullSendInSeconds > 0) { - lastFullPPS = lastFullPackets / lastFullSendInSeconds; - } - - QString lastFullEncodeString = locale.toString(lastFullEncode); - QString lastFullSendString = locale.toString(lastFullSend); - QString lastFullPacketsString = locale.toString(lastFullPackets); - QString lastFullBytesString = locale.toString((uint)stats.getLastFullTotalBytes()); - QString lastFullPPSString = locale.toString(lastFullPPS); - - extraDetails << "<br/>" << "Last Full Scene... " << - "Encode: " << qPrintable(lastFullEncodeString) << " ms " << - "Send: " << qPrintable(lastFullSendString) << " ms " << - "Packets: " << qPrintable(lastFullPacketsString) << " " << - "Bytes: " << qPrintable(lastFullBytesString) << " " << - "Rate: " << qPrintable(lastFullPPSString) << " PPS"; - - for (int i = 0; i < OctreeSceneStats::ITEM_COUNT; i++) { - OctreeSceneStats::Item item = (OctreeSceneStats::Item)(i); - OctreeSceneStats::ItemInfo& itemInfo = stats.getItemInfo(item); - extraDetails << "<br/>" << itemInfo.caption << " " << stats.getItemValue(item); - } - } // fall through... since MOST has all of MORE - case MORE: { - QString totalString = locale.toString((uint)stats.getTotalElements()); - QString internalString = locale.toString((uint)stats.getTotalInternal()); - QString leavesString = locale.toString((uint)stats.getTotalLeaves()); - - serverDetails << "<br/>" << "Node UUID: " << qPrintable(nodeUUID.toString()) << " "; - - serverDetails << "<br/>" << "Elements: " << - qPrintable(totalString) << " total " << - qPrintable(internalString) << " internal " << - qPrintable(leavesString) << " leaves "; - - QString incomingPacketsString = locale.toString((uint)stats.getIncomingPackets()); - QString incomingBytesString = locale.toString((uint)stats.getIncomingBytes()); - QString incomingWastedBytesString = locale.toString((uint)stats.getIncomingWastedBytes()); - const SequenceNumberStats& seqStats = stats.getIncomingOctreeSequenceNumberStats(); - QString incomingOutOfOrderString = locale.toString((uint)seqStats.getOutOfOrder()); - QString incomingLateString = locale.toString((uint)seqStats.getLate()); - QString incomingUnreasonableString = locale.toString((uint)seqStats.getUnreasonable()); - QString incomingEarlyString = locale.toString((uint)seqStats.getEarly()); - QString incomingLikelyLostString = locale.toString((uint)seqStats.getLost()); - QString incomingRecovered = locale.toString((uint)seqStats.getRecovered()); - - qint64 clockSkewInUsecs = node->getClockSkewUsec(); - QString formattedClockSkewString = formatUsecTime(clockSkewInUsecs); - qint64 clockSkewInMS = clockSkewInUsecs / (qint64)USECS_PER_MSEC; - QString incomingFlightTimeString = locale.toString((int)stats.getIncomingFlightTimeAverage()); - QString incomingPingTimeString = locale.toString(node->getPingMs()); - QString incomingClockSkewString = locale.toString(clockSkewInMS); - - serverDetails << "<br/>" << "Incoming Packets: " << qPrintable(incomingPacketsString) << - "/ Lost: " << qPrintable(incomingLikelyLostString) << - "/ Recovered: " << qPrintable(incomingRecovered); - - serverDetails << "<br/>" << " Out of Order: " << qPrintable(incomingOutOfOrderString) << - "/ Early: " << qPrintable(incomingEarlyString) << - "/ Late: " << qPrintable(incomingLateString) << - "/ Unreasonable: " << qPrintable(incomingUnreasonableString); - - serverDetails << "<br/>" << - " Average Flight Time: " << qPrintable(incomingFlightTimeString) << " msecs"; - - serverDetails << "<br/>" << - " Average Ping Time: " << qPrintable(incomingPingTimeString) << " msecs"; - - serverDetails << "<br/>" << - " Average Clock Skew: " << qPrintable(incomingClockSkewString) << " msecs" << - " [" << qPrintable(formattedClockSkewString) << "]"; - - - serverDetails << "<br/>" << "Incoming" << - " Bytes: " << qPrintable(incomingBytesString) << - " Wasted Bytes: " << qPrintable(incomingWastedBytesString); - - serverDetails << extraDetails.str(); - if (_extraServerDetails[serverCount - 1] == MORE) { - linkDetails << " " << " [<a href='most-" << serverCount << "'>most...</a>]"; - linkDetails << " " << " [<a href='less-" << serverCount << "'>less...</a>]"; - } else { - linkDetails << " " << " [<a href='more-" << serverCount << "'>less...</a>]"; - linkDetails << " " << " [<a href='less-" << serverCount << "'>least...</a>]"; - } - - } break; - case LESS: { - // nothing - } break; - }*/ + float lastFullEncode = stats.getLastFullTotalEncodeTime() / USECS_PER_MSEC; + float lastFullSend = stats.getLastFullElapsedTime() / USECS_PER_MSEC; + float lastFullSendInSeconds = stats.getLastFullElapsedTime() / USECS_PER_SECOND; + float lastFullPackets = stats.getLastFullTotalPackets(); + float lastFullPPS = lastFullPackets; + if (lastFullSendInSeconds > 0) { + lastFullPPS = lastFullPackets / lastFullSendInSeconds; } - }); - } else { - linkDetails << " " << " [<a href='more-" << serverCount << "'>more...</a>]"; - linkDetails << " " << " [<a href='most-" << serverCount << "'>most...</a>]"; - } - serverDetails << linkDetails.str(); - //_labels[_octreeServerLables[serverCount - 1]]->setText(serverDetails.str().c_str()); + + mostDetails += QString("<br/><br/>Last Full Scene... Encode: %1 ms Send: %2 ms Packets: %3 Bytes: %4 Rate: %5 PPS") + .arg(lastFullEncode) + .arg(lastFullSend) + .arg(lastFullPackets) + .arg(stats.getLastFullTotalBytes()) + .arg(lastFullPPS); + + for (int i = 0; i < OctreeSceneStats::ITEM_COUNT; i++) { + OctreeSceneStats::Item item = (OctreeSceneStats::Item)(i); + OctreeSceneStats::ItemInfo& itemInfo = stats.getItemInfo(item); + mostDetails += QString("<br/> %1 %2") + .arg(itemInfo.caption).arg(stats.getItemValue(item)); + } + + moreDetails += "<br/>Node UUID: " +nodeUUID.toString() + " "; + + moreDetails += QString("<br/>Elements: %1 total %2 internal %3 leaves ") + .arg(stats.getTotalElements()) + .arg(stats.getTotalInternal()) + .arg(stats.getTotalLeaves()); + + const SequenceNumberStats& seqStats = stats.getIncomingOctreeSequenceNumberStats(); + qint64 clockSkewInUsecs = node->getClockSkewUsec(); + qint64 clockSkewInMS = clockSkewInUsecs / (qint64)USECS_PER_MSEC; + + moreDetails += QString("<br/>Incoming Packets: %1/ Lost: %2/ Recovered: %3") + .arg(stats.getIncomingPackets()) + .arg(seqStats.getLost()) + .arg(seqStats.getRecovered()); + + moreDetails += QString("<br/> Out of Order: %1/ Early: %2/ Late: %3/ Unreasonable: %4") + .arg(seqStats.getOutOfOrder()) + .arg(seqStats.getEarly()) + .arg(seqStats.getLate()) + .arg(seqStats.getUnreasonable()); + + moreDetails += QString("<br/> Average Flight Time: %1 msecs") + .arg(stats.getIncomingFlightTimeAverage()); + + moreDetails += QString("<br/> Average Ping Time: %1 msecs") + .arg(node->getPingMs()); + + moreDetails += QString("<br/> Average Clock Skew: %1 msecs [%2]") + .arg(clockSkewInMS) + .arg(formatUsecTime(clockSkewInUsecs)); + + + moreDetails += QString("<br/>Incoming Bytes: %1 Wasted Bytes: %2") + .arg(stats.getIncomingBytes()) + .arg(stats.getIncomingWastedBytes()); + } + }); + m_servers.append(lesserDetails); + m_servers.append(moreDetails); + m_servers.append(mostDetails); } // is VOXEL_SERVER }); + emit serversChanged(m_servers); } diff --git a/interface/src/ui/OctreeStatsProvider.h b/interface/src/ui/OctreeStatsProvider.h index 6fc3e091f4..6c4f27149d 100644 --- a/interface/src/ui/OctreeStatsProvider.h +++ b/interface/src/ui/OctreeStatsProvider.h @@ -14,6 +14,7 @@ #include <OctreeSceneStats.h> #include <QTimer> +#include <QQmlListProperty> #include "DependencyManager.h" @@ -38,6 +39,8 @@ class OctreeStatsProvider : public QObject, public Dependency { Q_PROPERTY(QString entityUpdateTime READ entityUpdateTime NOTIFY entityUpdateTimeChanged) Q_PROPERTY(QString entityUpdates READ entityUpdates NOTIFY entityUpdatesChanged) + Q_PROPERTY(QStringList servers READ servers NOTIFY serversChanged) + public: OctreeStatsProvider(QObject* parent, NodeToOctreeSceneStats* model); ~OctreeStatsProvider(); @@ -88,6 +91,10 @@ public: return m_entityUpdates; } + QStringList servers() const { + return m_servers; + } + signals: void serversNumChanged(int serversNum); @@ -103,8 +110,9 @@ signals: void entityUpdateTimeChanged(const QString &entityUpdateTime); void entityUpdatesChanged(const QString &entityUpdates); + void serversChanged(const QStringList &servers); + public slots: - void moreless(const QString& link); void startUpdates(); void stopUpdates(); @@ -139,6 +147,7 @@ private: QString m_outboundEditPackets; QString m_entityUpdateTime; QString m_entityUpdates; + QStringList m_servers; }; #endif // hifi_OctreeStatsProvider_h From e2a4011b05edff03847e80fe4930466db6e31958 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Tue, 14 Mar 2017 19:10:41 +0100 Subject: [PATCH 131/247] Coloring implemented --- .../hifi/dialogs/TabletEntityStatistics.qml | 12 ++++++ .../dialogs/TabletEntityStatisticsItem.qml | 1 + interface/src/ui/OctreeStatsProvider.cpp | 40 ++++++------------- interface/src/ui/OctreeStatsProvider.h | 3 +- 4 files changed, 27 insertions(+), 29 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml index 9d3829e743..35ee58be0c 100644 --- a/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml +++ b/interface/resources/qml/hifi/dialogs/TabletEntityStatistics.qml @@ -62,6 +62,7 @@ Rectangle { titleText: qsTr("Elements on Servers:") text: OctreeStats.serverElements colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -70,6 +71,7 @@ Rectangle { titleText: qsTr("Local Elements:") text: OctreeStats.localElements colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -78,6 +80,7 @@ Rectangle { titleText: qsTr("Elements Memory:") text: OctreeStats.localElementsMemory colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -86,6 +89,7 @@ Rectangle { titleText: qsTr("Sending Mode:") text: OctreeStats.sendingMode colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -94,6 +98,7 @@ Rectangle { titleText: qsTr("Incoming Entity Packets:") text: OctreeStats.processedPackets colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -102,6 +107,7 @@ Rectangle { titleText: qsTr("Processed Packets Elements:") text: OctreeStats.processedPacketsElements colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -110,6 +116,7 @@ Rectangle { titleText: qsTr("Processed Packets Entities:") text: OctreeStats.processedPacketsEntities colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -118,6 +125,7 @@ Rectangle { titleText: qsTr("Processed Packets Timing:") text: OctreeStats.processedPacketsTiming colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -126,6 +134,7 @@ Rectangle { titleText: qsTr("Outbound Entity Packets:") text: OctreeStats.outboundEditPackets colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -134,6 +143,7 @@ Rectangle { titleText: qsTr("Entity Update Time:") text: OctreeStats.entityUpdateTime colorScheme: root.colorScheme + color: OctreeStats.getColor() } TabletEntityStatisticsItem { @@ -142,6 +152,7 @@ Rectangle { titleText: qsTr("Entity Updates:") text: OctreeStats.entityUpdates colorScheme: root.colorScheme + color: OctreeStats.getColor() } Repeater { @@ -160,6 +171,7 @@ Rectangle { width: parent.width titleText: qsTr("Entity Server ") + (index+1) + ":" colorScheme: root.colorScheme + color: OctreeStats.getColor() } Row { diff --git a/interface/resources/qml/hifi/dialogs/TabletEntityStatisticsItem.qml b/interface/resources/qml/hifi/dialogs/TabletEntityStatisticsItem.qml index c4509d5a76..894a4c1813 100644 --- a/interface/resources/qml/hifi/dialogs/TabletEntityStatisticsItem.qml +++ b/interface/resources/qml/hifi/dialogs/TabletEntityStatisticsItem.qml @@ -21,6 +21,7 @@ Column { property alias titleText: titleLabel.text property alias text: valueLabel.text + property alias color: valueLabel.color HifiConstants { id: hifi } diff --git a/interface/src/ui/OctreeStatsProvider.cpp b/interface/src/ui/OctreeStatsProvider.cpp index e51172ff55..95092d4253 100644 --- a/interface/src/ui/OctreeStatsProvider.cpp +++ b/interface/src/ui/OctreeStatsProvider.cpp @@ -41,33 +41,17 @@ void OctreeStatsProvider::stopUpdates() { _updateTimer.stop(); } - -//int OctreeStatsProvider::AddStatItem(const char* caption, unsigned colorRGBA) { -// const int STATS_LABEL_WIDTH = 600; - -// _statCount++; // increment our current stat count - -// if (colorRGBA == 0) { -// static unsigned rotatingColors[] = { GREENISH, YELLOWISH, GREYISH }; -// colorRGBA = rotatingColors[_statCount % (sizeof(rotatingColors)/sizeof(rotatingColors[0]))]; -// } -// //QLabel* label = _labels[_statCount] = new QLabel(); - -// // Set foreground color to 62.5% brightness of the meter (otherwise will be hard to read on the bright background) -// //QPalette palette = label->palette(); - -// // This goofiness came from the bandwidth meter code, it basically stores a color in an unsigned and extracts it -// unsigned rgb = colorRGBA >> 8; -// const unsigned colorpart1 = 0xfefefeu; -// const unsigned colorpart2 = 0xf8f8f8; -// rgb = ((rgb & colorpart1) >> 1) + ((rgb & colorpart2) >> 3); -// palette.setColor(QPalette::WindowText, QColor::fromRgb(rgb)); -// label->setPalette(palette); -// _form->addRow(QString(" %1:").arg(caption), label); -// label->setFixedWidth(STATS_LABEL_WIDTH); - -// return _statCount; -//} +QColor OctreeStatsProvider::getColor() const { + static int statIndex = 1; + static quint32 rotatingColors[] = { GREENISH, YELLOWISH, GREYISH }; + quint32 colorRGBA = rotatingColors[statIndex % (sizeof(rotatingColors)/sizeof(rotatingColors[0]))]; + quint32 rgb = colorRGBA >> 8; + const quint32 colorpart1 = 0xfefefeu; + const quint32 colorpart2 = 0xf8f8f8; + rgb = ((rgb & colorpart1) >> 1) + ((rgb & colorpart2) >> 3); + statIndex++; + return QColor::fromRgb(rgb); +} OctreeStatsProvider::~OctreeStatsProvider() { _updateTimer.stop(); @@ -108,7 +92,7 @@ void OctreeStatsProvider::updateOctreeStatsData() { // Only refresh our stats every once in a while, unless asked for realtime //if no realtime, then update once per second. Otherwise consider 60FPS update, ie 16ms interval //int updateinterval = Menu::getInstance()->isOptionChecked(MenuOption::ShowRealtimeEntityStats) ? 16 : 1000; - _updateTimer.start(SAMPLING_WINDOW/1000); + _updateTimer.start(REFRESH_AFTER/1000); const int FLOATING_POINT_PRECISION = 3; diff --git a/interface/src/ui/OctreeStatsProvider.h b/interface/src/ui/OctreeStatsProvider.h index 6c4f27149d..c919ca102f 100644 --- a/interface/src/ui/OctreeStatsProvider.h +++ b/interface/src/ui/OctreeStatsProvider.h @@ -14,7 +14,7 @@ #include <OctreeSceneStats.h> #include <QTimer> -#include <QQmlListProperty> +#include <QColor> #include "DependencyManager.h" @@ -115,6 +115,7 @@ signals: public slots: void startUpdates(); void stopUpdates(); + QColor getColor() const; private slots: void updateOctreeStatsData(); From 4c686eaa67e96953269f27934b4f0e494164c064 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 14 Mar 2017 21:20:41 +0100 Subject: [PATCH 132/247] fix tablet menu stack focus issue --- interface/resources/qml/hifi/tablet/TabletMenuStack.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml index 64d42acabb..f77ad0d4b8 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml @@ -51,6 +51,8 @@ Item { d.push(Qt.resolvedUrl(path)); d.currentItem.eventBridge = tabletMenu.eventBridge d.currentItem.sendToScript.connect(tabletMenu.sendToScript); + d.currentItem.focus = true; + d.currentItem.forceActiveFocus(); breadcrumbText.text = d.currentItem.title; } From 3a788d31ded783d12a55f810c626511bb640fee8 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 14 Mar 2017 15:34:41 -0700 Subject: [PATCH 133/247] Tablet Running Scripts dialog fixes * The "Currrently Running" section is now visible by default, this includes the "Reload All" and "Remove All" buttons * The entire dialog is flickable/scrollable. We need to do this because the entire dialog is too tall to fit on the tablet. * The keyboard now appears when the filter edit text has focus. The content is scrolled in such away that the focus edit field, and the tree view are above the keyboard. --- .../qml/hifi/dialogs/TabletRunningScripts.qml | 505 ++++++++++-------- .../qml/hifi/tablet/TabletMenuStack.qml | 6 +- 2 files changed, 273 insertions(+), 238 deletions(-) diff --git a/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml b/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml index b4a1ab01b6..dee0d0e21f 100644 --- a/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml +++ b/interface/resources/qml/hifi/dialogs/TabletRunningScripts.qml @@ -79,266 +79,297 @@ Rectangle { scripts.stopAllScripts(); } - Column { + Flickable { + id: flickable width: parent.width - HifiControls.TabletContentSection { - name: "Currently Running" - isFirst: true + height: parent.height - (keyboard.raised ? keyboard.raisedHeight : 0) + contentWidth: parent.width + contentHeight: column.childrenRect.height + clip: true - HifiControls.VerticalSpacer {} + Column { + id: column + width: parent.width + HifiControls.TabletContentSection { + id: firstSection + name: "Currently Running" + isFirst: true - Row { - spacing: hifi.dimensions.contentSpacing.x + HifiControls.VerticalSpacer {} - HifiControls.Button { - text: "Reload All" - color: hifi.buttons.black - onClicked: reloadAll() - } + Row { + spacing: hifi.dimensions.contentSpacing.x - HifiControls.Button { - text: "Remove All" - color: hifi.buttons.red - onClicked: stopAll() - } - } - - HifiControls.VerticalSpacer { - height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border - } - - HifiControls.Table { - model: runningScriptsModel - id: table - height: 185 - colorScheme: hifi.colorSchemes.dark - anchors.left: parent.left - anchors.right: parent.right - expandSelectedRow: true - - itemDelegate: Item { - anchors { - left: parent ? parent.left : undefined - leftMargin: hifi.dimensions.tablePadding - right: parent ? parent.right : undefined - rightMargin: hifi.dimensions.tablePadding + HifiControls.Button { + text: "Reload All" + color: hifi.buttons.black + onClicked: reloadAll() } - FiraSansSemiBold { - id: textItem - text: styleData.value - size: hifi.fontSizes.tableText - color: table.colorScheme == hifi.colorSchemes.light - ? (styleData.selected ? hifi.colors.black : hifi.colors.baseGrayHighlight) - : (styleData.selected ? hifi.colors.black : hifi.colors.lightGrayText) + HifiControls.Button { + text: "Remove All" + color: hifi.buttons.red + onClicked: stopAll() + } + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border + } + + HifiControls.Table { + model: runningScriptsModel + id: table + height: 185 + colorScheme: hifi.colorSchemes.dark + anchors.left: parent.left + anchors.right: parent.right + expandSelectedRow: true + + itemDelegate: Item { anchors { - left: parent.left - right: parent.right - top: parent.top - topMargin: 3 + left: parent ? parent.left : undefined + leftMargin: hifi.dimensions.tablePadding + right: parent ? parent.right : undefined + rightMargin: hifi.dimensions.tablePadding } - HiFiGlyphs { - id: reloadButton - text: hifi.glyphs.reloadSmall - color: reloadButtonArea.pressed ? hifi.colors.white : parent.color + FiraSansSemiBold { + id: textItem + text: styleData.value + size: hifi.fontSizes.tableText + color: table.colorScheme == hifi.colorSchemes.light + ? (styleData.selected ? hifi.colors.black : hifi.colors.baseGrayHighlight) + : (styleData.selected ? hifi.colors.black : hifi.colors.lightGrayText) anchors { - top: parent.top - right: stopButton.left - verticalCenter: parent.verticalCenter - } - MouseArea { - id: reloadButtonArea - anchors { fill: parent; margins: -2 } - onClicked: reloadScript(model.url) - } - } - - HiFiGlyphs { - id: stopButton - text: hifi.glyphs.closeSmall - color: stopButtonArea.pressed ? hifi.colors.white : parent.color - anchors { - top: parent.top + left: parent.left right: parent.right - verticalCenter: parent.verticalCenter + top: parent.top + topMargin: 3 } - MouseArea { - id: stopButtonArea - anchors { fill: parent; margins: -2 } - onClicked: stopScript(model.url) + + HiFiGlyphs { + id: reloadButton + text: hifi.glyphs.reloadSmall + color: reloadButtonArea.pressed ? hifi.colors.white : parent.color + anchors { + top: parent.top + right: stopButton.left + verticalCenter: parent.verticalCenter + } + MouseArea { + id: reloadButtonArea + anchors { fill: parent; margins: -2 } + onClicked: reloadScript(model.url) + } + } + + HiFiGlyphs { + id: stopButton + text: hifi.glyphs.closeSmall + color: stopButtonArea.pressed ? hifi.colors.white : parent.color + anchors { + top: parent.top + right: parent.right + verticalCenter: parent.verticalCenter + } + MouseArea { + id: stopButtonArea + anchors { fill: parent; margins: -2 } + onClicked: stopScript(model.url) + } + } + + } + + FiraSansSemiBold { + text: runningScriptsModel.get(styleData.row) ? runningScriptsModel.get(styleData.row).url : "" + elide: Text.ElideMiddle + size: hifi.fontSizes.tableText + color: table.colorScheme == hifi.colorSchemes.light + ? (styleData.selected ? hifi.colors.black : hifi.colors.lightGray) + : (styleData.selected ? hifi.colors.black : hifi.colors.lightGrayText) + anchors { + top: textItem.bottom + left: parent.left + right: parent.right + } + visible: styleData.selected + } + } + + TableViewColumn { + role: "name" + } + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border + } + } + + HifiControls.TabletContentSection { + name: "Load Scripts" + + HifiControls.VerticalSpacer {} + + Row { + spacing: hifi.dimensions.contentSpacing.x + + HifiControls.Button { + text: "from URL" + color: hifi.buttons.black + height: 26 + onClicked: fromUrlTimer.running = true + + // For some reason trigginer an API that enters + // an internal event loop directly from the button clicked + // trigger below causes the appliction to behave oddly. + // Most likely because the button onClicked handling is never + // completed until the function returns. + // FIXME find a better way of handling the input dialogs that + // doesn't trigger this. + Timer { + id: fromUrlTimer + interval: 5 + repeat: false + running: false + onTriggered: ApplicationInterface.loadScriptURLDialog(); + } + } + + HifiControls.Button { + text: "from Disk" + color: hifi.buttons.black + height: 26 + onClicked: fromDiskTimer.running = true + + Timer { + id: fromDiskTimer + interval: 5 + repeat: false + running: false + onTriggered: ApplicationInterface.loadDialog(); + } + } + + HifiControls.Button { + text: "Load Defaults" + color: hifi.buttons.black + height: 26 + onClicked: loadDefaults() + } + } + + HifiControls.VerticalSpacer {} + + HifiControls.TextField { + id: filterEdit + isSearchField: true + anchors.left: parent.left + anchors.right: parent.right + colorScheme: hifi.colorSchemes.dark + placeholderText: "Filter" + onTextChanged: scriptsModel.filterRegExp = new RegExp("^.*" + text + ".*$", "i") + Component.onCompleted: scriptsModel.filterRegExp = new RegExp("^.*$", "i") + onActiveFocusChanged: { + // raise the keyboard + keyboard.raised = activeFocus; + + // scroll to the bottom of the content area. + if (activeFocus) { + flickable.contentY = (flickable.contentHeight - flickable.height); + } + } + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border + } + + HifiControls.Tree { + id: treeView + height: 155 + treeModel: scriptsModel + colorScheme: hifi.colorSchemes.dark + anchors.left: parent.left + anchors.right: parent.right + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border + } + + HifiControls.TextField { + id: selectedScript + anchors.left: parent.left + anchors.right: parent.right + anchors.rightMargin: loadButton.width + hifi.dimensions.contentSpacing.x + + colorScheme: hifi.colorSchemes.dark + readOnly: true + + Connections { + target: treeView + onCurrentIndexChanged: { + var path = scriptsModel.data(treeView.currentIndex, 0x100) + if (path) { + selectedScript.text = path + } else { + selectedScript.text = "" } } - - } - - FiraSansSemiBold { - text: runningScriptsModel.get(styleData.row) ? runningScriptsModel.get(styleData.row).url : "" - elide: Text.ElideMiddle - size: hifi.fontSizes.tableText - color: table.colorScheme == hifi.colorSchemes.light - ? (styleData.selected ? hifi.colors.black : hifi.colors.lightGray) - : (styleData.selected ? hifi.colors.black : hifi.colors.lightGrayText) - anchors { - top: textItem.bottom - left: parent.left - right: parent.right - } - visible: styleData.selected } } - TableViewColumn { - role: "name" - } - } - - HifiControls.VerticalSpacer { - height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border - } - } - - HifiControls.TabletContentSection { - name: "Load Scripts" - - HifiControls.VerticalSpacer {} - - Row { - spacing: hifi.dimensions.contentSpacing.x - - HifiControls.Button { - text: "from URL" - color: hifi.buttons.black - height: 26 - onClicked: fromUrlTimer.running = true - - // For some reason trigginer an API that enters - // an internal event loop directly from the button clicked - // trigger below causes the appliction to behave oddly. - // Most likely because the button onClicked handling is never - // completed until the function returns. - // FIXME find a better way of handling the input dialogs that - // doesn't trigger this. - Timer { - id: fromUrlTimer - interval: 5 - repeat: false - running: false - onTriggered: ApplicationInterface.loadScriptURLDialog(); - } - } - - HifiControls.Button { - text: "from Disk" - color: hifi.buttons.black - height: 26 - onClicked: fromDiskTimer.running = true - - Timer { - id: fromDiskTimer - interval: 5 - repeat: false - running: false - onTriggered: ApplicationInterface.loadDialog(); - } - } - - HifiControls.Button { - text: "Load Defaults" - color: hifi.buttons.black - height: 26 - onClicked: loadDefaults() - } - } - - HifiControls.VerticalSpacer {} - - HifiControls.TextField { - id: filterEdit - isSearchField: true - anchors.left: parent.left - anchors.right: parent.right - colorScheme: hifi.colorSchemes.dark - placeholderText: "Filter" - onTextChanged: scriptsModel.filterRegExp = new RegExp("^.*" + text + ".*$", "i") - Component.onCompleted: scriptsModel.filterRegExp = new RegExp("^.*$", "i") - } - - HifiControls.VerticalSpacer { - height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border - } - - HifiControls.Tree { - id: treeView - height: 155 - treeModel: scriptsModel - colorScheme: hifi.colorSchemes.dark - anchors.left: parent.left - anchors.right: parent.right - } - - HifiControls.VerticalSpacer { - height: hifi.dimensions.controlInterlineHeight + 2 // Add space for border - } - - HifiControls.TextField { - id: selectedScript - anchors.left: parent.left - anchors.right: parent.right - anchors.rightMargin: loadButton.width + hifi.dimensions.contentSpacing.x - - colorScheme: hifi.colorSchemes.dark - readOnly: true - - Connections { - target: treeView - onCurrentIndexChanged: { - var path = scriptsModel.data(treeView.currentIndex, 0x100) - if (path) { - selectedScript.text = path - } else { - selectedScript.text = "" - } - } - } - } - - Item { - // Take the loadButton out of the column flow. - id: loadButtonContainer - anchors.top: selectedScript.top - anchors.right: parent.right - - HifiControls.Button { - id: loadButton + Item { + // Take the loadButton out of the column flow. + id: loadButtonContainer + anchors.top: selectedScript.top anchors.right: parent.right - text: "Load" - color: hifi.buttons.blue - enabled: selectedScript.text != "" - onClicked: root.loadScript(selectedScript.text) + HifiControls.Button { + id: loadButton + anchors.right: parent.right + + text: "Load" + color: hifi.buttons.blue + enabled: selectedScript.text != "" + onClicked: root.loadScript(selectedScript.text) + } + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight - (!isHMD ? 3 : 0) + } + + HifiControls.TextAction { + id: directoryButton + icon: hifi.glyphs.script + iconSize: 24 + text: "Reveal Scripts Folder" + onClicked: fileDialogHelper.openDirectory(scripts.defaultScriptsPath) + colorScheme: hifi.colorSchemes.dark + anchors.left: parent.left + visible: !isHMD + } + + HifiControls.VerticalSpacer { + height: hifi.dimensions.controlInterlineHeight - 3 + visible: !isHMD } } + } + } - HifiControls.VerticalSpacer { - height: hifi.dimensions.controlInterlineHeight - (!isHMD ? 3 : 0) - } - - HifiControls.TextAction { - id: directoryButton - icon: hifi.glyphs.script - iconSize: 24 - text: "Reveal Scripts Folder" - onClicked: fileDialogHelper.openDirectory(scripts.defaultScriptsPath) - colorScheme: hifi.colorSchemes.dark - anchors.left: parent.left - visible: !isHMD - } - - HifiControls.VerticalSpacer { - height: hifi.dimensions.controlInterlineHeight - 3 - visible: !isHMD - } + HifiControls.Keyboard { + id: keyboard + raised: false + numeric: false + anchors { + bottom: parent.bottom + left: parent.left + right: parent.right } } } diff --git a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml index f77ad0d4b8..bacc11228e 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuStack.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuStack.qml @@ -17,7 +17,7 @@ Item { id: root anchors.fill: parent objectName: "tabletMenuHandlerItem" - + StackView { anchors.fill: parent id: d @@ -54,6 +54,10 @@ Item { d.currentItem.focus = true; d.currentItem.forceActiveFocus(); breadcrumbText.text = d.currentItem.title; + if (typeof bgNavBar !== "undefined") { + d.currentItem.y = bgNavBar.height; + d.currentItem.height -= bgNavBar.height; + } } function popSource() { From 45829574c21c18028b605f6ffe36577fa1849d02 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 15 Mar 2017 00:02:42 +0100 Subject: [PATCH 134/247] Allow the user to bring up the tablet when a message is open in the tablet --- interface/src/Application.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 141b168f82..54398a4f07 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1625,9 +1625,10 @@ QString Application::getUserAgent() { void Application::toggleTabletUI() const { auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto hmd = DependencyManager::get<HMDScriptingInterface>(); TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); bool messageOpen = tablet->isMessageDialogOpen(); - if (!messageOpen) { + if (!messageOpen || (messageOpen && !hmd->getShouldShowTablet())) { auto HMD = DependencyManager::get<HMDScriptingInterface>(); HMD->toggleShouldShowTablet(); } From cb4bd5838192c75a41081d40eec92f0ded824d73 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Wed, 15 Mar 2017 14:31:13 +1300 Subject: [PATCH 135/247] Load controller scripts in their own script engine --- scripts/defaultScripts.js | 32 ++++++++------- .../system/controllers/controllerScripts.js | 41 +++++++++++++++++++ 2 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 scripts/system/controllers/controllerScripts.js diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index 27efab134a..aba2f35e6b 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -11,7 +11,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -var DEFAULT_SCRIPTS = [ +var DEFAULT_SCRIPTS_COMBINED = [ "system/progress.js", "system/away.js", "system/audio.js", @@ -27,17 +27,13 @@ var DEFAULT_SCRIPTS = [ "system/tablet-users.js", "system/selectAudioDevice.js", "system/notifications.js", - "system/controllers/squeezeHands.js", - "system/controllers/controllerDisplayManager.js", - "system/controllers/handControllerGrab.js", - "system/controllers/handControllerPointer.js", - "system/controllers/grab.js", - "system/controllers/teleport.js", - "system/controllers/toggleAdvancedMovementForHandControllers.js", "system/dialTone.js", "system/firstPersonHMD.js", "system/tablet-ui/tabletUI.js" ]; +var DEFAULT_SCRIPTS_SEPARATE = [ + "system/controllers/controllerScripts.js" +]; // add a menu item for debugging var MENU_CATEGORY = "Developer"; @@ -64,16 +60,24 @@ if (Menu.menuExists(MENU_CATEGORY) && !Menu.menuItemExists(MENU_CATEGORY, MENU_I }); } -function runDefaultsTogether() { - for (var j in DEFAULT_SCRIPTS) { - Script.include(DEFAULT_SCRIPTS[j]); +function loadSeparateDefaults() { + for (var i in DEFAULT_SCRIPTS_SEPARATE) { + Script.load(DEFAULT_SCRIPTS_SEPARATE[i]); } } -function runDefaultsSeparately() { - for (var i in DEFAULT_SCRIPTS) { - Script.load(DEFAULT_SCRIPTS[i]); +function runDefaultsTogether() { + for (var i in DEFAULT_SCRIPTS_COMBINED) { + Script.include(DEFAULT_SCRIPTS_COMBINED[i]); } + loadSeparateDefaults(); +} + +function runDefaultsSeparately() { + for (var i in DEFAULT_SCRIPTS_COMBINED) { + Script.load(DEFAULT_SCRIPTS_COMBINED[i]); + } + loadSeparateDefaults(); } // start all scripts diff --git a/scripts/system/controllers/controllerScripts.js b/scripts/system/controllers/controllerScripts.js new file mode 100644 index 0000000000..df11a1e5be --- /dev/null +++ b/scripts/system/controllers/controllerScripts.js @@ -0,0 +1,41 @@ +"use strict"; + +// controllerScripts.js +// +// Created by David Rowe on 15 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +var CONTOLLER_SCRIPTS = [ + "squeezeHands.js", + "controllerDisplayManager.js", + "handControllerGrab.js", + "handControllerPointer.js", + "grab.js", + "teleport.js", + "toggleAdvancedMovementForHandControllers.js", +]; + +var DEBUG_MENU_ITEM = "Debug defaultScripts.js"; + + +function runDefaultsTogether() { + for (var j in CONTOLLER_SCRIPTS) { + Script.include(CONTOLLER_SCRIPTS[j]); + } +} + +function runDefaultsSeparately() { + for (var i in CONTOLLER_SCRIPTS) { + Script.load(CONTOLLER_SCRIPTS[i]); + } +} + +if (Menu.isOptionChecked(DEBUG_MENU_ITEM)) { + runDefaultsSeparately(); +} else { + runDefaultsTogether(); +} From 181c7da51a08ab860b00df0f80cfb7ec88373663 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Wed, 15 Mar 2017 14:55:53 +0100 Subject: [PATCH 136/247] Fixed warnings --- interface/src/ui/OctreeStatsProvider.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/ui/OctreeStatsProvider.cpp b/interface/src/ui/OctreeStatsProvider.cpp index 95092d4253..5f40b9916d 100644 --- a/interface/src/ui/OctreeStatsProvider.cpp +++ b/interface/src/ui/OctreeStatsProvider.cpp @@ -17,8 +17,8 @@ OctreeStatsProvider::OctreeStatsProvider(QObject* parent, NodeToOctreeSceneStats* model) : QObject(parent), _model(model) - , _averageUpdatesPerSecond(SAMPLES_PER_SECOND) , _statCount(0) + , _averageUpdatesPerSecond(SAMPLES_PER_SECOND) { //schedule updates connect(&_updateTimer, &QTimer::timeout, this, &OctreeStatsProvider::updateOctreeStatsData); From 816b0b5cfdc1beb2685da0272e7c18b52f142570 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 15 Mar 2017 09:02:32 -0800 Subject: [PATCH 137/247] unmangle merge --- libraries/entities-renderer/src/EntityTreeRenderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/entities-renderer/src/EntityTreeRenderer.cpp b/libraries/entities-renderer/src/EntityTreeRenderer.cpp index 8ed9cc23c7..668c732ca0 100644 --- a/libraries/entities-renderer/src/EntityTreeRenderer.cpp +++ b/libraries/entities-renderer/src/EntityTreeRenderer.cpp @@ -760,7 +760,7 @@ void EntityTreeRenderer::mouseDoublePressEvent(QMouseEvent* event) { PointerEvent pointerEvent(PointerEvent::Press, MOUSE_POINTER_ID, pos2D, rayPickResult.intersection, rayPickResult.surfaceNormal, ray.direction, - toPointerButton(*event), toPointerButtons(*event)); + toPointerButton(*event), toPointerButtons(*event), Qt::NoModifier); emit mouseDoublePressOnEntity(rayPickResult.entityID, pointerEvent); From b66ff1959543992073bcd12f3ccb423634a78fc8 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 15 Mar 2017 09:51:30 -0800 Subject: [PATCH 138/247] prefer-avatar-finger-over-stylus setting now defaults to true --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 1fc2eeaacf..040ee46bb8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -552,7 +552,7 @@ const float DEFAULT_DESKTOP_TABLET_SCALE_PERCENT = 75.0f; const bool DEFAULT_DESKTOP_TABLET_BECOMES_TOOLBAR = true; const bool DEFAULT_HMD_TABLET_BECOMES_TOOLBAR = false; const bool DEFAULT_TABLET_VISIBLE_TO_OTHERS = false; -const bool DEFAULT_PREFER_AVATAR_FINGER_OVER_STYLUS = false; +const bool DEFAULT_PREFER_AVATAR_FINGER_OVER_STYLUS = true; Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bool runServer, QString runServerPathOption) : QApplication(argc, argv), From 4bc050e5835b542b7df09328af44e73cd465033c Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 15 Mar 2017 19:26:50 +0100 Subject: [PATCH 139/247] added tablet notification --- libraries/script-engine/src/TabletScriptingInterface.h | 9 ++++++++- libraries/ui/src/OffscreenUi.cpp | 4 ++++ scripts/system/notifications.js | 10 ++++++++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index 00624254d7..acc53653f8 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -56,7 +56,14 @@ public: QQuickWindow* getTabletWindow(); QObject* getFlags(); - +signals: + /** jsdoc + * Signaled when a tablet message or dialog is created + * @function TabletProxy#tabletNotification + * @returns {Signal} + */ + void tabletNotification(); + private: void processMenuEvents(QObject* object, const QKeyEvent* event); void processTabletEvents(QObject* object, const QKeyEvent* event); diff --git a/libraries/ui/src/OffscreenUi.cpp b/libraries/ui/src/OffscreenUi.cpp index 982d58464f..1cb9045e79 100644 --- a/libraries/ui/src/OffscreenUi.cpp +++ b/libraries/ui/src/OffscreenUi.cpp @@ -223,6 +223,7 @@ QQuickItem* OffscreenUi::createMessageBox(Icon icon, const QString& title, const invokeResult = QMetaObject::invokeMethod(tabletRoot, "messageBox", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); + emit tabletScriptingInterface->tabletNotification(); } if (!invokeResult) { @@ -430,6 +431,7 @@ QQuickItem* OffscreenUi::createInputDialog(const Icon icon, const QString& title invokeResult = QMetaObject::invokeMethod(tabletRoot, "inputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); + emit tabletScriptingInterface->tabletNotification(); } if (!invokeResult) { qWarning() << "Failed to create message box"; @@ -457,6 +459,7 @@ QQuickItem* OffscreenUi::createCustomInputDialog(const Icon icon, const QString& invokeResult = QMetaObject::invokeMethod(tabletRoot, "inputDialog", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, QVariant::fromValue(map))); + emit tabletScriptingInterface->tabletNotification(); } if (!invokeResult) { @@ -614,6 +617,7 @@ QString OffscreenUi::fileDialog(const QVariantMap& properties) { invokeResult = QMetaObject::invokeMethod(tabletRoot, "fileDialog", Q_RETURN_ARG(QVariant, buildDialogResult), Q_ARG(QVariant, QVariant::fromValue(properties))); + emit tabletScriptingInterface->tabletNotification(); } if (!invokeResult) { diff --git a/scripts/system/notifications.js b/scripts/system/notifications.js index b2ebb1fd46..0b7c2fa1b3 100644 --- a/scripts/system/notifications.js +++ b/scripts/system/notifications.js @@ -94,11 +94,13 @@ var NotificationType = { LOD_WARNING: 2, CONNECTION_REFUSED: 3, EDIT_ERROR: 4, + TABLET: 5, properties: [ { text: "Snapshot" }, { text: "Level of Detail" }, { text: "Connection Refused" }, - { text: "Edit error" } + { text: "Edit error" }, + { text: "Tablet" } ], getTypeFromMenuItem: function(menuItemName) { if (menuItemName.substr(menuItemName.length - NOTIFICATION_MENU_ITEM_POST.length) !== NOTIFICATION_MENU_ITEM_POST) { @@ -535,6 +537,10 @@ function onSnapshotTaken(pathStillSnapshot, pathAnimatedSnapshot, notify) { } } +function tabletNotification() { + createNotification("Tablet need your attention", NotificationType.TABLET); +} + function processingGif() { createNotification("Processing GIF snapshot...", NotificationType.SNAPSHOT); } @@ -641,7 +647,7 @@ Window.snapshotTaken.connect(onSnapshotTaken); Window.processingGif.connect(processingGif); Window.notifyEditError = onEditError; Window.notify = onNotify; - +Tablet.tabletNotification.connect(tabletNotification); setup(); }()); // END LOCAL_SCOPE From a5f1fb9e9a3124b73f751c167fb1a7147e840c8f Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 15 Mar 2017 19:45:30 +0100 Subject: [PATCH 140/247] fixed notification spelling error --- scripts/system/notifications.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/notifications.js b/scripts/system/notifications.js index 0b7c2fa1b3..b527348733 100644 --- a/scripts/system/notifications.js +++ b/scripts/system/notifications.js @@ -538,7 +538,7 @@ function onSnapshotTaken(pathStillSnapshot, pathAnimatedSnapshot, notify) { } function tabletNotification() { - createNotification("Tablet need your attention", NotificationType.TABLET); + createNotification("Tablet needs your attention", NotificationType.TABLET); } function processingGif() { From 856e15060da09c76ec12bb8f60184653e245c58d Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Wed, 15 Mar 2017 21:05:13 +0100 Subject: [PATCH 141/247] Implemented Domain Connection statistics for Tablet UI --- .../qml/hifi/dialogs/TabletDCDialog.qml | 160 ++++++++++++++++++ interface/src/Application.cpp | 15 +- interface/src/Application.h | 1 + interface/src/Menu.cpp | 2 +- interface/src/ui/DomainConnectionModel.cpp | 101 +++++++++++ interface/src/ui/DomainConnectionModel.h | 47 +++++ interface/src/ui/overlays/Web3DOverlay.cpp | 2 + 7 files changed, 326 insertions(+), 2 deletions(-) create mode 100644 interface/resources/qml/hifi/dialogs/TabletDCDialog.qml create mode 100644 interface/src/ui/DomainConnectionModel.cpp create mode 100644 interface/src/ui/DomainConnectionModel.h diff --git a/interface/resources/qml/hifi/dialogs/TabletDCDialog.qml b/interface/resources/qml/hifi/dialogs/TabletDCDialog.qml new file mode 100644 index 0000000000..b33b957e15 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/TabletDCDialog.qml @@ -0,0 +1,160 @@ +// +// TabletDCDialog.qml +// +// Created by Vlad Stelmahovsky on 3/15/17 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import Qt.labs.settings 1.0 + +import "../../styles-uit" +import "../../controls-uit" as HifiControls +import "../../windows" + +Rectangle { + id: root + objectName: "DCConectionTiming" + + property var eventBridge; + signal sendToScript(var message); + property bool isHMD: false + + color: hifi.colors.baseGray + + property int colorScheme: hifi.colorSchemes.dark + + HifiConstants { id: hifi } + + Component.onCompleted: DCModel.refresh() + + Row { + id: header + anchors.top: parent.top + anchors.topMargin: hifi.dimensions.tabletMenuHeader + anchors.leftMargin: 5 + anchors.rightMargin: 5 + anchors.left: parent.left + anchors.right: parent.right + + HifiControls.Label { + id: nameButton + text: qsTr("Name") + size: 15 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + height: 40 + width: 175 + } + HifiControls.Label { + id: tsButton + text: qsTr("Timestamp\n(ms)") + size: 15 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + height: 40 + width: 125 + } + HifiControls.Label { + id: deltaButton + text: qsTr("Delta\n(ms)") + size: 15 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + height: 40 + width: 80 + } + HifiControls.Label { + id: elapseButton + text: qsTr("Time elapsed\n(ms)") + size: 15 + color: "white" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + height: 40 + width: 80 + } + } + + ListView { + anchors.leftMargin: 5 + anchors.rightMargin: 5 + anchors.left: parent.left + anchors.right: parent.right + anchors.top: header.bottom + anchors.topMargin: 5 + anchors.bottom: refreshButton.top + anchors.bottomMargin: 10 + clip: true + snapMode: ListView.SnapToItem + + model: DCModel + + delegate: Rectangle { + anchors.left: parent.left + anchors.right: parent.right + height: 30 + color: index % 2 === 0 ? hifi.colors.baseGray : hifi.colors.lightGray + Row { + anchors.fill: parent + spacing: 5 + HifiControls.Label { + size: 15 + text: name + color: "white" + anchors.verticalCenter: parent.verticalCenter + colorScheme: root.colorScheme + width: nameButton.width + } + HifiControls.Label { + size: 15 + text: timestamp + color: "white" + anchors.verticalCenter: parent.verticalCenter + colorScheme: root.colorScheme + horizontalAlignment: Text.AlignHCenter + width: tsButton.width + } + HifiControls.Label { + size: 15 + text: delta + color: "white" + anchors.verticalCenter: parent.verticalCenter + colorScheme: root.colorScheme + horizontalAlignment: Text.AlignHCenter + width: deltaButton.width + } + HifiControls.Label { + size: 15 + text: timeelapsed + color: "white" + anchors.verticalCenter: parent.verticalCenter + colorScheme: root.colorScheme + horizontalAlignment: Text.AlignHCenter + width: elapseButton.width + } + } + } + } + + HifiControls.Button { + id: refreshButton + anchors.left: parent.left + anchors.right: parent.right + anchors.bottom: parent.bottom + text: qsTr("Refresh") + color: hifi.buttons.blue + colorScheme: root.colorScheme + height: 30 + onClicked: { + DCModel.refresh() + } + } +} diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 040ee46bb8..d78fc295a7 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -171,6 +171,7 @@ #include "ui/Stats.h" #include "ui/UpdateDialog.h" #include "ui/overlays/Overlays.h" +#include "ui/DomainConnectionModel.h" #include "Util.h" #include "InterfaceParentFinder.h" #include "ui/OctreeStatsProvider.h" @@ -501,6 +502,7 @@ bool setupEssentials(int& argc, char** argv) { DependencyManager::set<ToolbarScriptingInterface>(); DependencyManager::set<UserActivityLoggerScriptingInterface>(); DependencyManager::set<AssetMappingsScriptingInterface>(); + DependencyManager::set<DomainConnectionModel>(); #if defined(Q_OS_MAC) || defined(Q_OS_WIN) DependencyManager::set<SpeechRecognizer>(); @@ -6412,8 +6414,19 @@ void Application::loadEntityStatisticsDialog() { } else { tablet->pushOntoStack("../../hifi/dialogs/TabletEntityStatistics.qml"); } - } + +void Application::loadDomainConnectionDialog() { + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + if (tablet->getToolbarMode() || (!tablet->getTabletRoot() && !isHMDMode())) { + auto dialogsManager = DependencyManager::get<DialogsManager>(); + dialogsManager->showDomainConnectionDialog(); + } else { + tablet->pushOntoStack("../../hifi/dialogs/TabletDCDialog.qml"); + } +} + void Application::toggleLogDialog() { if (! _logDialog) { _logDialog = new LogDialog(nullptr, getLogger()); diff --git a/interface/src/Application.h b/interface/src/Application.h index 2ed54a05d8..653b724364 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -405,6 +405,7 @@ public slots: Q_INVOKABLE void toggleMuteAudio(); void loadLODToolsDialog(); void loadEntityStatisticsDialog(); + void loadDomainConnectionDialog(); private slots: void showDesktop(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 2ae66af14b..b95b4d28b9 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -572,7 +572,7 @@ Menu::Menu() { addActionToQMenuAndActionHash(networkMenu, MenuOption::DiskCacheEditor, 0, dialogsManager.data(), SLOT(toggleDiskCacheEditor())); addActionToQMenuAndActionHash(networkMenu, MenuOption::ShowDSConnectTable, 0, - dialogsManager.data(), SLOT(showDomainConnectionDialog())); + qApp, SLOT(loadDomainConnectionDialog())); #if (PR_BUILD || DEV_BUILD) addCheckableActionToQMenuAndActionHash(networkMenu, MenuOption::SendWrongProtocolVersion, 0, false, diff --git a/interface/src/ui/DomainConnectionModel.cpp b/interface/src/ui/DomainConnectionModel.cpp new file mode 100644 index 0000000000..b9e4c1348e --- /dev/null +++ b/interface/src/ui/DomainConnectionModel.cpp @@ -0,0 +1,101 @@ +// +// DomainConnectionModel.cpp +// +// Created by Vlad Stelmahovsky +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "DomainConnectionModel.h" +#include <QLoggingCategory> + +#include <NodeList.h> +#include <NumericalConstants.h> + +Q_LOGGING_CATEGORY(dcmodel, "hifi.dcmodel") + +DomainConnectionModel::DomainConnectionModel(QAbstractItemModel* parent) : + QAbstractItemModel(parent) +{} + +DomainConnectionModel::~DomainConnectionModel() { +} + +QVariant DomainConnectionModel::data(const QModelIndex& index, int role) const { + //sanity + const QMap<quint64, LimitedNodeList::ConnectionStep> × = + DependencyManager::get<NodeList>()->getLastConnectionTimes(); + + if (!index.isValid() || index.row() >= times.size()) + return QVariant(); + + // setup our data with the values from the NodeList + quint64 firstStepTime = times.firstKey() / USECS_PER_MSEC; + quint64 timestamp = times.keys().at(index.row()); + + quint64 stepTime = timestamp / USECS_PER_MSEC; + quint64 delta = 0;//(stepTime - lastStepTime); + quint64 elapsed = 0;//stepTime - firstStepTime; + + if (index.row() > 0) { + quint64 prevstepTime = times.keys().at(index.row() - 1) / USECS_PER_MSEC; + delta = (stepTime - prevstepTime); + elapsed = stepTime - firstStepTime; + } + + if (role == Qt::DisplayRole || role == DisplayNameRole) { + const QMetaObject &nodeListMeta = NodeList::staticMetaObject; + QMetaEnum stepEnum = nodeListMeta.enumerator(nodeListMeta.indexOfEnumerator("ConnectionStep")); + int stepIndex = (int) times.value(timestamp); + return stepEnum.valueToKey(stepIndex); + } else if (role == DeltaRole) { + return delta; + } else if (role == TimestampRole) { + return stepTime; + } else if (role == TimeElapsedRole) { + return elapsed; + } + return QVariant(); +} + +int DomainConnectionModel::rowCount(const QModelIndex& parent) const { + Q_UNUSED(parent) + const QMap<quint64, LimitedNodeList::ConnectionStep> × = + DependencyManager::get<NodeList>()->getLastConnectionTimes(); + return times.size(); +} + +QHash<int, QByteArray> DomainConnectionModel::roleNames() const { + QHash<int, QByteArray> roles; + roles.insert(DisplayNameRole, "name"); + roles.insert(TimestampRole, "timestamp"); + roles.insert(DeltaRole, "delta"); + roles.insert(TimeElapsedRole, "timeelapsed"); + return roles; +} + +QModelIndex DomainConnectionModel::index(int row, int column, const QModelIndex &parent) const +{ + Q_UNUSED(parent) + return createIndex(row, column); +} + +QModelIndex DomainConnectionModel::parent(const QModelIndex &child) const +{ + Q_UNUSED(child) + return QModelIndex(); +} + +int DomainConnectionModel::columnCount(const QModelIndex &parent) const +{ + Q_UNUSED(parent) + return 1; +} + +void DomainConnectionModel::refresh() { + //inform view that we want refresh data + beginResetModel(); + endResetModel(); +} \ No newline at end of file diff --git a/interface/src/ui/DomainConnectionModel.h b/interface/src/ui/DomainConnectionModel.h new file mode 100644 index 0000000000..bf96012f12 --- /dev/null +++ b/interface/src/ui/DomainConnectionModel.h @@ -0,0 +1,47 @@ +// +// ScriptsUsersModel.h +// +// Created by Vlad Stelmahovsky +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +#pragma once + +#ifndef hifi_DomainConnectionModel_h +#define hifi_DomainConnectionModel_h + +#include <QAbstractItemModel> +#include <DependencyManager.h> + +class DomainConnectionModel : public QAbstractItemModel, public Dependency { + Q_OBJECT + SINGLETON_DEPENDENCY +public: + DomainConnectionModel(QAbstractItemModel* parent = nullptr); + ~DomainConnectionModel(); + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + int rowCount(const QModelIndex& parent = QModelIndex()) const override; + QHash<int, QByteArray> roleNames() const override; + + QModelIndex index(int row, int column, const QModelIndex& parent) const override; + QModelIndex parent(const QModelIndex& child) const override; + int columnCount(const QModelIndex& parent = QModelIndex()) const override; + + enum Roles { + DisplayNameRole = Qt::UserRole, + TimestampRole, + DeltaRole, + TimeElapsedRole + }; + +public slots: + void refresh(); + +protected: + +private: +}; + +#endif // hifi_DomainConnectionModel_h \ No newline at end of file diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index e239a5e456..fa815421c7 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -45,6 +45,7 @@ #include "AudioClient.h" #include "LODManager.h" #include "ui/OctreeStatsProvider.h" +#include "ui/DomainConnectionModel.h" static const float DPI = 30.47f; static const float INCHES_TO_METERS = 1.0f / 39.3701f; @@ -187,6 +188,7 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("Assets", DependencyManager::get<AssetMappingsScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("LODManager", DependencyManager::get<LODManager>().data()); _webSurface->getRootContext()->setContextProperty("OctreeStats", DependencyManager::get<OctreeStatsProvider>().data()); + _webSurface->getRootContext()->setContextProperty("DCModel", DependencyManager::get<DomainConnectionModel>().data()); _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); From a4c0ce4240ea130f72c5d9ed524df11c51ea95e0 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Wed, 15 Mar 2017 22:13:37 +0100 Subject: [PATCH 142/247] Typo fix --- interface/src/ui/DomainConnectionModel.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/DomainConnectionModel.h b/interface/src/ui/DomainConnectionModel.h index bf96012f12..11ecb23bd2 100644 --- a/interface/src/ui/DomainConnectionModel.h +++ b/interface/src/ui/DomainConnectionModel.h @@ -1,5 +1,5 @@ // -// ScriptsUsersModel.h +// DomainConnectionModel.h // // Created by Vlad Stelmahovsky // Copyright 2017 High Fidelity, Inc. @@ -44,4 +44,4 @@ protected: private: }; -#endif // hifi_DomainConnectionModel_h \ No newline at end of file +#endif // hifi_DomainConnectionModel_h From 42216b69863e3fb393510e0a50122f890621bda7 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Wed, 15 Mar 2017 16:47:31 -0700 Subject: [PATCH 143/247] create import entities button on create tab --- interface/resources/qml/hifi/tablet/Edit.qml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 00856f8212..b9d7326c8e 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -7,6 +7,7 @@ import "../../controls" import "../toolbars" import HFWebEngineProfile 1.0 import QtGraphicalEffects 1.0 +import "../../controls-uit" as HifiControls import "../../styles-uit" StackView { @@ -17,6 +18,8 @@ StackView { property var eventBridge; signal sendToScript(var message); + HifiConstants { id: hifi } + function pushSource(path) { editRoot.push(Qt.resolvedUrl(path)); editRoot.currentItem.eventBridge = editRoot.eventBridge; @@ -247,6 +250,18 @@ StackView { } ] } + + HifiControls.Button { + text: "Import Entities" + color: hifi.buttons.black + colorScheme: hifi.colorSchemes.dark + anchors.right: parent.right + anchors.rightMargin: 55 + anchors.left: parent.left + anchors.leftMargin: 55 + anchors.top: assetServerButton.bottom + anchors.topMargin: 35 + } } } From 10ebb6efd7ffabf97b3f26d262dbe6a54a2cfb6f Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Wed, 15 Mar 2017 16:55:21 -0700 Subject: [PATCH 144/247] simplify asset server button --- interface/resources/qml/hifi/tablet/Edit.qml | 101 +++---------------- 1 file changed, 13 insertions(+), 88 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index b9d7326c8e..bb3385c874 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -158,97 +158,22 @@ StackView { } } - Item { + HifiControls.Button { id: assetServerButton - width: 370 - height: 38 - anchors.horizontalCenter: parent.horizontalCenter + text: "Open This Domain's Asset Server" + color: hifi.buttons.black + colorScheme: hifi.colorSchemes.dark + anchors.right: parent.right + anchors.rightMargin: 55 + anchors.left: parent.left + anchors.leftMargin: 55 anchors.top: createEntitiesFlow.bottom anchors.topMargin: 35 - - Rectangle { - id: assetServerButtonBg - color: "black" - opacity: 1 - radius: 6 - anchors.right: parent.right - anchors.rightMargin: 0 - anchors.left: parent.left - anchors.leftMargin: 0 - anchors.bottom: parent.bottom - anchors.bottomMargin: 0 - anchors.top: parent.top - anchors.topMargin: 0 + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "openAssetBrowserButton" } + }); } - - Rectangle { - id: assetServerButtonGradient - gradient: Gradient { - GradientStop { - position: 0 - color: "#383838" - } - - GradientStop { - position: 1 - color: "black" - } - } - opacity: 1 - radius: 6 - anchors.right: parent.right - anchors.rightMargin: 0 - anchors.left: parent.left - anchors.leftMargin: 0 - anchors.bottom: parent.bottom - anchors.bottomMargin: 0 - anchors.top: parent.top - anchors.topMargin: 0 - } - - Text { - color: "#ffffff" - text: "OPEN THIS DOMAIN'S ASSET SERVER" - font.bold: true - font.pixelSize: 14 - anchors.centerIn: parent - } - - MouseArea { - anchors.fill: parent - hoverEnabled: true - enabled: true - onClicked: { - editRoot.sendToScript({ - method: "newEntityButtonClicked", params: { buttonName: "openAssetBrowserButton" } - }); - } - onEntered: { - assetServerButton.state = "hover state"; - } - onExited: { - assetServerButton.state = "base state"; - } - } - - states: [ - State { - name: "hover state" - - PropertyChanges { - target: assetServerButtonGradient - opacity: 0 - } - }, - State { - name: "base state" - - PropertyChanges { - target: assetServerButtonGradient - opacity: 1 - } - } - ] } HifiControls.Button { @@ -260,7 +185,7 @@ StackView { anchors.left: parent.left anchors.leftMargin: 55 anchors.top: assetServerButton.bottom - anchors.topMargin: 35 + anchors.topMargin: 20 } } } From 9e458fd180b471802adddbd15d71baa46fedfc4f Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 16 Mar 2017 17:25:28 +1300 Subject: [PATCH 145/247] Fix keyboard in tablet custom query dialog --- .../qml/dialogs/TabletCustomQueryDialog.qml | 231 +++++++++--------- 1 file changed, 119 insertions(+), 112 deletions(-) diff --git a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml index 3f6e07da4f..3f2750abe9 100644 --- a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml @@ -20,7 +20,9 @@ TabletModalWindow { id: root; HifiConstants { id: hifi; } - y: hifi.dimensions.tabletMenuHeader + anchors.fill: parent + width: parent.width + height: parent.height title: "" visible: true; @@ -108,7 +110,7 @@ TabletModalWindow { TabletModalFrame { id: modalWindowItem - width: parent.width - 12 + width: parent.width - 6 height: 240 anchors { verticalCenter: parent.verticalCenter @@ -119,7 +121,7 @@ TabletModalWindow { id: d; readonly property int minWidth: 470 readonly property int maxWidth: 470 - readonly property int minHeight: 240 + readonly property int minHeight: 120 readonly property int maxHeight: 720 function resize() { @@ -130,8 +132,8 @@ TabletModalWindow { ((keyboardEnabled && keyboardRaised) ? (keyboard.raisedHeight + hifi.dimensions.contentSpacing.y) : 0); root.width = (targetWidth < d.minWidth) ? d.minWidth : ((targetWidth > d.maxWdith) ? d.maxWidth : targetWidth); - root.height = (targetHeight < d.minHeight) ? d.minHeight : ((targetHeight > d.maxHeight) ? - d.maxHeight : targetHeight); + modalWindowItem.height = (targetHeight < d.minHeight) ? d.minHeight : ((targetHeight > d.maxHeight) ? + d.maxHeight : targetHeight); if (checkBoxField.visible && comboBoxField.visible) { checkBoxField.width = extraInputs.width / 2; comboBoxField.width = extraInputs.width / 2; @@ -140,14 +142,16 @@ TabletModalWindow { } } } -// Item { -// anchors { -// // top: parent.top; -// // bottom: extraInputs.visible ? extraInputs.top : buttons.top; -// left: parent.left; -// right: parent.right; -// topMargin: 20 -// } + + Item { + anchors { + top: parent.top; + bottom: extraInputs.visible ? extraInputs.top : buttons.top; + left: parent.left; + right: parent.right; + leftMargin: 12 + rightMargin: 12 + } // FIXME make a text field type that can be bound to a history for autocompletion ControlsUIT.TextField { @@ -156,14 +160,16 @@ TabletModalWindow { focus: root.textInput ? true : false; visible: root.textInput ? true : false; anchors { - top: parent.top left: parent.left; right: parent.right; - leftMargin: 5; rightMargin: 5; - topMargin: textField.controlHeight - textField.height + 5 + bottom: keyboard.top; + bottomMargin: hifi.dimensions.contentSpacing.y; } } + property alias keyboardOverride: root.keyboardOverride + property alias keyboardRaised: root.keyboardRaised + property alias punctuationMode: root.punctuationMode ControlsUIT.Keyboard { id: keyboard raised: keyboardEnabled && keyboardRaised @@ -171,110 +177,111 @@ TabletModalWindow { anchors { left: parent.left right: parent.right - leftMargin: 5; rightMargin: 5; - top: textField.bottom - topMargin: raised ? hifi.dimensions.contentSpacing.y : 0 + bottom: parent.bottom + bottomMargin: raised ? hifi.dimensions.contentSpacing.y : 0 } } - // } + } - Row { - id: extraInputs; - visible: Boolean(root.checkBox || root.comboBox); + Item { + id: extraInputs; + visible: Boolean(root.checkBox || root.comboBox); + anchors { + left: parent.left; + right: parent.right; + bottom: buttons.top; + bottomMargin: hifi.dimensions.contentSpacing.y; + leftMargin: 12 + rightMargin: 12 + } + height: comboBoxField.controlHeight; + onHeightChanged: d.resize(); + onWidthChanged: d.resize(); + + ControlsUIT.CheckBox { + id: checkBoxField; + text: root.checkBox.label; + focus: Boolean(root.checkBox); + visible: Boolean(root.checkBox); anchors { left: parent.left; - right: parent.right; - leftMargin: 5; rightMargin: 5; - top: keyboard.bottom; - topMargin: hifi.dimensions.contentSpacing.y + 20; - } - height: comboBoxField.controlHeight; - onHeightChanged: d.resize(); - onWidthChanged: d.resize(); - - ControlsUIT.CheckBox { - id: checkBoxField; - text: root.checkBox.label; - focus: Boolean(root.checkBox); - visible: Boolean(root.checkBox); - // anchors { - // left: parent.left; - // bottom: parent.bottom; - // leftMargin: 6; // Magic number to align with warning icon - // bottomMargin: 6; - // } - } - - ControlsUIT.ComboBox { - id: comboBoxField; - label: root.comboBox.label; - focus: Boolean(root.comboBox); - visible: Boolean(root.comboBox); - // anchors { - // right: parent.right; - // bottom: parent.bottom; - // } - model: root.comboBox ? root.comboBox.items : []; - onAccepted: { - updateCheckbox(); - focus = true; - } - } - } - - Row { - id: buttons; - focus: true; - spacing: hifi.dimensions.contentSpacing.x; - layoutDirection: Qt.RightToLeft; - onHeightChanged: d.resize(); - onWidthChanged: { - d.resize(); - resizeWarningText(); - } - - anchors { bottom: parent.bottom; - left: parent.left; - right: parent.right; - bottomMargin: hifi.dimensions.contentSpacing.y; - leftMargin: 5; rightMargin: 5; - } - - function resizeWarningText() { - var rowWidth = buttons.width; - var buttonsWidth = acceptButton.width + cancelButton.width + hifi.dimensions.contentSpacing.x * 2; - var warningIconWidth = warningIcon.width + hifi.dimensions.contentSpacing.x; - warningText.width = rowWidth - buttonsWidth - warningIconWidth; - } - - ControlsUIT.Button { - id: cancelButton; - action: cancelAction; - } - - ControlsUIT.Button { - id: acceptButton; - action: acceptAction; - } - - Text { - id: warningText; - visible: Boolean(root.warning); - text: root.warning; - wrapMode: Text.WordWrap; - font.italic: true; - maximumLineCount: 2; - } - - HiFiGlyphs { - id: warningIcon; - visible: Boolean(root.warning); - text: hifi.glyphs.alert; - size: hifi.dimensions.controlLineHeight; + leftMargin: 6; // Magic number to align with warning icon + bottomMargin: 6; } } -// }//column + + ControlsUIT.ComboBox { + id: comboBoxField; + label: root.comboBox.label; + focus: Boolean(root.comboBox); + visible: Boolean(root.comboBox); + anchors { + right: parent.right; + bottom: parent.bottom; + } + model: root.comboBox ? root.comboBox.items : []; + onAccepted: { + updateCheckbox(); + focus = true; + } + } + } + + Row { + id: buttons; + focus: true; + spacing: hifi.dimensions.contentSpacing.x; + layoutDirection: Qt.RightToLeft; + onHeightChanged: d.resize(); + onWidthChanged: { + d.resize(); + resizeWarningText(); + } + + anchors { + bottom: parent.bottom; + left: parent.left; + right: parent.right; + bottomMargin: hifi.dimensions.contentSpacing.y; + leftMargin: 12 + rightMargin: 12 + } + + function resizeWarningText() { + var rowWidth = buttons.width; + var buttonsWidth = acceptButton.width + cancelButton.width + hifi.dimensions.contentSpacing.x * 2; + var warningIconWidth = warningIcon.width + hifi.dimensions.contentSpacing.x; + warningText.width = rowWidth - buttonsWidth - warningIconWidth; + } + + ControlsUIT.Button { + id: cancelButton; + action: cancelAction; + } + + ControlsUIT.Button { + id: acceptButton; + action: acceptAction; + } + + Text { + id: warningText; + visible: Boolean(root.warning); + text: root.warning; + wrapMode: Text.WordWrap; + font.italic: true; + maximumLineCount: 2; + } + + HiFiGlyphs { + id: warningIcon; + visible: Boolean(root.warning); + text: hifi.glyphs.alert; + size: hifi.dimensions.controlLineHeight; + } + } + Action { id: cancelAction; text: qsTr("Cancel"); From 7efda8bead43c2481c4dd5c686ca9af53140701f Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 16 Mar 2017 17:33:38 +1300 Subject: [PATCH 146/247] Make clicking on dialog background defocus current control --- interface/resources/qml/dialogs/TabletCustomQueryDialog.qml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml index 3f2750abe9..3243a50676 100644 --- a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml @@ -117,6 +117,12 @@ TabletModalWindow { horizontalCenter: parent.horizontalCenter } + MouseArea { + // Clicking dialog background defocuses active control. + anchors.fill: parent + onClicked: parent.forceActiveFocus(); + } + QtObject { id: d; readonly property int minWidth: 470 From 3c1506237ac0f6b3a428ed9dbdda67fea4092730 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 16 Mar 2017 17:56:13 +1300 Subject: [PATCH 147/247] Fix not all warning text displaying --- interface/resources/qml/dialogs/CustomQueryDialog.qml | 1 + interface/resources/qml/dialogs/TabletCustomQueryDialog.qml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/dialogs/CustomQueryDialog.qml b/interface/resources/qml/dialogs/CustomQueryDialog.qml index 97f55d087b..98aa158b1c 100644 --- a/interface/resources/qml/dialogs/CustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/CustomQueryDialog.qml @@ -259,6 +259,7 @@ ModalWindow { visible: Boolean(root.warning); text: hifi.glyphs.alert; size: hifi.dimensions.controlLineHeight; + width: 20 // Line up with checkbox. } } diff --git a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml index 3243a50676..00081ab16d 100644 --- a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml @@ -277,7 +277,7 @@ TabletModalWindow { text: root.warning; wrapMode: Text.WordWrap; font.italic: true; - maximumLineCount: 2; + maximumLineCount: 3; } HiFiGlyphs { @@ -285,6 +285,7 @@ TabletModalWindow { visible: Boolean(root.warning); text: hifi.glyphs.alert; size: hifi.dimensions.controlLineHeight; + width: 20 // Line up with checkbox. } } From 74db9dc573f4707accb287d01318c5dba60dfeac Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 16 Mar 2017 18:18:00 +1300 Subject: [PATCH 148/247] Fix drop-down hiding behind buttons --- interface/resources/qml/dialogs/TabletCustomQueryDialog.qml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml index 00081ab16d..d462cf00d9 100644 --- a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml @@ -203,6 +203,7 @@ TabletModalWindow { height: comboBoxField.controlHeight; onHeightChanged: d.resize(); onWidthChanged: d.resize(); + z: 20 ControlsUIT.CheckBox { id: checkBoxField; @@ -244,6 +245,7 @@ TabletModalWindow { d.resize(); resizeWarningText(); } + z: 10 anchors { bottom: parent.bottom; From 89eb0738557a2485d1ec5675941ed63cb499c87c Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 16 Mar 2017 18:24:04 +1300 Subject: [PATCH 149/247] Fix dialog height changing as drop-down value is changed --- interface/resources/qml/AssetServer.qml | 2 +- interface/resources/qml/dialogs/TabletCustomQueryDialog.qml | 2 +- interface/resources/qml/hifi/dialogs/TabletAssetServer.qml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/AssetServer.qml b/interface/resources/qml/AssetServer.qml index cf61a2ae4a..69411edce5 100644 --- a/interface/resources/qml/AssetServer.qml +++ b/interface/resources/qml/AssetServer.qml @@ -177,7 +177,7 @@ ScrollingWindow { SHAPE_TYPE_STATIC_MESH ], checkStateOnDisable: false, - warningOnDisable: "Models with automatic collisions set to 'Exact' cannot be dynamic" + warningOnDisable: "Models with 'Exact' automatic collisions cannot be dynamic" } }); diff --git a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml index d462cf00d9..8da2150c9a 100644 --- a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml @@ -279,7 +279,7 @@ TabletModalWindow { text: root.warning; wrapMode: Text.WordWrap; font.italic: true; - maximumLineCount: 3; + maximumLineCount: 2; } HiFiGlyphs { diff --git a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml index 93e18c7aba..2460fc39d5 100644 --- a/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml +++ b/interface/resources/qml/hifi/dialogs/TabletAssetServer.qml @@ -176,7 +176,7 @@ Rectangle { SHAPE_TYPE_STATIC_MESH ], checkStateOnDisable: false, - warningOnDisable: "Models with automatic collisions set to 'Exact' cannot be dynamic" + warningOnDisable: "Models with 'Exact' automatic collisions cannot be dynamic" } }); From 1080e21afd707eea654d976e3a21e659e4680f90 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Thu, 16 Mar 2017 18:27:13 +1300 Subject: [PATCH 150/247] Tidying --- .../resources/qml/dialogs/CustomQueryDialog.qml | 8 ++++---- .../qml/dialogs/TabletCustomQueryDialog.qml | 14 +++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/interface/resources/qml/dialogs/CustomQueryDialog.qml b/interface/resources/qml/dialogs/CustomQueryDialog.qml index 98aa158b1c..4d6fe74bca 100644 --- a/interface/resources/qml/dialogs/CustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/CustomQueryDialog.qml @@ -107,10 +107,10 @@ ModalWindow { QtObject { id: d; - readonly property int minWidth: 480; - readonly property int maxWdith: 1280; - readonly property int minHeight: 120; - readonly property int maxHeight: 720; + readonly property int minWidth: 480 + readonly property int maxWdith: 1280 + readonly property int minHeight: 120 + readonly property int maxHeight: 720 function resize() { var targetWidth = Math.max(titleWidth, pane.width); diff --git a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml index 8da2150c9a..7965006b8b 100644 --- a/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml +++ b/interface/resources/qml/dialogs/TabletCustomQueryDialog.qml @@ -12,7 +12,7 @@ import QtQuick 2.5 import QtQuick.Controls 1.4 import QtQuick.Dialogs 1.2 as OriginalDialogs -import "../controls-uit" as ControlsUIT +import "../controls-uit" import "../styles-uit" import "../windows" @@ -160,7 +160,7 @@ TabletModalWindow { } // FIXME make a text field type that can be bound to a history for autocompletion - ControlsUIT.TextField { + TextField { id: textField; label: root.textInput.label; focus: root.textInput ? true : false; @@ -176,7 +176,7 @@ TabletModalWindow { property alias keyboardOverride: root.keyboardOverride property alias keyboardRaised: root.keyboardRaised property alias punctuationMode: root.punctuationMode - ControlsUIT.Keyboard { + Keyboard { id: keyboard raised: keyboardEnabled && keyboardRaised numeric: punctuationMode @@ -205,7 +205,7 @@ TabletModalWindow { onWidthChanged: d.resize(); z: 20 - ControlsUIT.CheckBox { + CheckBox { id: checkBoxField; text: root.checkBox.label; focus: Boolean(root.checkBox); @@ -218,7 +218,7 @@ TabletModalWindow { } } - ControlsUIT.ComboBox { + ComboBox { id: comboBoxField; label: root.comboBox.label; focus: Boolean(root.comboBox); @@ -263,12 +263,12 @@ TabletModalWindow { warningText.width = rowWidth - buttonsWidth - warningIconWidth; } - ControlsUIT.Button { + Button { id: cancelButton; action: cancelAction; } - ControlsUIT.Button { + Button { id: acceptButton; action: acceptAction; } From f1947769d66f9654468aae74f6fb7bd286863b64 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 17 Mar 2017 11:15:56 +1300 Subject: [PATCH 151/247] Fix tablet settings dialogs' titles and make QML consistent --- .../hifi/tablet/TabletAudioPreferences.qml | 10 +++------- .../hifi/tablet/TabletAvatarPreferences.qml | 10 +++------- .../hifi/tablet/TabletGeneralPreferences.qml | 9 ++------- .../hifi/tablet/TabletGraphicsPreferences.qml | 20 +++++++++++-------- .../qml/hifi/tablet/TabletLodPreferences.qml | 20 +++++++++++-------- .../tablet/TabletNetworkingPreferences.qml | 12 ++++------- .../tabletWindows/TabletPreferencesDialog.qml | 13 +----------- 7 files changed, 37 insertions(+), 57 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml index 1c18c44a97..75a243b188 100644 --- a/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml @@ -9,17 +9,16 @@ // import QtQuick 2.5 +import QtQuick.Controls 1.4 import "tabletWindows" import "../../dialogs" -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.0 StackView { id: profileRoot initialItem: root objectName: "stack" - property var title: "Audio Preferences" + property string title: "Audio Settings" + property var eventBridge; signal sendToScript(var message); @@ -33,10 +32,7 @@ StackView { TabletPreferencesDialog { id: root - property string title: "Audio Settings" objectName: "TabletAudioPreferences" - width: parent.width - height: parent.height showCategories: ["Audio"] } } diff --git a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml index b29164a30f..f189b5c1cd 100644 --- a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml @@ -9,17 +9,16 @@ // import QtQuick 2.5 +import QtQuick.Controls 1.4 import "tabletWindows" import "../../dialogs" -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.0 StackView { id: profileRoot initialItem: root objectName: "stack" - property var title: "Avatar Preferences" + property string title: "Avatar Settings" + property var eventBridge; signal sendToScript(var message); @@ -33,10 +32,7 @@ StackView { TabletPreferencesDialog { id: root - property string title: "Avatar Preferences" objectName: "TabletAvatarPreferences" - width: parent.width - height: parent.height showCategories: ["Avatar Basics", "Avatar Tuning", "Avatar Camera"] } } diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index 47e6a05f78..c790b18747 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -9,17 +9,15 @@ // import QtQuick 2.5 +import QtQuick.Controls 1.4 import "tabletWindows" import "../../dialogs" -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.0 StackView { id: profileRoot initialItem: root objectName: "stack" - property var title: "General Prefernces" + property string title: "General Settings" property var eventBridge; signal sendToScript(var message); @@ -34,10 +32,7 @@ StackView { TabletPreferencesDialog { id: root - property string title: "General Preferences" objectName: "TabletGeneralPreferences" - width: parent.width - height: parent.height showCategories: ["UI", "Snapshots", "Scripts", "Privacy", "Octree", "HMD", "Sixense Controllers", "Perception Neuron", "Kinect"] } } diff --git a/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml index 2ca9634ee6..6420119480 100644 --- a/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml @@ -1,16 +1,23 @@ -import QtQuick 2.5 -import Qt.labs.settings 1.0 +// +// TabletGraphicsPreferences.qml +// +// Created by Vlad Stelmahovsky on 12 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +import QtQuick 2.5 +import QtQuick.Controls 1.4 import "tabletWindows" import "../../dialogs" -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.0 StackView { id: profileRoot initialItem: root objectName: "stack" + property string title: "Graphics Settings" property var eventBridge; signal sendToScript(var message); @@ -25,10 +32,7 @@ StackView { TabletPreferencesDialog { id: root - property string title: "Graphics Settings" objectName: "TabletGraphicsPreferences" - width: parent.width - height: parent.height showCategories: ["Graphics"] } } diff --git a/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml b/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml index 8f03bdb0c5..d6affb25b0 100644 --- a/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml @@ -1,16 +1,23 @@ -import QtQuick 2.5 -import Qt.labs.settings 1.0 +// +// TabletLodPreferences.qml +// +// Created by Vlad Stelmahovsky on 11 Mar 2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// +import QtQuick 2.5 +import QtQuick.Controls 1.4 import "tabletWindows" import "../../dialogs" -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.0 StackView { id: profileRoot initialItem: root objectName: "stack" + property string title: "LOD Settings" property var eventBridge; signal sendToScript(var message); @@ -25,10 +32,7 @@ StackView { TabletPreferencesDialog { id: root - property string title: "LOD Settings" objectName: "TabletLodPreferences" - width: parent.width - height: parent.height showCategories: ["Level of Detail Tuning"] } } diff --git a/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml b/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml index f48d270646..766446977d 100644 --- a/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml @@ -9,17 +9,16 @@ // import QtQuick 2.5 +import QtQuick.Controls 1.4 import "tabletWindows" import "../../dialogs" -import QtQuick.Controls 1.4 -import QtQuick.Controls.Styles 1.4 -import QtGraphicalEffects 1.0 StackView { id: profileRoot initialItem: root objectName: "stack" - property var title: "Network Preferences" + property var title: "Networking Settings" + property var eventBridge; signal sendToScript(var message); @@ -33,10 +32,7 @@ StackView { TabletPreferencesDialog { id: root - property string title: "Networking Settings" - objectName: "NetworkingPreferences" - width: parent.width - height: parent.height + objectName: "TabletNetworkingPreferences" showCategories: ["Networking"] } } diff --git a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml index daa071d0ca..c96099a78a 100644 --- a/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml +++ b/interface/resources/qml/hifi/tablet/tabletWindows/TabletPreferencesDialog.qml @@ -58,21 +58,10 @@ Item { Tablet.getTablet("com.highfidelity.interface.tablet.system").gotoHomeScreen(); } - HifiControls.TabletHeader { - id: header - title: parent.title - - anchors { - top: parent.top - left: parent.left - right: parent.right - } - } - Rectangle { id: main anchors { - top: header.bottom + top: parent.top bottom: footer.top left: parent.left right: parent.right From 069e66b87570191f6791c8937e196a4a3d3791c2 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 17 Mar 2017 11:19:50 +1300 Subject: [PATCH 152/247] Fix stack functions --- .../resources/qml/hifi/tablet/TabletAudioPreferences.qml | 4 ++-- .../resources/qml/hifi/tablet/TabletAvatarPreferences.qml | 4 ++-- .../qml/hifi/tablet/TabletGeneralPreferences.qml | 8 ++++---- .../qml/hifi/tablet/TabletGraphicsPreferences.qml | 4 ++-- .../resources/qml/hifi/tablet/TabletLodPreferences.qml | 4 ++-- .../qml/hifi/tablet/TabletNetworkingPreferences.qml | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml index 75a243b188..b21bc238ac 100644 --- a/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletAudioPreferences.qml @@ -23,11 +23,11 @@ StackView { signal sendToScript(var message); function pushSource(path) { - editRoot.push(Qt.reslovedUrl(path)); + profileRoot.push(Qt.reslovedUrl(path)); } function popSource() { - + profileRoot.pop(); } TabletPreferencesDialog { diff --git a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml index f189b5c1cd..75973f32ae 100644 --- a/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletAvatarPreferences.qml @@ -23,11 +23,11 @@ StackView { signal sendToScript(var message); function pushSource(path) { - editRoot.push(Qt.reslovedUrl(path)); + profileRoot.push(Qt.reslovedUrl(path)); } function popSource() { - + profileRoot.pop(); } TabletPreferencesDialog { diff --git a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml index c790b18747..6fc29ac920 100644 --- a/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGeneralPreferences.qml @@ -21,15 +21,15 @@ StackView { property var eventBridge; signal sendToScript(var message); - + function pushSource(path) { - editRoot.push(Qt.reslovedUrl(path)); + profileRoot.push(Qt.reslovedUrl(path)); } function popSource() { - + profileRoot.pop(); } - + TabletPreferencesDialog { id: root objectName: "TabletGeneralPreferences" diff --git a/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml b/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml index 6420119480..67c466f991 100644 --- a/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletGraphicsPreferences.qml @@ -23,11 +23,11 @@ StackView { signal sendToScript(var message); function pushSource(path) { - editRoot.push(Qt.reslovedUrl(path)); + profileRoot.push(Qt.reslovedUrl(path)); } function popSource() { - + profileRoot.pop(); } TabletPreferencesDialog { diff --git a/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml b/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml index d6affb25b0..f61f6f8c4e 100644 --- a/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletLodPreferences.qml @@ -23,11 +23,11 @@ StackView { signal sendToScript(var message); function pushSource(path) { - editRoot.push(Qt.reslovedUrl(path)); + profileRoot.push(Qt.reslovedUrl(path)); } function popSource() { - + profileRoot.pop(); } TabletPreferencesDialog { diff --git a/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml b/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml index 766446977d..db47c78c48 100644 --- a/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml +++ b/interface/resources/qml/hifi/tablet/TabletNetworkingPreferences.qml @@ -23,11 +23,11 @@ StackView { signal sendToScript(var message); function pushSource(path) { - editRoot.push(Qt.reslovedUrl(path)); + profileRoot.push(Qt.reslovedUrl(path)); } function popSource() { - + profileRoot.pop(); } TabletPreferencesDialog { From 07e4b0ce4184d1fc7a8cc6b49da9689260fff52e Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Fri, 17 Mar 2017 11:28:14 +1300 Subject: [PATCH 153/247] Fix title menu icon getting stuck on white --- interface/resources/qml/hifi/tablet/TabletMenu.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/TabletMenu.qml b/interface/resources/qml/hifi/tablet/TabletMenu.qml index d7d5130bce..af36f72c82 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenu.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenu.qml @@ -60,7 +60,7 @@ FocusScope { anchors.fill: parent hoverEnabled: true onEntered: iconColorOverlay.color = "#1fc6a6"; - onExited: iconColorOverlay.color = "#ffffff"; + onExited: iconColorOverlay.color = "#34a2c7"; // navigate back to root level menu onClicked: { buildMenu(); From 6531efffbcd2e100e5cc5832b7ab049dd2c9dba4 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Fri, 17 Mar 2017 11:22:07 -0700 Subject: [PATCH 154/247] hook up qml button to edit.js --- interface/resources/qml/hifi/tablet/Edit.qml | 5 +++++ scripts/system/edit.js | 16 +++++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index bb3385c874..815f6b5f3c 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -186,6 +186,11 @@ StackView { anchors.leftMargin: 55 anchors.top: assetServerButton.bottom anchors.topMargin: 20 + onClicked: { + editRoot.sendToScript({ + method: "newEntityButtonClicked", params: { buttonName: "importEntitiesButton" } + }); + } } } } diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 55bd11b286..ecf8167e43 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -294,7 +294,21 @@ var toolBar = (function () { that.toggle(); }); - addButton("openAssetBrowserButton", "assets-01.svg", function(){ + addButton("importEntitiesButton", "assets-01.svg", function() { + var importURL = null; + var fullPath = Window.browse("Select Model to Import", "", "*.json"); + if (fullPath) { + importURL = "file:///" + fullPath; + } + if (importURL) { + if (!isActive && (Entities.canRez() && Entities.canRezTmp())) { + toolBar.toggle(); + } + importSVO(importURL); + } + }); + + addButton("openAssetBrowserButton", "assets-01.svg", function() { Window.showAssetServer(); }); From 33a7ff825ee9ccccfdb6795e132f32138a511a94 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Fri, 17 Mar 2017 11:37:38 -0700 Subject: [PATCH 155/247] indicate expecting json file on button text --- interface/resources/qml/hifi/tablet/Edit.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/Edit.qml b/interface/resources/qml/hifi/tablet/Edit.qml index 815f6b5f3c..4abe698fbc 100644 --- a/interface/resources/qml/hifi/tablet/Edit.qml +++ b/interface/resources/qml/hifi/tablet/Edit.qml @@ -177,7 +177,7 @@ StackView { } HifiControls.Button { - text: "Import Entities" + text: "Import Entities (.json)" color: hifi.buttons.black colorScheme: hifi.colorSchemes.dark anchors.right: parent.right From 1a46f18aa3960cb30ab10d7adc6dc896fcdccd34 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Fri, 17 Mar 2017 15:56:55 -0700 Subject: [PATCH 156/247] adding export button + hiding jump to selection --- scripts/system/html/entityList.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/system/html/entityList.html b/scripts/system/html/entityList.html index 3cb79353f9..bdd01bc7d2 100644 --- a/scripts/system/html/entityList.html +++ b/scripts/system/html/entityList.html @@ -24,7 +24,8 @@ <input type="button" id="locked" class="glyph" value="" /> <input type="button" id="visible" class="glyph" value="" /> </div> - <input type="button" id="teleport" value="Jump To Selection" /> + <input type="button" id="export" value="Export Selection" /> + <input type="button" id="teleport" value="Jump to Selection" style="display: none"/> <input type="button" id="pal" class="glyph" value="" /> <input type="button" class="red" id="delete" value="Delete" /> </div> From 197a06c423355497e3b7f74d84153cc093c53099 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Fri, 17 Mar 2017 16:17:21 -0700 Subject: [PATCH 157/247] changes in TWO entityList.js to register the export event --- scripts/system/html/js/entityList.js | 4 ++++ scripts/system/libraries/entityList.js | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/scripts/system/html/js/entityList.js b/scripts/system/html/js/entityList.js index dd8e8199b4..a371b3bdc9 100644 --- a/scripts/system/html/js/entityList.js +++ b/scripts/system/html/js/entityList.js @@ -40,6 +40,7 @@ function loaded() { elInView = document.getElementById("in-view") elRadius = document.getElementById("radius"); elTeleport = document.getElementById("teleport"); + elExport = document.getElementById("export"); elPal = document.getElementById("pal"); elEntityTable = document.getElementById("entity-table"); elInfoToggle = document.getElementById("info-toggle"); @@ -276,6 +277,9 @@ function loaded() { elTeleport.onclick = function () { EventBridge.emitWebEvent(JSON.stringify({ type: 'teleport' })); } + elExport.onclick = function() { + EventBridge.emitWebEvent(JSON.stringify({ type: 'export'})); + } elPal.onclick = function () { EventBridge.emitWebEvent(JSON.stringify({ type: 'pal' })); } diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index 63ac33a1dd..3488733289 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -128,6 +128,18 @@ EntityListTool = function(opts) { if (selectionManager.hasSelection()) { MyAvatar.position = selectionManager.worldPosition; } + } else if (data.type == "export") { + if (!selectionManager.hasSelection()) { + Window.notifyEditError("No entities have been selected."); + } else { + var filename = Window.save("Select Where to Save", "", "*.json"); + if (filename) { + var success = Clipboard.exportEntities(filename, selectionManager.selections); + if (!success) { + Window.notifyEditError("Export failed."); + } + } + } } else if (data.type == "pal") { var sessionIds = {}; // Collect the sessionsIds of all selected entitities, w/o duplicates. selectionManager.selections.forEach(function (id) { From 5e162a64470da527e89bd9371a8fad240b45afc9 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Sat, 18 Mar 2017 14:38:49 +0100 Subject: [PATCH 158/247] Implemented login facility for tablet UI --- .../TabletLoginDialog/CompleteProfileBody.qml | 124 ++++++++ .../qml/TabletLoginDialog/LinkAccountBody.qml | 296 ++++++++++++++++++ .../qml/TabletLoginDialog/SignInBody.qml | 109 +++++++ .../qml/TabletLoginDialog/SignUpBody.qml | 276 ++++++++++++++++ .../UsernameCollisionBody.qml | 157 ++++++++++ .../qml/TabletLoginDialog/WelcomeBody.qml | 79 +++++ .../qml/dialogs/TabletLoginDialog.qml | 113 +++++++ interface/src/ui/DialogsManager.cpp | 5 +- interface/src/ui/LoginDialog.cpp | 44 ++- interface/src/ui/LoginDialog.h | 1 + 10 files changed, 1199 insertions(+), 5 deletions(-) create mode 100644 interface/resources/qml/TabletLoginDialog/CompleteProfileBody.qml create mode 100644 interface/resources/qml/TabletLoginDialog/LinkAccountBody.qml create mode 100644 interface/resources/qml/TabletLoginDialog/SignInBody.qml create mode 100644 interface/resources/qml/TabletLoginDialog/SignUpBody.qml create mode 100644 interface/resources/qml/TabletLoginDialog/UsernameCollisionBody.qml create mode 100644 interface/resources/qml/TabletLoginDialog/WelcomeBody.qml create mode 100644 interface/resources/qml/dialogs/TabletLoginDialog.qml diff --git a/interface/resources/qml/TabletLoginDialog/CompleteProfileBody.qml b/interface/resources/qml/TabletLoginDialog/CompleteProfileBody.qml new file mode 100644 index 0000000000..6024563bcf --- /dev/null +++ b/interface/resources/qml/TabletLoginDialog/CompleteProfileBody.qml @@ -0,0 +1,124 @@ +// +// CompleteProfileBody.qml +// +// Created by Clement on 7/18/16 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.4 +import QtQuick.Controls.Styles 1.4 as OriginalStyles + +import "../controls-uit" +import "../styles-uit" + +Item { + id: completeProfileBody + clip: true + + QtObject { + id: d + function resize() {} + } + + Row { + id: buttons + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + margins: 0 + topMargin: 2 * hifi.dimensions.contentSpacing.y + } + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + Button { + anchors.verticalCenter: parent.verticalCenter + width: 200 + + text: qsTr("Create your profile") + color: hifi.buttons.blue + + onClicked: loginDialog.createAccountFromStream() + } + + Button { + anchors.verticalCenter: parent.verticalCenter + + text: qsTr("Cancel") + + onClicked: bodyLoader.popup() + } + } + + ShortcutText { + id: additionalTextContainer + anchors { + top: buttons.bottom + horizontalCenter: parent.horizontalCenter + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + text: "<a href='https://fake.link'>Already have a High Fidelity profile? Link to an existing profile here.</a>" + + wrapMode: Text.WordWrap + lineHeight: 2 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + + onLinkActivated: { + bodyLoader.setSource("LinkAccountBody.qml") + } + } + + InfoItem { + id: termsContainer + anchors { + top: additionalTextContainer.bottom + left: parent.left + margins: 0 + topMargin: 2 * hifi.dimensions.contentSpacing.y + } + + text: qsTr("By creating this user profile, you agree to <a href='https://highfidelity.com/terms'>High Fidelity's Terms of Service</a>") + wrapMode: Text.WordWrap + color: hifi.colors.baseGrayHighlight + lineHeight: 1 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + + onLinkActivated: loginDialog.openUrl(link) + } + + Component.onCompleted: { + loginDialogRoot.title = qsTr("Complete Your Profile") + loginDialogRoot.iconText = "<" + d.resize(); + } + + Connections { + target: loginDialog + onHandleCreateCompleted: { + console.log("Create Succeeded") + + loginDialog.loginThroughSteam() + } + onHandleCreateFailed: { + console.log("Create Failed: " + error) + + bodyLoadersetSource("UsernameCollisionBody.qml") + } + onHandleLoginCompleted: { + console.log("Login Succeeded") + + bodyLoader.setSource("WelcomeBody.qml", { "welcomeBack" : false }) + } + onHandleLoginFailed: { + console.log("Login Failed") + } + } +} diff --git a/interface/resources/qml/TabletLoginDialog/LinkAccountBody.qml b/interface/resources/qml/TabletLoginDialog/LinkAccountBody.qml new file mode 100644 index 0000000000..8010a34250 --- /dev/null +++ b/interface/resources/qml/TabletLoginDialog/LinkAccountBody.qml @@ -0,0 +1,296 @@ +// +// LinkAccountBody.qml +// +// Created by Clement on 7/18/16 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.4 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 as OriginalStyles + +import "../controls-uit" +import "../styles-uit" + +Item { + id: linkAccountBody + clip: true + height: parent.height + width: parent.width + property bool failAfterSignUp: false + + function login() { + mainTextContainer.visible = false + toggleLoading(true) + loginDialog.login(usernameField.text, passwordField.text) + } + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + + onKeyboardRaisedChanged: d.resize(); + + QtObject { + id: d + function resize() {} + } + + function toggleLoading(isLoading) { + linkAccountSpinner.visible = isLoading + form.visible = !isLoading + + if (loginDialog.isSteamRunning()) { + additionalInformation.visible = !isLoading + } + + leftButton.visible = !isLoading + buttons.visible = !isLoading + } + + BusyIndicator { + id: linkAccountSpinner + + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + topMargin: hifi.dimensions.contentSpacing.y + } + + visible: false + running: true + + width: 48 + height: 48 + } + + ShortcutText { + id: mainTextContainer + anchors { + top: parent.top + left: parent.left + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + visible: false + + text: qsTr("Username or password incorrect.") + wrapMode: Text.WordWrap + color: hifi.colors.redAccent + lineHeight: 1 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + } + + Column { + id: form + anchors { + top: mainTextContainer.bottom + left: parent.left + margins: 0 + topMargin: 2 * hifi.dimensions.contentSpacing.y + } + spacing: 2 * hifi.dimensions.contentSpacing.y + + Row { + spacing: hifi.dimensions.contentSpacing.x + + TextField { + id: usernameField + anchors { + verticalCenter: parent.verticalCenter + } + width: 350 + + label: "Username or Email" + } + + ShortcutText { + anchors { + verticalCenter: parent.verticalCenter + } + + text: "<a href='https://highfidelity.com/users/password/new'>Forgot Username?</a>" + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + linkColor: hifi.colors.blueAccent + + onLinkActivated: loginDialog.openUrl(link) + } + } + Row { + spacing: hifi.dimensions.contentSpacing.x + + TextField { + id: passwordField + anchors { + verticalCenter: parent.verticalCenter + } + width: 350 + + label: "Password" + echoMode: TextInput.Password + } + + ShortcutText { + anchors { + verticalCenter: parent.verticalCenter + } + + text: "<a href='https://highfidelity.com/users/password/new'>Forgot Password?</a>" + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + linkColor: hifi.colors.blueAccent + + onLinkActivated: loginDialog.openUrl(link) + } + } + + } + + InfoItem { + id: additionalInformation + anchors { + top: form.bottom + left: parent.left + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + visible: loginDialog.isSteamRunning() + + text: qsTr("Your steam account informations will not be exposed to other users.") + wrapMode: Text.WordWrap + color: hifi.colors.baseGrayHighlight + lineHeight: 1 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + } + + // Override ScrollingWindow's keyboard that would be at very bottom of dialog. + Keyboard { + raised: keyboardEnabled && keyboardRaised + numeric: punctuationMode + anchors { + left: parent.left + right: parent.right + bottom: buttons.top + bottomMargin: keyboardRaised ? 2 * hifi.dimensions.contentSpacing.y : 0 + } + } + + Row { + id: leftButton + anchors { + left: parent.left + bottom: parent.bottom + bottomMargin: hifi.dimensions.contentSpacing.y + } + + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + Button { + anchors.verticalCenter: parent.verticalCenter + + text: qsTr("Sign Up") + visible: !loginDialog.isSteamRunning() + + onClicked: { + bodyLoader.setSource("SignUpBody.qml") + } + } + } + + Row { + id: buttons + anchors { + right: parent.right + bottom: parent.bottom + bottomMargin: hifi.dimensions.contentSpacing.y + } + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + Button { + id: linkAccountButton + anchors.verticalCenter: parent.verticalCenter + width: 200 + + text: qsTr(loginDialog.isSteamRunning() ? "Link Account" : "Login") + color: hifi.buttons.blue + + onClicked: linkAccountBody.login() + } + + Button { + anchors.verticalCenter: parent.verticalCenter + text: qsTr("Cancel") + onClicked: { + bodyLoader.popup() + } + } + } + + Component.onCompleted: { + loginDialogRoot.title = qsTr("Sign Into High Fidelity") + loginDialogRoot.iconText = "<" + keyboardEnabled = HMD.active; + d.resize(); + + if (failAfterSignUp) { + mainTextContainer.text = "Account created successfully." + mainTextContainer.visible = true + } + + usernameField.forceActiveFocus(); + } + + Connections { + target: loginDialog + onHandleLoginCompleted: { + console.log("Login Succeeded, linking steam account") + + if (loginDialog.isSteamRunning()) { + loginDialog.linkSteam() + } else { + bodyLoader.setSource("WelcomeBody.qml", { "welcomeBack" : true }) + } + } + onHandleLoginFailed: { + console.log("Login Failed") + mainTextContainer.visible = true + toggleLoading(false) + } + onHandleLinkCompleted: { + console.log("Link Succeeded") + + bodyLoader.setSource("WelcomeBody.qml", { "welcomeBack" : true }) + } + onHandleLinkFailed: { + console.log("Link Failed") + toggleLoading(false) + } + } + + Keys.onPressed: { + if (!visible) { + return + } + + switch (event.key) { + case Qt.Key_Enter: + case Qt.Key_Return: + event.accepted = true + linkAccountBody.login() + break + } + } +} diff --git a/interface/resources/qml/TabletLoginDialog/SignInBody.qml b/interface/resources/qml/TabletLoginDialog/SignInBody.qml new file mode 100644 index 0000000000..9cdf69c7bc --- /dev/null +++ b/interface/resources/qml/TabletLoginDialog/SignInBody.qml @@ -0,0 +1,109 @@ +// +// SignInBody.qml +// +// Created by Clement on 7/18/16 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.4 +import QtQuick.Controls.Styles 1.4 as OriginalStyles + +import "../controls-uit" +import "../styles-uit" + +Item { + id: signInBody + clip: true + + property bool required: false + + function login() { + console.log("Trying to log in") + loginDialog.loginThroughSteam() + } + + function cancel() { + bodyLoader.popup() + } + + QtObject { + id: d + function resize() {} + } + + InfoItem { + id: mainTextContainer + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + text: required ? qsTr("This domain's owner requires that you sign in:") + : qsTr("Sign in to access your user account:") + wrapMode: Text.WordWrap + color: hifi.colors.baseGrayHighlight + lineHeight: 2 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + } + + Row { + id: buttons + anchors { + top: mainTextContainer.bottom + horizontalCenter: parent.horizontalCenter + margins: 0 + topMargin: 2 * hifi.dimensions.contentSpacing.y + } + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + Button { + anchors.verticalCenter: parent.verticalCenter + + width: undefined // invalidate so that the image's size sets the width + height: undefined // invalidate so that the image's size sets the height + focus: true + + style: OriginalStyles.ButtonStyle { + background: Image { + id: buttonImage + source: "../../images/steam-sign-in.png" + } + } + onClicked: signInBody.login() + } + Button { + anchors.verticalCenter: parent.verticalCenter + + text: qsTr("Cancel"); + + onClicked: signInBody.cancel() + } + } + + Component.onCompleted: { + loginDialogRoot.title = required ? qsTr("Sign In Required") + : qsTr("Sign In") + loginDialogRoot.iconText = "" + d.resize(); + } + + Connections { + target: loginDialog + onHandleLoginCompleted: { + console.log("Login Succeeded") + bodyLoader.setSource("WelcomeBody.qml", { "welcomeBack" : true }) + } + onHandleLoginFailed: { + console.log("Login Failed") + bodyLoader.setSource("CompleteProfileBody.qml") + } + } +} diff --git a/interface/resources/qml/TabletLoginDialog/SignUpBody.qml b/interface/resources/qml/TabletLoginDialog/SignUpBody.qml new file mode 100644 index 0000000000..2cfc0e736a --- /dev/null +++ b/interface/resources/qml/TabletLoginDialog/SignUpBody.qml @@ -0,0 +1,276 @@ +// +// SignUpBody.qml +// +// Created by Stephen Birarda on 7 Dec 2016 +// Copyright 2016 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.4 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 as OriginalStyles + +import "../controls-uit" +import "../styles-uit" + +Item { + id: signupBody + clip: true +// height: parent.height +// width: parent.width + + function signup() { + mainTextContainer.visible = false + toggleLoading(true) + loginDialog.signup(emailField.text, usernameField.text, passwordField.text) + } + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + + onKeyboardRaisedChanged: d.resize(); + + QtObject { + id: d + function resize() {} + } + + function toggleLoading(isLoading) { + linkAccountSpinner.visible = isLoading + form.visible = !isLoading + + leftButton.visible = !isLoading + buttons.visible = !isLoading + } + + BusyIndicator { + id: linkAccountSpinner + + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + topMargin: hifi.dimensions.contentSpacing.y + } + + visible: false + running: true + + width: 48 + height: 48 + } + + ShortcutText { + id: mainTextContainer + anchors { + top: parent.top + left: parent.left + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + visible: false + + text: qsTr("There was an unknown error while creating your account.") + wrapMode: Text.WordWrap + color: hifi.colors.redAccent + horizontalAlignment: Text.AlignLeft + } + + Column { + id: form + anchors { + top: mainTextContainer.bottom + left: parent.left + margins: 0 + topMargin: 2 * hifi.dimensions.contentSpacing.y + } + spacing: 2 * hifi.dimensions.contentSpacing.y + + Row { + spacing: hifi.dimensions.contentSpacing.x + + TextField { + id: emailField + anchors { + verticalCenter: parent.verticalCenter + } + width: 300 + + label: "Email" + } + } + + Row { + spacing: hifi.dimensions.contentSpacing.x + + TextField { + id: usernameField + anchors { + verticalCenter: parent.verticalCenter + } + width: 300 + + label: "Username" + } + + ShortcutText { + anchors { + verticalCenter: parent.verticalCenter + } + + text: qsTr("No spaces / special chars.") + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + + color: hifi.colors.blueAccent + } + } + + Row { + spacing: hifi.dimensions.contentSpacing.x + + TextField { + id: passwordField + anchors { + verticalCenter: parent.verticalCenter + } + width: 300 + + label: "Password" + echoMode: TextInput.Password + } + + ShortcutText { + anchors { + verticalCenter: parent.verticalCenter + } + + text: qsTr("At least 6 characters") + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + + color: hifi.colors.blueAccent + } + } + + } + + // Override ScrollingWindow's keyboard that would be at very bottom of dialog. + Keyboard { + raised: keyboardEnabled && keyboardRaised + numeric: punctuationMode + anchors { + left: parent.left + right: parent.right + bottom: buttons.top + bottomMargin: keyboardRaised ? 2 * hifi.dimensions.contentSpacing.y : 0 + } + } + + Row { + id: leftButton + anchors { + left: parent.left + bottom: parent.bottom + bottomMargin: hifi.dimensions.contentSpacing.y + } + + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + Button { + anchors.verticalCenter: parent.verticalCenter + + text: qsTr("Existing User") + + onClicked: { + bodyLoader.setSource("LinkAccountBody.qml") + } + } + } + + Row { + id: buttons + anchors { + right: parent.right + bottom: parent.bottom + bottomMargin: hifi.dimensions.contentSpacing.y + } + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + Button { + id: linkAccountButton + anchors.verticalCenter: parent.verticalCenter + width: 200 + + text: qsTr("Sign Up") + color: hifi.buttons.blue + + onClicked: signupBody.signup() + } + + Button { + anchors.verticalCenter: parent.verticalCenter + + text: qsTr("Cancel") + + onClicked: bodyLoader.popup() + } + } + + Component.onCompleted: { + loginDialogRoot.title = qsTr("Create an Account") + loginDialogRoot.iconText = "<" + keyboardEnabled = HMD.active; + d.resize(); + + emailField.forceActiveFocus(); + } + + Connections { + target: loginDialog + onHandleSignupCompleted: { + console.log("Sign Up Succeeded"); + + // now that we have an account, login with that username and password + loginDialog.login(usernameField.text, passwordField.text) + } + onHandleSignupFailed: { + console.log("Sign Up Failed") + toggleLoading(false) + + mainTextContainer.text = errorString + mainTextContainer.visible = true + + d.resize(); + } + onHandleLoginCompleted: { + bodyLoader.setSource("WelcomeBody.qml", { "welcomeBack": false }) + } + onHandleLoginFailed: { + // we failed to login, show the LoginDialog so the user will try again + bodyLoader.setSource("LinkAccountBody.qml", { "failAfterSignUp": true }) + } + } + + Keys.onPressed: { + if (!visible) { + return + } + + switch (event.key) { + case Qt.Key_Enter: + case Qt.Key_Return: + event.accepted = true + signupBody.signup() + break + } + } +} diff --git a/interface/resources/qml/TabletLoginDialog/UsernameCollisionBody.qml b/interface/resources/qml/TabletLoginDialog/UsernameCollisionBody.qml new file mode 100644 index 0000000000..9e5b01d339 --- /dev/null +++ b/interface/resources/qml/TabletLoginDialog/UsernameCollisionBody.qml @@ -0,0 +1,157 @@ +// +// UsernameCollisionBody.qml +// +// Created by Clement on 7/18/16 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.4 +import QtQuick.Controls 1.4 +import QtQuick.Controls.Styles 1.4 as OriginalStyles + +import "../controls-uit" +import "../styles-uit" + +Item { + id: usernameCollisionBody + clip: true + width: parent.width + height: parent.height + + function create() { + mainTextContainer.visible = false + loginDialog.createAccountFromStream(textField.text) + } + + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + + onKeyboardRaisedChanged: d.resize(); + + QtObject { + id: d + function resize() {} + } + + ShortcutText { + id: mainTextContainer + anchors { + top: parent.top + left: parent.left + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + text: qsTr("Your Steam username is not available.") + wrapMode: Text.WordWrap + color: hifi.colors.redAccent + lineHeight: 1 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + } + + + TextField { + id: textField + anchors { + top: mainTextContainer.bottom + left: parent.left + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + width: 250 + + placeholderText: "Choose your own" + } + + // Override ScrollingWindow's keyboard that would be at very bottom of dialog. + Keyboard { + raised: keyboardEnabled && keyboardRaised + numeric: punctuationMode + anchors { + left: parent.left + right: parent.right + bottom: buttons.top + bottomMargin: keyboardRaised ? 2 * hifi.dimensions.contentSpacing.y : 0 + } + } + + Row { + id: buttons + anchors { + bottom: parent.bottom + right: parent.right + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + Button { + anchors.verticalCenter: parent.verticalCenter + width: 200 + + text: qsTr("Create your profile") + color: hifi.buttons.blue + + onClicked: usernameCollisionBody.create() + } + + Button { + anchors.verticalCenter: parent.verticalCenter + + text: qsTr("Cancel") + onClicked: bodyLoader.popup() + } + } + + Component.onCompleted: { + loginDialogRoot.title = qsTr("Complete Your Profile") + loginDialogRoot.iconText = "<" + keyboardEnabled = HMD.active; + d.resize(); + } + + Connections { + target: loginDialog + onHandleCreateCompleted: { + console.log("Create Succeeded") + + loginDialog.loginThroughSteam() + } + onHandleCreateFailed: { + console.log("Create Failed: " + error) + + mainTextContainer.visible = true + mainTextContainer.text = "\"" + textField.text + qsTr("\" is invalid or already taken.") + } + onHandleLoginCompleted: { + console.log("Login Succeeded") + + bodyLoader.setSource("WelcomeBody.qml", { "welcomeBack" : false }) + } + onHandleLoginFailed: { + console.log("Login Failed") + } + } + + Keys.onPressed: { + if (!visible) { + return + } + + switch (event.key) { + case Qt.Key_Enter: + case Qt.Key_Return: + event.accepted = true + usernameCollisionBody.create() + break + } + } +} diff --git a/interface/resources/qml/TabletLoginDialog/WelcomeBody.qml b/interface/resources/qml/TabletLoginDialog/WelcomeBody.qml new file mode 100644 index 0000000000..5ec259ca96 --- /dev/null +++ b/interface/resources/qml/TabletLoginDialog/WelcomeBody.qml @@ -0,0 +1,79 @@ +// +// WelcomeBody.qml +// +// Created by Clement on 7/18/16 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.4 + +import "../controls-uit" +import "../styles-uit" + +Item { + id: welcomeBody + clip: true + + property bool welcomeBack: false + + function setTitle() { + loginDialogRoot.title = (welcomeBack ? qsTr("Welcome back <b>") : qsTr("Welcome <b>")) + Account.username + qsTr("</b>!") + loginDialogRoot.iconText = "" + d.resize(); + } + + QtObject { + id: d + function resize() {} + } + + InfoItem { + id: mainTextContainer + anchors { + top: parent.top + horizontalCenter: parent.horizontalCenter + margins: 0 + topMargin: hifi.dimensions.contentSpacing.y + } + + text: qsTr("You are now signed into High Fidelity") + wrapMode: Text.WordWrap + color: hifi.colors.baseGrayHighlight + lineHeight: 2 + lineHeightMode: Text.ProportionalHeight + horizontalAlignment: Text.AlignHCenter + } + + Row { + id: buttons + anchors { + top: mainTextContainer.bottom + horizontalCenter: parent.horizontalCenter + margins: 0 + topMargin: 2 * hifi.dimensions.contentSpacing.y + } + spacing: hifi.dimensions.contentSpacing.x + onHeightChanged: d.resize(); onWidthChanged: d.resize(); + + Button { + anchors.verticalCenter: parent.verticalCenter + + text: qsTr("Close"); + + onClicked: bodyLoader.popup() + } + } + + Component.onCompleted: { + welcomeBody.setTitle() + } + + Connections { + target: Account + onUsernameChanged: welcomeBody.setTitle() + } +} diff --git a/interface/resources/qml/dialogs/TabletLoginDialog.qml b/interface/resources/qml/dialogs/TabletLoginDialog.qml new file mode 100644 index 0000000000..78e5edebb5 --- /dev/null +++ b/interface/resources/qml/dialogs/TabletLoginDialog.qml @@ -0,0 +1,113 @@ +// +// TabletLoginDialog.qml +// +// Created by Vlad Stelmahovsky on 15 Mar 2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +import "../controls-uit" +import "../styles-uit" +import "../windows" + +TabletModalWindow { + id: loginDialogRoot + objectName: "LoginDialog" + + property var eventBridge; + signal sendToScript(var message); + property bool isHMD: false + + color: hifi.colors.baseGray + + property int colorScheme: hifi.colorSchemes.dark + property int titleWidth: 0 + property string iconText: "" + property int icon: hifi.icons.none + property int iconSize: 35 + MouseArea { + width: parent.width + height: parent.height + } + + property bool keyboardOverride: true + onIconChanged: updateIcon(); + + property var items; + property string label: "" + + onTitleWidthChanged: d.resize(); + + property bool keyboardEnabled: false + property bool keyboardRaised: false + property bool punctuationMode: false + + onKeyboardRaisedChanged: d.resize(); + + signal canceled(); + + function updateIcon() { + if (!root) { + return; + } + iconText = hifi.glyphForIcon(root.icon); + } + + property alias bodyLoader: bodyLoader + property alias loginDialog: loginDialog + property alias hifi: hifi + + HifiConstants { id: hifi } + + onCanceled: { + loginDialogRoot.Stack.view.pop() + } + + LoginDialog { + id: loginDialog + width: parent.width + height: parent.height + StackView { + id: bodyLoader + property var item: currentItem + property var props + property string source: "" + + onCurrentItemChanged: { + //cleanup source for future usage + source = "" + } + + function setSource(src, props) { + source = "../TabletLoginDialog/" + src + bodyLoader.props = props + } + function popup() { + bodyLoader.pop() + + //check if last screen, if yes, dialog is popped out + if (depth === 1) + loginDialogRoot.canceled() + } + + anchors.fill: parent + anchors.margins: 10 + onSourceChanged: { + if (source !== "") { + bodyLoader.push(Qt.resolvedUrl(source), props) + } + } + Component.onCompleted: { + setSource(loginDialog.isSteamRunning() ? + "SignInBody.qml" : + "LinkAccountBody.qml") + } + } + } +} diff --git a/interface/src/ui/DialogsManager.cpp b/interface/src/ui/DialogsManager.cpp index 3252fef4f0..e52b1b6d9e 100644 --- a/interface/src/ui/DialogsManager.cpp +++ b/interface/src/ui/DialogsManager.cpp @@ -31,6 +31,9 @@ #include "ScriptEditorWindow.h" #include "UpdateDialog.h" +#include "TabletScriptingInterface.h" +#include "scripting/HMDScriptingInterface.h" + template<typename T> void DialogsManager::maybeCreateDialog(QPointer<T>& member) { if (!member) { @@ -77,7 +80,7 @@ void DialogsManager::toggleLoginDialog() { } void DialogsManager::showLoginDialog() { - LoginDialog::show(); + LoginDialog::showWithSelection(); } void DialogsManager::showUpdateDialog() { diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index e333bb1b88..dce76eb661 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -24,6 +24,10 @@ #include "DependencyManager.h" #include "Menu.h" +#include "Application.h" +#include "TabletScriptingInterface.h" +#include "scripting/HMDScriptingInterface.h" + HIFI_QML_DEF(LoginDialog) LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { @@ -31,7 +35,25 @@ LoginDialog::LoginDialog(QQuickItem *parent) : OffscreenQmlDialog(parent) { connect(accountManager.data(), &AccountManager::loginComplete, this, &LoginDialog::handleLoginCompleted); connect(accountManager.data(), &AccountManager::loginFailed, - this, &LoginDialog::handleLoginFailed); + this, &LoginDialog::handleLoginFailed); +} + +void LoginDialog::showWithSelection() +{ + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + auto hmd = DependencyManager::get<HMDScriptingInterface>(); + + if (tablet->getToolbarMode()) { + LoginDialog::show(); + } else { + if (!hmd->getShouldShowTablet() && !qApp->isHMDMode()) { + LoginDialog::show(); + } else { + static const QUrl url("../../dialogs/TabletLoginDialog.qml"); + tablet->pushOntoStack(url); + } + } } void LoginDialog::toggleAction() { @@ -51,7 +73,7 @@ void LoginDialog::toggleAction() { // change the menu item to login loginAction->setText("Login / Sign Up"); connection = connect(loginAction, &QAction::triggered, [] { - LoginDialog::show(); + LoginDialog::showWithSelection(); }); } } @@ -141,9 +163,23 @@ void LoginDialog::createAccountFromStream(QString username) { } void LoginDialog::openUrl(const QString& url) const { + + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + auto hmd = DependencyManager::get<HMDScriptingInterface>(); auto offscreenUi = DependencyManager::get<OffscreenUi>(); - auto browser = offscreenUi->load("Browser.qml"); - browser->setProperty("url", url); + + if (tablet->getToolbarMode()) { + auto browser = offscreenUi->load("Browser.qml"); + browser->setProperty("url", url); + } else { + if (!hmd->getShouldShowTablet() && !qApp->isHMDMode()) { + auto browser = offscreenUi->load("Browser.qml"); + browser->setProperty("url", url); + } else { + tablet->gotoWebScreen(url); + } + } } void LoginDialog::linkCompleted(QNetworkReply& reply) { diff --git a/interface/src/ui/LoginDialog.h b/interface/src/ui/LoginDialog.h index ce6075793b..5ebf866fbd 100644 --- a/interface/src/ui/LoginDialog.h +++ b/interface/src/ui/LoginDialog.h @@ -27,6 +27,7 @@ public: LoginDialog(QQuickItem* parent = nullptr); + static void showWithSelection(); signals: void handleLoginCompleted(); void handleLoginFailed(); From 5335bf88620a1bc6586f355e415b3df124665011 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Sat, 18 Mar 2017 15:44:32 +0100 Subject: [PATCH 159/247] Menu items in Tablet UI now wrapped --- interface/resources/qml/hifi/tablet/TabletMenuItem.qml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletMenuItem.qml b/interface/resources/qml/hifi/tablet/TabletMenuItem.qml index c9223650f8..25f672e7a9 100644 --- a/interface/resources/qml/hifi/tablet/TabletMenuItem.qml +++ b/interface/resources/qml/hifi/tablet/TabletMenuItem.qml @@ -32,8 +32,7 @@ Item { anchors { left: parent.left leftMargin: hifi.dimensions.menuPadding.x + 15 - top: label.top - topMargin: 0 + verticalCenter: label.verticalCenter } width: 20 visible: source.visible && source.type === 1 && source.checkable @@ -51,6 +50,8 @@ Item { RalewaySemiBold { id: label size: 20 + //wrap will work only if width is set + width: parent.width - (check.width + check.anchors.leftMargin) - tail.width font.capitalization: isSubMenu ? Font.MixedCase : Font.AllUppercase anchors.left: check.right anchors.verticalCenter: parent.verticalCenter @@ -58,6 +59,7 @@ Item { color: source.enabled ? hifi.colors.baseGrayShadow : hifi.colors.baseGrayShadow50 enabled: source.visible && (source.type !== 0 ? source.enabled : false) visible: source.visible + wrapMode: Text.WordWrap } Item { From 98cae8d1521ad76afd35389eea79c2152aadaa86 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Mon, 20 Mar 2017 09:37:46 -0700 Subject: [PATCH 160/247] added EntityScriptingInterface::getEntityLocalTransform. try harder to make sure polyvox mesh is ready before giving it to javascript --- .../src/RenderablePolyVoxEntityItem.cpp | 17 ++++++++++---- .../src/RenderablePolyVoxEntityItem.h | 4 ++-- .../entities/src/EntityScriptingInterface.cpp | 23 +++++++++++++++---- .../entities/src/EntityScriptingInterface.h | 10 ++++++++ libraries/model/src/model/Geometry.cpp | 2 +- 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 1d58527427..efe284651a 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -1312,7 +1312,7 @@ void RenderablePolyVoxEntityItem::setMesh(model::MeshPointer mesh) { } _mesh = mesh; _meshDirty = true; - _meshInitialized = true; + _meshReady = true; neighborsNeedUpdate = _neighborsNeedUpdate; _neighborsNeedUpdate = false; }); @@ -1324,7 +1324,7 @@ void RenderablePolyVoxEntityItem::setMesh(model::MeshPointer mesh) { void RenderablePolyVoxEntityItem::computeShapeInfoWorker() { // this creates a collision-shape for the physics engine. The shape comes from // _volData for cubic extractors and from _mesh for marching-cube extractors - if (!_meshInitialized) { + if (!_meshReady) { return; } @@ -1601,15 +1601,22 @@ bool RenderablePolyVoxEntityItem::getMeshAsScriptValue(QScriptEngine *engine, QS MeshProxy* meshProxy = nullptr; glm::mat4 transform = voxelToLocalMatrix(); withReadLock([&] { - if (_meshInitialized) { + gpu::BufferView::Index numVertices = (gpu::BufferView::Index)_mesh->getNumVertices(); + if (!_meshReady) { + // we aren't ready to return a mesh. the caller will have to try again later. + success = false; + } else if (numVertices == 0) { + // we are ready, but there are no triangles in the mesh. + success = true; + } else { success = true; // the mesh will be in voxel-space. transform it into object-space meshProxy = new MeshProxy( _mesh->map([=](glm::vec3 position){ return glm::vec3(transform * glm::vec4(position, 1.0f)); }, [=](glm::vec3 normal){ return glm::vec3(transform * glm::vec4(normal, 0.0f)); }, - [](uint32_t index){ return index; })); + [&](uint32_t index){ return index; })); + result = meshToScriptValue(engine, meshProxy); } }); - result = meshToScriptValue(engine, meshProxy); return success; } diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index cf4672f068..e6467be987 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -142,7 +142,7 @@ public: uint8_t getVoxelInternal(int x, int y, int z) const; bool setVoxelInternal(int x, int y, int z, uint8_t toValue); - void setVolDataDirty() { withWriteLock([&] { _volDataDirty = true; }); } + void setVolDataDirty() { withWriteLock([&] { _volDataDirty = true; _meshReady = false; }); } // Transparent polyvox didn't seem to be working so disable for now bool isTransparent() override { return false; } @@ -157,7 +157,7 @@ private: model::MeshPointer _mesh; gpu::Stream::FormatPointer _vertexFormat; bool _meshDirty { true }; // does collision-shape need to be recomputed? - bool _meshInitialized { false }; + bool _meshReady { false }; NetworkTexturePointer _xTexture; NetworkTexturePointer _yTexture; diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 7ab0c3f7d9..88cc527164 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -934,11 +934,7 @@ void EntityScriptingInterface::voxelsToMesh(QUuid entityID, QScriptValue callbac QScriptValue mesh { false }; polyVoxWorker(entityID, [&](PolyVoxEntityItem& polyVoxEntity) mutable { - if (polyVoxEntity.getOnCount() == 0) { - success = true; - } else { - success = polyVoxEntity.getMeshAsScriptValue(callback.engine(), mesh); - } + success = polyVoxEntity.getMeshAsScriptValue(callback.engine(), mesh); return true; }); @@ -1578,3 +1574,20 @@ glm::mat4 EntityScriptingInterface::getEntityTransform(const QUuid& entityID) { } return result; } + +glm::mat4 EntityScriptingInterface::getEntityLocalTransform(const QUuid& entityID) { + glm::mat4 result; + if (_entityTree) { + _entityTree->withReadLock([&] { + EntityItemPointer entity = _entityTree->findEntityByEntityItemID(EntityItemID(entityID)); + if (entity) { + glm::mat4 translation = glm::translate(entity->getLocalPosition()); + glm::mat4 rotation = glm::mat4_cast(entity->getLocalOrientation()); + glm::mat4 registration = glm::translate(ENTITY_ITEM_DEFAULT_REGISTRATION_POINT - + entity->getRegistrationPoint()); + result = translation * rotation * registration; + } + }); + } + return result; +} diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index fa727aaa7a..71758ba53f 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -304,6 +304,16 @@ public slots: */ Q_INVOKABLE glm::mat4 getEntityTransform(const QUuid& entityID); + + /**jsdoc + * Returns object to world transform, excluding scale + * + * @function Entities.getEntityLocalTransform + * @param {EntityID} entityID The ID of the entity whose local transform is to be returned + * @return {Mat4} Entity's object to parent transform, excluding scale + */ + Q_INVOKABLE glm::mat4 getEntityLocalTransform(const QUuid& entityID); + signals: void collisionWithEntity(const EntityItemID& idA, const EntityItemID& idB, const Collision& collision); diff --git a/libraries/model/src/model/Geometry.cpp b/libraries/model/src/model/Geometry.cpp index 04b0db92d3..341015816e 100755 --- a/libraries/model/src/model/Geometry.cpp +++ b/libraries/model/src/model/Geometry.cpp @@ -228,7 +228,7 @@ void Mesh::forEach(std::function<void(glm::vec3)> vertexFunc, // normal data const gpu::BufferView& normalsBufferView = getAttributeBuffer(attributeTypeNormal); - gpu::BufferView::Index numNormals = (gpu::BufferView::Index) normalsBufferView.getNumElements(); + gpu::BufferView::Index numNormals = (gpu::BufferView::Index)normalsBufferView.getNumElements(); for (gpu::BufferView::Index i = 0; i < numNormals; i ++) { normalFunc(normalsBufferView.get<glm::vec3>(i)); } From f57905fbb3225a176587ae7775f61c0e0e19ddd2 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Mon, 20 Mar 2017 10:23:55 -0700 Subject: [PATCH 161/247] remove code for jump to selection --- scripts/system/html/entityList.html | 1 - scripts/system/html/js/entityList.js | 4 ---- 2 files changed, 5 deletions(-) diff --git a/scripts/system/html/entityList.html b/scripts/system/html/entityList.html index bdd01bc7d2..9d774f1861 100644 --- a/scripts/system/html/entityList.html +++ b/scripts/system/html/entityList.html @@ -25,7 +25,6 @@ <input type="button" id="visible" class="glyph" value="" /> </div> <input type="button" id="export" value="Export Selection" /> - <input type="button" id="teleport" value="Jump to Selection" style="display: none"/> <input type="button" id="pal" class="glyph" value="" /> <input type="button" class="red" id="delete" value="Delete" /> </div> diff --git a/scripts/system/html/js/entityList.js b/scripts/system/html/js/entityList.js index a371b3bdc9..c6692fc26e 100644 --- a/scripts/system/html/js/entityList.js +++ b/scripts/system/html/js/entityList.js @@ -39,7 +39,6 @@ function loaded() { elFilter = document.getElementById("filter"); elInView = document.getElementById("in-view") elRadius = document.getElementById("radius"); - elTeleport = document.getElementById("teleport"); elExport = document.getElementById("export"); elPal = document.getElementById("pal"); elEntityTable = document.getElementById("entity-table"); @@ -274,9 +273,6 @@ function loaded() { elToggleVisible.onclick = function () { EventBridge.emitWebEvent(JSON.stringify({ type: 'toggleVisible' })); } - elTeleport.onclick = function () { - EventBridge.emitWebEvent(JSON.stringify({ type: 'teleport' })); - } elExport.onclick = function() { EventBridge.emitWebEvent(JSON.stringify({ type: 'export'})); } From de24023a2142efb227a04742a8201c50ef14d2ba Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Mon, 20 Mar 2017 20:43:32 +0100 Subject: [PATCH 162/247] Fix edit.js from deselecting an object when trying to delete it --- scripts/system/edit.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 55bd11b286..e598953ba7 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -687,11 +687,22 @@ function mouseReleaseEvent(event) { } } +function wasTabletClicked(event) { + var rayPick = Camera.computePickRay(event.x, event.y); + var result = Overlays.findRayIntersection(rayPick, true, [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID]); + return result.intersects; +} + function mouseClickEvent(event) { var wantDebug = false; - var result, properties; + var result, properties, tabletClicked; if (isActive && event.isLeftButton) { result = findClickedEntity(event); + tabletClicked = wasTabletClicked(event); + if (tabletClicked) { + return; + } + if (result === null || result === undefined) { if (!event.isShifted) { selectionManager.clearSelections(); From 13cd500c2e6d4763393d07dd0dd821e0e05ec5a5 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Mon, 20 Mar 2017 20:46:37 +0100 Subject: [PATCH 163/247] Make runningscripts able to open even if there is no scripts running --- interface/src/Application.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 9517b69050..b48a247bb1 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5821,12 +5821,14 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) } } -void Application::toggleRunningScriptsWidget() const { - +void Application::toggleRunningScriptsWidget() const { + auto scriptEngines = DependencyManager::get<ScriptEngines>(); + bool _scriptsRunning = !scriptEngines->getRunningScripts().isEmpty(); auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); auto hmd = DependencyManager::get<HMDScriptingInterface>(); - if (tablet->getToolbarMode()) { + if (tablet->getToolbarMode() || false == _scriptsRunning) { static const QUrl url("hifi/dialogs/RunningScripts.qml"); DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); } else { From f5c3d41f2cde58b27e707f5b713f21f8cafca3ab Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidleity.io> Date: Mon, 20 Mar 2017 14:51:47 -0700 Subject: [PATCH 164/247] Tablet scale settings now take effect soon after they are changed. --- scripts/system/libraries/WebTablet.js | 32 ++++++++++++++++++++++ scripts/system/tablet-ui/tabletUI.js | 39 +++++++++++++++++++++------ 2 files changed, 63 insertions(+), 8 deletions(-) diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 6041a842d6..8114c2052b 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -279,6 +279,38 @@ WebTablet.prototype.getOverlayObject = function () { return Overlays.getOverlayObject(this.webOverlayID); }; +WebTablet.prototype.setWidth = function (width) { + + // scale factor of natural tablet dimensions. + this.width = width || DEFAULT_WIDTH; + var tabletScaleFactor = this.width / TABLET_NATURAL_DIMENSIONS.x; + this.height = TABLET_NATURAL_DIMENSIONS.y * tabletScaleFactor; + this.depth = TABLET_NATURAL_DIMENSIONS.z * tabletScaleFactor; + this.dpi = DEFAULT_DPI * (DEFAULT_WIDTH / this.width); + + // update tablet model dimensions + if (this.tabletIsOverlay) { + Overlays.editOverlay(this.tabletEntityID, {dimensions: {x: this.width, y: this.height, z: this.depth}}); + } else { + Entities.editEntity(this.tabletEntityID, {dimensions: {x: this.width, y: this.height, z: this.depth}}); + } + + // update webOverlay + var WEB_ENTITY_Z_OFFSET = (this.depth / 2); + var WEB_ENTITY_Y_OFFSET = 0.004; + Overlays.editOverlay(this.webOverlayID, { + localPosition: { x: 0, y: WEB_ENTITY_Y_OFFSET, z: -WEB_ENTITY_Z_OFFSET }, + dpi: this.dpi + }); + + // update homeButton + var HOME_BUTTON_Y_OFFSET = (this.height / 2) - (this.height / 20); + Overlays.editOverlay(this.homeButtonID, { + localPosition: {x: -0.001, y: -HOME_BUTTON_Y_OFFSET, z: 0.0}, + dimensions: { x: 4 * tabletScaleFactor, y: 4 * tabletScaleFactor, z: 4 * tabletScaleFactor} + }); +}; + WebTablet.prototype.destroy = function () { Overlays.deleteOverlay(this.webOverlayID); if (this.tabletIsOverlay) { diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index 3b15eb4edb..a010cb0a9c 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -24,6 +24,7 @@ var preMakeTime = Date.now(); var validCheckTime = Date.now(); var debugTablet = false; + var tabletScalePercentage = 100.0; UIWebTablet = null; Script.include("../libraries/WebTablet.js"); @@ -48,26 +49,45 @@ return true; } + function getTabletScalePercentageFromSettings() { + var toolbarMode = Tablet.getTablet("com.highfidelity.interface.tablet.system").toolbarMode; + var tabletScalePercentage = DEFAULT_TABLET_SCALE; + if (!toolbarMode) { + if (HMD.active) { + tabletScalePercentage = Settings.getValue("hmdTabletScale") || DEFAULT_TABLET_SCALE; + } else { + tabletScalePercentage = Settings.getValue("desktopTabletScale") || DEFAULT_TABLET_SCALE; + } + } + return tabletScalePercentage; + } + + function updateTabletWidthFromSettings() { + var newTabletScalePercentage = getTabletScalePercentageFromSettings(); + if (newTabletScalePercentage !== tabletScalePercentage && UIWebTablet) { + tabletScalePercentage = newTabletScalePercentage; + UIWebTablet.setWidth(DEFAULT_WIDTH * (tabletScalePercentage / 100)); + } + } + + function onHmdChanged() { + updateTabletWidthFromSettings(); + } function rezTablet() { if (debugTablet) { print("TABLET rezzing"); } - var toolbarMode = Tablet.getTablet("com.highfidelity.interface.tablet.system").toolbarMode; - var TABLET_SCALE = DEFAULT_TABLET_SCALE; - if (toolbarMode) { - TABLET_SCALE = Settings.getValue("desktopTabletScale") || DEFAULT_TABLET_SCALE; - } else { - TABLET_SCALE = Settings.getValue("hmdTabletScale") || DEFAULT_TABLET_SCALE; - } + tabletScalePercentage = getTabletScalePercentageFromSettings(); UIWebTablet = new WebTablet("qml/hifi/tablet/TabletRoot.qml", - DEFAULT_WIDTH * (TABLET_SCALE / 100), + DEFAULT_WIDTH * (tabletScalePercentage / 100), null, activeHand, true); UIWebTablet.register(); HMD.tabletID = UIWebTablet.tabletEntityID; HMD.homeButtonID = UIWebTablet.homeButtonID; HMD.tabletScreenID = UIWebTablet.webOverlayID; + HMD.displayModeChanged.connect(onHmdChanged); tabletRezzed = true; } @@ -166,6 +186,8 @@ tablet.updateAudioBar(currentMicLevel); } + updateTabletWidthFromSettings(); + if (validCheckTime - now > MSECS_PER_SEC) { validCheckTime = now; if (tabletRezzed && UIWebTablet && !tabletIsValid()) { @@ -180,6 +202,7 @@ } } + // check for change in tablet scale. if (HMD.showTablet && !tabletShown && !toolbarMode) { UserActivityLogger.openedTablet(visibleToOthers); From b6bf58d5be68ea42f55deda37dc30d293a11b14c Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Mon, 20 Mar 2017 15:28:30 -0700 Subject: [PATCH 165/247] rearrange layout of main tablet go to screen --- .../qml/hifi/tablet/TabletAddressDialog.qml | 209 +++++++++--------- 1 file changed, 104 insertions(+), 105 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 952a1f7faa..3a6577f4c0 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -82,6 +82,107 @@ Item { } onMetaverseServerUrlChanged: updateLocationTextTimer.start(); + Rectangle { + id: navBar + width: 480 + height: 70 + + gradient: Gradient { + GradientStop { + position: 0 + color: "#c2ced8" + + } + + GradientStop { + position: 1 + color: "#c2ced8" + } + } + + anchors { + top: parent.top + right: parent.right + left: parent.left + } + + + ToolbarButton { + id: homeButton + imageURL: "../../../images/home.svg" + onClicked: { + addressBarDialog.loadHome(); + root.shown = false; + } + anchors { + left: parent.left + leftMargin: homeButton.width / 2 + verticalCenter: parent.verticalCenter + } + } + property int inputAreaHeight: 70 + property int inputAreaStep: (height - inputAreaHeight) / 2 + + HifiStyles.RalewayLight { + id: notice; + font.pixelSize: hifi.fonts.pixelSize * 0.50; + anchors { + top: parent.top + topMargin: parent.inputAreaStep + 12 + left: addressLine.left + right: addressLine.right + } + } + HifiStyles.FiraSansRegular { + id: location; + font.pixelSize: addressLine.font.pixelSize; + color: "gray"; + clip: true; + anchors.fill: addressLine; + visible: addressLine.text.length === 0 + } + + TextInput { + id: addressLine + focus: true + anchors { + bottom: parent.bottom + left: homeButton.right + right: parent.right + leftMargin: homeButton.width + rightMargin: homeButton.width / 2 + topMargin: parent.inputAreaStep + (2 * hifi.layout.spacing) + bottomMargin: parent.inputAreaStep + } + font.pixelSize: hifi.fonts.pixelSize * 0.75 + cursorVisible: false + onTextChanged: { + filterChoicesByText(); + updateLocationText(text.length > 0); + if (!isCursorVisible && text.length > 0) { + isCursorVisible = true; + cursorVisible = true; + } + } + onAccepted: { + addressBarDialog.keyboardEnabled = false; + } + onActiveFocusChanged: { + cursorVisible = isCursorVisible && focus; + } + MouseArea { + // If user clicks in address bar show cursor to indicate ability to enter address. + anchors.fill: parent + onClicked: { + isCursorVisible = true; + //parent.cursorVisible = true; + parent.forceActiveFocus(); + addressBarDialog.keyboardEnabled = HMD.active + tabletRoot.playButtonClickSound(); + } + } + } + } Rectangle { id: topBar height: 90 @@ -103,7 +204,7 @@ Item { anchors.left: parent.left anchors.leftMargin: 0 anchors.topMargin: 0 - anchors.top: parent.top + anchors.top: navBar.bottom Row { id: thing @@ -158,7 +259,7 @@ Item { } - anchors.bottom: backgroundImage.top + anchors.bottom: parent.keyboardEnabled ? keyboard.top : parent.bottom anchors.bottomMargin: 0 anchors.right: parent.right anchors.rightMargin: 0 @@ -210,109 +311,7 @@ Item { } } - Rectangle { - id: backgroundImage - width: 480 - height: 70 - - gradient: Gradient { - GradientStop { - position: 0 - color: "#c2ced8" - - } - - GradientStop { - position: 1 - color: "#c2ced8" - } - } - - anchors { - bottom: parent.keyboardEnabled ? keyboard.top : parent.bottom - right: parent.right - left: parent.left - } - - - ToolbarButton { - id: homeButton - imageURL: "../../../images/home.svg" - onClicked: { - addressBarDialog.loadHome(); - root.shown = false; - } - anchors { - left: parent.left - leftMargin: homeButton.width / 2 - verticalCenter: parent.verticalCenter - } - } - property int inputAreaHeight: 70 - property int inputAreaStep: (height - inputAreaHeight) / 2 - - HifiStyles.RalewayLight { - id: notice; - font.pixelSize: hifi.fonts.pixelSize * 0.50; - anchors { - top: parent.top - topMargin: parent.inputAreaStep + 12 - left: addressLine.left - right: addressLine.right - } - } - HifiStyles.FiraSansRegular { - id: location; - font.pixelSize: addressLine.font.pixelSize; - color: "gray"; - clip: true; - anchors.fill: addressLine; - visible: addressLine.text.length === 0 - } - - TextInput { - id: addressLine - focus: true - anchors { - bottom: parent.bottom - left: homeButton.right - right: parent.right - leftMargin: homeButton.width - rightMargin: homeButton.width / 2 - topMargin: parent.inputAreaStep + (2 * hifi.layout.spacing) - bottomMargin: parent.inputAreaStep - } - font.pixelSize: hifi.fonts.pixelSize * 0.75 - cursorVisible: false - onTextChanged: { - filterChoicesByText(); - updateLocationText(text.length > 0); - if (!isCursorVisible && text.length > 0) { - isCursorVisible = true; - cursorVisible = true; - } - } - onAccepted: { - addressBarDialog.keyboardEnabled = false; - } - onActiveFocusChanged: { - cursorVisible = isCursorVisible && focus; - } - MouseArea { - // If user clicks in address bar show cursor to indicate ability to enter address. - anchors.fill: parent - onClicked: { - isCursorVisible = true; - //parent.cursorVisible = true; - parent.forceActiveFocus(); - addressBarDialog.keyboardEnabled = HMD.active - tabletRoot.playButtonClickSound(); - } - } - } - } - - Timer { + Timer { // Delay updating location text a bit to avoid flicker of content and so that connection status is valid. id: updateLocationTextTimer running: false From cedc3cf8b6793284bb776a514c271829c021123f Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Mon, 20 Mar 2017 23:43:01 +0100 Subject: [PATCH 166/247] Fix naming. Move variable instantiation within scope --- interface/src/Application.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b48a247bb1..0738b463a4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5823,15 +5823,15 @@ bool Application::displayAvatarAttachmentConfirmationDialog(const QString& name) void Application::toggleRunningScriptsWidget() const { auto scriptEngines = DependencyManager::get<ScriptEngines>(); - bool _scriptsRunning = !scriptEngines->getRunningScripts().isEmpty(); + bool scriptsRunning = !scriptEngines->getRunningScripts().isEmpty(); auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); - auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); - auto hmd = DependencyManager::get<HMDScriptingInterface>(); - if (tablet->getToolbarMode() || false == _scriptsRunning) { + + if (tablet->getToolbarMode() || false == scriptsRunning) { static const QUrl url("hifi/dialogs/RunningScripts.qml"); DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); } else { + auto hmd = DependencyManager::get<HMDScriptingInterface>(); if (!hmd->getShouldShowTablet() && !isHMDMode()) { static const QUrl url("hifi/dialogs/RunningScripts.qml"); DependencyManager::get<OffscreenUi>()->show(url, "RunningScripts"); From 1d095b8158afa9f8bdd13c06b5a2f79c92b45879 Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Mon, 20 Mar 2017 15:57:59 -0700 Subject: [PATCH 167/247] added back forward and back button on nav bar --- .../qml/hifi/tablet/TabletAddressDialog.qml | 54 ++++++++++++------- 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 3a6577f4c0..d2af9a6999 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -87,26 +87,12 @@ Item { width: 480 height: 70 - gradient: Gradient { - GradientStop { - position: 0 - color: "#c2ced8" - - } - - GradientStop { - position: 1 - color: "#c2ced8" - } - } - anchors { top: parent.top right: parent.right left: parent.left } - ToolbarButton { id: homeButton imageURL: "../../../images/home.svg" @@ -120,10 +106,40 @@ Item { verticalCenter: parent.verticalCenter } } + ToolbarButton { + id: backArrow; + imageURL: "../../../images/backward.svg"; + onClicked: addressBarDialog.loadBack(); + anchors { + left: homeButton.right + verticalCenter: parent.verticalCenter + } + } + ToolbarButton { + id: forwardArrow; + imageURL: "../../../images/forward.svg"; + onClicked: addressBarDialog.loadForward(); + anchors { + left: backArrow.right + verticalCenter: parent.verticalCenter + } + } + } + + Rectangle { + id: addressBar + width: 480 + height: 70 + anchors { + top: navBar.bottom + right: parent.right + left: parent.left + } + property int inputAreaHeight: 70 property int inputAreaStep: (height - inputAreaHeight) / 2 - HifiStyles.RalewayLight { + HifiStyles.RalewayLight { id: notice; font.pixelSize: hifi.fonts.pixelSize * 0.50; anchors { @@ -147,10 +163,10 @@ Item { focus: true anchors { bottom: parent.bottom - left: homeButton.right + left: parent.left right: parent.right - leftMargin: homeButton.width - rightMargin: homeButton.width / 2 + leftMargin: 0 + rightMargin: 0 topMargin: parent.inputAreaStep + (2 * hifi.layout.spacing) bottomMargin: parent.inputAreaStep } @@ -204,7 +220,7 @@ Item { anchors.left: parent.left anchors.leftMargin: 0 anchors.topMargin: 0 - anchors.top: navBar.bottom + anchors.top: addressBar.bottom Row { id: thing From 9cab8b6c4a93f3c7f6959a655f7dcfec3ff4fcca Mon Sep 17 00:00:00 2001 From: Faye Li <si.fi.faye.li@gmial.com> Date: Mon, 20 Mar 2017 17:04:29 -0700 Subject: [PATCH 168/247] end of day commit --- interface/resources/qml/hifi/tablet/TabletAddressDialog.qml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index d2af9a6999..8054c90603 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -90,7 +90,9 @@ Item { anchors { top: parent.top right: parent.right + rightMargin: 0 left: parent.left + leftMargin: 0 } ToolbarButton { @@ -102,7 +104,6 @@ Item { } anchors { left: parent.left - leftMargin: homeButton.width / 2 verticalCenter: parent.verticalCenter } } @@ -133,7 +134,9 @@ Item { anchors { top: navBar.bottom right: parent.right + rightMargin: 16 left: parent.left + leftMargin: 16 } property int inputAreaHeight: 70 From fb0adae0b11a7f547901eb0d3d512e850180dce1 Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Tue, 21 Mar 2017 15:04:38 +0100 Subject: [PATCH 169/247] Scripts debug window in Tablet UI --- .../qml/hifi/dialogs/TabletDebugWindow.qml | 78 +++++++++++++++++++ interface/src/Application.cpp | 18 +++++ interface/src/Application.h | 1 + interface/src/Menu.cpp | 10 +-- 4 files changed, 99 insertions(+), 8 deletions(-) create mode 100644 interface/resources/qml/hifi/dialogs/TabletDebugWindow.qml diff --git a/interface/resources/qml/hifi/dialogs/TabletDebugWindow.qml b/interface/resources/qml/hifi/dialogs/TabletDebugWindow.qml new file mode 100644 index 0000000000..d4bbe0af04 --- /dev/null +++ b/interface/resources/qml/hifi/dialogs/TabletDebugWindow.qml @@ -0,0 +1,78 @@ +// +// TabletDebugWindow.qml +// +// Vlad Stelmahovsky, created on 20/03/2017. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import Hifi 1.0 as Hifi + +import "../../styles-uit" +import "../../controls-uit" as HifiControls + +Rectangle { + id: root + + objectName: "DebugWindow" + property var eventBridge; + + property var title: "Debug Window" + property bool isHMD: false + + color: hifi.colors.baseGray + + HifiConstants { id: hifi } + + signal sendToScript(var message); + property int colorScheme: hifi.colorSchemes.dark + + property var channel; + property var scripts: ScriptDiscoveryService; + + function fromScript(message) { + var MAX_LINE_COUNT = 2000; + var TRIM_LINES = 500; + if (textArea.lineCount > MAX_LINE_COUNT) { + var lines = textArea.text.split('\n'); + lines.splice(0, TRIM_LINES); + textArea.text = lines.join('\n'); + } + textArea.append(message); + } + + function getFormattedDate() { + var date = new Date(); + return date.getMonth() + "/" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds(); + } + + function sendToLogWindow(type, message, scriptFileName) { + var typeFormatted = ""; + if (type) { + typeFormatted = type + " - "; + } + fromScript("[" + getFormattedDate() + "] " + "[" + scriptFileName + "] " + typeFormatted + message); + } + + Connections { + target: ScriptDiscoveryService + onPrintedMessage: sendToLogWindow("", message, engineName); + onWarningMessage: sendToLogWindow("WARNING", message, engineName); + onErrorMessage: sendToLogWindow("ERROR", message, engineName); + onInfoMessage: sendToLogWindow("INFO", message, engineName); + } + + TextArea { + id: textArea + width: parent.width + height: parent.height + backgroundVisible: false + textColor: hifi.colors.white + text:"" + } + +} diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 0738b463a4..be1db95c0a 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5855,6 +5855,24 @@ void Application::toggleRunningScriptsWidget() const { //} } +void Application::showScriptLogs() { + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + auto scriptEngines = DependencyManager::get<ScriptEngines>(); + QUrl defaultScriptsLoc = defaultScriptsLocation(); + defaultScriptsLoc.setPath(defaultScriptsLoc.path() + "developer/debugging/debugWindow.js"); + + if (tablet->getToolbarMode()) { + scriptEngines->loadScript(defaultScriptsLoc.toString()); + } else { + QQuickItem* tabletRoot = tablet->getTabletRoot(); + if (!tabletRoot && !isHMDMode()) { + scriptEngines->loadScript(defaultScriptsLoc.toString()); + } else { + tablet->pushOntoStack("../../hifi/dialogs/TabletDebugWindow.qml"); + } + } +} void Application::showAssetServerWidget(QString filePath) { if (!DependencyManager::get<NodeList>()->getThisNodeCanWriteAssets()) { diff --git a/interface/src/Application.h b/interface/src/Application.h index f7af922148..8b59374aad 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -408,6 +408,7 @@ public slots: void loadLODToolsDialog(); void loadEntityStatisticsDialog(); void loadDomainConnectionDialog(); + void showScriptLogs(); private slots: void showDesktop(); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 977c5817e9..de29020ab7 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -719,14 +719,8 @@ Menu::Menu() { }); essLogAction->setEnabled(nodeList->getThisNodeCanRez()); - action = addActionToQMenuAndActionHash(developerMenu, "Script Log (HMD friendly)..."); - connect(action, &QAction::triggered, [] { - auto scriptEngines = DependencyManager::get<ScriptEngines>(); - QUrl defaultScriptsLoc = defaultScriptsLocation(); - defaultScriptsLoc.setPath(defaultScriptsLoc.path() + "developer/debugging/debugWindow.js"); - scriptEngines->loadScript(defaultScriptsLoc.toString()); - }); - + action = addActionToQMenuAndActionHash(developerMenu, "Script Log (HMD friendly)...", Qt::NoButton, + qApp, SLOT(showScriptLogs())); // Developer > Stats addCheckableActionToQMenuAndActionHash(developerMenu, MenuOption::Stats); From 1811a2edc7044faa20bb738bf1e0c344a8221fb9 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 21 Mar 2017 19:45:00 +0100 Subject: [PATCH 170/247] fixed third eye laser --- scripts/system/controllers/handControllerGrab.js | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 1693a6137a..0f2bf3346a 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1018,6 +1018,16 @@ EquipHotspotBuddy.prototype.update = function(deltaTime, timestamp) { } }; +function getControllerJointIndex(hand) { + if (HMD.isHandControllerAvailable()) { + return MyAvatar.getJointIndex(hand === RIGHT_HAND ? + "_CONTROLLER_RIGHTHAND" : + "_CONTROLLER_LEFTHAND"); + } + + return MyAvatar.getJointIndex("Head"); +} + // global EquipHotspotBuddy instance var equipHotspotBuddy = new EquipHotspotBuddy(); @@ -1029,9 +1039,7 @@ function MyController(hand) { this.homeButtonTouched = false; this.editTriggered = false; - this.controllerJointIndex = MyAvatar.getJointIndex(this.hand === RIGHT_HAND ? - "_CONTROLLER_RIGHTHAND" : - "_CONTROLLER_LEFTHAND"); + this.controllerJointIndex = getControllerJointIndex(this.hand); // Until there is some reliable way to keep track of a "stack" of parentIDs, we'll have problems // when more than one avatar does parenting grabs on things. This script tries to work From 04a334fd0763878fa6fd0acf7266626d3496fc5f Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Tue, 21 Mar 2017 11:02:18 -0800 Subject: [PATCH 171/247] unmangle merge --- scripts/system/edit.js | 8 -------- 1 file changed, 8 deletions(-) diff --git a/scripts/system/edit.js b/scripts/system/edit.js index 6d2b70d9e1..a30de8f3d1 100644 --- a/scripts/system/edit.js +++ b/scripts/system/edit.js @@ -544,15 +544,7 @@ var toolBar = (function () { // everybody else to think that Interface has lost focus overall. fogbugzid:558 // Window.setFocus(); } - // Sets visibility of tool buttons, excluding the power button - toolBar.writeProperty("shown", active); - var visible = toolBar.readProperty("visible"); - if (active && !visible) { - toolBar.writeProperty("shown", false); - toolBar.writeProperty("shown", true); - } entityIconOverlayManager.setVisible(isActive && Menu.isOptionChecked(MENU_SHOW_LIGHTS_AND_PARTICLES_IN_EDIT_MODE)); - lightOverlayManager.setVisible(isActive && Menu.isOptionChecked(MENU_SHOW_LIGHTS_IN_EDIT_MODE)); Entities.setDrawZoneBoundaries(isActive && Menu.isOptionChecked(MENU_SHOW_ZONES_IN_EDIT_MODE)); }; From a4af973ae4f8e3d16facf26bc5c763831e8f8174 Mon Sep 17 00:00:00 2001 From: kunalgosar <kunal.gosar@berkeley.edu> Date: Tue, 21 Mar 2017 14:12:54 -0700 Subject: [PATCH 172/247] fixed back button on marketplace --- scripts/system/html/js/marketplacesInject.js | 13 ++++++++++--- scripts/system/tablet-users.js | 6 +++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index 10970a7749..ab89765615 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -25,7 +25,9 @@ var canWriteAssets = false; var xmlHttpRequest = null; var isPreparing = false; // Explicitly track download request status. - + + var lastPage = "https://metaverse.highfidelity.com/marketplace?"; + function injectCommonCode(isDirectoryPage) { // Supporting styles from marketplaces.css. @@ -65,7 +67,7 @@ // Footer actions. $("#back-button").on("click", function () { - window.history.back(); + window.location = lastPage; }); $("#all-markets").on("click", function () { EventBridge.emitWebEvent(GOTO_DIRECTORY); @@ -341,8 +343,13 @@ break; } } - + + function locationChanged() { + lastPage = location.href; + } + // Load / unload. window.addEventListener("load", onLoad); // More robust to Web site issues than using $(document).ready(). + window.addEventListener("hashchange", locationChanged); }()); diff --git a/scripts/system/tablet-users.js b/scripts/system/tablet-users.js index 88ffa33a88..41c66e29ec 100644 --- a/scripts/system/tablet-users.js +++ b/scripts/system/tablet-users.js @@ -69,7 +69,11 @@ function onWebEventReceived(event) { print("Script received a web event, its type is " + typeof event); if (typeof event === "string") { - event = JSON.parse(event); + try { + event = JSON.parse(event); + } catch(e) { + return; + } } if (event.type === "ready") { // send username to html From 30d2ea0ea5f287334316a2ac914b6f24910ad83a Mon Sep 17 00:00:00 2001 From: kunalgosar <kunal.gosar@berkeley.edu> Date: Tue, 21 Mar 2017 14:15:56 -0700 Subject: [PATCH 173/247] spacing issues --- scripts/system/html/js/marketplacesInject.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index ab89765615..d0038411b1 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -25,9 +25,9 @@ var canWriteAssets = false; var xmlHttpRequest = null; var isPreparing = false; // Explicitly track download request status. - + var lastPage = "https://metaverse.highfidelity.com/marketplace?"; - + function injectCommonCode(isDirectoryPage) { // Supporting styles from marketplaces.css. From f09ee92fe1efacc07e5820fee707b78ae80d1eef Mon Sep 17 00:00:00 2001 From: kunalgosar <kunal.gosar@berkeley.edu> Date: Tue, 21 Mar 2017 14:16:49 -0700 Subject: [PATCH 174/247] spacing issues --- scripts/system/html/js/marketplacesInject.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index d0038411b1..d4937ac9db 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -343,11 +343,11 @@ break; } } - + function locationChanged() { lastPage = location.href; } - + // Load / unload. window.addEventListener("load", onLoad); // More robust to Web site issues than using $(document).ready(). window.addEventListener("hashchange", locationChanged); From d2c139ce6ee6886b2144ee9c6fc3494b1f5af1ec Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 21 Mar 2017 22:25:45 +0100 Subject: [PATCH 175/247] fix error from using a misspelled function --- scripts/system/controllers/handControllerGrab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 0f2bf3346a..c8b78b4d08 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -3601,7 +3601,7 @@ function MyController(hand) { if (this.stylusTarget.entityID) { entityPropertiesCache.addEntity(this.stylusTarget.entityID); - this.stylusTarget = calcualteStylusTargetFromEntity(this.stylusTip, this.stylusTarget.entityID); + this.stylusTarget = calculateStylusTargetFromEntity(this.stylusTip, this.stylusTarget.entityID); } else if (this.stylusTarget.overlayID) { this.stylusTarget = calculateStylusTargetFromOverlay(this.stylusTip, this.stylusTarget.overlayID); } From a44704c4fe5f17d2beb864d5bf2366535343ddd9 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 22 Mar 2017 16:32:37 +0100 Subject: [PATCH 176/247] merging with tablet-ui --- interface/resources/html/tabletHelp.html | 127 +++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 interface/resources/html/tabletHelp.html diff --git a/interface/resources/html/tabletHelp.html b/interface/resources/html/tabletHelp.html new file mode 100644 index 0000000000..1c70300297 --- /dev/null +++ b/interface/resources/html/tabletHelp.html @@ -0,0 +1,127 @@ +<!-- Copyright 2016 High Fidelity, Inc. --> +<html> + <head> + <meta charset="utf-8"/> + <input type="hidden" id="version" value="1"/> + <title>Welcome to Interface</title> + + <style> + body { + background: black; + width: 100%; + overflow-x: hidden; + margin: 0; + padding: 0; + } + + #kbm_button { + position: absolute; + left: 70; + top: 118; + width: 297; + height: 80; + } + + #hand_controllers_button { + position: absolute; + left: 367; + top: 118; + width: 267; + height: 80; + } + + #game_controller_button { + position: absolute; + left: 634; + top: 118; + width: 297; + height: 80; + } + + #image_area { + width: 1024; + height: 720; + margin: auto; + position: absolute; + top: 0; left: 0; bottom: 0; right: 0; + } + </style> + <script> + var handControllerImageURL = null; + + function showKbm() { + document.getElementById("main_image").setAttribute("src", "img/controls-help-keyboard.png"); + } + + function showHandControllers() { + document.getElementById("main_image").setAttribute("src", handControllerImageURL); + } + + function showGamepad() { + document.getElementById("main_image").setAttribute("src", "img/controls-help-gamepad.png"); + } + + // This is not meant to be a complete or hardened query string parser - it only + // needs to handle the values we send in and have control over. + // + // queryString is a string of the form "key1=value1&key2=value2&key3&key4=value4" + function parseQueryString(queryString) { + var params = {}; + var paramsParts = queryString.split("&"); + for (var i = 0; i < paramsParts.length; ++i) { + var paramKeyValue = paramsParts[i].split("="); + if (paramKeyValue.length == 1) { + params[paramKeyValue[0]] = undefined; + } else if (paramKeyValue.length == 2) { + params[paramKeyValue[0]] = paramKeyValue[1]; + } else { + console.error("Error parsing param keyvalue: ", paramParts); + } + } + return params; + } + + function load() { + var parts = window.location.href.split("?"); + var params = {}; + if (parts.length > 0) { + params = parseQueryString(parts[1]); + } + + switch (params.handControllerName) { + case "oculus": + handControllerImageURL = "img/controls-help-oculus.png"; + break; + + case "vive": + default: + handControllerImageURL = "img/controls-help-vive.png"; + } + + switch (params.defaultTab) { + case "gamepad": + showGamepad(); + break; + + case "handControllers": + showHandControllers(); + break; + + case "kbm": + default: + showKbm(); + } + } + </script> + </head> + + <body onload="load()"> + <div id="image_area"> + <img id="main_image" src="img/controls-help-keyboard.png" width="1024px" height="720px"></img> + <a href="#" id="kbm_button" onmousedown="showKbm()"></a> + <a href="#" id="hand_controllers_button" onmousedown="showHandControllers()"></a> + <a href="#" id="game_controller_button" onmousedown="showGamepad()"></a> + </div> + </body> + +</html> From 2c38d7ff89c6099dff7881809a34ab7111479431 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Wed, 22 Mar 2017 11:03:03 -0700 Subject: [PATCH 177/247] Tablet spawn orientation now takes hand orientation into account. Perhaps this will make the tablet spawn location feel more predictable and consistent to the user. --- scripts/system/libraries/WebTablet.js | 44 ++++++++++++--------------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 8114c2052b..04917ca4a9 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -14,6 +14,7 @@ Script.include(Script.resolvePath("../libraries/utils.js")); Script.include(Script.resolvePath("../libraries/controllers.js")); Script.include(Script.resolvePath("../libraries/Xform.js")); +var VEC3_ZERO = {x: 0, y: 0, z: 0}; var X_AXIS = {x: 1, y: 0, z: 0}; var Y_AXIS = {x: 0, y: 1, z: 0}; var DEFAULT_DPI = 34; @@ -22,6 +23,7 @@ var DEFAULT_VERTICAL_FIELD_OF_VIEW = 45; // degrees var SENSOR_TO_ROOM_MATRIX = -2; var CAMERA_MATRIX = -7; var ROT_Y_180 = {x: 0, y: 1, z: 0, w: 0}; +var ROT_IDENT = {x: 0, y: 0, z: 0, w: 1}; var TABLET_TEXTURE_RESOLUTION = { x: 480, y: 706 }; var INCHES_TO_METERS = 1 / 39.3701; var AVATAR_SELF_ID = "{00000000-0000-0000-0000-000000000001}"; @@ -51,35 +53,29 @@ function calcSpawnInfo(hand, height) { if (HMD.active && hand !== NO_HANDS) { var handController = getControllerWorldLocation(hand, true); - var controllerPosition = handController.position; - // base of the tablet is slightly above controller position - var TABLET_BASE_DISPLACEMENT = {x: 0, y: 0.1, z: 0}; - var tabletBase = Vec3.sum(controllerPosition, TABLET_BASE_DISPLACEMENT); - - var d = Vec3.subtract(headPos, tabletBase); - var theta = Math.acos(d.y / Vec3.length(d)); - d.y = 0; - if (Vec3.length(d) < 0.0001) { - d = {x: 1, y: 0, z: 0}; - } else { - d = Vec3.normalize(d); + var TABLET_UP_OFFSET = 0.1; + var TABLET_FORWARD_OFFSET = 0.1; + var normal = Vec3.multiplyQbyV(handController.rotation, {x: 0, y: -1, z: 0}); + var pitch = Math.asin(normal.y); + var MAX_PITCH = Math.PI / 4; + if (pitch < -MAX_PITCH) { + pitch = -MAX_PITCH; + } else if (pitch > MAX_PITCH) { + pitch = MAX_PITCH; } - var w = Vec3.normalize(Vec3.cross(Y_AXIS, d)); - var ANGLE_OFFSET = 25; - var q = Quat.angleAxis(theta * (180 / Math.PI) - (90 - ANGLE_OFFSET), w); - var u = Vec3.multiplyQbyV(q, d); - // use u to compute a full lookAt quaternion. - var lookAtRot = Quat.lookAt(tabletBase, Vec3.sum(tabletBase, u), Y_AXIS); - var yDisplacement = (height / 2); - var zDisplacement = 0.05; - var tabletOffset = Vec3.multiplyQbyV(lookAtRot, {x: 0, y: yDisplacement, z: zDisplacement}); - finalPosition = Vec3.sum(tabletBase, tabletOffset); + // rebuild normal from pitch and heading. + var heading = Math.atan2(normal.z, normal.x); + normal = {x: Math.cos(heading), y: Math.sin(pitch), z: Math.sin(heading)}; + + var position = Vec3.sum(handController.position, {x: 0, y: TABLET_UP_OFFSET, z: 0}); + var rotation = Quat.lookAt({x: 0, y: 0, z: 0}, normal, Y_AXIS); + var offset = Vec3.multiplyQbyV(rotation, {x: 0, y: height / 2, z: TABLET_FORWARD_OFFSET}); return { - position: finalPosition, - rotation: lookAtRot + position: Vec3.sum(offset, position), + rotation: rotation }; } else { var front = Quat.getFront(headRot); From 3a896541112f6c673b8a37b4740eff5b42cb0116 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Wed, 22 Mar 2017 19:14:53 +0100 Subject: [PATCH 178/247] saving work --- interface/resources/html/tabletHelp.html | 13 ++++++------ interface/src/Application.cpp | 8 +++++--- scripts/system/help.js | 26 ++++++++++++++++-------- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/interface/resources/html/tabletHelp.html b/interface/resources/html/tabletHelp.html index 1c70300297..6bd3b0e7ad 100644 --- a/interface/resources/html/tabletHelp.html +++ b/interface/resources/html/tabletHelp.html @@ -6,10 +6,11 @@ <title>Welcome to Interface</title> <style> - body { + body { background: black; width: 100%; overflow-x: hidden; + overflow-y: hidden; margin: 0; padding: 0; } @@ -18,7 +19,7 @@ position: absolute; left: 70; top: 118; - width: 297; + width: 160; height: 80; } @@ -26,7 +27,7 @@ position: absolute; left: 367; top: 118; - width: 267; + width: 160; height: 80; } @@ -34,12 +35,12 @@ position: absolute; left: 634; top: 118; - width: 297; + width: 160; height: 80; } #image_area { - width: 1024; + width: 480; height: 720; margin: auto; position: absolute; @@ -117,7 +118,7 @@ <body onload="load()"> <div id="image_area"> - <img id="main_image" src="img/controls-help-keyboard.png" width="1024px" height="720px"></img> + <img id="main_image" src="img/controls-help-keyboard.png" width="480px" height="720px"></img> <a href="#" id="kbm_button" onmousedown="showKbm()"></a> <a href="#" id="hand_controllers_button" onmousedown="showHandControllers()"></a> <a href="#" id="game_controller_button" onmousedown="showGamepad()"></a> diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 535a8adafc..1990d9be33 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -222,7 +222,7 @@ static const float MIRROR_FULLSCREEN_DISTANCE = 0.389f; static const quint64 TOO_LONG_SINCE_LAST_SEND_DOWNSTREAM_AUDIO_STATS = 1 * USECS_PER_SECOND; static const QString INFO_EDIT_ENTITIES_PATH = "html/edit-commands.html"; -static const QString INFO_HELP_PATH = "html/help.html"; +static const QString INFO_HELP_PATH = "../../../html/tabletHelp.html"; static const unsigned int THROTTLED_SIM_FRAMERATE = 15; static const int THROTTLED_SIM_FRAME_PERIOD_MS = MSECS_PER_SECOND / THROTTLED_SIM_FRAMERATE; @@ -2397,8 +2397,10 @@ void Application::showHelp() { QUrlQuery queryString; queryString.addQueryItem("handControllerName", handControllerName); queryString.addQueryItem("defaultTab", defaultTab); - - InfoView::show(INFO_HELP_PATH, false, queryString.toString()); + auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); + TabletProxy* tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); + tablet->gotoWebScreen(INFO_HELP_PATH + "?" + queryString.toString()); + //InfoView::show(INFO_HELP_PATH, false, queryString.toString()); } void Application::resizeEvent(QResizeEvent* event) { diff --git a/scripts/system/help.js b/scripts/system/help.js index 3923b922fc..ac411a8622 100644 --- a/scripts/system/help.js +++ b/scripts/system/help.js @@ -13,8 +13,10 @@ /* globals Tablet, Script, HMD, Controller, Menu */ (function() { // BEGIN LOCAL_SCOPE - + + var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; var buttonName = "HELP"; + var onHelpScreen = false; var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ icon: "icons/tablet-icons/help-i.svg", @@ -25,18 +27,24 @@ var enabled = false; function onClicked() { - if (enabled) { - Menu.closeInfoView('InfoView_html/help.html'); - enabled = !enabled; - button.editProperties({isActive: enabled}); + if (onHelpScreen) { + tablet.gotoHomeScreen(); } else { + var tabletEntity = HMD.tabletID; + if (tabletEntity) { + Entities.editEntity(tabletEntity, {textures: JSON.stringify({"tex.close" : HOME_BUTTON_TEXTURE})}); + } Menu.triggerOption('Help...'); - enabled = !enabled; - button.editProperties({isActive: enabled}); + onHelpScreen = true; } } + function onScreenChanged(type, url) { + onHelpScreen = false; + } + button.clicked.connect(onClicked); + tablet.screenChanged.connect(onScreenChanged); var POLL_RATE = 500; var interval = Script.setInterval(function () { @@ -48,8 +56,8 @@ }, POLL_RATE); Script.scriptEnding.connect(function () { - if (enabled) { - Menu.closeInfoView('InfoView_html/help.html'); + if (onUserScreen) { + tablet.gotoHomeScreen(); } button.clicked.disconnect(onClicked); Script.clearInterval(interval); From df875ab5042725f0f60cfb5cd0baa48d7e4bedfd Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Wed, 22 Mar 2017 16:21:45 -0700 Subject: [PATCH 179/247] make RenderablePolyVoxEntityItem::setSphere affect any voxel the sphere touches rather than just the ones whose center the sphere touches --- .../src/RenderablePolyVoxEntityItem.cpp | 39 +++++++++++++++---- libraries/shared/src/AABox.cpp | 26 +++++++++++++ libraries/shared/src/AABox.h | 1 + 3 files changed, 58 insertions(+), 8 deletions(-) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index efe284651a..cd62d72c70 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -414,19 +414,41 @@ bool RenderablePolyVoxEntityItem::setSphere(glm::vec3 centerWorldCoords, float r glm::ivec3 lowI = glm::clamp(low, glm::vec3(0.0f), _voxelVolumeSize); glm::ivec3 highI = glm::clamp(high, glm::vec3(0.0f), _voxelVolumeSize); + // This three-level for loop iterates over every voxel in the volume that might be in the sphere + // withWriteLock([&] { + // for (int z = lowI.z; z < highI.z; z++) { + // for (int y = lowI.y; y < highI.y; y++) { + // for (int x = lowI.x; x < highI.x; x++) { + // // Store our current position as a vector... + // glm::vec4 pos(x + 0.5f, y + 0.5f, z + 0.5f, 1.0); // consider voxels cenetered on their coordinates + // // convert to world coordinates + // glm::vec3 worldPos = glm::vec3(vtwMatrix * pos); + // // compute how far the current position is from the center of the volume + // float fDistToCenter = glm::distance(worldPos, centerWorldCoords); + // // If the current voxel is less than 'radius' units from the center then we set its value + // if (fDistToCenter <= radiusWorldCoords) { + // result |= setVoxelInternal(x, y, z, toValue); + // } + // } + // } + // } + // }); + + + glm::vec3 radials(radiusWorldCoords / voxelSize.x, + radiusWorldCoords / voxelSize.y, + radiusWorldCoords / voxelSize.z); + float minRadial = glm::min(radials.x, radials.y); + minRadial = glm::min(minRadial, radials.z); + // This three-level for loop iterates over every voxel in the volume that might be in the sphere withWriteLock([&] { for (int z = lowI.z; z < highI.z; z++) { for (int y = lowI.y; y < highI.y; y++) { for (int x = lowI.x; x < highI.x; x++) { - // Store our current position as a vector... - glm::vec4 pos(x + 0.5f, y + 0.5f, z + 0.5f, 1.0); // consider voxels cenetered on their coordinates - // convert to world coordinates - glm::vec3 worldPos = glm::vec3(vtwMatrix * pos); - // compute how far the current position is from the center of the volume - float fDistToCenter = glm::distance(worldPos, centerWorldCoords); - // If the current voxel is less than 'radius' units from the center then we set its value - if (fDistToCenter <= radiusWorldCoords) { + AABox voxelBox(glm::vec3(x - 0.5f, y - 0.5f, z - 0.5f), glm::vec3(1.0f, 1.0f, 1.0f)); + // if (voxelBox.touchesSphere(centerInVoxelCoords, minRadial)) { + if (voxelBox.touchesAAEllipsoid(centerInVoxelCoords, radials)) { result |= setVoxelInternal(x, y, z, toValue); } } @@ -434,6 +456,7 @@ bool RenderablePolyVoxEntityItem::setSphere(glm::vec3 centerWorldCoords, float r } }); + if (result) { compressVolumeDataAndSendEditPacket(); } diff --git a/libraries/shared/src/AABox.cpp b/libraries/shared/src/AABox.cpp index 89d5ce709d..fa993856dd 100644 --- a/libraries/shared/src/AABox.cpp +++ b/libraries/shared/src/AABox.cpp @@ -436,6 +436,32 @@ glm::vec3 AABox::getClosestPointOnFace(const glm::vec4& origin, const glm::vec4& return getClosestPointOnFace(glm::vec3(origin), face); } +bool AABox::touchesAAEllipsoid(const glm::vec3& center, glm::vec3 radials) const { + if (_corner.x - radials.x > center.x || + _corner.y - radials.y > center.y || + _corner.z - radials.z > center.z || + _corner.x + _scale.x + radials.x < center.x || + _corner.y + _scale.y + radials.y < center.y || + _corner.z + _scale.z + radials.z < center.z) { + return false; + } + + for (int i = 0; i < FACE_COUNT; i++) { + glm::vec3 closest = getClosestPointOnFace(center, (BoxFace)i) - center; + float x = closest.x; + float y = closest.y; + float z = closest.z; + float a = radials.x; + float b = radials.y; + float c = radials.z; + if (x*x/(a*a) + y*y/(b*b) + z*z/(c*c) < 1.0f) { + return true; + } + } + return false; +} + + glm::vec4 AABox::getPlane(BoxFace face) const { switch (face) { case MIN_X_FACE: return glm::vec4(-1.0f, 0.0f, 0.0f, _corner.x); diff --git a/libraries/shared/src/AABox.h b/libraries/shared/src/AABox.h index ccc7b6e302..022f1a6ff1 100644 --- a/libraries/shared/src/AABox.h +++ b/libraries/shared/src/AABox.h @@ -70,6 +70,7 @@ public: bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face, glm::vec3& surfaceNormal) const; bool touchesSphere(const glm::vec3& center, float radius) const; // fast but may generate false positives + bool touchesAAEllipsoid(const glm::vec3& center, glm::vec3 radials) const; bool findSpherePenetration(const glm::vec3& center, float radius, glm::vec3& penetration) const; bool findCapsulePenetration(const glm::vec3& start, const glm::vec3& end, float radius, glm::vec3& penetration) const; From af97c7275e9fd1dbb120e90c044fadad459b1b9d Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Thu, 23 Mar 2017 17:03:24 +0100 Subject: [PATCH 180/247] Use loadQMlSource if no stack is aviable --- interface/resources/qml/hifi/tablet/TabletRoot.qml | 1 - interface/src/Application.cpp | 6 +++++- libraries/script-engine/src/TabletScriptingInterface.cpp | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index 99c9351993..febb2793ec 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -8,7 +8,6 @@ Item { objectName: "tabletRoot" property string username: "Unknown user" property var eventBridge; - property var rootMenu; property var openModal: null; property var openMessage: null; diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 535a8adafc..78dee09fe4 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -5848,10 +5848,14 @@ void Application::showDialog(const QString& desktopURL, const QString& tabletURL auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tablet = dynamic_cast<TabletProxy*>(tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system")); auto hmd = DependencyManager::get<HMDScriptingInterface>(); - if (tablet->getToolbarMode() || (!hmd->getShouldShowTablet() && !isHMDMode())) { + if (tablet->getToolbarMode()) { DependencyManager::get<OffscreenUi>()->show(desktopURL, name); } else { tablet->pushOntoStack(tabletURL); + if (!hmd->getShouldShowTablet() && !isHMDMode()) { + hmd->openTablet(); + } + } } diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index e26b3a3f63..054cf83744 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -358,7 +358,7 @@ void TabletProxy::pushOntoStack(const QVariant& path) { if (stack) { QMetaObject::invokeMethod(stack, "pushSource", Q_ARG(const QVariant&, path)); } else { - qCDebug(scriptengine) << "tablet cannot push QML because _qmlTabletRoot doesn't have child stack"; + loadQMLSource(path); } } else if (_desktopWindow) { auto stack = _desktopWindow->asQuickItem()->findChild<QQuickItem*>("stack"); From ce9bb439b3106bf53b7100a2346d9c95cde28899 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 23 Mar 2017 09:55:30 -0700 Subject: [PATCH 181/247] change Model api in anticipation of more than just PolyVox being able to give meshes to javascript --- .../src/RenderablePolyVoxEntityItem.cpp | 6 +-- .../src/RenderablePolyVoxEntityItem.h | 3 +- libraries/entities/src/EntityItem.h | 6 ++- .../entities/src/EntityScriptingInterface.cpp | 40 ++++++++++++------- .../entities/src/EntityScriptingInterface.h | 3 +- libraries/entities/src/PolyVoxEntityItem.cpp | 4 -- libraries/entities/src/PolyVoxEntityItem.h | 2 - .../src => model/src/model}/MeshProxy.h | 15 ++++++- .../src/ModelScriptingInterface.cpp | 24 +---------- .../src/ModelScriptingInterface.h | 8 +--- 10 files changed, 52 insertions(+), 59 deletions(-) rename libraries/{script-engine/src => model/src/model}/MeshProxy.h (68%) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index efe284651a..f39d84caaf 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -1592,7 +1592,7 @@ void RenderablePolyVoxEntityItem::locationChanged(bool tellPhysics) { scene->enqueuePendingChanges(pendingChanges); } -bool RenderablePolyVoxEntityItem::getMeshAsScriptValue(QScriptEngine *engine, QScriptValue& result) { +bool RenderablePolyVoxEntityItem::getMeshes(MeshProxyList& result) { if (!updateDependents()) { return false; } @@ -1615,8 +1615,8 @@ bool RenderablePolyVoxEntityItem::getMeshAsScriptValue(QScriptEngine *engine, QS _mesh->map([=](glm::vec3 position){ return glm::vec3(transform * glm::vec4(position, 1.0f)); }, [=](glm::vec3 normal){ return glm::vec3(transform * glm::vec4(normal, 0.0f)); }, [&](uint32_t index){ return index; })); - result = meshToScriptValue(engine, meshProxy); + result << meshProxy; } }); - return success; + return meshProxy; } diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index e6467be987..a0d5c38a14 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -135,7 +135,6 @@ public: QByteArray volDataToArray(quint16 voxelXSize, quint16 voxelYSize, quint16 voxelZSize) const; void setMesh(model::MeshPointer mesh); - bool getMeshAsScriptValue(QScriptEngine *engine, QScriptValue& result) override; void setCollisionPoints(ShapeInfo::PointCollection points, AABox box); PolyVox::SimpleVolume<uint8_t>* getVolData() { return _volData; } @@ -147,6 +146,8 @@ public: // Transparent polyvox didn't seem to be working so disable for now bool isTransparent() override { return false; } + bool getMeshes(MeshProxyList& result) override; + protected: virtual void locationChanged(bool tellPhysics = true) override; diff --git a/libraries/entities/src/EntityItem.h b/libraries/entities/src/EntityItem.h index 163b4d9e45..b973d916e6 100644 --- a/libraries/entities/src/EntityItem.h +++ b/libraries/entities/src/EntityItem.h @@ -63,6 +63,8 @@ namespace render { #define debugTimeOnly(T) qPrintable(QString("%1").arg(T, 16, 10)) #define debugTreeVector(V) V << "[" << V << " in meters ]" +class MeshProxyList; + /// EntityItem class this is the base class for all entity types. It handles the basic properties and functionality available /// to all other entity types. In particular: postion, size, rotation, age, lifetime, velocity, gravity. You can not instantiate @@ -470,9 +472,11 @@ public: QUuid getLastEditedBy() const { return _lastEditedBy; } void setLastEditedBy(QUuid value) { _lastEditedBy = value; } - + bool matchesJSONFilters(const QJsonObject& jsonFilters) const; + virtual bool getMeshes(MeshProxyList& result) { return true; } + protected: void setSimulated(bool simulated) { _simulated = simulated; } diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 88d7acf7bf..0888dd4fb9 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -21,6 +21,7 @@ #include <VariantMapToScriptValue.h> #include <SharedUtil.h> #include <SpatialParentFinder.h> +#include <model/MeshProxy.h> #include "EntitiesLogging.h" #include "EntityActionFactoryInterface.h" @@ -1040,21 +1041,6 @@ bool EntityScriptingInterface::setVoxelsInCuboid(QUuid entityID, const glm::vec3 }); } -void EntityScriptingInterface::voxelsToMesh(QUuid entityID, QScriptValue callback) { - PROFILE_RANGE(script_entities, __FUNCTION__); - - bool success { false }; - QScriptValue mesh { false }; - - polyVoxWorker(entityID, [&](PolyVoxEntityItem& polyVoxEntity) mutable { - success = polyVoxEntity.getMeshAsScriptValue(callback.engine(), mesh); - return true; - }); - - QScriptValueList args { mesh, success }; - callback.call(QScriptValue(), args); -} - bool EntityScriptingInterface::setAllPoints(QUuid entityID, const QVector<glm::vec3>& points) { PROFILE_RANGE(script_entities, __FUNCTION__); @@ -1671,6 +1657,30 @@ bool EntityScriptingInterface::AABoxIntersectsCapsule(const glm::vec3& low, cons return aaBox.findCapsulePenetration(start, end, radius, penetration); } +void EntityScriptingInterface::getMeshes(QUuid entityID, QScriptValue callback) { + PROFILE_RANGE(script_entities, __FUNCTION__); + + EntityItemPointer entity = static_cast<EntityItemPointer>(_entityTree->findEntityByEntityItemID(entityID)); + if (!entity) { + qCDebug(entities) << "EntityScriptingInterface::getMeshes no entity with ID" << entityID; + QScriptValueList args { false, false }; + callback.call(QScriptValue(), args); + return; + } + + MeshProxyList result; + bool success = entity->getMeshes(result); + + if (success) { + QScriptValue resultAsScriptValue = meshesToScriptValue(callback.engine(), result); + QScriptValueList args { resultAsScriptValue, true }; + callback.call(QScriptValue(), args); + } else { + QScriptValueList args { callback.engine()->undefinedValue(), false }; + callback.call(QScriptValue(), args); + } +} + glm::mat4 EntityScriptingInterface::getEntityTransform(const QUuid& entityID) { glm::mat4 result; if (_entityTree) { diff --git a/libraries/entities/src/EntityScriptingInterface.h b/libraries/entities/src/EntityScriptingInterface.h index 944c2bb8d5..7b4c2ff800 100644 --- a/libraries/entities/src/EntityScriptingInterface.h +++ b/libraries/entities/src/EntityScriptingInterface.h @@ -266,7 +266,6 @@ public slots: Q_INVOKABLE bool setAllVoxels(QUuid entityID, int value); Q_INVOKABLE bool setVoxelsInCuboid(QUuid entityID, const glm::vec3& lowPosition, const glm::vec3& cuboidSize, int value); - Q_INVOKABLE void voxelsToMesh(QUuid entityID, QScriptValue callback); Q_INVOKABLE bool setAllPoints(QUuid entityID, const QVector<glm::vec3>& points); Q_INVOKABLE bool appendPoint(QUuid entityID, const glm::vec3& point); @@ -331,6 +330,8 @@ public slots: const glm::vec3& start, const glm::vec3& end, float radius); + Q_INVOKABLE void getMeshes(QUuid entityID, QScriptValue callback); + /**jsdoc * Returns object to world transform, excluding scale * diff --git a/libraries/entities/src/PolyVoxEntityItem.cpp b/libraries/entities/src/PolyVoxEntityItem.cpp index 90344d6c4b..2a374c1d17 100644 --- a/libraries/entities/src/PolyVoxEntityItem.cpp +++ b/libraries/entities/src/PolyVoxEntityItem.cpp @@ -242,7 +242,3 @@ const QByteArray PolyVoxEntityItem::getVoxelData() const { }); return voxelDataCopy; } - -bool PolyVoxEntityItem::getMeshAsScriptValue(QScriptEngine *engine, QScriptValue& result) { - return false; -} diff --git a/libraries/entities/src/PolyVoxEntityItem.h b/libraries/entities/src/PolyVoxEntityItem.h index 311a002a4a..cf7531fc9e 100644 --- a/libraries/entities/src/PolyVoxEntityItem.h +++ b/libraries/entities/src/PolyVoxEntityItem.h @@ -135,8 +135,6 @@ class PolyVoxEntityItem : public EntityItem { void setVoxelDataDirty(bool value) { withWriteLock([&] { _voxelDataDirty = value; }); } virtual void recomputeMesh() {}; - virtual bool getMeshAsScriptValue(QScriptEngine *engine, QScriptValue& result); - protected: glm::vec3 _voxelVolumeSize; // this is always 3 bytes diff --git a/libraries/script-engine/src/MeshProxy.h b/libraries/model/src/model/MeshProxy.h similarity index 68% rename from libraries/script-engine/src/MeshProxy.h rename to libraries/model/src/model/MeshProxy.h index 82f5038348..fcd36e6e9c 100644 --- a/libraries/script-engine/src/MeshProxy.h +++ b/libraries/model/src/model/MeshProxy.h @@ -1,6 +1,6 @@ // // MeshProxy.h -// libraries/script-engine/src +// libraries/model/src/model/ // // Created by Seth Alves on 2017-1-27. // Copyright 2017 High Fidelity, Inc. @@ -12,7 +12,11 @@ #ifndef hifi_MeshProxy_h #define hifi_MeshProxy_h -#include <model/Geometry.h> +#include <QScriptEngine> +#include <QScriptValueIterator> +#include <QtScript/QScriptValue> + +#include "Geometry.h" using MeshPointer = std::shared_ptr<model::Mesh>; @@ -38,4 +42,11 @@ Q_DECLARE_METATYPE(MeshProxy*); class MeshProxyList : public QList<MeshProxy*> {}; // typedef and using fight with the Qt macros/templates, do this instead Q_DECLARE_METATYPE(MeshProxyList); + +QScriptValue meshToScriptValue(QScriptEngine* engine, MeshProxy* const &in); +void meshFromScriptValue(const QScriptValue& value, MeshProxy* &out); + +QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in); +void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out); + #endif // hifi_MeshProxy_h diff --git a/libraries/script-engine/src/ModelScriptingInterface.cpp b/libraries/script-engine/src/ModelScriptingInterface.cpp index 833ac5b64d..22b7eb89ed 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.cpp +++ b/libraries/script-engine/src/ModelScriptingInterface.cpp @@ -18,30 +18,8 @@ ModelScriptingInterface::ModelScriptingInterface(QObject* parent) : QObject(parent) { _modelScriptEngine = qobject_cast<ScriptEngine*>(parent); -} -QScriptValue meshToScriptValue(QScriptEngine* engine, MeshProxy* const &in) { - return engine->newQObject(in, QScriptEngine::QtOwnership, - QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); -} - -void meshFromScriptValue(const QScriptValue& value, MeshProxy* &out) { - out = qobject_cast<MeshProxy*>(value.toQObject()); -} - -QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in) { - return engine->toScriptValue(in); -} - -void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out) { - QScriptValueIterator itr(value); - while(itr.hasNext()) { - itr.next(); - MeshProxy* meshProxy = qscriptvalue_cast<MeshProxyList::value_type>(itr.value()); - if (meshProxy) { - out.append(meshProxy); - } - } + qScriptRegisterSequenceMetaType<QList<MeshProxy*>>(_modelScriptEngine); } QString ModelScriptingInterface::meshToOBJ(MeshProxyList in) { diff --git a/libraries/script-engine/src/ModelScriptingInterface.h b/libraries/script-engine/src/ModelScriptingInterface.h index 14789943e3..105d6d548e 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.h +++ b/libraries/script-engine/src/ModelScriptingInterface.h @@ -17,7 +17,7 @@ #include <QScriptValue> #include <OBJWriter.h> #include <model/Geometry.h> -#include "MeshProxy.h" +#include <model/MeshProxy.h> using MeshPointer = std::shared_ptr<model::Mesh>; class ScriptEngine; @@ -36,10 +36,4 @@ private: ScriptEngine* _modelScriptEngine { nullptr }; }; -QScriptValue meshToScriptValue(QScriptEngine* engine, MeshProxy* const &in); -void meshFromScriptValue(const QScriptValue& value, MeshProxy* &out); - -QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in); -void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out); - #endif // hifi_ModelScriptingInterface_h From ba0c9e405a70ec0d44c1751db3d82553c44dc33e Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 23 Mar 2017 10:38:57 -0700 Subject: [PATCH 182/247] cleanup --- .../src/RenderablePolyVoxEntityItem.cpp | 38 +++++++------------ 1 file changed, 14 insertions(+), 24 deletions(-) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index f37b46d0bb..b7ca5b8e26 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -414,43 +414,33 @@ bool RenderablePolyVoxEntityItem::setSphere(glm::vec3 centerWorldCoords, float r glm::ivec3 lowI = glm::clamp(low, glm::vec3(0.0f), _voxelVolumeSize); glm::ivec3 highI = glm::clamp(high, glm::vec3(0.0f), _voxelVolumeSize); - // This three-level for loop iterates over every voxel in the volume that might be in the sphere - // withWriteLock([&] { - // for (int z = lowI.z; z < highI.z; z++) { - // for (int y = lowI.y; y < highI.y; y++) { - // for (int x = lowI.x; x < highI.x; x++) { - // // Store our current position as a vector... - // glm::vec4 pos(x + 0.5f, y + 0.5f, z + 0.5f, 1.0); // consider voxels cenetered on their coordinates - // // convert to world coordinates - // glm::vec3 worldPos = glm::vec3(vtwMatrix * pos); - // // compute how far the current position is from the center of the volume - // float fDistToCenter = glm::distance(worldPos, centerWorldCoords); - // // If the current voxel is less than 'radius' units from the center then we set its value - // if (fDistToCenter <= radiusWorldCoords) { - // result |= setVoxelInternal(x, y, z, toValue); - // } - // } - // } - // } - // }); - - glm::vec3 radials(radiusWorldCoords / voxelSize.x, radiusWorldCoords / voxelSize.y, radiusWorldCoords / voxelSize.z); - float minRadial = glm::min(radials.x, radials.y); - minRadial = glm::min(minRadial, radials.z); // This three-level for loop iterates over every voxel in the volume that might be in the sphere withWriteLock([&] { for (int z = lowI.z; z < highI.z; z++) { for (int y = lowI.y; y < highI.y; y++) { for (int x = lowI.x; x < highI.x; x++) { + + // set voxels whose bounding-box touches the sphere AABox voxelBox(glm::vec3(x - 0.5f, y - 0.5f, z - 0.5f), glm::vec3(1.0f, 1.0f, 1.0f)); - // if (voxelBox.touchesSphere(centerInVoxelCoords, minRadial)) { if (voxelBox.touchesAAEllipsoid(centerInVoxelCoords, radials)) { result |= setVoxelInternal(x, y, z, toValue); } + + // TODO -- this version only sets voxels which have centers inside the sphere. which is best? + // // Store our current position as a vector... + // glm::vec4 pos(x + 0.5f, y + 0.5f, z + 0.5f, 1.0); // consider voxels cenetered on their coordinates + // // convert to world coordinates + // glm::vec3 worldPos = glm::vec3(vtwMatrix * pos); + // // compute how far the current position is from the center of the volume + // float fDistToCenter = glm::distance(worldPos, centerWorldCoords); + // // If the current voxel is less than 'radius' units from the center then we set its value + // if (fDistToCenter <= radiusWorldCoords) { + // result |= setVoxelInternal(x, y, z, toValue); + // } } } } From bb1c556c911a169f3b384b2cd4515aea481bd7f9 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Thu, 23 Mar 2017 11:04:50 -0700 Subject: [PATCH 183/247] forgot a file --- libraries/model/src/model/MeshProxy.cpp | 54 +++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 libraries/model/src/model/MeshProxy.cpp diff --git a/libraries/model/src/model/MeshProxy.cpp b/libraries/model/src/model/MeshProxy.cpp new file mode 100644 index 0000000000..01bafa086c --- /dev/null +++ b/libraries/model/src/model/MeshProxy.cpp @@ -0,0 +1,54 @@ +// +// MeshProxy.cpp +// libraries/model/src/model/ +// +// Created by Seth Alves on 2017-3-22. +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include "MeshProxy.h" + + +QScriptValue meshToScriptValue(QScriptEngine* engine, MeshProxy* const &in) { + return engine->newQObject(in, QScriptEngine::QtOwnership, + QScriptEngine::ExcludeDeleteLater | QScriptEngine::ExcludeChildObjects); +} + +void meshFromScriptValue(const QScriptValue& value, MeshProxy* &out) { + out = qobject_cast<MeshProxy*>(value.toQObject()); +} + +QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in) { + // QScriptValueList result; + QScriptValue result = engine->newArray(); + int i = 0; + foreach (MeshProxy* const meshProxy, in) { + qDebug() << "meshesToScriptValue adding mesh: " << (void*)meshProxy; + // result.setProperty(i++, QScriptValue(engine, meshProxy)); + result.setProperty(i++, meshToScriptValue(engine, meshProxy)); + // result.setProperty(QString::number(i++), QScriptValue(meshProxy)); + // result[i] = QScriptValue(meshProxy); + // result << QScriptValue(meshProxy); + } + // result.setProperty("length", i); + return result; +} + +void meshesFromScriptValue(const QScriptValue& value, MeshProxyList &out) { + QScriptValueIterator itr(value); + + qDebug() << "in meshesFromScriptValue, value.length =" << value.property("length").toInt32(); + + while(itr.hasNext()) { + itr.next(); + MeshProxy* meshProxy = qscriptvalue_cast<MeshProxyList::value_type>(itr.value()); + if (meshProxy) { + out.append(meshProxy); + } else { + qDebug() << "null meshProxy"; + } + } +} From 8915ecd23d1196142f856d72dc8713a3073e45be Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidleity.io> Date: Wed, 22 Mar 2017 09:17:30 -0700 Subject: [PATCH 184/247] compile time option to switch from touch to mouse events for web tablet --- interface/src/ui/overlays/Web3DOverlay.cpp | 48 ++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index ede630d4ad..97c736cc8e 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -340,6 +340,52 @@ void Web3DOverlay::setProxyWindow(QWindow* proxyWindow) { _webSurface->setProxyWindow(proxyWindow); } +#define USE_MOUSE_EVENTS + +#ifdef USE_MOUSE_EVENTS +void Web3DOverlay::handlePointerEvent(const PointerEvent& event) { + if (!_webSurface) { + return; + } + + glm::vec2 windowPos = event.getPos2D() * (METERS_TO_INCHES * _dpi); + QPointF windowPoint(windowPos.x, windowPos.y); + + if (event.getType() == PointerEvent::Press) { + this->_pressed = true; + } else if (event.getType() == PointerEvent::Release) { + this->_pressed = false; + } + + + Qt::MouseButtons buttons = Qt::NoButton; + if (event.getButtons() & PointerEvent::PrimaryButton) { + buttons |= Qt::LeftButton; + } + + QEvent::Type type; + Qt::MouseButton button = Qt::NoButton; + if (event.getButton() == PointerEvent::PrimaryButton) { + button = Qt::LeftButton; + } + switch (event.getType()) { + case PointerEvent::Press: + type = QEvent::MouseButtonPress; + break; + case PointerEvent::Release: + type = QEvent::MouseButtonRelease; + break; + case PointerEvent::Move: + default: + type = QEvent::MouseMove; + break; + } + + QMouseEvent* mouseEvent = new QMouseEvent(type, windowPoint, windowPoint, windowPoint, button, buttons, Qt::NoModifier); + QCoreApplication::postEvent(_webSurface->getWindow(), mouseEvent); +} + +#else void Web3DOverlay::handlePointerEvent(const PointerEvent& event) { if (!_webSurface) { return; @@ -395,6 +441,8 @@ void Web3DOverlay::handlePointerEvent(const PointerEvent& event) { QCoreApplication::postEvent(_webSurface->getWindow(), touchEvent); } +#endif + void Web3DOverlay::setProperties(const QVariantMap& properties) { Billboard3DOverlay::setProperties(properties); From bab9890fea046e8c7165b686fbac1207b215d50a Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Thu, 23 Mar 2017 11:02:17 -0700 Subject: [PATCH 185/247] Added inputMode property to Web3DOverlay. This allows user to switch between Touch messages and Mouse messages. Added a sliderTestMain.js script which demonstrates this behavior. --- interface/src/ui/overlays/Web3DOverlay.cpp | 141 ++++++++-------- interface/src/ui/overlays/Web3DOverlay.h | 8 + libraries/shared/src/PointerEvent.cpp | 28 +++- libraries/shared/src/PointerEvent.h | 5 +- scripts/developer/tests/sliderTest.html | 157 ++++++++++++++++++ scripts/developer/tests/sliderTestMain.js | 35 ++++ .../system/controllers/handControllerGrab.js | 6 +- 7 files changed, 305 insertions(+), 75 deletions(-) create mode 100644 scripts/developer/tests/sliderTest.html create mode 100644 scripts/developer/tests/sliderTestMain.js diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index 97c736cc8e..1cf40d282d 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -232,10 +232,7 @@ void Web3DOverlay::render(RenderArgs* args) { std::weak_ptr<Web3DOverlay> weakSelf = std::dynamic_pointer_cast<Web3DOverlay>(qApp->getOverlays().getOverlay(selfOverlayID)); auto forwardPointerEvent = [=](OverlayID overlayID, const PointerEvent& event) { auto self = weakSelf.lock(); - if (!self) { - return; - } - if (overlayID == selfOverlayID) { + if (self && overlayID == selfOverlayID) { self->handlePointerEvent(event); } }; @@ -249,22 +246,9 @@ void Web3DOverlay::render(RenderArgs* args) { return; } if (self->_pressed && overlayID == selfOverlayID) { - // If the user mouses off the overlay while the button is down, simulate a touch end. - QTouchEvent::TouchPoint point; - point.setId(event.getID()); - point.setState(Qt::TouchPointReleased); - glm::vec2 windowPos = event.getPos2D() * (METERS_TO_INCHES * _dpi); - QPointF windowPoint(windowPos.x, windowPos.y); - point.setScenePos(windowPoint); - point.setPos(windowPoint); - QList<QTouchEvent::TouchPoint> touchPoints; - touchPoints.push_back(point); - QTouchEvent* touchEvent = new QTouchEvent(QEvent::TouchEnd, nullptr, Qt::NoModifier, Qt::TouchPointReleased, - touchPoints); - touchEvent->setWindow(self->_webSurface->getWindow()); - touchEvent->setDevice(&_touchDevice); - touchEvent->setTarget(self->_webSurface->getRootItem()); - QCoreApplication::postEvent(self->_webSurface->getWindow(), touchEvent); + PointerEvent endEvent(PointerEvent::Release, event.getID(), event.getPos2D(), event.getPos3D(), event.getNormal(), event.getDirection(), + event.getButton(), event.getButtons(), event.getKeyboardModifiers()); + forwardPointerEvent(overlayID, event); } }, Qt::DirectConnection); @@ -340,53 +324,15 @@ void Web3DOverlay::setProxyWindow(QWindow* proxyWindow) { _webSurface->setProxyWindow(proxyWindow); } -#define USE_MOUSE_EVENTS - -#ifdef USE_MOUSE_EVENTS void Web3DOverlay::handlePointerEvent(const PointerEvent& event) { - if (!_webSurface) { - return; + if (_inputMode == Touch) { + handlePointerEventAsTouch(event); + } else { + handlePointerEventAsMouse(event); } - - glm::vec2 windowPos = event.getPos2D() * (METERS_TO_INCHES * _dpi); - QPointF windowPoint(windowPos.x, windowPos.y); - - if (event.getType() == PointerEvent::Press) { - this->_pressed = true; - } else if (event.getType() == PointerEvent::Release) { - this->_pressed = false; - } - - - Qt::MouseButtons buttons = Qt::NoButton; - if (event.getButtons() & PointerEvent::PrimaryButton) { - buttons |= Qt::LeftButton; - } - - QEvent::Type type; - Qt::MouseButton button = Qt::NoButton; - if (event.getButton() == PointerEvent::PrimaryButton) { - button = Qt::LeftButton; - } - switch (event.getType()) { - case PointerEvent::Press: - type = QEvent::MouseButtonPress; - break; - case PointerEvent::Release: - type = QEvent::MouseButtonRelease; - break; - case PointerEvent::Move: - default: - type = QEvent::MouseMove; - break; - } - - QMouseEvent* mouseEvent = new QMouseEvent(type, windowPoint, windowPoint, windowPoint, button, buttons, Qt::NoModifier); - QCoreApplication::postEvent(_webSurface->getWindow(), mouseEvent); } -#else -void Web3DOverlay::handlePointerEvent(const PointerEvent& event) { +void Web3DOverlay::handlePointerEventAsTouch(const PointerEvent& event) { if (!_webSurface) { return; } @@ -394,16 +340,16 @@ void Web3DOverlay::handlePointerEvent(const PointerEvent& event) { glm::vec2 windowPos = event.getPos2D() * (METERS_TO_INCHES * _dpi); QPointF windowPoint(windowPos.x, windowPos.y); - if (event.getType() == PointerEvent::Move) { + if (event.getButtons() == PointerEvent::NoButtons && event.getType() == PointerEvent::Move) { // Forward a mouse move event to the Web surface. - QMouseEvent* mouseEvent = new QMouseEvent(QEvent::MouseMove, windowPoint, windowPoint, windowPoint, Qt::NoButton, - Qt::NoButton, Qt::NoModifier); + QMouseEvent* mouseEvent = new QMouseEvent(QEvent::MouseMove, windowPoint, windowPoint, windowPoint, Qt::NoButton, Qt::NoButton, Qt::NoModifier); QCoreApplication::postEvent(_webSurface->getWindow(), mouseEvent); + return; } - if (event.getType() == PointerEvent::Press) { + if (event.getType() == PointerEvent::Press && event.getButton() == PointerEvent::PrimaryButton) { this->_pressed = true; - } else if (event.getType() == PointerEvent::Release) { + } else if (event.getType() == PointerEvent::Release && event.getButton() == PointerEvent::PrimaryButton) { this->_pressed = false; } @@ -441,8 +387,47 @@ void Web3DOverlay::handlePointerEvent(const PointerEvent& event) { QCoreApplication::postEvent(_webSurface->getWindow(), touchEvent); } -#endif +void Web3DOverlay::handlePointerEventAsMouse(const PointerEvent& event) { + if (!_webSurface) { + return; + } + + glm::vec2 windowPos = event.getPos2D() * (METERS_TO_INCHES * _dpi); + QPointF windowPoint(windowPos.x, windowPos.y); + + if (event.getType() == PointerEvent::Press) { + this->_pressed = true; + } else if (event.getType() == PointerEvent::Release) { + this->_pressed = false; + } + + Qt::MouseButtons buttons = Qt::NoButton; + if (event.getButtons() & PointerEvent::PrimaryButton) { + buttons |= Qt::LeftButton; + } + + QEvent::Type type; + Qt::MouseButton button = Qt::NoButton; + if (event.getButton() == PointerEvent::PrimaryButton) { + button = Qt::LeftButton; + } + switch (event.getType()) { + case PointerEvent::Press: + type = QEvent::MouseButtonPress; + break; + case PointerEvent::Release: + type = QEvent::MouseButtonRelease; + break; + case PointerEvent::Move: + default: + type = QEvent::MouseMove; + break; + } + + QMouseEvent* mouseEvent = new QMouseEvent(type, windowPoint, windowPoint, windowPoint, button, buttons, Qt::NoModifier); + QCoreApplication::postEvent(_webSurface->getWindow(), mouseEvent); +} void Web3DOverlay::setProperties(const QVariantMap& properties) { Billboard3DOverlay::setProperties(properties); @@ -486,6 +471,16 @@ void Web3DOverlay::setProperties(const QVariantMap& properties) { if (showKeyboardFocusHighlight.isValid()) { _showKeyboardFocusHighlight = showKeyboardFocusHighlight.toBool(); } + + auto inputModeValue = properties["inputMode"]; + if (inputModeValue.isValid()) { + QString inputModeStr = inputModeValue.toString(); + if (inputModeStr == "Mouse") { + _inputMode = Mouse; + } else { + _inputMode = Touch; + } + } } QVariant Web3DOverlay::getProperty(const QString& property) { @@ -507,6 +502,14 @@ QVariant Web3DOverlay::getProperty(const QString& property) { if (property == "showKeyboardFocusHighlight") { return _showKeyboardFocusHighlight; } + + if (property == "inputMode") { + if (_inputMode == Mouse) { + return QVariant("Mouse"); + } else { + return QVariant("Touch"); + } + } return Billboard3DOverlay::getProperty(property); } diff --git a/interface/src/ui/overlays/Web3DOverlay.h b/interface/src/ui/overlays/Web3DOverlay.h index e71cac2452..6a35dec96d 100644 --- a/interface/src/ui/overlays/Web3DOverlay.h +++ b/interface/src/ui/overlays/Web3DOverlay.h @@ -40,6 +40,8 @@ public: QObject* getEventHandler(); void setProxyWindow(QWindow* proxyWindow); void handlePointerEvent(const PointerEvent& event); + void handlePointerEventAsTouch(const PointerEvent& event); + void handlePointerEventAsMouse(const PointerEvent& event); // setters void setURL(const QString& url); @@ -55,6 +57,11 @@ public: virtual Web3DOverlay* createClone() const override; + enum InputMode { + Touch, + Mouse + }; + public slots: void emitScriptEvent(const QVariant& scriptMessage); @@ -63,6 +70,7 @@ signals: void webEventReceived(const QVariant& message); private: + InputMode _inputMode { Touch }; QSharedPointer<OffscreenQmlSurface> _webSurface; QMetaObject::Connection _connection; gpu::TexturePointer _texture; diff --git a/libraries/shared/src/PointerEvent.cpp b/libraries/shared/src/PointerEvent.cpp index 1a64a5ddb1..7ec5e78b9f 100644 --- a/libraries/shared/src/PointerEvent.cpp +++ b/libraries/shared/src/PointerEvent.cpp @@ -143,7 +143,7 @@ void PointerEvent::fromScriptValue(const QScriptValue& object, PointerEvent& eve } QScriptValue id = object.property("id"); - event._id = type.isNumber() ? (uint32_t)type.toNumber() : 0; + event._id = id.isNumber() ? (uint32_t)id.toNumber() : 0; glm::vec2 pos2D; vec2FromScriptValue(object.property("pos2D"), event._pos2D); @@ -158,7 +158,8 @@ void PointerEvent::fromScriptValue(const QScriptValue& object, PointerEvent& eve vec3FromScriptValue(object.property("direction"), event._direction); QScriptValue button = object.property("button"); - QString buttonStr = type.isString() ? type.toString() : "NoButtons"; + QString buttonStr = type.isString() ? button.toString() : "NoButtons"; + if (buttonStr == "Primary") { event._button = PrimaryButton; } else if (buttonStr == "Secondary") { @@ -186,3 +187,26 @@ void PointerEvent::fromScriptValue(const QScriptValue& object, PointerEvent& eve event._keyboardModifiers = (Qt::KeyboardModifiers)(object.property("keyboardModifiers").toUInt32()); } } + +static const char* typeToStringMap[PointerEvent::NumEventTypes] = { "Press", "DoublePress", "Release", "Move" }; +static const char* buttonsToStringMap[8] = { + "NoButtons", + "PrimaryButton", + "SecondaryButton", + "PrimaryButton | SecondaryButton", + "TertiaryButton", + "PrimaryButton | TertiaryButton", + "SecondaryButton | TertiaryButton", + "PrimaryButton | SecondaryButton | TertiaryButton", +}; + +QDebug& operator<<(QDebug& dbg, const PointerEvent& p) { + dbg.nospace() << "PointerEvent, type = " << typeToStringMap[p.getType()] << ", id = " << p.getID(); + dbg.nospace() << ", pos2D = (" << p.getPos2D().x << ", " << p.getPos2D().y; + dbg.nospace() << "), pos3D = (" << p.getPos3D().x << ", " << p.getPos3D().y << ", " << p.getPos3D().z; + dbg.nospace() << "), normal = (" << p.getNormal().x << ", " << p.getNormal().y << ", " << p.getNormal().z; + dbg.nospace() << "), dir = (" << p.getDirection().x << ", " << p.getDirection().y << ", " << p.getDirection().z; + dbg.nospace() << "), button = " << buttonsToStringMap[p.getButton()] << " " << (int)p.getButton(); + dbg.nospace() << ", buttons = " << buttonsToStringMap[p.getButtons()]; + return dbg; +} diff --git a/libraries/shared/src/PointerEvent.h b/libraries/shared/src/PointerEvent.h index 4c00ba3e69..cdea0aa3ed 100644 --- a/libraries/shared/src/PointerEvent.h +++ b/libraries/shared/src/PointerEvent.h @@ -31,7 +31,8 @@ public: Press, // A button has just been pressed DoublePress, // A button has just been double pressed Release, // A button has just been released - Move // The pointer has just moved + Move, // The pointer has just moved + NumEventTypes }; PointerEvent(); @@ -68,6 +69,8 @@ private: Qt::KeyboardModifiers _keyboardModifiers; // set of keys held when event was generated }; +QDebug& operator<<(QDebug& dbg, const PointerEvent& p); + Q_DECLARE_METATYPE(PointerEvent) #endif // hifi_PointerEvent_h diff --git a/scripts/developer/tests/sliderTest.html b/scripts/developer/tests/sliderTest.html new file mode 100644 index 0000000000..a672cfeaf8 --- /dev/null +++ b/scripts/developer/tests/sliderTest.html @@ -0,0 +1,157 @@ +<!-- +// quick_start_template.html +// +// Created by Faye Li on 3 Feb 2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +--> +<html> + <head> + <title>Slider Test</title> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link href="https://fonts.googleapis.com/css?family=Raleway:300,400,600,700"" rel="stylesheet"> + <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> + <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.7.2/css/bootstrap-slider.min.css"> + <!-- <link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css" /> --> + <style> + body { + margin: 0; + width: 100%; + font-family: 'Raleway', sans-serif; + color: white; + background: linear-gradient(#2b2b2b, #0f212e); + } + + .top-bar { + height: 90px; + background: linear-gradient(#2b2b2b, #1e1e1e); + font-weight: bold; + padding-left: 30px; + padding-right: 30px; + display: flex; + align-items: center; + position: fixed; + width: 480px; + top: 0; + z-index: 1; + } + + .content { + margin-top: 90px; + padding: 30px; + } + + input[type=button] { + font-family: 'Raleway'; + font-weight: bold; + font-size: 13px; + text-transform: uppercase; + vertical-align: top; + height: 28px; + min-width: 120px; + padding: 0px 18px; + margin-right: 6px; + border-radius: 5px; + border: none; + color: #fff; + background-color: #000; + background: linear-gradient(#343434 20%, #000 100%); + cursor: pointer; + } + + input[type=button].red { + color: #fff; + background-color: #94132e; + background: linear-gradient(#d42043 20%, #94132e 100%); + } + input[type=button].blue { + color: #fff; + background-color: #1080b8; + background: linear-gradient(#00b4ef 20%, #1080b8 100%); + } + input[type=button].white { + color: #121212; + background-color: #afafaf; + background: linear-gradient(#fff 20%, #afafaf 100%); + } + + input[type=button]:enabled:hover { + background: linear-gradient(#000, #000); + border: none; + } + input[type=button].red:enabled:hover { + background: linear-gradient(#d42043, #d42043); + border: none; + } + input[type=button].blue:enabled:hover { + background: linear-gradient(#00b4ef, #00b4ef); + border: none; + } + input[type=button].white:enabled:hover { + background: linear-gradient(#fff, #fff); + border: none; + } + + input[type=button]:active { + background: linear-gradient(#343434, #343434); + } + input[type=button].red:active { + background: linear-gradient(#94132e, #94132e); + } + input[type=button].blue:active { + background: linear-gradient(#1080b8, #1080b8); + } + input[type=button].white:active { + background: linear-gradient(#afafaf, #afafaf); + } + + input[type=button]:disabled { + color: #252525; + background: linear-gradient(#575757 20%, #252525 100%); + } + + input[type=button][pressed=pressed] { + color: #00b4ef; + } + + </style> + </head> + <body> + <div class="top-bar"> + <h4>Slider Test</h4> + </div> + <div class="content"> + <p>Native Input Range Slider</p> + <p> + <input type="range" name="native-slider" id="native-slider" value="60" min="0" max="100"> + </p> + <p>Bootstrap Slider</p> + <p> + <input + id="bootstrap-slider" + type="text" + data-provide="slider" + data-slider-min="0" + data-slider-max="100" + data-slider-step="1" + data-slider-value="60" + data-slider-tooltip="hide" + > + </p> + </div> + + <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> + <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/9.7.2/bootstrap-slider.min.js"></script> + <script> + function main() { + console.log("ready"); + } + + $(document).ready(main); + </script> + </body> +</html> \ No newline at end of file diff --git a/scripts/developer/tests/sliderTestMain.js b/scripts/developer/tests/sliderTestMain.js new file mode 100644 index 0000000000..22bf4fa911 --- /dev/null +++ b/scripts/developer/tests/sliderTestMain.js @@ -0,0 +1,35 @@ +(function () { + var HTML_URL = Script.resolvePath("sliderTest.html"); + var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); + var button = tablet.addButton({ + text: "SLIDER" + }); + + function onClicked() { + tablet.gotoWebScreen(HTML_URL); + } + + button.clicked.connect(onClicked); + + var onSliderTestScreen = false; + function onScreenChanged(type, url) { + if (type === "Web" && url === HTML_URL) { + // when switching to the slider page, change inputMode to "Mouse", this should make the sliders work. + onSliderTestScreen = true; + Overlays.editOverlay(HMD.tabletScreenID, { inputMode: "Mouse" }); + } else if (onSliderTestScreen) { + // when switching off of the slider page, change inputMode to back to "Touch". + onSliderTestScreen = false; + Overlays.editOverlay(HMD.tabletScreenID, { inputMode: "Touch" }); + } + } + + tablet.screenChanged.connect(onScreenChanged); + + function cleanup() { + tablet.removeButton(button); + tablet.screenChanged.disconnect(onScreenChanged); + } + Script.scriptEnding.connect(cleanup); + +}()); diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index c8b78b4d08..f614020880 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -3446,7 +3446,7 @@ function MyController(hand) { if (intersectInfo) { var pointerEvent = { type: "Press", - id: HARDWARE_MOUSE_ID, + id: this.hand + 1, pos2D: projectOntoOverlayXYPlane(this.grabbedOverlay, intersectInfo.point), pos3D: intersectInfo.point, normal: intersectInfo.normal, @@ -3495,7 +3495,7 @@ function MyController(hand) { if (this.deadspotExpired) { pointerEvent = { type: "Release", - id: HARDWARE_MOUSE_ID, + id: this.hand + 1, pos2D: pos2D, pos3D: pos3D, normal: intersectInfo.normal, @@ -3539,7 +3539,7 @@ function MyController(hand) { var pointerEvent = { type: "Move", - id: HARDWARE_MOUSE_ID, + id: this.hand + 1, pos2D: pos2D, pos3D: pos3D, normal: intersectInfo.normal, From b023cb71be18df4c97a872ad7a7f633ea517087c Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 16:02:39 -0700 Subject: [PATCH 186/247] when building RelWithDebInfo check for correct bullet libs --- cmake/externals/bullet/CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cmake/externals/bullet/CMakeLists.txt b/cmake/externals/bullet/CMakeLists.txt index 125432002c..799306d8e5 100644 --- a/cmake/externals/bullet/CMakeLists.txt +++ b/cmake/externals/bullet/CMakeLists.txt @@ -66,11 +66,15 @@ if (DEFINED BULLET_LIB_EXT) list(GET _LIB_PAIR 0 _LIB_VAR_NAME) list(GET _LIB_PAIR 1 _LIB_NAME) - set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE ${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}.${BULLET_LIB_EXT} CACHE FILEPATH "${_LIB_NAME} release library location") + if (WIN32) + # on windows, we might end up with a library that ends with RelWithDebInfo if Visual Studio is building for that configuration + set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE "${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}$<$<OR:$<CONFIG:RelWithDebInfo>>:_RelWithDebugInfo>.${BULLET_LIB_EXT}" CACHE FILEPATH "${_LIB_NAME} release library location") + set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_DEBUG ${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}_Debug.${BULLET_LIB_EXT} CACHE FILEPATH "${_LIB_NAME} debug library location") else () + set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE ${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}.${BULLET_LIB_EXT} CACHE FILEPATH "${_LIB_NAME} release library location") set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_DEBUG "" CACHE FILEPATH "${_LIB_NAME} debug library location") endif () endforeach() From 654ae5032b5c202adc63ff536201bc9e1e2b132c Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 16:11:48 -0700 Subject: [PATCH 187/247] simplify the RelWithDebInfo check in bullet ext --- cmake/externals/bullet/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/externals/bullet/CMakeLists.txt b/cmake/externals/bullet/CMakeLists.txt index 799306d8e5..098f0bb19d 100644 --- a/cmake/externals/bullet/CMakeLists.txt +++ b/cmake/externals/bullet/CMakeLists.txt @@ -70,7 +70,7 @@ if (DEFINED BULLET_LIB_EXT) if (WIN32) # on windows, we might end up with a library that ends with RelWithDebInfo if Visual Studio is building for that configuration - set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE "${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}$<$<OR:$<CONFIG:RelWithDebInfo>>:_RelWithDebugInfo>.${BULLET_LIB_EXT}" CACHE FILEPATH "${_LIB_NAME} release library location") + set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE "${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}$<$<CONFIG:RelWithDebInfo>:_RelWithDebugInfo>.${BULLET_LIB_EXT}" CACHE FILEPATH "${_LIB_NAME} release library location") set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_DEBUG ${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}_Debug.${BULLET_LIB_EXT} CACHE FILEPATH "${_LIB_NAME} debug library location") else () From a078121c464325d0b52deacc6e37a424f43345e5 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 24 Mar 2017 00:23:13 +0100 Subject: [PATCH 188/247] saving work --- interface/resources/qml/hifi/Card.qml | 73 ++++++++++--------- .../resources/qml/hifi/TabletTextButton.qml | 64 ++++++++++++++++ .../qml/hifi/tablet/TabletAddressDialog.qml | 55 +++++--------- scripts/defaultScripts.js | 2 +- 4 files changed, 124 insertions(+), 70 deletions(-) create mode 100644 interface/resources/qml/hifi/TabletTextButton.qml diff --git a/interface/resources/qml/hifi/Card.qml b/interface/resources/qml/hifi/Card.qml index f6f7e88d0c..781149c1b3 100644 --- a/interface/resources/qml/hifi/Card.qml +++ b/interface/resources/qml/hifi/Card.qml @@ -153,44 +153,49 @@ Rectangle { margins: textPadding; } } - Row { - FiraSansRegular { - id: users; - visible: isConcurrency; - text: onlineUsers; - size: textSize; - color: messageColor; - anchors.verticalCenter: message.verticalCenter; - } - Image { - id: icon; - source: "../../images/snap-icon.svg" - width: 40; - height: 40; - visible: action === 'snapshot'; - } - RalewayRegular { - id: message; - text: isConcurrency ? ((onlineUsers === 1) ? "person" : "people") : (drillDownToPlace ? "snapshots" : ("by " + userName)); - size: textSizeSmall; - color: messageColor; - elide: Text.ElideRight; // requires a width to be specified` - width: root.width - textPadding - - (users.visible ? users.width + parent.spacing : 0) - - (icon.visible ? icon.width + parent.spacing : 0) - - (actionIcon.width + (2 * smallMargin)); + + Rectangle { + radius: 20 + color: "transparent" + Row { + FiraSansRegular { + id: users; + visible: isConcurrency; + text: onlineUsers; + size: textSize; + color: messageColor; + anchors.verticalCenter: message.verticalCenter; + } + Image { + id: icon; + source: "../../images/snap-icon.svg" + width: 40; + height: 40; + visible: action === 'snapshot'; + } + RalewayRegular { + id: message; + text: isConcurrency ? ((onlineUsers === 1) ? "person" : "people") : (drillDownToPlace ? "snapshots" : ("by " + userName)); + size: textSizeSmall; + color: messageColor; + elide: Text.ElideRight; // requires a width to be specified` + width: root.width - textPadding + - (users.visible ? users.width + parent.spacing : 0) + - (icon.visible ? icon.width + parent.spacing : 0) + - (actionIcon.width + (2 * smallMargin)); + anchors { + bottom: parent.bottom; + bottomMargin: parent.spacing; + } + } + spacing: textPadding; + height: messageHeight; anchors { bottom: parent.bottom; - bottomMargin: parent.spacing; + left: parent.left; + leftMargin: textPadding; } } - spacing: textPadding; - height: messageHeight; - anchors { - bottom: parent.bottom; - left: parent.left; - leftMargin: textPadding; - } } // These two can be supplied to provide hover behavior. // For example, AddressBarDialog provides functions that set the current list view item diff --git a/interface/resources/qml/hifi/TabletTextButton.qml b/interface/resources/qml/hifi/TabletTextButton.qml new file mode 100644 index 0000000000..20f30f002c --- /dev/null +++ b/interface/resources/qml/hifi/TabletTextButton.qml @@ -0,0 +1,64 @@ +// +// TabletTextButton.qml +// +// Created by Dante Ruiz on 2017/3/23 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.4 +import "../styles-uit" + +Rectangle { + property alias text: label.text + property alias pixelSize: label.font.pixelSize; + property bool selected: false + property int spacing: 2 + property var action: function () {} + property string highlightColor: hifi.colors.blueHighlight; + width: label.width + 64 + height: 32 + color: hifi.colors.white + HifiConstants { id: hifi } + RalewaySemiBold { + id: label; + color: hifi.colors.blueHighlight; + font.pixelSize: 15; + anchors { + horizontalCenter: parent.horizontalCenter; + verticalCenter: parent.verticalCenter; + } + } + + /*Rectangle { + anchors.fill: parent + border.width: 3 + border.color: clickArea.containMouse ? highlightColor : "transparent" + color: "transparent" + }*/ + + Rectangle { + id: indicator + width: parent.width + height: 3 + anchors { + left: parent.left + right: parent.right + bottom: parent.bottom + } + color: hifi.colors.blueHighlight + visible: parent.selected + } + + MouseArea { + id: clickArea; + anchors.fill: parent; + acceptedButtons: Qt.LeftButton; + onClicked: action(parent); + hoverEnabled: true; + } +} + diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 8054c90603..9e68d3435a 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -28,7 +28,7 @@ Item { height: parent.height property var allStories: []; - property int cardWidth: 370; + property int cardWidth: 460; property int cardHeight: 320; property string metaverseBase: addressBarDialog.metaverseServerUrl + "/api/v1/"; @@ -86,7 +86,7 @@ Item { id: navBar width: 480 height: 70 - + color: hifi.colors.white anchors { top: parent.top right: parent.right @@ -201,22 +201,17 @@ Item { } } } + + Rectangle { + anchors.fill: addressLine + color: hifiStyleConstants.colors.baseGray + opacity: 0.1 + } } Rectangle { id: topBar - height: 90 - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - - } - - GradientStop { - position: 1 - color: "#1e1e1e" - } - } + height: 37 + color: hifi.colors.white anchors.right: parent.right anchors.rightMargin: 0 @@ -227,14 +222,15 @@ Item { Row { id: thing - spacing: 2 * hifi.layout.spacing + spacing: 5 * hifi.layout.spacing anchors { top: parent.top; left: parent.left + leftMargin: 25 } - TextButton { + TabletTextButton { id: allTab; text: "ALL"; property string includeActions: 'snapshot, concurrency'; @@ -242,7 +238,7 @@ Item { action: tabSelect; } - TextButton { + TabletTextButton { id: placeTab; text: "PLACES"; property string includeActions: 'concurrency'; @@ -251,7 +247,7 @@ Item { } - TextButton { + TabletTextButton { id: snapTab; text: "SNAP"; property string includeActions: 'snapshot'; @@ -264,20 +260,7 @@ Item { Rectangle { id: bgMain - gradient: Gradient { - GradientStop { - position: 0 - color: "#2b2b2b" - - } - - GradientStop { - position: 1 - color: "#0f212e" - } - } - - + color: hifi.colors.white anchors.bottom: parent.keyboardEnabled ? keyboard.top : parent.bottom anchors.bottomMargin: 0 anchors.right: parent.right @@ -292,7 +275,7 @@ Item { ListView { id: scroll - property int stackedCardShadowHeight: 10; + property int stackedCardShadowHeight: 0; clip: true spacing: 14 anchors { @@ -300,7 +283,9 @@ Item { top: parent.top left: parent.left right: parent.right - leftMargin: 50 + leftMargin: 10 + verticalCenter: parent.verticalCenter; + horizontalCenter: parent.horizontalCenter; } model: suggestions orientation: ListView.Vertical diff --git a/scripts/defaultScripts.js b/scripts/defaultScripts.js index aba2f35e6b..109b92d33a 100644 --- a/scripts/defaultScripts.js +++ b/scripts/defaultScripts.js @@ -21,7 +21,7 @@ var DEFAULT_SCRIPTS_COMBINED = [ "system/snapshot.js", "system/help.js", "system/pal.js", // "system/mod.js", // older UX, if you prefer - "system/goto.js", + "system/tablet-goto.js", "system/marketplaces/marketplaces.js", "system/edit.js", "system/tablet-users.js", From be34e5a814709399677663c15050beb8750443bb Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 16:40:13 -0700 Subject: [PATCH 189/247] fix RelWithDebInfo path for faceshift --- cmake/externals/faceshift/CMakeLists.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cmake/externals/faceshift/CMakeLists.txt b/cmake/externals/faceshift/CMakeLists.txt index 28fbffec34..ed387be34f 100644 --- a/cmake/externals/faceshift/CMakeLists.txt +++ b/cmake/externals/faceshift/CMakeLists.txt @@ -27,6 +27,8 @@ set(LIBRARY_RELEASE_PATH "lib/Release") if (WIN32) set(LIBRARY_PREFIX "") set(LIBRARY_EXT "lib") + # use RelWithDebInfo in release path when building RelWithDebInfo config on Windows + set(LIBRARY_RELEASE_PATH "$<$<CONFIG:RelWithDebInfo>:build/RelWithDebInfo>$<$<NOT:$<CONFIG:RelWithDebInfo>>:lib/Release>") elseif (APPLE) set(LIBRARY_EXT "a") set(LIBRARY_PREFIX "lib") From 670f51af0b3fffb7080b26b95c0d927235d6c353 Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 16:50:03 -0700 Subject: [PATCH 190/247] fix reference to RelWithDebugInfo library for polyvox --- cmake/externals/polyvox/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cmake/externals/polyvox/CMakeLists.txt b/cmake/externals/polyvox/CMakeLists.txt index 3740e26762..9aa4bed955 100644 --- a/cmake/externals/polyvox/CMakeLists.txt +++ b/cmake/externals/polyvox/CMakeLists.txt @@ -19,7 +19,7 @@ ExternalProject_Get_Property(${EXTERNAL_NAME} INSTALL_DIR) if (APPLE) set(INSTALL_NAME_LIBRARY_DIR ${INSTALL_DIR}/lib) - + ExternalProject_Add_Step( ${EXTERNAL_NAME} change-install-name-debug @@ -29,7 +29,7 @@ if (APPLE) WORKING_DIRECTORY <SOURCE_DIR> LOG 1 ) - + ExternalProject_Add_Step( ${EXTERNAL_NAME} change-install-name-release @@ -59,7 +59,7 @@ endif () if (WIN32) set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_DEBUG ${INSTALL_DIR}/PolyVoxCore/lib/Debug/PolyVoxCore.lib CACHE FILEPATH "polyvox core library") - set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_RELEASE ${INSTALL_DIR}/PolyVoxCore/lib/Release/PolyVoxCore.lib CACHE FILEPATH "polyvox core library") + set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_RELEASE "${INSTALL_DIR}/PolyVoxCore/lib/$<$<CONFIG:RelWithDebInfo>:RelWithDebInfo>$<$<NOT:$<CONFIG:RelWithDebInfo>>:Release>/PolyVoxCore.lib" CACHE FILEPATH "polyvox core library") # set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY ${INSTALL_DIR}/PolyVoxUtil/lib/PolyVoxUtil.lib CACHE FILEPATH "polyvox util library") elseif (APPLE) set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/libPolyVoxCore.dylib CACHE FILEPATH "polyvox core library") From e100a7bedbab70e1160f86304083cfb50ade9993 Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 16:54:21 -0700 Subject: [PATCH 191/247] point VHACD external to correct library for RelWithDebugInfo --- cmake/externals/vhacd/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/externals/vhacd/CMakeLists.txt b/cmake/externals/vhacd/CMakeLists.txt index efe6ed0381..befdce0b96 100644 --- a/cmake/externals/vhacd/CMakeLists.txt +++ b/cmake/externals/vhacd/CMakeLists.txt @@ -8,7 +8,7 @@ include(ExternalProject) ExternalProject_Add( ${EXTERNAL_NAME} URL http://hifi-public.s3.amazonaws.com/dependencies/v-hacd-master.zip - URL_MD5 3bfc94f8dd3dfbfe8f4dc088f4820b3e + URL_MD5 3bfc94f8dd3dfbfe8f4dc088f4820b3e CMAKE_ARGS ${ANDROID_CMAKE_ARGS} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> BINARY_DIR ${EXTERNAL_PROJECT_PREFIX}/build LOG_DOWNLOAD 1 @@ -25,7 +25,11 @@ string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) if (WIN32) set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD debug library") - set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/Release/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD release library") + + # use generator expression to ensure the library is found when building RelWithDebInfo in VS + set(_LIB_FOLDER "$<$<CONFIG:RelWithDebInfo>:build/src/VHACD_Lib/RelWithDebInfo>$<$<NOT:$<CONFIG:RelWithDebInfo>>:lib/Release>") + + set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/${_LIB_FOLDER}/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD release library") else () set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG "" CACHE FILEPATH "Path to V-HACD debug library") set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/lib/libVHACD.a CACHE FILEPATH "Path to V-HACD release library") From 5311de1f7b2fd050e85b7f5730a7a1ece67bdd60 Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 17:05:08 -0700 Subject: [PATCH 192/247] handle MinSizeRel library discovery for bullet external --- cmake/externals/bullet/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/externals/bullet/CMakeLists.txt b/cmake/externals/bullet/CMakeLists.txt index 098f0bb19d..317e3302d9 100644 --- a/cmake/externals/bullet/CMakeLists.txt +++ b/cmake/externals/bullet/CMakeLists.txt @@ -70,7 +70,7 @@ if (DEFINED BULLET_LIB_EXT) if (WIN32) # on windows, we might end up with a library that ends with RelWithDebInfo if Visual Studio is building for that configuration - set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE "${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}$<$<CONFIG:RelWithDebInfo>:_RelWithDebugInfo>.${BULLET_LIB_EXT}" CACHE FILEPATH "${_LIB_NAME} release library location") + set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_RELEASE "${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}$<$<CONFIG:RelWithDebInfo>:_RelWithDebugInfo>$<$<CONFIG:MinSizeRel>:_MinsizeRel>.${BULLET_LIB_EXT}" CACHE FILEPATH "${_LIB_NAME} release library location") set(${EXTERNAL_NAME_UPPER}_${_LIB_VAR_NAME}_DEBUG ${BULLET_LIB_DIR}/${LIB_PREFIX}${_LIB_NAME}_Debug.${BULLET_LIB_EXT} CACHE FILEPATH "${_LIB_NAME} debug library location") else () From ee521ed36993ed3ae9f1cd689b1a42dd892d255e Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 17:06:22 -0700 Subject: [PATCH 193/247] handle library release path for faceshift MinSizeRel build --- cmake/externals/faceshift/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/externals/faceshift/CMakeLists.txt b/cmake/externals/faceshift/CMakeLists.txt index ed387be34f..2ab5cfe6c3 100644 --- a/cmake/externals/faceshift/CMakeLists.txt +++ b/cmake/externals/faceshift/CMakeLists.txt @@ -28,7 +28,7 @@ if (WIN32) set(LIBRARY_PREFIX "") set(LIBRARY_EXT "lib") # use RelWithDebInfo in release path when building RelWithDebInfo config on Windows - set(LIBRARY_RELEASE_PATH "$<$<CONFIG:RelWithDebInfo>:build/RelWithDebInfo>$<$<NOT:$<CONFIG:RelWithDebInfo>>:lib/Release>") + set(LIBRARY_RELEASE_PATH "$<$<CONFIG:RelWithDebInfo>:build/RelWithDebInfo>$<$<CONFIG:MinSizeRel>:build/MinSizeRel>$<$<CONFIG:Release>:lib/Release>") elseif (APPLE) set(LIBRARY_EXT "a") set(LIBRARY_PREFIX "lib") From 0367f70a390161d27ae25e05fe6f9a164eecd5c8 Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 17:07:51 -0700 Subject: [PATCH 194/247] interpolate CONFIG for polyvox library path --- cmake/externals/polyvox/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/externals/polyvox/CMakeLists.txt b/cmake/externals/polyvox/CMakeLists.txt index 9aa4bed955..c0586d88a4 100644 --- a/cmake/externals/polyvox/CMakeLists.txt +++ b/cmake/externals/polyvox/CMakeLists.txt @@ -59,7 +59,7 @@ endif () if (WIN32) set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_DEBUG ${INSTALL_DIR}/PolyVoxCore/lib/Debug/PolyVoxCore.lib CACHE FILEPATH "polyvox core library") - set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_RELEASE "${INSTALL_DIR}/PolyVoxCore/lib/$<$<CONFIG:RelWithDebInfo>:RelWithDebInfo>$<$<NOT:$<CONFIG:RelWithDebInfo>>:Release>/PolyVoxCore.lib" CACHE FILEPATH "polyvox core library") + set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_RELEASE "${INSTALL_DIR}/PolyVoxCore/lib/$<CONFIG>/PolyVoxCore.lib" CACHE FILEPATH "polyvox core library") # set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY ${INSTALL_DIR}/PolyVoxUtil/lib/PolyVoxUtil.lib CACHE FILEPATH "polyvox util library") elseif (APPLE) set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/libPolyVoxCore.dylib CACHE FILEPATH "polyvox core library") From 6d38b1fe72186f25c06d2556c91f74f785c530a9 Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 17:11:30 -0700 Subject: [PATCH 195/247] handle MinSizeRel configuration in vhacd external --- cmake/externals/vhacd/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/externals/vhacd/CMakeLists.txt b/cmake/externals/vhacd/CMakeLists.txt index befdce0b96..779451a304 100644 --- a/cmake/externals/vhacd/CMakeLists.txt +++ b/cmake/externals/vhacd/CMakeLists.txt @@ -26,8 +26,12 @@ string(TOUPPER ${EXTERNAL_NAME} EXTERNAL_NAME_UPPER) if (WIN32) set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD debug library") - # use generator expression to ensure the library is found when building RelWithDebInfo in VS - set(_LIB_FOLDER "$<$<CONFIG:RelWithDebInfo>:build/src/VHACD_Lib/RelWithDebInfo>$<$<NOT:$<CONFIG:RelWithDebInfo>>:lib/Release>") + # use generator expression to ensure the correct library is found when building different configurations in VS + set(_LIB_FOLDER """ + $<$<CONFIG:RelWithDebInfo>:build/src/VHACD_Lib/RelWithDebInfo> + $<$<CONFIG:MinSizeRel>:build/src/VHACD_Lib/MinSizeRel> + $<$<OR:$<CONFIG:Release>,$<CONFIG:Debug>>:lib/Release> + """) set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/${_LIB_FOLDER}/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD release library") else () From 22c7d4032bd66d47203bbc22d2ee2b81bdc27826 Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 17:13:19 -0700 Subject: [PATCH 196/247] fix debug config handling of release faceshift lib --- cmake/externals/faceshift/CMakeLists.txt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/cmake/externals/faceshift/CMakeLists.txt b/cmake/externals/faceshift/CMakeLists.txt index 2ab5cfe6c3..2f49dab428 100644 --- a/cmake/externals/faceshift/CMakeLists.txt +++ b/cmake/externals/faceshift/CMakeLists.txt @@ -27,8 +27,12 @@ set(LIBRARY_RELEASE_PATH "lib/Release") if (WIN32) set(LIBRARY_PREFIX "") set(LIBRARY_EXT "lib") - # use RelWithDebInfo in release path when building RelWithDebInfo config on Windows - set(LIBRARY_RELEASE_PATH "$<$<CONFIG:RelWithDebInfo>:build/RelWithDebInfo>$<$<CONFIG:MinSizeRel>:build/MinSizeRel>$<$<CONFIG:Release>:lib/Release>") + # use selected configuration in release path when building on Windows + set(LIBRARY_RELEASE_PATH """ + $<$<CONFIG:RelWithDebInfo>:build/RelWithDebInfo> + $<$<CONFIG:MinSizeRel>:build/MinSizeRel> + $<$<OR:<$<CONFIG:Release>,$<CONFIG:Debug>>:lib/Release> + """) elseif (APPLE) set(LIBRARY_EXT "a") set(LIBRARY_PREFIX "lib") From 85dc63a671ed0be16af32f1a5346bdbcf18836fd Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 17:14:44 -0700 Subject: [PATCH 197/247] fix multi-line strings in VHACD and faceshift externals --- cmake/externals/faceshift/CMakeLists.txt | 8 +++----- cmake/externals/vhacd/CMakeLists.txt | 8 +++----- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/cmake/externals/faceshift/CMakeLists.txt b/cmake/externals/faceshift/CMakeLists.txt index 2f49dab428..c4f2055435 100644 --- a/cmake/externals/faceshift/CMakeLists.txt +++ b/cmake/externals/faceshift/CMakeLists.txt @@ -28,11 +28,9 @@ if (WIN32) set(LIBRARY_PREFIX "") set(LIBRARY_EXT "lib") # use selected configuration in release path when building on Windows - set(LIBRARY_RELEASE_PATH """ - $<$<CONFIG:RelWithDebInfo>:build/RelWithDebInfo> - $<$<CONFIG:MinSizeRel>:build/MinSizeRel> - $<$<OR:<$<CONFIG:Release>,$<CONFIG:Debug>>:lib/Release> - """) + set(LIBRARY_RELEASE_PATH "$<$<CONFIG:RelWithDebInfo>:build/RelWithDebInfo>") + set(LIBRARY_RELEASE_PATH "${LIBRARY_RELEASE_PATH}$<$<CONFIG:MinSizeRel>:build/MinSizeRel>") + set(LIBRARY_RELEASE_PATH "${LIBRARY_RELEASE_PATH}$<$<OR:$<CONFIG:Release>,$<CONFIG:Debug>>:lib/Release>") elseif (APPLE) set(LIBRARY_EXT "a") set(LIBRARY_PREFIX "lib") diff --git a/cmake/externals/vhacd/CMakeLists.txt b/cmake/externals/vhacd/CMakeLists.txt index 779451a304..11afa255f1 100644 --- a/cmake/externals/vhacd/CMakeLists.txt +++ b/cmake/externals/vhacd/CMakeLists.txt @@ -27,11 +27,9 @@ if (WIN32) set(${EXTERNAL_NAME_UPPER}_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD debug library") # use generator expression to ensure the correct library is found when building different configurations in VS - set(_LIB_FOLDER """ - $<$<CONFIG:RelWithDebInfo>:build/src/VHACD_Lib/RelWithDebInfo> - $<$<CONFIG:MinSizeRel>:build/src/VHACD_Lib/MinSizeRel> - $<$<OR:$<CONFIG:Release>,$<CONFIG:Debug>>:lib/Release> - """) + set(_LIB_FOLDER "$<$<CONFIG:RelWithDebInfo>:build/src/VHACD_Lib/RelWithDebInfo>") + set(_LIB_FOLDER "${_LIB_FOLDER}$<$<CONFIG:MinSizeRel>:build/src/VHACD_Lib/MinSizeRel>") + set(_LIB_FOLDER "${_LIB_FOLDER}$<$<OR:$<CONFIG:Release>,$<CONFIG:Debug>>:lib/Release>") set(${EXTERNAL_NAME_UPPER}_LIBRARY_RELEASE ${INSTALL_DIR}/${_LIB_FOLDER}/VHACD_LIB.lib CACHE FILEPATH "Path to V-HACD release library") else () From a7987734251ab53807cdac97296249a3d235688b Mon Sep 17 00:00:00 2001 From: Stephen Birarda <commit@birarda.com> Date: Thu, 23 Mar 2017 17:31:02 -0700 Subject: [PATCH 198/247] fix polyvox location for MinSizeRel --- cmake/externals/polyvox/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cmake/externals/polyvox/CMakeLists.txt b/cmake/externals/polyvox/CMakeLists.txt index c0586d88a4..c799b45e78 100644 --- a/cmake/externals/polyvox/CMakeLists.txt +++ b/cmake/externals/polyvox/CMakeLists.txt @@ -59,7 +59,13 @@ endif () if (WIN32) set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_DEBUG ${INSTALL_DIR}/PolyVoxCore/lib/Debug/PolyVoxCore.lib CACHE FILEPATH "polyvox core library") - set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_RELEASE "${INSTALL_DIR}/PolyVoxCore/lib/$<CONFIG>/PolyVoxCore.lib" CACHE FILEPATH "polyvox core library") + + # use generator expression to ensure the correct library is found when building different configurations in VS + set(_LIB_FOLDER "$<$<CONFIG:RelWithDebInfo>:PolyVoxCore/lib/RelWithDebInfo>") + set(_LIB_FOLDER "${_LIB_FOLDER}$<$<CONFIG:MinSizeRel>:build/library/PolyVoxCore/MinSizeRel>") + set(_LIB_FOLDER "${_LIB_FOLDER}$<$<OR:$<CONFIG:Release>,$<CONFIG:Debug>>:PolyVoxCore/lib/Release>") + + set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_RELEASE "${INSTALL_DIR}/${_LIB_FOLDER}/PolyVoxCore.lib" CACHE FILEPATH "polyvox core library") # set(${EXTERNAL_NAME_UPPER}_UTIL_LIBRARY ${INSTALL_DIR}/PolyVoxUtil/lib/PolyVoxUtil.lib CACHE FILEPATH "polyvox util library") elseif (APPLE) set(${EXTERNAL_NAME_UPPER}_CORE_LIBRARY_DEBUG ${INSTALL_DIR}/lib/Debug/libPolyVoxCore.dylib CACHE FILEPATH "polyvox core library") From 54b11bb6eeddb63cf2432b3205bfeb27003c23fb Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Fri, 24 Mar 2017 11:22:50 -0700 Subject: [PATCH 199/247] Hide the scrollbar on the marketplace --- scripts/system/html/js/marketplacesInject.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index 10970a7749..86ec1b944a 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -38,6 +38,7 @@ '#marketplace-navigation input#back-button { position: absolute; left: 20px; margin-top: 12px; padding-left: 0; padding-right: 5px; }' + '#marketplace-navigation input#all-markets { position: absolute; right: 20px; margin-top: 12px; padding-left: 15px; padding-right: 15px; }' + '#marketplace-navigation .right { position: absolute; right: 20px; }' + + '::-webkit-scrollbar { width: 0px; background: transparent; }' + '</style>' ); From 7e6ff7c2fb7d8056bb54b0948760ae2e876508df Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Fri, 24 Mar 2017 11:40:10 -0700 Subject: [PATCH 200/247] Scrollbar is visible on marketplace in toolbar mode. --- scripts/system/html/js/marketplacesInject.js | 1 - .../html/js/marketplacesInjectNoScrollbar.js | 349 ++++++++++++++++++ scripts/system/marketplaces/marketplaces.js | 9 +- 3 files changed, 357 insertions(+), 2 deletions(-) create mode 100644 scripts/system/html/js/marketplacesInjectNoScrollbar.js diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index 86ec1b944a..10970a7749 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -38,7 +38,6 @@ '#marketplace-navigation input#back-button { position: absolute; left: 20px; margin-top: 12px; padding-left: 0; padding-right: 5px; }' + '#marketplace-navigation input#all-markets { position: absolute; right: 20px; margin-top: 12px; padding-left: 15px; padding-right: 15px; }' + '#marketplace-navigation .right { position: absolute; right: 20px; }' + - '::-webkit-scrollbar { width: 0px; background: transparent; }' + '</style>' ); diff --git a/scripts/system/html/js/marketplacesInjectNoScrollbar.js b/scripts/system/html/js/marketplacesInjectNoScrollbar.js new file mode 100644 index 0000000000..86ec1b944a --- /dev/null +++ b/scripts/system/html/js/marketplacesInjectNoScrollbar.js @@ -0,0 +1,349 @@ +// +// marketplacesInject.js +// +// Created by David Rowe on 12 Nov 2016. +// Copyright 2016 High Fidelity, Inc. +// +// Injected into marketplace Web pages. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +(function () { + + // Event bridge messages. + var CLARA_IO_DOWNLOAD = "CLARA.IO DOWNLOAD"; + var CLARA_IO_STATUS = "CLARA.IO STATUS"; + var CLARA_IO_CANCEL_DOWNLOAD = "CLARA.IO CANCEL DOWNLOAD"; + var CLARA_IO_CANCELLED_DOWNLOAD = "CLARA.IO CANCELLED DOWNLOAD"; + var GOTO_DIRECTORY = "GOTO_DIRECTORY"; + var QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS"; + var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS"; + var WARN_USER_NO_PERMISSIONS = "WARN_USER_NO_PERMISSIONS"; + + var canWriteAssets = false; + var xmlHttpRequest = null; + var isPreparing = false; // Explicitly track download request status. + + function injectCommonCode(isDirectoryPage) { + + // Supporting styles from marketplaces.css. + // Glyph font family, size, and spacing adjusted because HiFi-Glyphs cannot be used cross-domain. + $("head").append( + '<style>' + + '#marketplace-navigation { font-family: Arial, Helvetica, sans-serif; width: 100%; height: 50px; background: #00b4ef; position: fixed; bottom: 0; z-index: 1000; }' + + '#marketplace-navigation .glyph { margin-left: 20px; margin-right: 3px; font-family: sans-serif; color: #fff; font-size: 24px; line-height: 50px; }' + + '#marketplace-navigation .text { color: #fff; font-size: 18px; line-height: 50px; vertical-align: top; position: relative; top: 1px; }' + + '#marketplace-navigation input#back-button { position: absolute; left: 20px; margin-top: 12px; padding-left: 0; padding-right: 5px; }' + + '#marketplace-navigation input#all-markets { position: absolute; right: 20px; margin-top: 12px; padding-left: 15px; padding-right: 15px; }' + + '#marketplace-navigation .right { position: absolute; right: 20px; }' + + '::-webkit-scrollbar { width: 0px; background: transparent; }' + + '</style>' + ); + + // Supporting styles from edit-style.css. + // Font family, size, and position adjusted because Raleway-Bold cannot be used cross-domain. + $("head").append( + '<style>' + + 'input[type=button] { font-family: Arial, Helvetica, sans-serif; font-weight: bold; font-size: 12px; text-transform: uppercase; vertical-align: center; height: 28px; min-width: 100px; padding: 0 15px; border-radius: 5px; border: none; color: #fff; background-color: #000; background: linear-gradient(#343434 20%, #000 100%); cursor: pointer; }' + + 'input[type=button].white { color: #121212; background-color: #afafaf; background: linear-gradient(#fff 20%, #afafaf 100%); }' + + 'input[type=button].white:enabled:hover { background: linear-gradient(#fff, #fff); border: none; }' + + 'input[type=button].white:active { background: linear-gradient(#afafaf, #afafaf); }' + + '</style>' + ); + + // Footer. + var isInitialHiFiPage = location.href === "https://metaverse.highfidelity.com/marketplace?"; + $("body").append( + '<div id="marketplace-navigation">' + + (!isInitialHiFiPage ? '<input id="back-button" type="button" class="white" value="< Back" />' : '') + + (isInitialHiFiPage ? '<span class="glyph">🛈</span> <span class="text">See also other marketplaces.</span>' : '') + + (!isDirectoryPage ? '<input id="all-markets" type="button" class="white" value="See All Markets" />' : '') + + (isDirectoryPage ? '<span class="right"><span class="glyph">🛈</span> <span class="text">Select a marketplace to explore.</span><span>' : '') + + '</div>' + ); + + // Footer actions. + $("#back-button").on("click", function () { + window.history.back(); + }); + $("#all-markets").on("click", function () { + EventBridge.emitWebEvent(GOTO_DIRECTORY); + }); + } + + function injectDirectoryCode() { + + // Remove e-mail hyperlink. + var letUsKnow = $("#letUsKnow"); + letUsKnow.replaceWith(letUsKnow.html()); + + // Add button links. + $('#exploreClaraMarketplace').on('click', function () { + window.location = "https://clara.io/library?gameCheck=true&public=true"; + }); + $('#exploreHifiMarketplace').on('click', function () { + window.location = "http://www.highfidelity.com/marketplace"; + }); + } + + function injectHiFiCode() { + // Nothing to do. + } + + function updateClaraCode() { + // Have to repeatedly update Clara page because its content can change dynamically without location.href changing. + + // Clara library page. + if (location.href.indexOf("clara.io/library") !== -1) { + // Make entries navigate to "Image" view instead of default "Real Time" view. + var elements = $("a.thumbnail"); + for (var i = 0, length = elements.length; i < length; i++) { + var value = elements[i].getAttribute("href"); + if (value.slice(-6) !== "/image") { + elements[i].setAttribute("href", value + "/image"); + } + } + } + + // Clara item page. + if (location.href.indexOf("clara.io/view/") !== -1) { + // Make site navigation links retain gameCheck etc. parameters. + var element = $("a[href^=\'/library\']")[0]; + var parameters = "?gameCheck=true&public=true"; + var href = element.getAttribute("href"); + if (href.slice(-parameters.length) !== parameters) { + element.setAttribute("href", href + parameters); + } + + // Remove unwanted buttons and replace download options with a single "Download to High Fidelity" button. + var buttons = $("a.embed-button").parent("div"); + var downloadFBX; + if (buttons.find("div.btn-group").length > 0) { + buttons.children(".btn-primary, .btn-group , .embed-button").each(function () { this.remove(); }); + if ($("#hifi-download-container").length === 0) { // Button hasn't been moved already. + downloadFBX = $('<a class="btn btn-primary"><i class=\'glyphicon glyphicon-download-alt\'></i> Download to High Fidelity</a>'); + buttons.prepend(downloadFBX); + downloadFBX[0].addEventListener("click", startAutoDownload); + } + } + + // Move the "Download to High Fidelity" button to be more visible on tablet. + if ($("#hifi-download-container").length === 0 && window.innerWidth < 700) { + var downloadContainer = $('<div id="hifi-download-container"></div>'); + $(".top-title .col-sm-4").append(downloadContainer); + downloadContainer.append(downloadFBX); + } + + // Automatic download to High Fidelity. + function startAutoDownload() { + + // One file request at a time. + if (isPreparing) { + console.log("WARNIKNG: Clara.io FBX: Prepare only one download at a time"); + return; + } + + // User must be able to write to Asset Server. + if (!canWriteAssets) { + console.log("ERROR: Clara.io FBX: File download cancelled because no permissions to write to Asset Server"); + EventBridge.emitWebEvent(WARN_USER_NO_PERMISSIONS); + return; + } + + // User must be logged in. + var loginButton = $("#topnav a[href='/signup']"); + if (loginButton.length > 0) { + loginButton[0].click(); + return; + } + + // Obtain zip file to download for requested asset. + // Reference: https://clara.io/learn/sdk/api/export + + //var XMLHTTPREQUEST_URL = "https://clara.io/api/scenes/{uuid}/export/fbx?zip=true¢erScene=true&alignSceneGround=true&fbxUnit=Meter&fbxVersion=7&fbxEmbedTextures=true&imageFormat=WebGL"; + // 13 Jan 2017: Specify FBX version 5 and remove some options in order to make Clara.io site more likely to + // be successful in generating zip files. + var XMLHTTPREQUEST_URL = "https://clara.io/api/scenes/{uuid}/export/fbx?fbxUnit=Meter&fbxVersion=5&fbxEmbedTextures=true&imageFormat=WebGL"; + + var uuid = location.href.match(/\/view\/([a-z0-9\-]*)/)[1]; + var url = XMLHTTPREQUEST_URL.replace("{uuid}", uuid); + + xmlHttpRequest = new XMLHttpRequest(); + var responseTextIndex = 0; + var zipFileURL = ""; + + xmlHttpRequest.onreadystatechange = function () { + // Messages are appended to responseText; process the new ones. + var message = this.responseText.slice(responseTextIndex); + var statusMessage = ""; + + if (isPreparing) { // Ignore messages in flight after finished/cancelled. + var lines = message.split(/[\n\r]+/); + + for (var i = 0, length = lines.length; i < length; i++) { + if (lines[i].slice(0, 5) === "data:") { + // Parse line. + var data; + try { + data = JSON.parse(lines[i].slice(5)); + } + catch (e) { + data = {}; + } + + // Extract status message. + if (data.hasOwnProperty("message") && data.message !== null) { + statusMessage = data.message; + console.log("Clara.io FBX: " + statusMessage); + } + + // Extract zip file URL. + if (data.hasOwnProperty("files") && data.files.length > 0) { + zipFileURL = data.files[0].url; + if (zipFileURL.slice(-4) !== ".zip") { + console.log(JSON.stringify(data)); // Data for debugging. + } + } + } + } + + if (statusMessage !== "") { + // Update the UI with the most recent status message. + EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage); + } + } + + responseTextIndex = this.responseText.length; + }; + + // Note: onprogress doesn't have computable total length so can't use it to determine % complete. + + xmlHttpRequest.onload = function () { + var statusMessage = ""; + + if (!isPreparing) { + return; + } + + isPreparing = false; + + var HTTP_OK = 200; + if (this.status !== HTTP_OK) { + statusMessage = "Zip file request terminated with " + this.status + " " + this.statusText; + console.log("ERROR: Clara.io FBX: " + statusMessage); + EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage); + } else if (zipFileURL.slice(-4) !== ".zip") { + statusMessage = "Error creating zip file for download."; + console.log("ERROR: Clara.io FBX: " + statusMessage + ": " + zipFileURL); + EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage); + } else { + EventBridge.emitWebEvent(CLARA_IO_DOWNLOAD + " " + zipFileURL); + console.log("Clara.io FBX: File download initiated for " + zipFileURL); + } + + xmlHttpRequest = null; + } + + isPreparing = true; + + console.log("Clara.io FBX: Request zip file for " + uuid); + EventBridge.emitWebEvent(CLARA_IO_STATUS + " Initiating download"); + + xmlHttpRequest.open("POST", url, true); + xmlHttpRequest.setRequestHeader("Accept", "text/event-stream"); + xmlHttpRequest.send(); + } + } + } + + function injectClaraCode() { + + // Make space for marketplaces footer in Clara pages. + $("head").append( + '<style>' + + '#app { margin-bottom: 135px; }' + + '.footer { bottom: 50px; }' + + '</style>' + ); + + // Condense space. + $("head").append( + '<style>' + + 'div.page-title { line-height: 1.2; font-size: 13px; }' + + 'div.page-title-row { padding-bottom: 0; }' + + '</style>' + ); + + // Move "Download to High Fidelity" button. + $("head").append( + '<style>' + + '#hifi-download-container { position: absolute; top: 6px; right: 16px; }' + + '</style>' + ); + + // Update code injected per page displayed. + var updateClaraCodeInterval = undefined; + updateClaraCode(); + updateClaraCodeInterval = setInterval(function () { + updateClaraCode(); + }, 1000); + + window.addEventListener("unload", function () { + clearInterval(updateClaraCodeInterval); + updateClaraCodeInterval = undefined; + }); + + EventBridge.emitWebEvent(QUERY_CAN_WRITE_ASSETS); + } + + function cancelClaraDownload() { + isPreparing = false; + + if (xmlHttpRequest) { + xmlHttpRequest.abort(); + xmlHttpRequest = null; + console.log("Clara.io FBX: File download cancelled"); + EventBridge.emitWebEvent(CLARA_IO_CANCELLED_DOWNLOAD); + } + } + + function onLoad() { + + EventBridge.scriptEventReceived.connect(function (message) { + if (message.slice(0, CAN_WRITE_ASSETS.length) === CAN_WRITE_ASSETS) { + canWriteAssets = message.slice(-4) === "true"; + } + + if (message.slice(0, CLARA_IO_CANCEL_DOWNLOAD.length) === CLARA_IO_CANCEL_DOWNLOAD) { + cancelClaraDownload(); + } + }); + + var DIRECTORY = 0; + var HIFI = 1; + var CLARA = 2; + var pageType = DIRECTORY; + + if (location.href.indexOf("highfidelity.com/") !== -1) { pageType = HIFI; } + if (location.href.indexOf("clara.io/") !== -1) { pageType = CLARA; } + + injectCommonCode(pageType === DIRECTORY); + switch (pageType) { + case DIRECTORY: + injectDirectoryCode(); + break; + case HIFI: + injectHiFiCode(); + break; + case CLARA: + injectClaraCode(); + break; + } + } + + // Load / unload. + window.addEventListener("load", onLoad); // More robust to Web site issues than using $(document).ready(). + +}()); diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index f130e3cedb..c24034b38e 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -19,6 +19,7 @@ var MARKETPLACE_URL = "https://metaverse.highfidelity.com/marketplace"; var MARKETPLACE_URL_INITIAL = MARKETPLACE_URL + "?"; // Append "?" to signal injected script that it's the initial page. var MARKETPLACES_URL = Script.resolvePath("../html/marketplaces.html"); var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js"); +var MARKETPLACES_INJECT_NO_SCROLLBAR_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInjectNoScrollbar.js"); var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; // var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; @@ -59,7 +60,13 @@ function showMarketplace() { UserActivityLogger.openedMarketplace(); shouldActivateButton = true; - tablet.gotoWebScreen(MARKETPLACE_URL_INITIAL, MARKETPLACES_INJECT_SCRIPT_URL); + + // by default the marketplace should NOT have a scrollbar, except when tablet is in toolbar mode. + var injectURL = MARKETPLACES_INJECT_NO_SCROLLBAR_SCRIPT_URL; + if (tablet.toolbarMode) { + injectURL = MARKETPLACES_INJECT_SCRIPT_URL; + } + tablet.gotoWebScreen(MARKETPLACE_URL_INITIAL, injectURL); onMarketplaceScreen = true; tablet.webEventReceived.connect(function (message) { From 642cf57976fb1ff1ce7062bf2ebd5b7ae0f1929a Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Fri, 24 Mar 2017 12:49:58 -0700 Subject: [PATCH 201/247] obj-writer now outputs normals --- libraries/fbx/src/OBJWriter.cpp | 36 +++++++++++++++++++++++++++++---- 1 file changed, 32 insertions(+), 4 deletions(-) diff --git a/libraries/fbx/src/OBJWriter.cpp b/libraries/fbx/src/OBJWriter.cpp index 5ee04c5718..e236ecb0fa 100644 --- a/libraries/fbx/src/OBJWriter.cpp +++ b/libraries/fbx/src/OBJWriter.cpp @@ -40,12 +40,16 @@ static QString formatFloat(double n) { } bool writeOBJToTextStream(QTextStream& out, QList<MeshPointer> meshes) { + int attributeTypeNormal = gpu::Stream::InputSlot::NORMAL; // libraries/gpu/src/gpu/Stream.h + // each mesh's vertices are numbered from zero. We're combining all their vertices into one list here, // so keep track of the start index for each mesh. QList<int> meshVertexStartOffset; + QList<int> meshNormalStartOffset; int currentVertexStartOffset = 0; + int currentNormalStartOffset = 0; - // write out all vertices + // write out vertices foreach (const MeshPointer& mesh, meshes) { meshVertexStartOffset.append(currentVertexStartOffset); const gpu::BufferView& vertexBuffer = mesh->getVertexBuffer(); @@ -64,10 +68,28 @@ bool writeOBJToTextStream(QTextStream& out, QList<MeshPointer> meshes) { } out << "\n"; + // write out normals + bool haveNormals = true; + foreach (const MeshPointer& mesh, meshes) { + meshNormalStartOffset.append(currentNormalStartOffset); + const gpu::BufferView& normalsBufferView = mesh->getAttributeBuffer(attributeTypeNormal); + gpu::BufferView::Index numNormals = (gpu::BufferView::Index)normalsBufferView.getNumElements(); + for (gpu::BufferView::Index i = 0; i < numNormals; i++) { + glm::vec3 normal = normalsBufferView.get<glm::vec3>(i); + out << "vn "; + out << formatFloat(normal[0]) << " "; + out << formatFloat(normal[1]) << " "; + out << formatFloat(normal[2]) << "\n"; + } + currentNormalStartOffset += numNormals; + } + out << "\n"; + // write out faces int nth = 0; foreach (const MeshPointer& mesh, meshes) { currentVertexStartOffset = meshVertexStartOffset.takeFirst(); + currentNormalStartOffset = meshNormalStartOffset.takeFirst(); const gpu::BufferView& partBuffer = mesh->getPartBuffer(); const gpu::BufferView& indexBuffer = mesh->getIndexBuffer(); @@ -104,9 +126,15 @@ bool writeOBJToTextStream(QTextStream& out, QList<MeshPointer> meshes) { indexCount++; out << "f "; - out << currentVertexStartOffset + index0 + 1 << " "; - out << currentVertexStartOffset + index1 + 1 << " "; - out << currentVertexStartOffset + index2 + 1 << "\n"; + if (haveNormals) { + out << currentVertexStartOffset + index0 + 1 << "//" << currentVertexStartOffset + index0 + 1 << " "; + out << currentVertexStartOffset + index1 + 1 << "//" << currentVertexStartOffset + index1 + 1 << " "; + out << currentVertexStartOffset + index2 + 1 << "//" << currentVertexStartOffset + index2 + 1 << "\n"; + } else { + out << currentVertexStartOffset + index0 + 1 << " "; + out << currentVertexStartOffset + index1 + 1 << " "; + out << currentVertexStartOffset + index2 + 1 << "\n"; + } } out << "\n"; } From 8f7f5efadebfb44c114a126d46348159517ad1d8 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Fri, 24 Mar 2017 12:51:00 -0700 Subject: [PATCH 202/247] new javascript call: Model.newMesh() --- .../src/RenderablePolyVoxEntityItem.h | 2 +- libraries/model/src/model/MeshFace.cpp | 44 ++++++++++++++ libraries/model/src/model/MeshFace.h | 43 +++++++++++++ .../src/ModelScriptingInterface.cpp | 60 ++++++++++++++++++- .../src/ModelScriptingInterface.h | 4 ++ libraries/shared/src/RegisteredMetaTypes.cpp | 19 ++++++ libraries/shared/src/RegisteredMetaTypes.h | 4 ++ 7 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 libraries/model/src/model/MeshFace.cpp create mode 100644 libraries/model/src/model/MeshFace.h diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h index a0d5c38a14..cdfe2e38fe 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.h @@ -66,7 +66,7 @@ public: void render(RenderArgs* args) override; virtual bool supportsDetailedRayIntersection() const override { return true; } virtual bool findDetailedRayIntersection(const glm::vec3& origin, const glm::vec3& direction, - bool& keepSearching, OctreeElementPointer& element, float& distance, + bool& keepSearching, OctreeElementPointer& element, float& distance, BoxFace& face, glm::vec3& surfaceNormal, void** intersectedObject, bool precisionPicking) const override; diff --git a/libraries/model/src/model/MeshFace.cpp b/libraries/model/src/model/MeshFace.cpp new file mode 100644 index 0000000000..8092d36aa3 --- /dev/null +++ b/libraries/model/src/model/MeshFace.cpp @@ -0,0 +1,44 @@ +// +// MeshFace.cpp +// libraries/model/src/model/ +// +// Created by Seth Alves on 2017-3-23 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#include <RegisteredMetaTypes.h> + +#include "MeshFace.h" + + +QScriptValue meshFaceToScriptValue(QScriptEngine* engine, const MeshFace &meshFace) { + QScriptValue obj = engine->newObject(); + obj.setProperty("vertices", qVectorIntToScriptValue(engine, meshFace.vertexIndices)); + return obj; +} + +void meshFaceFromScriptValue(const QScriptValue &object, MeshFace& meshFaceResult) { + qVectorIntFromScriptValue(object.property("vertices"), meshFaceResult.vertexIndices); +} + +QScriptValue qVectorMeshFaceToScriptValue(QScriptEngine* engine, const QVector<MeshFace>& vector) { + QScriptValue array = engine->newArray(); + for (int i = 0; i < vector.size(); i++) { + array.setProperty(i, meshFaceToScriptValue(engine, vector.at(i))); + } + return array; +} + +void qVectorMeshFaceFromScriptValue(const QScriptValue& array, QVector<MeshFace>& result) { + int length = array.property("length").toInteger(); + result.clear(); + + for (int i = 0; i < length; i++) { + MeshFace meshFace = MeshFace(); + meshFaceFromScriptValue(array.property(i), meshFace); + result << meshFace; + } +} diff --git a/libraries/model/src/model/MeshFace.h b/libraries/model/src/model/MeshFace.h new file mode 100644 index 0000000000..ef1e3a0b6b --- /dev/null +++ b/libraries/model/src/model/MeshFace.h @@ -0,0 +1,43 @@ +// +// MeshFace.h +// libraries/model/src/model/ +// +// Created by Seth Alves on 2017-3-23 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +#ifndef hifi_MeshFace_h +#define hifi_MeshFace_h + +#include <QScriptEngine> +#include <QScriptValueIterator> +#include <QtScript/QScriptValue> + +#include "Geometry.h" + +using MeshPointer = std::shared_ptr<model::Mesh>; + +class MeshFace { + +public: + MeshFace() {} + ~MeshFace() {} + + QVector<uint32_t> vertexIndices; + // TODO -- material... +}; + +Q_DECLARE_METATYPE(MeshFace) +Q_DECLARE_METATYPE(QVector<MeshFace>) + +QScriptValue meshFaceToScriptValue(QScriptEngine* engine, const MeshFace &meshFace); +void meshFaceFromScriptValue(const QScriptValue &object, MeshFace& meshFaceResult); +QScriptValue qVectorMeshFaceToScriptValue(QScriptEngine* engine, const QVector<MeshFace>& vector); +void qVectorMeshFaceFromScriptValue(const QScriptValue& array, QVector<MeshFace>& result); + + + +#endif // hifi_MeshFace_h diff --git a/libraries/script-engine/src/ModelScriptingInterface.cpp b/libraries/script-engine/src/ModelScriptingInterface.cpp index 22b7eb89ed..c02eb642a1 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.cpp +++ b/libraries/script-engine/src/ModelScriptingInterface.cpp @@ -12,7 +12,9 @@ #include <QScriptEngine> #include <QScriptValueIterator> #include <QtScript/QScriptValue> +#include <model/MeshFace.h> #include "ScriptEngine.h" +#include "ScriptEngineLogging.h" #include "ModelScriptingInterface.h" #include "OBJWriter.h" @@ -20,6 +22,8 @@ ModelScriptingInterface::ModelScriptingInterface(QObject* parent) : QObject(pare _modelScriptEngine = qobject_cast<ScriptEngine*>(parent); qScriptRegisterSequenceMetaType<QList<MeshProxy*>>(_modelScriptEngine); + qScriptRegisterMetaType(_modelScriptEngine, meshFaceToScriptValue, meshFaceFromScriptValue); + qScriptRegisterMetaType(_modelScriptEngine, qVectorMeshFaceToScriptValue, qVectorMeshFaceFromScriptValue); } QString ModelScriptingInterface::meshToOBJ(MeshProxyList in) { @@ -118,8 +122,6 @@ QScriptValue ModelScriptingInterface::appendMeshes(MeshProxyList in) { return meshToScriptValue(_modelScriptEngine, resultProxy); } - - QScriptValue ModelScriptingInterface::transformMesh(glm::mat4 transform, MeshProxy* meshProxy) { if (!meshProxy) { return QScriptValue(false); @@ -135,3 +137,57 @@ QScriptValue ModelScriptingInterface::transformMesh(glm::mat4 transform, MeshPro MeshProxy* resultProxy = new MeshProxy(result); return meshToScriptValue(_modelScriptEngine, resultProxy); } + +QScriptValue ModelScriptingInterface::newMesh(const QVector<glm::vec3>& vertices, + const QVector<glm::vec3>& normals, + const QVector<MeshFace>& faces) { + model::MeshPointer mesh(new model::Mesh()); + + // vertices + auto vertexBuffer = std::make_shared<gpu::Buffer>(vertices.size() * sizeof(glm::vec3), (gpu::Byte*)vertices.data()); + auto vertexBufferPtr = gpu::BufferPointer(vertexBuffer); + gpu::BufferView vertexBufferView(vertexBufferPtr, 0, vertexBufferPtr->getSize(), + sizeof(glm::vec3), gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)); + mesh->setVertexBuffer(vertexBufferView); + + if (vertices.size() == normals.size()) { + // normals + auto normalBuffer = std::make_shared<gpu::Buffer>(normals.size() * sizeof(glm::vec3), (gpu::Byte*)normals.data()); + auto normalBufferPtr = gpu::BufferPointer(normalBuffer); + gpu::BufferView normalBufferView(normalBufferPtr, 0, normalBufferPtr->getSize(), + sizeof(glm::vec3), gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)); + mesh->addAttribute(gpu::Stream::NORMAL, normalBufferView); + } else { + qCDebug(scriptengine) << "ModelScriptingInterface::newMesh normals must be same length as vertices"; + } + + // indices (faces) + int VERTICES_PER_TRIANGLE = 3; + int indexBufferSize = faces.size() * sizeof(uint32_t) * VERTICES_PER_TRIANGLE; + unsigned char* indexData = new unsigned char[indexBufferSize]; + unsigned char* indexDataCursor = indexData; + foreach(const MeshFace& meshFace, faces) { + for (int i = 0; i < VERTICES_PER_TRIANGLE; i++) { + memcpy(indexDataCursor, &meshFace.vertexIndices[i], sizeof(uint32_t)); + indexDataCursor += sizeof(uint32_t); + } + } + auto indexBuffer = std::make_shared<gpu::Buffer>(indexBufferSize, (gpu::Byte*)indexData); + auto indexBufferPtr = gpu::BufferPointer(indexBuffer); + gpu::BufferView indexBufferView(indexBufferPtr, gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::RAW)); + mesh->setIndexBuffer(indexBufferView); + + // parts + std::vector<model::Mesh::Part> parts; + parts.emplace_back(model::Mesh::Part((model::Index)0, // startIndex + (model::Index)faces.size() * 3, // numIndices + (model::Index)0, // baseVertex + model::Mesh::TRIANGLES)); // topology + mesh->setPartBuffer(gpu::BufferView(new gpu::Buffer(parts.size() * sizeof(model::Mesh::Part), + (gpu::Byte*) parts.data()), gpu::Element::PART_DRAWCALL)); + + + + MeshProxy* meshProxy = new MeshProxy(mesh); + return meshToScriptValue(_modelScriptEngine, meshProxy); +} diff --git a/libraries/script-engine/src/ModelScriptingInterface.h b/libraries/script-engine/src/ModelScriptingInterface.h index 105d6d548e..e3d5b18b29 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.h +++ b/libraries/script-engine/src/ModelScriptingInterface.h @@ -18,6 +18,7 @@ #include <OBJWriter.h> #include <model/Geometry.h> #include <model/MeshProxy.h> +#include <model/MeshFace.h> using MeshPointer = std::shared_ptr<model::Mesh>; class ScriptEngine; @@ -31,6 +32,9 @@ public: Q_INVOKABLE QString meshToOBJ(MeshProxyList in); Q_INVOKABLE QScriptValue appendMeshes(MeshProxyList in); Q_INVOKABLE QScriptValue transformMesh(glm::mat4 transform, MeshProxy* meshProxy); + Q_INVOKABLE QScriptValue newMesh(const QVector<glm::vec3>& vertices, + const QVector<glm::vec3>& normals, + const QVector<MeshFace>& faces); private: ScriptEngine* _modelScriptEngine { nullptr }; diff --git a/libraries/shared/src/RegisteredMetaTypes.cpp b/libraries/shared/src/RegisteredMetaTypes.cpp index 7f12d6cc00..70067b93f3 100644 --- a/libraries/shared/src/RegisteredMetaTypes.cpp +++ b/libraries/shared/src/RegisteredMetaTypes.cpp @@ -43,6 +43,7 @@ void registerMetaTypes(QScriptEngine* engine) { qScriptRegisterMetaType(engine, qVectorQuatToScriptValue, qVectorQuatFromScriptValue); qScriptRegisterMetaType(engine, qVectorBoolToScriptValue, qVectorBoolFromScriptValue); qScriptRegisterMetaType(engine, qVectorFloatToScriptValue, qVectorFloatFromScriptValue); + qScriptRegisterMetaType(engine, qVectorIntToScriptValue, qVectorIntFromScriptValue); qScriptRegisterMetaType(engine, vec2toScriptValue, vec2FromScriptValue); qScriptRegisterMetaType(engine, quatToScriptValue, quatFromScriptValue); qScriptRegisterMetaType(engine, qRectToScriptValue, qRectFromScriptValue); @@ -386,6 +387,15 @@ QScriptValue qVectorFloatToScriptValue(QScriptEngine* engine, const QVector<floa return array; } +QScriptValue qVectorIntToScriptValue(QScriptEngine* engine, const QVector<uint32_t>& vector) { + QScriptValue array = engine->newArray(); + for (int i = 0; i < vector.size(); i++) { + int num = vector.at(i); + array.setProperty(i, QScriptValue(num)); + } + return array; +} + void qVectorFloatFromScriptValue(const QScriptValue& array, QVector<float>& vector) { int length = array.property("length").toInteger(); @@ -393,6 +403,15 @@ void qVectorFloatFromScriptValue(const QScriptValue& array, QVector<float>& vect vector << array.property(i).toVariant().toFloat(); } } + +void qVectorIntFromScriptValue(const QScriptValue& array, QVector<uint32_t>& vector) { + int length = array.property("length").toInteger(); + + for (int i = 0; i < length; i++) { + vector << array.property(i).toVariant().toInt(); + } +} + // QVector<glm::vec3> qVectorVec3FromScriptValue(const QScriptValue& array){ QVector<glm::vec3> newVector; diff --git a/libraries/shared/src/RegisteredMetaTypes.h b/libraries/shared/src/RegisteredMetaTypes.h index 498a8b3b3a..8a15f62eed 100644 --- a/libraries/shared/src/RegisteredMetaTypes.h +++ b/libraries/shared/src/RegisteredMetaTypes.h @@ -113,6 +113,10 @@ QScriptValue qVectorFloatToScriptValue(QScriptEngine* engine, const QVector<floa void qVectorFloatFromScriptValue(const QScriptValue& array, QVector<float>& vector); QVector<float> qVectorFloatFromScriptValue(const QScriptValue& array); +// vector<uint32_t> +QScriptValue qVectorIntToScriptValue(QScriptEngine* engine, const QVector<uint32_t>& vector); +void qVectorIntFromScriptValue(const QScriptValue& array, QVector<uint32_t>& vector); + QVector<QUuid> qVectorQUuidFromScriptValue(const QScriptValue& array); QScriptValue aaCubeToScriptValue(QScriptEngine* engine, const AACube& aaCube); From 6e40f03c8e08e31536d472bf8093a6f14212f3e3 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Fri, 24 Mar 2017 15:08:13 -0700 Subject: [PATCH 203/247] cleanups --- libraries/model/src/model/Geometry.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/libraries/model/src/model/Geometry.cpp b/libraries/model/src/model/Geometry.cpp index 341015816e..16608ab63e 100755 --- a/libraries/model/src/model/Geometry.cpp +++ b/libraries/model/src/model/Geometry.cpp @@ -145,7 +145,7 @@ model::MeshPointer Mesh::map(std::function<glm::vec3(glm::vec3)> vertexFunc, unsigned char* resultVertexData = new unsigned char[vertexSize]; unsigned char* vertexDataCursor = resultVertexData; - for (gpu::BufferView::Index i = 0; i < numVertices; i ++) { + for (gpu::BufferView::Index i = 0; i < numVertices; i++) { glm::vec3 pos = vertexFunc(vertexBufferView.get<glm::vec3>(i)); memcpy(vertexDataCursor, &pos, sizeof(pos)); vertexDataCursor += sizeof(pos); @@ -159,7 +159,7 @@ model::MeshPointer Mesh::map(std::function<glm::vec3(glm::vec3)> vertexFunc, unsigned char* resultNormalData = new unsigned char[normalSize]; unsigned char* normalDataCursor = resultNormalData; - for (gpu::BufferView::Index i = 0; i < numNormals; i ++) { + for (gpu::BufferView::Index i = 0; i < numNormals; i++) { glm::vec3 normal = normalFunc(normalsBufferView.get<glm::vec3>(i)); memcpy(normalDataCursor, &normal, sizeof(normal)); normalDataCursor += sizeof(normal); @@ -173,7 +173,7 @@ model::MeshPointer Mesh::map(std::function<glm::vec3(glm::vec3)> vertexFunc, unsigned char* resultIndexData = new unsigned char[indexSize]; unsigned char* indexDataCursor = resultIndexData; - for (gpu::BufferView::Index i = 0; i < numIndexes; i ++) { + for (gpu::BufferView::Index i = 0; i < numIndexes; i++) { uint32_t index = indexFunc(indexBufferView.get<uint32_t>(i)); memcpy(indexDataCursor, &index, sizeof(index)); indexDataCursor += sizeof(index); @@ -217,19 +217,18 @@ model::MeshPointer Mesh::map(std::function<glm::vec3(glm::vec3)> vertexFunc, void Mesh::forEach(std::function<void(glm::vec3)> vertexFunc, std::function<void(glm::vec3)> normalFunc, std::function<void(uint32_t)> indexFunc) { - int attributeTypeNormal = gpu::Stream::InputSlot::NORMAL; // libraries/gpu/src/gpu/Stream.h - // vertex data const gpu::BufferView& vertexBufferView = getVertexBuffer(); gpu::BufferView::Index numVertices = (gpu::BufferView::Index)getNumVertices(); - for (gpu::BufferView::Index i = 0; i < numVertices; i ++) { + for (gpu::BufferView::Index i = 0; i < numVertices; i++) { vertexFunc(vertexBufferView.get<glm::vec3>(i)); } // normal data + int attributeTypeNormal = gpu::Stream::InputSlot::NORMAL; // libraries/gpu/src/gpu/Stream.h const gpu::BufferView& normalsBufferView = getAttributeBuffer(attributeTypeNormal); gpu::BufferView::Index numNormals = (gpu::BufferView::Index)normalsBufferView.getNumElements(); - for (gpu::BufferView::Index i = 0; i < numNormals; i ++) { + for (gpu::BufferView::Index i = 0; i < numNormals; i++) { normalFunc(normalsBufferView.get<glm::vec3>(i)); } // TODO -- other attributes @@ -237,7 +236,7 @@ void Mesh::forEach(std::function<void(glm::vec3)> vertexFunc, // face data const gpu::BufferView& indexBufferView = getIndexBuffer(); gpu::BufferView::Index numIndexes = (gpu::BufferView::Index)getNumIndices(); - for (gpu::BufferView::Index i = 0; i < numIndexes; i ++) { + for (gpu::BufferView::Index i = 0; i < numIndexes; i++) { indexFunc(indexBufferView.get<uint32_t>(i)); } } From d9046a1982c1b760edf4e3a3e66a9390e9caa1a6 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Fri, 24 Mar 2017 23:54:54 +0100 Subject: [PATCH 204/247] goto on the tablet --- interface/resources/qml/hifi/Card.qml | 84 +++++------ .../qml/hifi/tablet/TabletAddressDialog.qml | 26 ++-- .../qml/hifi/tablet/TabletStoryCard.qml | 132 ++++++++++++++++++ 3 files changed, 190 insertions(+), 52 deletions(-) create mode 100644 interface/resources/qml/hifi/tablet/TabletStoryCard.qml diff --git a/interface/resources/qml/hifi/Card.qml b/interface/resources/qml/hifi/Card.qml index 781149c1b3..01a5441380 100644 --- a/interface/resources/qml/hifi/Card.qml +++ b/interface/resources/qml/hifi/Card.qml @@ -129,7 +129,7 @@ Rectangle { property int dropSamples: 9; property int dropSpread: 0; DropShadow { - visible: showPlace && (desktop ? desktop.gradientsSupported : false) + visible: true;//showPlace && (desktop ? desktop.gradientsSupported : false) source: place; anchors.fill: place; horizontalOffset: dropHorizontalOffset; @@ -139,12 +139,12 @@ Rectangle { color: hifi.colors.black; spread: dropSpread; } - RalewaySemiBold { + RalewayLight { id: place; visible: showPlace; text: placeName; color: hifi.colors.white; - size: textSize; + size: 38; elide: Text.ElideRight; // requires constrained width anchors { top: parent.top; @@ -154,48 +154,44 @@ Rectangle { } } - Rectangle { - radius: 20 - color: "transparent" - Row { - FiraSansRegular { - id: users; - visible: isConcurrency; - text: onlineUsers; - size: textSize; - color: messageColor; - anchors.verticalCenter: message.verticalCenter; - } - Image { - id: icon; - source: "../../images/snap-icon.svg" - width: 40; - height: 40; - visible: action === 'snapshot'; - } - RalewayRegular { - id: message; - text: isConcurrency ? ((onlineUsers === 1) ? "person" : "people") : (drillDownToPlace ? "snapshots" : ("by " + userName)); - size: textSizeSmall; - color: messageColor; - elide: Text.ElideRight; // requires a width to be specified` - width: root.width - textPadding - - (users.visible ? users.width + parent.spacing : 0) - - (icon.visible ? icon.width + parent.spacing : 0) - - (actionIcon.width + (2 * smallMargin)); - anchors { - bottom: parent.bottom; - bottomMargin: parent.spacing; - } - } - spacing: textPadding; - height: messageHeight; + Row { + FiraSansRegular { + id: users; + visible: isConcurrency; + text: onlineUsers; + size: textSize; + color: messageColor; + anchors.verticalCenter: message.verticalCenter; + } + Image { + id: icon; + source: "../../images/snap-icon.svg" + width: 40; + height: 40; + visible: action === 'snapshot'; + } + RalewayRegular { + id: message; + text: isConcurrency ? ((onlineUsers === 1) ? "person" : "people") : (drillDownToPlace ? "snapshots" : ("by " + userName)); + size: textSizeSmall; + color: messageColor; + elide: Text.ElideRight; // requires a width to be specified` + width: root.width - textPadding + - (users.visible ? users.width + parent.spacing : 0) + - (icon.visible ? icon.width + parent.spacing : 0) + - (actionIcon.width + (2 * smallMargin)); anchors { bottom: parent.bottom; - left: parent.left; - leftMargin: textPadding; + bottomMargin: parent.spacing; } } + spacing: textPadding; + height: messageHeight; + anchors { + bottom: parent.bottom; + left: parent.left; + leftMargin: textPadding; + } } // These two can be supplied to provide hover behavior. // For example, AddressBarDialog provides functions that set the current list view item @@ -221,6 +217,12 @@ Rectangle { margins: smallMargin; } } + DropShadow { + anchors.fill: actionIcon + radius: 8.0 + color: "#80000000" + source: actionIcon + } MouseArea { id: messageArea; width: parent.width; diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 9e68d3435a..bfecf5457b 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -1,7 +1,7 @@ // // TabletAddressDialog.qml // -// Created by Dante Ruiz on 2016/07/16 +// Created by Dante Ruiz on 2017/03/16 // Copyright 2015 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. @@ -9,7 +9,8 @@ // import Hifi 1.0 -import QtQuick 2.4 +import QtQuick 2.5 +import QtQuick.Controls 1.4 import QtGraphicalEffects 1.0 import "../../controls" import "../../styles" @@ -19,11 +20,11 @@ import "../toolbars" import "../../styles-uit" as HifiStyles import "../../controls-uit" as HifiControls -Item { +StackView { id: root HifiConstants { id: hifi } HifiStyles.HifiConstants { id: hifiStyleConstants } - + initialItem: addressBarDialog width: parent.width height: parent.height @@ -32,7 +33,7 @@ Item { property int cardHeight: 320; property string metaverseBase: addressBarDialog.metaverseServerUrl + "/api/v1/"; - + Component { id: tabletStoryCard; TabletStoryCard {} } Component.onCompleted: { fillDestinations(); updateLocationText(); @@ -42,7 +43,7 @@ Item { Component.onDestruction: { root.parentChanged.disconnect(center); } - + function center() { // Explicitly center in order to avoid warnings at shutdown anchors.centerIn = parent; @@ -54,6 +55,9 @@ Item { } function goCard(targetString) { if (0 !== targetString.indexOf('hifi://')) { + var card = tabletStoryCard.createObject(); + card.setUrl(addressBarDialog.metaverseServerUrl + targetString); + root.push(card); return; } addressLine.text = targetString; @@ -86,7 +90,7 @@ Item { id: navBar width: 480 height: 70 - color: hifi.colors.white + color: hifiStyleConstants.colors.white anchors { top: parent.top right: parent.right @@ -194,7 +198,7 @@ Item { anchors.fill: parent onClicked: { isCursorVisible = true; - //parent.cursorVisible = true; + parent.cursorVisible = true; parent.forceActiveFocus(); addressBarDialog.keyboardEnabled = HMD.active tabletRoot.playButtonClickSound(); @@ -204,14 +208,14 @@ Item { Rectangle { anchors.fill: addressLine - color: hifiStyleConstants.colors.baseGray + color: hifiStyleConstants.colors.lightGray opacity: 0.1 } } Rectangle { id: topBar height: 37 - color: hifi.colors.white + color: hifiStyleConstants.colors.white anchors.right: parent.right anchors.rightMargin: 0 @@ -260,7 +264,7 @@ Item { Rectangle { id: bgMain - color: hifi.colors.white + color: hifiStyleConstants.colors.white anchors.bottom: parent.keyboardEnabled ? keyboard.top : parent.bottom anchors.bottomMargin: 0 anchors.right: parent.right diff --git a/interface/resources/qml/hifi/tablet/TabletStoryCard.qml b/interface/resources/qml/hifi/tablet/TabletStoryCard.qml new file mode 100644 index 0000000000..ea6a23cb10 --- /dev/null +++ b/interface/resources/qml/hifi/tablet/TabletStoryCard.qml @@ -0,0 +1,132 @@ +// +// TabletAddressDialog.qml +// +// Created by Dante Ruiz on 2017/04/24 +// Copyright 2015 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import Hifi 1.0 +import QtQuick 2.4 +import QtGraphicalEffects 1.0 +import "../../controls" +import "../../styles" +import "../../windows" +import "../" +import "../toolbars" +import "../../styles-uit" as HifiStyles +import "../../controls-uit" as HifiControls + + +Rectangle { + id: cardRoot + HifiStyles.HifiConstants { id: hifi } + width: parent.width + height: parent.height + property string address: "" + + function setUrl(url) { + cardRoot.address = url; + webview.url = url; + } + + function goBack() { + } + + function visit() { + } + + Rectangle { + id: header + anchors { + left: parent.left + right: parent.right + top: parent.top + } + + width: parent.width + height: 50 + color: hifi.colors.white + + Row { + anchors.fill: parent + spacing: 80 + + Item { + id: backButton + anchors { + top: parent.top + left: parent.left + leftMargin: 100 + } + height: parent.height + width: parent.height + + HifiStyles.FiraSansSemiBold { + text: "BACK" + elide: Text.ElideRight + anchors.fill: parent + size: 16 + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + + color: hifi.colors.lightGray + + MouseArea { + id: backButtonMouseArea + anchors.fill: parent + hoverEnabled: enabled + + onClicked: { + webview.goBack(); + } + } + } + } + + Item { + id: closeButton + anchors { + top: parent.top + right: parent.right + rightMargin: 100 + } + height: parent.height + width: parent.height + + HifiStyles.FiraSansSemiBold { + text: "CLOSE" + elide: Text.ElideRight + anchors.fill: parent + size: 16 + + verticalAlignment: Text.AlignVCenter + horizontalAlignment: Text.AlignHCenter + + color: hifi.colors.lightGray + + MouseArea { + id: closeButtonMouseArea + anchors.fill: parent + hoverEnabled: enabled + + onClicked: root.pop(); + } + } + } + } + } + + HifiControls.WebView { + id: webview + anchors { + top: header.bottom + right: parent.right + left: parent.left + bottom: parent.bottom + } + } +} From 3e98b2273c0e098e721996c4f955408f02c38450 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Sat, 25 Mar 2017 00:52:41 +0100 Subject: [PATCH 205/247] help in the tablet --- .../html/img/tablet-help-gamepad.jpg | Bin 0 -> 259716 bytes .../html/img/tablet-help-keyboard.jpg | Bin 0 -> 190462 bytes .../resources/html/img/tablet-help-oculus.jpg | Bin 0 -> 255457 bytes .../resources/html/img/tablet-help-vive.jpg | Bin 0 -> 216386 bytes interface/resources/html/tabletHelp.html | 69 +++++++++++++----- 5 files changed, 49 insertions(+), 20 deletions(-) create mode 100644 interface/resources/html/img/tablet-help-gamepad.jpg create mode 100644 interface/resources/html/img/tablet-help-keyboard.jpg create mode 100644 interface/resources/html/img/tablet-help-oculus.jpg create mode 100644 interface/resources/html/img/tablet-help-vive.jpg diff --git a/interface/resources/html/img/tablet-help-gamepad.jpg b/interface/resources/html/img/tablet-help-gamepad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5abb38d66b37f600e1ab8bc5061bc671df6792de GIT binary patch literal 259716 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	FA^8Z_9e8 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�A%d4{5J<=-$sW% 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%0DdW{h$s3m;xJbT5TjHf-T+i>#M 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 IKk=pY|G>DivH$=8 literal 0 HcmV?d00001 diff --git a/interface/resources/html/img/tablet-help-keyboard.jpg b/interface/resources/html/img/tablet-help-keyboard.jpg new file mode 100644 index 0000000000000000000000000000000000000000..40c6017561116f90106539cc6bab8176986ffb7e GIT binary patch literal 190462 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νRIuPLcI!NyvJTy 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 Iy{D1?0PvbRmjD0& literal 0 HcmV?d00001 diff --git a/interface/resources/html/img/tablet-help-oculus.jpg b/interface/resources/html/img/tablet-help-oculus.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26f1672405322c1a6e0333be6b2a058575bcf0f2 GIT binary patch literal 255457 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�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%0A^hP_Ru|~;lQ8yV* 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 D%8dhA literal 0 HcmV?d00001 diff --git a/interface/resources/html/img/tablet-help-vive.jpg b/interface/resources/html/img/tablet-help-vive.jpg new file mode 100644 index 0000000000000000000000000000000000000000..98e57eef47b8e5b8ec4ba72e2a36bf390cd737c4 GIT binary patch literal 216386 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 literal 0 HcmV?d00001 diff --git a/interface/resources/html/tabletHelp.html b/interface/resources/html/tabletHelp.html index 6bd3b0e7ad..635c557de3 100644 --- a/interface/resources/html/tabletHelp.html +++ b/interface/resources/html/tabletHelp.html @@ -15,26 +15,18 @@ padding: 0; } - #kbm_button { + #left_button { position: absolute; left: 70; - top: 118; + top: 70; width: 160; height: 80; } - #hand_controllers_button { + #right_button { position: absolute; left: 367; - top: 118; - width: 160; - height: 80; - } - - #game_controller_button { - position: absolute; - left: 634; - top: 118; + top: 70; width: 160; height: 80; } @@ -49,9 +41,11 @@ </style> <script> var handControllerImageURL = null; + var index = 0; + var count = 4; function showKbm() { - document.getElementById("main_image").setAttribute("src", "img/controls-help-keyboard.png"); + document.getElementById("main_image").setAttribute("src", "img/tablet-help-keyboard.jpg"); } function showHandControllers() { @@ -59,7 +53,39 @@ } function showGamepad() { - document.getElementById("main_image").setAttribute("src", "img/controls-help-gamepad.png"); + document.getElementById("main_image").setAttribute("src", "img/tablet-help-gamepad.jpg"); + } + + function cycleRight() { + index = (index + count + 1) % count; + chooseIcon(); + } + + function cycleLeft() { + index = (index + count - 1) % count; + chooseIcon(); + } + + function chooseIcon() { + switch (index) + { + case 0: + handControllerImageURL = "img/tablet-help-keyboard.jpg"; + showHandControllers(); + break; + case 1: + handControllerImageURL = "img/tablet-help-vive.jpg"; + showHandControllers(); + break; + case 2: + showGamepad(); + break; + case 3: + showKbm(); + break; + + default: + } } // This is not meant to be a complete or hardened query string parser - it only @@ -91,17 +117,20 @@ switch (params.handControllerName) { case "oculus": - handControllerImageURL = "img/controls-help-oculus.png"; + handControllerImageURL = "img/tablet-help-oculus.jpg"; + index = 0; break; case "vive": default: - handControllerImageURL = "img/controls-help-vive.png"; + handControllerImageURL = "img/tablet-help-vive.jpg"; + index = 1; } switch (params.defaultTab) { case "gamepad": showGamepad(); + index = 2; break; case "handControllers": @@ -111,6 +140,7 @@ case "kbm": default: showKbm(); + index = 3; } } </script> @@ -118,10 +148,9 @@ <body onload="load()"> <div id="image_area"> - <img id="main_image" src="img/controls-help-keyboard.png" width="480px" height="720px"></img> - <a href="#" id="kbm_button" onmousedown="showKbm()"></a> - <a href="#" id="hand_controllers_button" onmousedown="showHandControllers()"></a> - <a href="#" id="game_controller_button" onmousedown="showGamepad()"></a> + <img id="main_image" src="img/tablet-help-keyboard.jpg" width="480px" height="720px"></img> + <a href="#" id="left_button" onmousedown="cycleLeft()"></a> + <a href="#" id="right_button" onmousedown="cycleRight()"></a> </div> </body> From 9e2768cc84b98ae24436d594d1750c11bb292c0e Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Sat, 25 Mar 2017 01:06:21 +0100 Subject: [PATCH 206/247] saving work --- interface/resources/qml/hifi/tablet/TabletRoot.qml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/interface/resources/qml/hifi/tablet/TabletRoot.qml b/interface/resources/qml/hifi/tablet/TabletRoot.qml index febb2793ec..8037c1280e 100644 --- a/interface/resources/qml/hifi/tablet/TabletRoot.qml +++ b/interface/resources/qml/hifi/tablet/TabletRoot.qml @@ -31,7 +31,8 @@ Item { Component { id: customInputDialogBuilder; TabletCustomQueryDialog { } } function customInputDialog(properties) { - return customInputDialogBuilder.createObject(tabletRoot, properties); + openModal = customInputDialogBuilder.createObject(tabletRoot, properties); + return openModal; } Component { id: fileDialogBuilder; TabletFileDialog { } } From 2a59139c7691e8e0e39945d4d6bbeb72fa06946a Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Sat, 25 Mar 2017 01:17:37 +0100 Subject: [PATCH 207/247] trying to fix focus issue --- interface/resources/qml/hifi/tablet/TabletAddressDialog.qml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index bfecf5457b..e19f8ef72b 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -35,6 +35,8 @@ StackView { Component { id: tabletStoryCard; TabletStoryCard {} } Component.onCompleted: { + root.currentItem.focus = true; + root.currentItem.forceActiveFocus(); fillDestinations(); updateLocationText(); root.parentChanged.connect(center); @@ -199,6 +201,7 @@ StackView { onClicked: { isCursorVisible = true; parent.cursorVisible = true; + parent.focus = true; parent.forceActiveFocus(); addressBarDialog.keyboardEnabled = HMD.active tabletRoot.playButtonClickSound(); From fc23c348cb74159a82ea6699806c3c2841ca763b Mon Sep 17 00:00:00 2001 From: Vladyslav Stelmakhovskyi <vladyslav.stelmakhovski@volvocars.com> Date: Sat, 25 Mar 2017 13:17:38 +0100 Subject: [PATCH 208/247] Implemented Audio settings screen for Tablet UI --- interface/resources/qml/hifi/Audio.qml | 253 ++++++++++++++++++ .../qml/hifi/components/AudioCheckbox.qml | 29 ++ .../AudioDeviceScriptingInterface.cpp | 29 +- .../scripting/AudioDeviceScriptingInterface.h | 14 + interface/src/ui/AvatarInputs.cpp | 21 +- interface/src/ui/AvatarInputs.h | 10 +- interface/src/ui/overlays/Web3DOverlay.cpp | 5 + scripts/system/audio.js | 3 +- 8 files changed, 357 insertions(+), 7 deletions(-) create mode 100644 interface/resources/qml/hifi/Audio.qml create mode 100644 interface/resources/qml/hifi/components/AudioCheckbox.qml diff --git a/interface/resources/qml/hifi/Audio.qml b/interface/resources/qml/hifi/Audio.qml new file mode 100644 index 0000000000..deb44b9bd5 --- /dev/null +++ b/interface/resources/qml/hifi/Audio.qml @@ -0,0 +1,253 @@ +// +// Audio.qml +// qml/hifi +// +// Audio setup +// +// Created by Vlad Stelmahovsky on 03/22/2017 +// Copyright 2017 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +import QtQuick 2.5 +import QtQuick.Controls 1.4 +import QtGraphicalEffects 1.0 + +import "../styles-uit" +import "../controls-uit" as HifiControls + +import "components" + +Rectangle { + id: audio; + + //put info text here + property alias infoText: infoArea.text + + color: "#404040"; + + HifiConstants { id: hifi; } + objectName: "AudioWindow" + + property var eventBridge; + property string title: "Audio Options" + signal sendToScript(var message); + + //set models after Components is shown + Component.onCompleted: { + refreshTimer.start() + refreshTimerOutput.start() + } + + Component { + id: separator + LinearGradient { + start: Qt.point(0, 0) + end: Qt.point(0, 4) + gradient: Gradient { + GradientStop { position: 0.0; color: "#303030" } + GradientStop { position: 0.33; color: "#252525" } // Equivalent of darkGray0 over baseGray background. + GradientStop { position: 0.5; color: "#303030" } + GradientStop { position: 0.6; color: "#454a49" } + GradientStop { position: 1.0; color: "#454a49" } + } + cached: true + } + } + + Column { + anchors { left: parent.left; right: parent.right } + spacing: 8 + + RalewayRegular { + anchors { left: parent.left; right: parent.right; leftMargin: 30 } + height: 45 + size: 20 + color: "white" + text: audio.title + } + + Loader { + width: parent.width + height: 5 + sourceComponent: separator + } + + //connections required to syncronize with Menu + Connections { + target: AudioDevice + onMuteToggled: { + audioMute.checkbox.checked = AudioDevice.getMuted() + } + } + + Connections { + target: AvatarInputs + onShowAudioToolsChanged: { + audioTools.checkbox.checked = showAudioTools + } + } + + AudioCheckbox { + id: audioMute + width: parent.width + anchors { left: parent.left; right: parent.right; leftMargin: 30 } + checkbox.checked: AudioDevice.muted + text.text: qsTr("Mute microphone") + onCheckBoxClicked: { + AudioDevice.muted = checked + } + } + + AudioCheckbox { + id: audioTools + width: parent.width + anchors { left: parent.left; right: parent.right; leftMargin: 30 } + checkbox.checked: AvatarInputs.showAudioTools + text.text: qsTr("Show audio level meter") + onCheckBoxClicked: { + AvatarInputs.showAudioTools = checked + } + } + + Loader { + width: parent.width + height: 5 + sourceComponent: separator + } + + Row { + anchors { left: parent.left; right: parent.right; leftMargin: 30 } + height: 40 + spacing: 8 + + HiFiGlyphs { + text: hifi.glyphs.mic + color: hifi.colors.primaryHighlight + anchors.verticalCenter: parent.verticalCenter + font.pointSize: 27 + } + RalewayRegular { + anchors.verticalCenter: parent.verticalCenter + size: 16 + color: "#AFAFAF" + text: qsTr("CHOOSE INPUT DEVICE") + } + } + + ListView { + Timer { + id: refreshTimer + interval: 1 + repeat: false + onTriggered: { + //refresh model + inputAudioListView.model = undefined + inputAudioListView.model = AudioDevice.inputAudioDevices + } + } + id: inputAudioListView + anchors { left: parent.left; right: parent.right; leftMargin: 70 } + height: 125 + spacing: 16 + clip: true + snapMode: ListView.SnapToItem + delegate: AudioCheckbox { + width: parent.width + checkbox.checked: (modelData === AudioDevice.getInputDevice()) + text.text: modelData + onCheckBoxClicked: { + if (checked) { + AudioDevice.setInputDevice(modelData) + refreshTimer.start() + } + } + } + } + + Loader { + width: parent.width + height: 5 + sourceComponent: separator + } + + Row { + anchors { left: parent.left; right: parent.right; leftMargin: 30 } + height: 40 + spacing: 8 + + HiFiGlyphs { + text: hifi.glyphs.unmuted + color: hifi.colors.primaryHighlight + anchors.verticalCenter: parent.verticalCenter + font.pointSize: 27 + } + RalewayRegular { + anchors.verticalCenter: parent.verticalCenter + size: 16 + color: "#AFAFAF" + text: qsTr("CHOOSE OUTPUT DEVICE") + } + } + ListView { + id: outputAudioListView + Timer { + id: refreshTimerOutput + interval: 1 + repeat: false + onTriggered: { + //refresh model + outputAudioListView.model = undefined + outputAudioListView.model = AudioDevice.outputAudioDevices + } + } + anchors { left: parent.left; right: parent.right; leftMargin: 70 } + height: 250 + spacing: 16 + clip: true + snapMode: ListView.SnapToItem + delegate: AudioCheckbox { + width: parent.width + checkbox.checked: (modelData === AudioDevice.getOutputDevice()) + text.text: modelData + onCheckBoxClicked: { + if (checked) { + AudioDevice.setOutputDevice(modelData) + refreshTimerOutput.start() + } + } + } + } + + Loader { + id: lastSeparator + width: parent.width + height: 6 + sourceComponent: separator + } + + Row { + anchors { left: parent.left; right: parent.right; leftMargin: 30 } + height: 40 + spacing: 8 + + HiFiGlyphs { + id: infoSign + text: hifi.glyphs.info + color: "#AFAFAF" + anchors.verticalCenter: parent.verticalCenter + size: 60 + } + RalewayRegular { + id: infoArea + width: parent.width - infoSign.implicitWidth - parent.spacing - 10 + wrapMode: Text.WordWrap + anchors.verticalCenter: parent.verticalCenter + size: 12 + color: hifi.colors.baseGrayHighlight + } + } + } +} diff --git a/interface/resources/qml/hifi/components/AudioCheckbox.qml b/interface/resources/qml/hifi/components/AudioCheckbox.qml new file mode 100644 index 0000000000..a8e0441e0a --- /dev/null +++ b/interface/resources/qml/hifi/components/AudioCheckbox.qml @@ -0,0 +1,29 @@ +import QtQuick 2.5 +import QtQuick.Controls 1.4 + +import "../../styles-uit" +import "../../controls-uit" as HifiControls + +Row { + id: row + spacing: 16 + property alias checkbox: cb + property alias text: txt + signal checkBoxClicked(bool checked) + + HifiControls.CheckBox { + id: cb + boxSize: 20 + colorScheme: hifi.colorSchemes.dark + anchors.verticalCenter: parent.verticalCenter + onClicked: checkBoxClicked(cb.checked) + } + RalewayBold { + id: txt + wrapMode: Text.WordWrap + width: parent.width - cb.boxSize - 30 + anchors.verticalCenter: parent.verticalCenter + size: 16 + color: "white" + } +} diff --git a/interface/src/scripting/AudioDeviceScriptingInterface.cpp b/interface/src/scripting/AudioDeviceScriptingInterface.cpp index c4dc58f16b..cbb08c0af0 100644 --- a/interface/src/scripting/AudioDeviceScriptingInterface.cpp +++ b/interface/src/scripting/AudioDeviceScriptingInterface.cpp @@ -18,6 +18,21 @@ AudioDeviceScriptingInterface* AudioDeviceScriptingInterface::getInstance() { return &sharedInstance; } +QStringList AudioDeviceScriptingInterface::inputAudioDevices() const +{ + return DependencyManager::get<AudioClient>()->getDeviceNames(QAudio::AudioInput).toList();; +} + +QStringList AudioDeviceScriptingInterface::outputAudioDevices() const +{ + return DependencyManager::get<AudioClient>()->getDeviceNames(QAudio::AudioOutput).toList();; +} + +bool AudioDeviceScriptingInterface::muted() +{ + return getMuted(); +} + AudioDeviceScriptingInterface::AudioDeviceScriptingInterface() { connect(DependencyManager::get<AudioClient>().data(), &AudioClient::muteToggled, this, &AudioDeviceScriptingInterface::muteToggled); @@ -31,7 +46,6 @@ bool AudioDeviceScriptingInterface::setInputDevice(const QString& deviceName) { Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result), Q_ARG(const QString&, deviceName)); - return result; } @@ -41,7 +55,6 @@ bool AudioDeviceScriptingInterface::setOutputDevice(const QString& deviceName) { Qt::BlockingQueuedConnection, Q_RETURN_ARG(bool, result), Q_ARG(const QString&, deviceName)); - return result; } @@ -69,7 +82,6 @@ QVector<QString> AudioDeviceScriptingInterface::getOutputDevices() { return DependencyManager::get<AudioClient>()->getDeviceNames(QAudio::AudioOutput); } - float AudioDeviceScriptingInterface::getInputVolume() { return DependencyManager::get<AudioClient>()->getInputVolume(); } @@ -90,6 +102,17 @@ void AudioDeviceScriptingInterface::toggleMute() { DependencyManager::get<AudioClient>()->toggleMute(); } +void AudioDeviceScriptingInterface::setMuted(bool muted) +{ + bool lMuted = getMuted(); + if (lMuted == muted) + return; + + toggleMute(); + lMuted = getMuted(); + emit mutedChanged(lMuted); +} + bool AudioDeviceScriptingInterface::getMuted() { return DependencyManager::get<AudioClient>()->isMuted(); } diff --git a/interface/src/scripting/AudioDeviceScriptingInterface.h b/interface/src/scripting/AudioDeviceScriptingInterface.h index 149de9bf56..4d1d47dcba 100644 --- a/interface/src/scripting/AudioDeviceScriptingInterface.h +++ b/interface/src/scripting/AudioDeviceScriptingInterface.h @@ -20,9 +20,18 @@ class AudioEffectOptions; class AudioDeviceScriptingInterface : public QObject { Q_OBJECT + + Q_PROPERTY(QStringList inputAudioDevices READ inputAudioDevices NOTIFY inputAudioDevicesChanged) + Q_PROPERTY(QStringList outputAudioDevices READ outputAudioDevices NOTIFY outputAudioDevicesChanged) + Q_PROPERTY(bool muted READ muted WRITE setMuted NOTIFY mutedChanged) + public: static AudioDeviceScriptingInterface* getInstance(); + QStringList inputAudioDevices() const; + QStringList outputAudioDevices() const; + bool muted(); + public slots: bool setInputDevice(const QString& deviceName); bool setOutputDevice(const QString& deviceName); @@ -44,12 +53,17 @@ public slots: bool getMuted(); void toggleMute(); + void setMuted(bool muted); + private: AudioDeviceScriptingInterface(); signals: void muteToggled(); void deviceChanged(); + void mutedChanged(bool muted); + void inputAudioDevicesChanged(QStringList inputAudioDevices); + void outputAudioDevicesChanged(QStringList outputAudioDevices); }; #endif // hifi_AudioDeviceScriptingInterface_h diff --git a/interface/src/ui/AvatarInputs.cpp b/interface/src/ui/AvatarInputs.cpp index 944be4bf9e..37d7a30938 100644 --- a/interface/src/ui/AvatarInputs.cpp +++ b/interface/src/ui/AvatarInputs.cpp @@ -43,6 +43,16 @@ AvatarInputs::AvatarInputs(QQuickItem* parent) : QQuickItem(parent) { } \ } +#define AI_UPDATE_WRITABLE(name, src) \ + { \ + auto val = src; \ + if (_##name != val) { \ + _##name = val; \ + qDebug() << "AvatarInputs" << val; \ + emit name##Changed(val); \ + } \ + } + #define AI_UPDATE_FLOAT(name, src, epsilon) \ { \ float val = src; \ @@ -59,7 +69,8 @@ void AvatarInputs::update() { AI_UPDATE(cameraEnabled, !Menu::getInstance()->isOptionChecked(MenuOption::NoFaceTracking)); AI_UPDATE(cameraMuted, Menu::getInstance()->isOptionChecked(MenuOption::MuteFaceTracking)); AI_UPDATE(isHMD, qApp->isHMDMode()); - AI_UPDATE(showAudioTools, Menu::getInstance()->isOptionChecked(MenuOption::AudioTools)); + + AI_UPDATE_WRITABLE(showAudioTools, Menu::getInstance()->isOptionChecked(MenuOption::AudioTools)); auto audioIO = DependencyManager::get<AudioClient>(); const float AUDIO_METER_AVERAGING = 0.5; @@ -100,6 +111,14 @@ void AvatarInputs::update() { //iconColor = PULSE_MIN + (PULSE_MAX - PULSE_MIN) * pulseFactor; } +void AvatarInputs::setShowAudioTools(bool showAudioTools) { + if (_showAudioTools == showAudioTools) + return; + + Menu::getInstance()->setIsOptionChecked(MenuOption::AudioTools, showAudioTools); + update(); +} + void AvatarInputs::toggleCameraMute() { FaceTracker* faceTracker = qApp->getSelectedFaceTracker(); if (faceTracker) { diff --git a/interface/src/ui/AvatarInputs.h b/interface/src/ui/AvatarInputs.h index 5535469445..0c4fc0f23c 100644 --- a/interface/src/ui/AvatarInputs.h +++ b/interface/src/ui/AvatarInputs.h @@ -29,12 +29,17 @@ class AvatarInputs : public QQuickItem { AI_PROPERTY(bool, audioClipping, false) AI_PROPERTY(float, audioLevel, 0) AI_PROPERTY(bool, isHMD, false) - AI_PROPERTY(bool, showAudioTools, true) + + Q_PROPERTY(bool showAudioTools READ showAudioTools WRITE setShowAudioTools NOTIFY showAudioToolsChanged) public: static AvatarInputs* getInstance(); AvatarInputs(QQuickItem* parent = nullptr); void update(); + bool showAudioTools() const { return _showAudioTools; } + +public slots: + void setShowAudioTools(bool showAudioTools); signals: void cameraEnabledChanged(); @@ -43,7 +48,7 @@ signals: void audioClippingChanged(); void audioLevelChanged(); void isHMDChanged(); - void showAudioToolsChanged(); + void showAudioToolsChanged(bool showAudioTools); protected: Q_INVOKABLE void resetSensors(); @@ -52,6 +57,7 @@ protected: private: float _trailingAudioLoudness{ 0 }; + bool _showAudioTools { false }; }; #endif // hifi_AvatarInputs_h diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index fa815421c7..e2490f241e 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -46,6 +46,8 @@ #include "LODManager.h" #include "ui/OctreeStatsProvider.h" #include "ui/DomainConnectionModel.h" +#include "scripting/AudioDeviceScriptingInterface.h" +#include "ui/AvatarInputs.h" static const float DPI = 30.47f; static const float INCHES_TO_METERS = 1.0f / 39.3701f; @@ -189,6 +191,9 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("LODManager", DependencyManager::get<LODManager>().data()); _webSurface->getRootContext()->setContextProperty("OctreeStats", DependencyManager::get<OctreeStatsProvider>().data()); _webSurface->getRootContext()->setContextProperty("DCModel", DependencyManager::get<DomainConnectionModel>().data()); + _webSurface->getRootContext()->setContextProperty("AudioDevice", AudioDeviceScriptingInterface::getInstance()); + _webSurface->getRootContext()->setContextProperty("AvatarInputs", AvatarInputs::getInstance()); + _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); diff --git a/scripts/system/audio.js b/scripts/system/audio.js index beeb8609d8..7bc8676a2e 100644 --- a/scripts/system/audio.js +++ b/scripts/system/audio.js @@ -45,7 +45,8 @@ function onClicked() { var entity = HMD.tabletID; Entities.editEntity(entity, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) }); shouldActivateButton = true; - tablet.gotoMenuScreen("Audio"); + shouldActivateButton = true; + tablet.loadQMLSource("../Audio.qml"); onAudioScreen = true; } } From e87bc91d0e264ce40e64fe5cc597a8efc86ba206 Mon Sep 17 00:00:00 2001 From: Sam Cake <Sam Cake> Date: Sun, 26 Mar 2017 11:48:02 -0700 Subject: [PATCH 209/247] Fixing the roughness/reflection quantization bug --- libraries/render-utils/src/DebugDeferredBuffer.cpp | 1 + libraries/render-utils/src/LightAmbient.slh | 2 +- libraries/render-utils/src/debug_deferred_buffer.slf | 2 ++ .../src/surfaceGeometry_downsampleDepthNormal.slf | 4 ++-- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libraries/render-utils/src/DebugDeferredBuffer.cpp b/libraries/render-utils/src/DebugDeferredBuffer.cpp index d0e2859e90..9ffd94af38 100644 --- a/libraries/render-utils/src/DebugDeferredBuffer.cpp +++ b/libraries/render-utils/src/DebugDeferredBuffer.cpp @@ -76,6 +76,7 @@ static const std::string DEFAULT_ROUGHNESS_SHADER { "vec4 getFragmentColor() {" " DeferredFragment frag = unpackDeferredFragmentNoPosition(uv);" " return vec4(vec3(pow(frag.roughness, 1.0 / 2.2)), 1.0);" + // " return vec4(vec3(pow(colorRamp(frag.roughness), vec3(1.0 / 2.2))), 1.0);" " }" }; static const std::string DEFAULT_NORMAL_SHADER { diff --git a/libraries/render-utils/src/LightAmbient.slh b/libraries/render-utils/src/LightAmbient.slh index e343d8c239..b919108115 100644 --- a/libraries/render-utils/src/LightAmbient.slh +++ b/libraries/render-utils/src/LightAmbient.slh @@ -39,7 +39,7 @@ vec3 evalAmbientSpecularIrradiance(LightAmbient ambient, vec3 fragEyeDir, vec3 f <@if supportAmbientMap@> { float levels = getLightAmbientMapNumMips(ambient); - float lod = min(floor((roughness)* levels), levels); + float lod = min(((roughness)* levels), levels); specularLight = evalSkyboxLight(direction, lod).xyz; } <@endif@> diff --git a/libraries/render-utils/src/debug_deferred_buffer.slf b/libraries/render-utils/src/debug_deferred_buffer.slf index 079f79c06e..c018e5e526 100644 --- a/libraries/render-utils/src/debug_deferred_buffer.slf +++ b/libraries/render-utils/src/debug_deferred_buffer.slf @@ -13,6 +13,8 @@ // <@include DeferredBufferRead.slh@> +<@include gpu/Color.slh@> +<$declareColorWheel()$> uniform sampler2D linearDepthMap; uniform sampler2D halfLinearDepthMap; diff --git a/libraries/render-utils/src/surfaceGeometry_downsampleDepthNormal.slf b/libraries/render-utils/src/surfaceGeometry_downsampleDepthNormal.slf index 533073b224..46554dd7f8 100644 --- a/libraries/render-utils/src/surfaceGeometry_downsampleDepthNormal.slf +++ b/libraries/render-utils/src/surfaceGeometry_downsampleDepthNormal.slf @@ -24,8 +24,8 @@ void main(void) { // Gather 2 by 2 quads from texture // Try different filters for Z -// vec4 Zeyes = textureGather(linearDepthMap, varTexCoord0, 0); - // float Zeye = min(min(Zeyes.x, Zeyes.y), min(Zeyes.z, Zeyes.w)); + //vec4 Zeyes = textureGather(linearDepthMap, varTexCoord0, 0); + //float Zeye = min(min(Zeyes.x, Zeyes.y), min(Zeyes.z, Zeyes.w)); float Zeye = texture(linearDepthMap, varTexCoord0).x; vec4 rawNormalsX = textureGather(normalMap, varTexCoord0, 0); From aa8a1e1dda801bba4f119bf9ae648fe77c0b492d Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Mon, 27 Mar 2017 15:04:33 +1300 Subject: [PATCH 210/247] Open snapshot dialog in tablet or window appropriately --- scripts/system/html/SnapshotReview.html | 1 - scripts/system/snapshot.js | 12 ++++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/scripts/system/html/SnapshotReview.html b/scripts/system/html/SnapshotReview.html index d37afb180c..68c91b8190 100644 --- a/scripts/system/html/SnapshotReview.html +++ b/scripts/system/html/SnapshotReview.html @@ -3,7 +3,6 @@ <title>Share</title> <link rel="stylesheet" type="text/css" href="css/edit-style.css"> <link rel="stylesheet" type="text/css" href="css/SnapshotReview.css"> - <script type="text/javascript" src="qrc:///qtwebchannel/qwebchannel.js"></script> <script type="text/javascript" src="js/eventBridgeLoader.js"></script> <script type="text/javascript" src="js/SnapshotReview.js"></script> </head> diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index b9dfc43f9a..8a48aeb0ff 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -40,7 +40,7 @@ var SNAPSHOT_REVIEW_URL = Script.resolvePath("html/SnapshotReview.html"); var outstanding; function confirmShare(data) { - var dialog = new OverlayWebWindow('Snapshot Review', SNAPSHOT_REVIEW_URL, 800, 520); + tablet.gotoWebScreen(SNAPSHOT_REVIEW_URL); function onMessage(message) { // Receives message from the html dialog via the qwebchannel EventBridge. This is complicated by the following: // 1. Although we can send POJOs, we cannot receive a toplevel object. (Arrays of POJOs are fine, though.) @@ -51,7 +51,7 @@ function confirmShare(data) { var needsLogin = false; switch (message) { case 'ready': - dialog.emitScriptEvent(data); // Send it. + tablet.emitScriptEvent(data); // Send it. outstanding = 0; break; case 'openSettings': @@ -64,8 +64,8 @@ function confirmShare(data) { Settings.setValue('openFeedAfterShare', true); break; default: - dialog.webEventReceived.disconnect(onMessage); - dialog.close(); + tablet.webEventReceived.disconnect(onMessage); + HMD.closeTablet(); isLoggedIn = Account.isLoggedIn(); message.forEach(function (submessage) { if (submessage.share && !isLoggedIn) { @@ -88,8 +88,8 @@ function confirmShare(data) { } } } - dialog.webEventReceived.connect(onMessage); - dialog.raise(); + tablet.webEventReceived.connect(onMessage); + HMD.openTablet(); } function snapshotShared(errorMessage) { From d0fc352d3bd644cba6a563d068f482c5fa28b3d0 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Mon, 27 Mar 2017 16:07:58 +1300 Subject: [PATCH 211/247] Address event bridge being shared with other scripts --- scripts/system/html/js/SnapshotReview.js | 45 ++++++++++++++++++------ scripts/system/snapshot.js | 16 ++++++--- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/scripts/system/html/js/SnapshotReview.js b/scripts/system/html/js/SnapshotReview.js index a1bb350789..efe30196ee 100644 --- a/scripts/system/html/js/SnapshotReview.js +++ b/scripts/system/html/js/SnapshotReview.js @@ -43,7 +43,13 @@ function addImage(data) { function handleShareButtons(shareMsg) { var openFeed = document.getElementById('openFeed'); openFeed.checked = shareMsg.openFeedAfterShare; - openFeed.onchange = function () { EventBridge.emitWebEvent(openFeed.checked ? 'setOpenFeedTrue' : 'setOpenFeedFalse'); }; + openFeed.onchange = function () { + EventBridge.emitWebEvent(JSON.stringify({ + type: "snapshot", + action: (openFeed.checked ? "setOpenFeedTrue" : "setOpenFeedFalse") + })); + }; + if (!shareMsg.canShare) { // this means you may or may not be logged in, but can't share // because you are not in a public place. @@ -57,25 +63,42 @@ window.onload = function () { openEventBridge(function () { // Set up a handler for receiving the data, and tell the .js we are ready to receive it. EventBridge.scriptEventReceived.connect(function (message) { + message = JSON.parse(message); + if (message.type !== "snapshot") { + return; + } + // last element of list contains a bool for whether or not we can share stuff - var shareMsg = message.pop(); + var shareMsg = message.action.pop(); handleShareButtons(shareMsg); // rest are image paths which we add - useCheckboxes = message.length > 1; - message.forEach(addImage); + useCheckboxes = message.action.length > 1; + message.action.forEach(addImage); }); - EventBridge.emitWebEvent('ready'); + EventBridge.emitWebEvent(JSON.stringify({ + type: "snapshot", + action: "ready" + })); }); }; // beware of bug: Cannot send objects at top level. (Nested in arrays is fine.) function shareSelected() { - EventBridge.emitWebEvent(paths); -}; + EventBridge.emitWebEvent(JSON.stringify({ + type: "snapshot", + action: paths + })); +} function doNotShare() { - EventBridge.emitWebEvent([]); -}; + EventBridge.emitWebEvent(JSON.stringify({ + type: "snapshot", + action: [] + })); +} function snapshotSettings() { - EventBridge.emitWebEvent("openSettings"); -}; + EventBridge.emitWebEvent(JSON.stringify({ + type: "snapshot", + action: "openSettings" + })); +} diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index 8a48aeb0ff..d25a208417 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -47,11 +47,19 @@ function confirmShare(data) { // 2. Although we currently use a single image, we would like to take snapshot, a selfie, a 360 etc. all at the // same time, show the user all of them, and have the user deselect any that they do not want to share. // So we'll ultimately be receiving a set of objects, perhaps with different post processing for each. + message = JSON.parse(message); + if (message.type !== "snapshot") { + return; + } + var isLoggedIn; var needsLogin = false; - switch (message) { - case 'ready': - tablet.emitScriptEvent(data); // Send it. + switch (message.action) { + case 'ready': // Send it. + tablet.emitScriptEvent(JSON.stringify({ + type: "snapshot", + action: data + })); outstanding = 0; break; case 'openSettings': @@ -67,7 +75,7 @@ function confirmShare(data) { tablet.webEventReceived.disconnect(onMessage); HMD.closeTablet(); isLoggedIn = Account.isLoggedIn(); - message.forEach(function (submessage) { + message.action.forEach(function (submessage) { if (submessage.share && !isLoggedIn) { needsLogin = true; submessage.share = false; From dc3095bfcdee91c4f521bb62c6fb7a69e5370cf0 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Mon, 27 Mar 2017 16:24:14 +1300 Subject: [PATCH 212/247] Fix "don't share" button not closing window --- scripts/system/snapshot.js | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index d25a208417..fa92e77420 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -74,6 +74,7 @@ function confirmShare(data) { default: tablet.webEventReceived.disconnect(onMessage); HMD.closeTablet(); + tablet.gotoHomeScreen(); isLoggedIn = Account.isLoggedIn(); message.action.forEach(function (submessage) { if (submessage.share && !isLoggedIn) { From e58e3fbbf730220fff7dedde28798daa5b57ca67 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Mon, 27 Mar 2017 17:32:04 +1300 Subject: [PATCH 213/247] Disconnect snapshot event handler when tablet "home" button pressed --- scripts/system/snapshot.js | 57 +++++++++++++++++++++++--------------- 1 file changed, 35 insertions(+), 22 deletions(-) diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index fa92e77420..4c454dbc7b 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -36,30 +36,27 @@ function showFeedWindow() { DialogsManager.showFeed(); } -var SNAPSHOT_REVIEW_URL = Script.resolvePath("html/SnapshotReview.html"); - var outstanding; -function confirmShare(data) { - tablet.gotoWebScreen(SNAPSHOT_REVIEW_URL); - function onMessage(message) { - // Receives message from the html dialog via the qwebchannel EventBridge. This is complicated by the following: - // 1. Although we can send POJOs, we cannot receive a toplevel object. (Arrays of POJOs are fine, though.) - // 2. Although we currently use a single image, we would like to take snapshot, a selfie, a 360 etc. all at the - // same time, show the user all of them, and have the user deselect any that they do not want to share. - // So we'll ultimately be receiving a set of objects, perhaps with different post processing for each. - message = JSON.parse(message); - if (message.type !== "snapshot") { - return; - } +var readyData; +function onMessage(message) { + // Receives message from the html dialog via the qwebchannel EventBridge. This is complicated by the following: + // 1. Although we can send POJOs, we cannot receive a toplevel object. (Arrays of POJOs are fine, though.) + // 2. Although we currently use a single image, we would like to take snapshot, a selfie, a 360 etc. all at the + // same time, show the user all of them, and have the user deselect any that they do not want to share. + // So we'll ultimately be receiving a set of objects, perhaps with different post processing for each. + message = JSON.parse(message); + if (message.type !== "snapshot") { + return; + } - var isLoggedIn; - var needsLogin = false; - switch (message.action) { + var isLoggedIn; + var needsLogin = false; + switch (message.action) { case 'ready': // Send it. tablet.emitScriptEvent(JSON.stringify({ type: "snapshot", - action: data - })); + action: readyData + })); outstanding = 0; break; case 'openSettings': @@ -72,7 +69,7 @@ function confirmShare(data) { Settings.setValue('openFeedAfterShare', true); break; default: - tablet.webEventReceived.disconnect(onMessage); + //tablet.webEventReceived.disconnect(onMessage); // <<< It's probably this that's missing?! HMD.closeTablet(); tablet.gotoHomeScreen(); isLoggedIn = Account.isLoggedIn(); @@ -90,15 +87,22 @@ function confirmShare(data) { } }); if (!outstanding && shouldOpenFeedAfterShare()) { - showFeedWindow(); + //showFeedWindow(); } if (needsLogin) { // after the possible feed, so that the login is on top Account.checkAndSignalForAccessToken(); } - } } +} + +var SNAPSHOT_REVIEW_URL = Script.resolvePath("html/SnapshotReview.html"); +var isInSnapshotReview = false; +function confirmShare(data) { + tablet.gotoWebScreen(SNAPSHOT_REVIEW_URL); + readyData = data; tablet.webEventReceived.connect(onMessage); HMD.openTablet(); + isInSnapshotReview = true; } function snapshotShared(errorMessage) { @@ -214,10 +218,18 @@ function processingGif() { } } +function onTabletScreenChanged(type, url) { + if (isInSnapshotReview) { + tablet.webEventReceived.disconnect(onMessage); + isInSnapshotReview = false; + } +} + button.clicked.connect(onClicked); buttonConnected = true; Window.snapshotShared.connect(snapshotShared); Window.processingGif.connect(processingGif); +tablet.screenChanged.connect(onTabletScreenChanged); Script.scriptEnding.connect(function () { if (buttonConnected) { @@ -229,6 +241,7 @@ Script.scriptEnding.connect(function () { } Window.snapshotShared.disconnect(snapshotShared); Window.processingGif.disconnect(processingGif); + tablet.screenChanged.disconnect(onTabletScreenChanged); }); }()); // END LOCAL_SCOPE From 2682586c38eb554b804ff4e1de2e7c40f3af8056 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Mon, 27 Mar 2017 06:50:06 -0700 Subject: [PATCH 214/247] some clean-ups and a bug fix in PolyVox to mesh code --- .../src/RenderablePolyVoxEntityItem.cpp | 30 +++++++++++++------ libraries/fbx/src/OBJWriter.cpp | 2 +- libraries/model/src/model/MeshProxy.cpp | 6 ---- 3 files changed, 22 insertions(+), 16 deletions(-) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index b7ca5b8e26..7b0146f5b7 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -690,6 +690,8 @@ bool RenderablePolyVoxEntityItem::updateDependents() { _voxelDataDirty = false; } else if (_volDataDirty) { _volDataDirty = false; + } else { + _meshReady = true; } }); if (voxelDataDirty) { @@ -707,7 +709,9 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { assert(getType() == EntityTypes::PolyVox); Q_ASSERT(args->_batch); - updateDependents(); + if (_voxelDataDirty || _volDataDirty) { + updateDependents(); + } model::MeshPointer mesh; glm::vec3 voxelVolumeSize; @@ -769,6 +773,11 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { 0, sizeof(PolyVox::PositionMaterialNormal)); + // batch.setInputBuffer(gpu::Stream::NORMAL, mesh->getVertexBuffer()._buffer, + // 12, + // sizeof(PolyVox::PositionMaterialNormal)); + + batch.setIndexBuffer(gpu::UINT32, mesh->getIndexBuffer()._buffer, 0); if (!_xTextureURL.isEmpty() && !_xTexture) { @@ -1287,23 +1296,26 @@ void RenderablePolyVoxEntityItem::recomputeMesh() { auto indexBuffer = std::make_shared<gpu::Buffer>(vecIndices.size() * sizeof(uint32_t), (gpu::Byte*)vecIndices.data()); auto indexBufferPtr = gpu::BufferPointer(indexBuffer); - gpu::BufferView indexBufferView(indexBufferPtr, gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::RAW)); + gpu::BufferView indexBufferView(indexBufferPtr, gpu::Element(gpu::SCALAR, gpu::UINT32, gpu::INDEX)); mesh->setIndexBuffer(indexBufferView); - const std::vector<PolyVox::PositionMaterialNormal>& vecVertices = polyVoxMesh.getVertices(); + const std::vector<PolyVox::PositionMaterialNormal>& vecVertices = polyVoxMesh.getRawVertexData(); auto vertexBuffer = std::make_shared<gpu::Buffer>(vecVertices.size() * sizeof(PolyVox::PositionMaterialNormal), (gpu::Byte*)vecVertices.data()); auto vertexBufferPtr = gpu::BufferPointer(vertexBuffer); gpu::BufferView vertexBufferView(vertexBufferPtr, 0, vertexBufferPtr->getSize(), sizeof(PolyVox::PositionMaterialNormal), - gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RAW)); + gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ)); mesh->setVertexBuffer(vertexBufferView); + + mesh->addAttribute(gpu::Stream::NORMAL, - gpu::BufferView(vertexBufferPtr, sizeof(float) * 3, - vertexBufferPtr->getSize() , + gpu::BufferView(vertexBufferPtr, + sizeof(float) * 3, // polyvox mesh is packed: position, normal, material + vertexBufferPtr->getSize(), sizeof(PolyVox::PositionMaterialNormal), - gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::RAW))); + gpu::Element(gpu::VEC3, gpu::FLOAT, gpu::XYZ))); std::vector<model::Mesh::Part> parts; parts.emplace_back(model::Mesh::Part((model::Index)0, // startIndex @@ -1626,10 +1638,10 @@ bool RenderablePolyVoxEntityItem::getMeshes(MeshProxyList& result) { // the mesh will be in voxel-space. transform it into object-space meshProxy = new MeshProxy( _mesh->map([=](glm::vec3 position){ return glm::vec3(transform * glm::vec4(position, 1.0f)); }, - [=](glm::vec3 normal){ return glm::vec3(transform * glm::vec4(normal, 0.0f)); }, + [=](glm::vec3 normal){ return glm::normalize(glm::vec3(transform * glm::vec4(normal, 0.0f))); }, [&](uint32_t index){ return index; })); result << meshProxy; } }); - return meshProxy; + return success; } diff --git a/libraries/fbx/src/OBJWriter.cpp b/libraries/fbx/src/OBJWriter.cpp index e236ecb0fa..034263eb53 100644 --- a/libraries/fbx/src/OBJWriter.cpp +++ b/libraries/fbx/src/OBJWriter.cpp @@ -73,7 +73,7 @@ bool writeOBJToTextStream(QTextStream& out, QList<MeshPointer> meshes) { foreach (const MeshPointer& mesh, meshes) { meshNormalStartOffset.append(currentNormalStartOffset); const gpu::BufferView& normalsBufferView = mesh->getAttributeBuffer(attributeTypeNormal); - gpu::BufferView::Index numNormals = (gpu::BufferView::Index)normalsBufferView.getNumElements(); + gpu::BufferView::Index numNormals = (gpu::BufferView::Index)normalsBufferView.getNumElements(); for (gpu::BufferView::Index i = 0; i < numNormals; i++) { glm::vec3 normal = normalsBufferView.get<glm::vec3>(i); out << "vn "; diff --git a/libraries/model/src/model/MeshProxy.cpp b/libraries/model/src/model/MeshProxy.cpp index 01bafa086c..1b6fa43c82 100644 --- a/libraries/model/src/model/MeshProxy.cpp +++ b/libraries/model/src/model/MeshProxy.cpp @@ -26,14 +26,8 @@ QScriptValue meshesToScriptValue(QScriptEngine* engine, const MeshProxyList &in) QScriptValue result = engine->newArray(); int i = 0; foreach (MeshProxy* const meshProxy, in) { - qDebug() << "meshesToScriptValue adding mesh: " << (void*)meshProxy; - // result.setProperty(i++, QScriptValue(engine, meshProxy)); result.setProperty(i++, meshToScriptValue(engine, meshProxy)); - // result.setProperty(QString::number(i++), QScriptValue(meshProxy)); - // result[i] = QScriptValue(meshProxy); - // result << QScriptValue(meshProxy); } - // result.setProperty("length", i); return result; } From 5ed0ff729b5f85de90d6bcdae84de54a2eca6f6c Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Mon, 27 Mar 2017 07:25:40 -0700 Subject: [PATCH 215/247] cleanups --- libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp | 2 +- libraries/entities/src/EntityScriptingInterface.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 7b0146f5b7..5127739357 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -446,7 +446,6 @@ bool RenderablePolyVoxEntityItem::setSphere(glm::vec3 centerWorldCoords, float r } }); - if (result) { compressVolumeDataAndSendEditPacket(); } @@ -773,6 +772,7 @@ void RenderablePolyVoxEntityItem::render(RenderArgs* args) { 0, sizeof(PolyVox::PositionMaterialNormal)); + // TODO -- should we be setting this? // batch.setInputBuffer(gpu::Stream::NORMAL, mesh->getVertexBuffer()._buffer, // 12, // sizeof(PolyVox::PositionMaterialNormal)); diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index 0888dd4fb9..4cf4bf8c67 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -1663,7 +1663,7 @@ void EntityScriptingInterface::getMeshes(QUuid entityID, QScriptValue callback) EntityItemPointer entity = static_cast<EntityItemPointer>(_entityTree->findEntityByEntityItemID(entityID)); if (!entity) { qCDebug(entities) << "EntityScriptingInterface::getMeshes no entity with ID" << entityID; - QScriptValueList args { false, false }; + QScriptValueList args { callback.engine()->undefinedValue(), false }; callback.call(QScriptValue(), args); return; } From b8eac7abef903c6f65206db6ff8106a74eb25620 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Mon, 27 Mar 2017 16:17:50 +0100 Subject: [PATCH 216/247] revoming useless code --- interface/resources/qml/hifi/Card.qml | 2 +- interface/resources/qml/hifi/TabletTextButton.qml | 6 ------ interface/resources/qml/hifi/tablet/TabletAddressDialog.qml | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/interface/resources/qml/hifi/Card.qml b/interface/resources/qml/hifi/Card.qml index 01a5441380..3d1ae0e64b 100644 --- a/interface/resources/qml/hifi/Card.qml +++ b/interface/resources/qml/hifi/Card.qml @@ -129,7 +129,7 @@ Rectangle { property int dropSamples: 9; property int dropSpread: 0; DropShadow { - visible: true;//showPlace && (desktop ? desktop.gradientsSupported : false) + visible: true; source: place; anchors.fill: place; horizontalOffset: dropHorizontalOffset; diff --git a/interface/resources/qml/hifi/TabletTextButton.qml b/interface/resources/qml/hifi/TabletTextButton.qml index 20f30f002c..12e53eb217 100644 --- a/interface/resources/qml/hifi/TabletTextButton.qml +++ b/interface/resources/qml/hifi/TabletTextButton.qml @@ -33,12 +33,6 @@ Rectangle { } } - /*Rectangle { - anchors.fill: parent - border.width: 3 - border.color: clickArea.containMouse ? highlightColor : "transparent" - color: "transparent" - }*/ Rectangle { id: indicator diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index e19f8ef72b..623054f233 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -45,7 +45,7 @@ StackView { Component.onDestruction: { root.parentChanged.disconnect(center); } - + function center() { // Explicitly center in order to avoid warnings at shutdown anchors.centerIn = parent; From f4255735a9fa1448af9690094ad25fca775dad89 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Mon, 27 Mar 2017 18:03:38 +0100 Subject: [PATCH 217/247] make login screen show up on the tablet on startup --- interface/src/ui/LoginDialog.cpp | 10 +++++----- .../script-engine/src/TabletScriptingInterface.cpp | 14 ++++++++++++++ .../script-engine/src/TabletScriptingInterface.h | 4 ++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index dce76eb661..1fe09e7cec 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -47,11 +47,11 @@ void LoginDialog::showWithSelection() if (tablet->getToolbarMode()) { LoginDialog::show(); } else { - if (!hmd->getShouldShowTablet() && !qApp->isHMDMode()) { - LoginDialog::show(); - } else { - static const QUrl url("../../dialogs/TabletLoginDialog.qml"); - tablet->pushOntoStack(url); + static const QUrl url("../../dialogs/TabletLoginDialog.qml"); + qDebug() << "[DR] -> Push login onto the tablet"; + tablet->initialScreen(url); + if (!hmd->getShouldShowTablet()) { + hmd->openTablet(); } } } diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index 054cf83744..c287fbcfe7 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -250,6 +250,15 @@ static QString getUsername() { } } +void TabletProxy::initialScreen(const QVariant& url) { + if (getQmlTablet()) { + pushOntoStack(url); + } else { + _initialScreen = true; + _initialPath = url; + } +} + bool TabletProxy::isMessageDialogOpen() { if (_qmlTabletRoot) { QVariant result; @@ -299,6 +308,11 @@ void TabletProxy::setQmlTabletRoot(QQuickItem* qmlTabletRoot, QObject* qmlOffscr QMetaObject::invokeMethod(_qmlTabletRoot, "setUsername", Q_ARG(const QVariant&, QVariant(getUsername()))); } }); + + if (_initialScreen) { + pushOntoStack(_initialPath); + _initialScreen = false; + } } else { removeButtonsFromHomeScreen(); _state = State::Uninitialized; diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index acc53653f8..2e7b91fa4c 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -97,6 +97,8 @@ public: bool getToolbarMode() const { return _toolbarMode; } void setToolbarMode(bool toolbarMode); + void initialScreen(const QVariant& url); + /**jsdoc * transition to the home screen * @function TabletProxy#gotoHomeScreen @@ -213,6 +215,8 @@ protected: void addButtonsToToolbar(); void removeButtonsFromToolbar(); + bool _initialScreen { false }; + QVariant _initialPath { "" }; QString _name; std::mutex _mutex; std::vector<QSharedPointer<TabletButtonProxy>> _tabletButtonProxies; From 5796cbc898b3c82a02718339f6b25704e7d3af01 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Mon, 27 Mar 2017 10:26:33 -0700 Subject: [PATCH 218/247] Bug-fix for touching deleted entities or overlays. --- .../system/controllers/handControllerGrab.js | 51 ++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index c8b78b4d08..c93a721248 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -28,7 +28,7 @@ Script.include("/~/system/libraries/controllers.js"); // var WANT_DEBUG = false; -var WANT_DEBUG_STATE = true; +var WANT_DEBUG_STATE = false; var WANT_DEBUG_SEARCH_NAME = null; var FORCE_IGNORE_IK = false; @@ -670,12 +670,12 @@ function sendTouchMoveEventToStylusTarget(hand, stylusTarget) { } } +// will return undefined if entity does not exist. function calculateStylusTargetFromEntity(stylusTip, entityID) { var props = entityPropertiesCache.getProps(entityID); - - // entity could have been deleted. - if (props === undefined) { - return undefined; + if (props.rotation === undefined) { + // if rotation is missing from props object, then this entity has probably been deleted. + return; } // project stylus tip onto entity plane. @@ -706,16 +706,18 @@ function calculateStylusTargetFromEntity(stylusTip, entityID) { }; } +// will return undefined if overlayID does not exist. function calculateStylusTargetFromOverlay(stylusTip, overlayID) { var overlayPosition = Overlays.getProperty(overlayID, "position"); - - // overlay could have been deleted. if (overlayPosition === undefined) { - return undefined; + return; } // project stylusTip onto overlay plane. var overlayRotation = Overlays.getProperty(overlayID, "rotation"); + if (overlayRotation === undefined) { + return; + } var normal = Vec3.multiplyQbyV(overlayRotation, {x: 0, y: 0, z: 1}); var distance = Vec3.dot(Vec3.subtract(stylusTip.position, overlayPosition), normal); var position = Vec3.subtract(stylusTip.position, Vec3.multiply(normal, distance)); @@ -724,16 +726,28 @@ function calculateStylusTargetFromOverlay(stylusTip, overlayID) { var invRot = Quat.inverse(overlayRotation); var localPos = Vec3.multiplyQbyV(invRot, Vec3.subtract(position, overlayPosition)); var dpi = Overlays.getProperty(overlayID, "dpi"); + if (dpi === undefined) { + return; + } var dimensions; if (dpi) { // Calculate physical dimensions for web3d overlay from resolution and dpi; "dimensions" property is used as a scale. var resolution = Overlays.getProperty(overlayID, "resolution"); + if (resolution === undefined) { + return; + } resolution.z = 1; // Circumvent divide-by-zero. var scale = Overlays.getProperty(overlayID, "dimensions"); + if (scale === undefined) { + return; + } scale.z = 0.01; // overlay dimensions are 2D, not 3D. dimensions = Vec3.multiplyVbyV(Vec3.multiply(resolution, INCHES_TO_METERS / dpi), scale); } else { dimensions = Overlays.getProperty(overlayID, "dimensions"); + if (dimensions === undefined) { + return; + } if (!dimensions.z) { dimensions.z = 0.01; // sometimes overlay dimensions are 2D, not 3D. } @@ -1631,22 +1645,31 @@ function MyController(hand) { var stylusTargets = []; var candidateEntities = Entities.findEntities(tipPosition, WEB_DISPLAY_STYLUS_DISTANCE); entityPropertiesCache.addEntities(candidateEntities); - var i, props; + var i, props, stylusTarget; for (i = 0; i < candidateEntities.length; i++) { props = entityPropertiesCache.getProps(candidateEntities[i]); if (props && (props.type === "Web" || this.isTablet(candidateEntities[i]))) { - stylusTargets.push(calculateStylusTargetFromEntity(this.stylusTip, candidateEntities[i])); + stylusTarget = calculateStylusTargetFromEntity(this.stylusTip, candidateEntities[i]); + if (stylusTarget) { + stylusTargets.push(stylusTarget); + } } } // add the tabletScreen, if it is valid if (HMD.tabletScreenID && HMD.tabletScreenID !== NULL_UUID && Overlays.getProperty(HMD.tabletScreenID, "visible")) { - stylusTargets.push(calculateStylusTargetFromOverlay(this.stylusTip, HMD.tabletScreenID)); + stylusTarget = calculateStylusTargetFromOverlay(this.stylusTip, HMD.tabletScreenID); + if (stylusTarget) { + stylusTargets.push(stylusTarget); + } } // add the tablet home button. if (HMD.homeButtonID && HMD.homeButtonID !== NULL_UUID && Overlays.getProperty(HMD.homeButtonID, "visible")) { - stylusTargets.push(calculateStylusTargetFromOverlay(this.stylusTip, HMD.homeButtonID)); + stylusTarget = calculateStylusTargetFromOverlay(this.stylusTip, HMD.homeButtonID); + if (stylusTarget) { + stylusTargets.push(stylusTarget); + } } var TABLET_MIN_HOVER_DISTANCE = 0.01; @@ -3582,6 +3605,10 @@ function MyController(hand) { this.stylusTouchingExit = function () { + if (this.stylusTarget === undefined) { + return; + } + // special case to handle home button. if (this.stylusTarget.overlayID === HMD.homeButtonID) { Messages.sendLocalMessage("home", this.stylusTarget.overlayID); From cba7adf32a3f0f8a3f37740f2e7306b06bc56d29 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Mon, 27 Mar 2017 19:08:41 +0100 Subject: [PATCH 219/247] removed qDebug --- interface/src/ui/LoginDialog.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/ui/LoginDialog.cpp b/interface/src/ui/LoginDialog.cpp index 1fe09e7cec..10783afd23 100644 --- a/interface/src/ui/LoginDialog.cpp +++ b/interface/src/ui/LoginDialog.cpp @@ -48,7 +48,6 @@ void LoginDialog::showWithSelection() LoginDialog::show(); } else { static const QUrl url("../../dialogs/TabletLoginDialog.qml"); - qDebug() << "[DR] -> Push login onto the tablet"; tablet->initialScreen(url); if (!hmd->getShouldShowTablet()) { hmd->openTablet(); From 35305b447660b260a394a2c379c7eaa1446496fe Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 28 Mar 2017 08:55:38 +1300 Subject: [PATCH 220/247] Make dialog single column with images above controls --- scripts/system/html/SnapshotReview.html | 52 +++++++++++----------- scripts/system/html/css/SnapshotReview.css | 43 +----------------- 2 files changed, 27 insertions(+), 68 deletions(-) diff --git a/scripts/system/html/SnapshotReview.html b/scripts/system/html/SnapshotReview.html index 68c91b8190..1ed9c0e223 100644 --- a/scripts/system/html/SnapshotReview.html +++ b/scripts/system/html/SnapshotReview.html @@ -9,38 +9,36 @@ <body> <div class="snapshot-container"> - <div class="snapshot-column-left"> - <div class="snapsection"> - <label class="title">Snapshot successfully saved!</label> - </div> - <hr /> - <div class="snapsection"> - <div id="sharing"> - <div class="prompt">Would you like to share your pics in the Snapshots feed?</div> - <div class="button"> - <span class="compound-button"> - <input type="button" class="blue" id="share" value="Share in Feed" onclick="shareSelected()" /> - <span class="glyph"></span> - </span> - </div> - </div> + <div class="snapsection"> + <label class="title">Snapshot successfully saved!</label> + </div> + <hr /> + <div id="snapshot-images"> + </div> + <div class="snapsection"> + <div id="sharing"> + <div class="prompt">Would you like to share your pics in the Snapshots feed?</div> <div class="button"> - <input type="button" class="black" id="close" value="Don't Share" onclick="doNotShare()" /> + <span class="compound-button"> + <input type="button" class="blue" id="share" value="Share in Feed" onclick="shareSelected()" /> + <span class="glyph"></span> + </span> </div> </div> - <hr /> - <div class="snapsection"> - <span class="setting"> - <input type="button" class="glyph naked" id="snapshotSettings" value="@" onclick="snapshotSettings()" /> - <label for="snapshotSettings">Snapshot settings</label> - </span> - <span class="setting checkbox"> - <input id="openFeed" type="checkbox" checked /> - <label for="openFeed">Open feed after</label> - </span> + <div class="button"> + <input type="button" class="black" id="close" value="Don't Share" onclick="doNotShare()" /> </div> </div> - <div id="snapshot-images" class="snapshot-column-right"> + <hr /> + <div class="snapsection"> + <span class="setting"> + <input type="button" class="glyph naked" id="snapshotSettings" value="@" onclick="snapshotSettings()" /> + <label for="snapshotSettings">Snapshot settings</label> + </span> + <span class="setting checkbox"> + <input id="openFeed" type="checkbox" checked /> + <label for="openFeed">Open feed after</label> + </span> </div> </div> </body> diff --git a/scripts/system/html/css/SnapshotReview.css b/scripts/system/html/css/SnapshotReview.css index c2965f92e1..cfc7dfc538 100644 --- a/scripts/system/html/css/SnapshotReview.css +++ b/scripts/system/html/css/SnapshotReview.css @@ -14,51 +14,12 @@ padding-top: 3px; } -.snapshot-column-left { - width: 320px; - position: absolute; - padding-top: 8px; -} - -.snapshot-column-right { - margin-left: 342px; -} - -.snapshot-column-right > div > img { +#snapshot-images > img { width: 100%; } -@media (max-width: 768px) { - .snapshot-column-left { - position: initial; - width: 100%; - } - .snapshot-column-right { - margin-left: 0; - width: 100%; - } - .snapshot-column-right > div > img { - margin-top: 18px !important; - } -} - -.snapshot-column-right > div { - position: relative; - padding: 2px; -} - -.snapshot-column-right > div > img { - border: 2px solid #575757; - margin: -2px; -} - -hr { - padding-left: 0; - padding-right: 0; - margin: 21px 0; -} - .snapsection { + padding-top: 21px; text-align: center; } From ead1f00bbf2c4d95e332238e6edeafa9122b60ed Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 28 Mar 2017 09:10:20 +1300 Subject: [PATCH 221/247] Title --- scripts/system/html/SnapshotReview.html | 2 +- scripts/system/html/css/SnapshotReview.css | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/scripts/system/html/SnapshotReview.html b/scripts/system/html/SnapshotReview.html index 1ed9c0e223..089e223602 100644 --- a/scripts/system/html/SnapshotReview.html +++ b/scripts/system/html/SnapshotReview.html @@ -10,7 +10,7 @@ <body> <div class="snapshot-container"> <div class="snapsection"> - <label class="title">Snapshot successfully saved!</label> + <label class="title">Snap</label> </div> <hr /> <div id="snapshot-images"> diff --git a/scripts/system/html/css/SnapshotReview.css b/scripts/system/html/css/SnapshotReview.css index cfc7dfc538..13fb119992 100644 --- a/scripts/system/html/css/SnapshotReview.css +++ b/scripts/system/html/css/SnapshotReview.css @@ -8,10 +8,12 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html */ +body { + padding-top: 0; +} .snapshot-container { width: 100%; - padding-top: 3px; } #snapshot-images > img { @@ -23,9 +25,15 @@ text-align: center; } +.snapsection:first-child { + padding-top: 0; + text-align: left; +} + .title { - text-transform: uppercase; - font-size: 12px; + font-size: 18px; + position: relative; + top: 12px; } .prompt { From f764cd614b90f35e46167f73ee1c162a85e6db36 Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis <bdavis@saintandreas.org> Date: Mon, 27 Mar 2017 11:55:05 -0700 Subject: [PATCH 222/247] Don't hold KTX files open for longer than transfers require --- .../src/gpu/gl45/GL45BackendTexture.cpp | 1 + .../gpu/gl45/GL45BackendVariableTexture.cpp | 24 +++--- libraries/gpu/src/gpu/Texture.cpp | 10 +++ libraries/gpu/src/gpu/Texture.h | 18 +++- libraries/gpu/src/gpu/Texture_ktx.cpp | 37 ++++---- libraries/ktx/src/ktx/KTX.cpp | 84 ++++++++++++++----- libraries/ktx/src/ktx/KTX.h | 73 +++++++++++----- libraries/ktx/src/ktx/Reader.cpp | 4 +- .../src/model-networking/TextureCache.cpp | 7 +- tests/ktx/src/main.cpp | 58 ++++++------- 10 files changed, 209 insertions(+), 107 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp index 36aaf75e81..7293c23052 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp @@ -222,6 +222,7 @@ GL45StrictResourceTexture::GL45StrictResourceTexture(const std::weak_ptr<GLBacke copyMipFaceFromTexture(sourceMip, targetMip, face); } } + _gpuObject.finishTransfer(); if (texture.isAutogenerateMips()) { generateMips(); } diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp index d54ad1ea4b..3f6d1db268 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp @@ -85,14 +85,14 @@ TransferJob::TransferJob(const GL45VariableAllocationTexture& parent, uint16_t s auto transferDimensions = _parent._gpuObject.evalMipDimensions(sourceMip); GLenum format; GLenum type; - auto mipData = _parent._gpuObject.accessStoredMipFace(sourceMip, face); GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_parent._gpuObject.getTexelFormat(), _parent._gpuObject.getStoredMipFormat()); format = texelFormat.format; type = texelFormat.type; if (0 == lines) { - _transferSize = mipData->getSize(); _bufferingLambda = [=] { + auto mipData = _parent._gpuObject.accessStoredMipFace(sourceMip, face); + _transferSize = mipData->getSize(); _buffer.resize(_transferSize); memcpy(&_buffer[0], mipData->readData(), _transferSize); _bufferingCompleted = true; @@ -100,12 +100,13 @@ TransferJob::TransferJob(const GL45VariableAllocationTexture& parent, uint16_t s } else { transferDimensions.y = lines; - auto dimensions = _parent._gpuObject.evalMipDimensions(sourceMip); - auto mipSize = mipData->getSize(); - auto bytesPerLine = (uint32_t)mipSize / dimensions.y; - _transferSize = bytesPerLine * lines; - auto sourceOffset = bytesPerLine * lineOffset; _bufferingLambda = [=] { + auto mipData = _parent._gpuObject.accessStoredMipFace(sourceMip, face); + auto dimensions = _parent._gpuObject.evalMipDimensions(sourceMip); + auto mipSize = mipData->getSize(); + auto bytesPerLine = (uint32_t)mipSize / dimensions.y; + _transferSize = bytesPerLine * lines; + auto sourceOffset = bytesPerLine * lineOffset; _buffer.resize(_transferSize); memcpy(&_buffer[0], mipData->readData() + sourceOffset, _transferSize); _bufferingCompleted = true; @@ -430,6 +431,7 @@ void GL45VariableAllocationTexture::executeNextTransfer(const TexturePointer& cu _currentTransferTexture = currentTexture; if (_pendingTransfers.front()->tryTransfer()) { _pendingTransfers.pop(); + _currentTransferTexture->finishTransfer(); _currentTransferTexture.reset(); } } @@ -454,7 +456,7 @@ GL45ResourceTexture::GL45ResourceTexture(const std::weak_ptr<GLBackend>& backend _memoryPressureStateStale = true; copyMipsFromTexture(); syncSampler(); - + _gpuObject.finishTransfer(); } void GL45ResourceTexture::allocateStorage(uint16 allocatedMip) { @@ -585,10 +587,10 @@ void GL45ResourceTexture::populateTransferQueue() { // break down the transfers into chunks so that no single transfer is // consuming more than X bandwidth - auto mipData = _gpuObject.accessStoredMipFace(sourceMip, face); + auto mipSize = _gpuObject.getStoredMipFaceSize(sourceMip, face); const auto lines = mipDimensions.y; - auto bytesPerLine = (uint32_t)mipData->getSize() / lines; - Q_ASSERT(0 == (mipData->getSize() % lines)); + auto bytesPerLine = mipSize / lines; + Q_ASSERT(0 == (mipSize % lines)); uint32_t linesPerTransfer = (uint32_t)(MAX_TRANSFER_SIZE / bytesPerLine); uint32_t lineOffset = 0; while (lineOffset < lines) { diff --git a/libraries/gpu/src/gpu/Texture.cpp b/libraries/gpu/src/gpu/Texture.cpp index 1f66b2900e..523d938854 100755 --- a/libraries/gpu/src/gpu/Texture.cpp +++ b/libraries/gpu/src/gpu/Texture.cpp @@ -149,6 +149,10 @@ PixelsPointer MemoryStorage::getMipFace(uint16 level, uint8 face) const { return PixelsPointer(); } +Size MemoryStorage::getMipFaceSize(uint16 level, uint8 face) const { + return getMipFace(level, face)->getSize(); +} + bool MemoryStorage::isMipAvailable(uint16 level, uint8 face) const { PixelsPointer mipFace = getMipFace(level, face); return (mipFace && mipFace->getSize()); @@ -980,3 +984,9 @@ Texture::ExternalUpdates Texture::getUpdates() const { void Texture::setStorage(std::unique_ptr<Storage>& newStorage) { _storage.swap(newStorage); } + +void Texture::finishTransfer() const { + if (_storage) { + _storage->releaseTempResources(); + } +} diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index f7297b3280..f40e936578 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -25,6 +25,8 @@ namespace ktx { class KTX; using KTXUniquePointer = std::unique_ptr<KTX>; + struct KTXDescriptor; + using KTXDescriptorPointer = std::unique_ptr<KTXDescriptor>; struct Header; } @@ -261,9 +263,11 @@ public: virtual void reset() = 0; virtual PixelsPointer getMipFace(uint16 level, uint8 face = 0) const = 0; + virtual Size getMipFaceSize(uint16 level, uint8 face = 0) const = 0; virtual void assignMipData(uint16 level, const storage::StoragePointer& storage) = 0; virtual void assignMipFaceData(uint16 level, uint8 face, const storage::StoragePointer& storage) = 0; virtual bool isMipAvailable(uint16 level, uint8 face = 0) const = 0; + virtual void releaseTempResources() const {} Texture::Type getType() const { return _type; } Stamp getStamp() const { return _stamp; } @@ -286,6 +290,7 @@ public: public: void reset() override; PixelsPointer getMipFace(uint16 level, uint8 face = 0) const override; + Size getMipFaceSize(uint16 level, uint8 face = 0) const override; void assignMipData(uint16 level, const storage::StoragePointer& storage) override; void assignMipFaceData(uint16 level, uint8 face, const storage::StoragePointer& storage) override; bool isMipAvailable(uint16 level, uint8 face = 0) const override; @@ -297,8 +302,9 @@ public: class KtxStorage : public Storage { public: - KtxStorage(ktx::KTXUniquePointer& ktxData); + KtxStorage(const std::string& filename); PixelsPointer getMipFace(uint16 level, uint8 face = 0) const override; + Size getMipFaceSize(uint16 level, uint8 face = 0) const override; // By convention, all mip levels and faces MUST be populated when using KTX backing bool isMipAvailable(uint16 level, uint8 face = 0) const override { return true; } @@ -310,9 +316,12 @@ public: throw std::runtime_error("Invalid call"); } void reset() override { } + void releaseTempResources() const override { _ktxData.release(); } protected: - ktx::KTXUniquePointer _ktxData; + std::string _filename; + ktx::KTXDescriptorPointer _ktxDescriptor; + mutable ktx::KTXUniquePointer _ktxData; friend class Texture; }; @@ -478,9 +487,10 @@ public: // Access the the sub mips bool isStoredMipFaceAvailable(uint16 level, uint8 face = 0) const { return _storage->isMipAvailable(level, face); } const PixelsPointer accessStoredMipFace(uint16 level, uint8 face = 0) const { return _storage->getMipFace(level, face); } + Size getStoredMipFaceSize(uint16 level, uint8 face = 0) const { return _storage->getMipFaceSize(level, face); } void setStorage(std::unique_ptr<Storage>& newStorage); - void setKtxBacking(ktx::KTXUniquePointer& newBacking); + void setKtxBacking(const std::string& filename); // access sizes for the stored mips uint16 getStoredMipWidth(uint16 level) const; @@ -516,6 +526,8 @@ public: ExternalUpdates getUpdates() const; + void finishTransfer() const; + // Textures can be serialized directly to ktx data file, here is how static ktx::KTXUniquePointer serialize(const Texture& texture); static Texture* unserialize(const ktx::KTXUniquePointer& srcData, TextureUsageType usageType = TextureUsageType::RESOURCE, Usage usage = Usage(), const Sampler::Desc& sampler = Sampler::Desc()); diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 5f0ededee7..ef96810251 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -42,30 +42,33 @@ struct GPUKTXPayload { std::string GPUKTXPayload::KEY { "hifi.gpu" }; -KtxStorage::KtxStorage(ktx::KTXUniquePointer& ktxData) { - - // if the source ktx is valid let's config this KtxStorage correctly - if (ktxData && ktxData->getHeader()) { - - // now that we know the ktx, let's get the header info to configure this Texture::Storage: - Format mipFormat = Format::COLOR_BGRA_32; - Format texelFormat = Format::COLOR_SRGBA_32; - if (Texture::evalTextureFormat(*ktxData->getHeader(), mipFormat, texelFormat)) { - _format = mipFormat; - } - +KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { + ktx::StoragePointer storage { new storage::FileStorage(_filename.c_str()) }; + auto ktxPointer = ktx::KTX::create(storage); + _ktxDescriptor.reset(new ktx::KTXDescriptor(ktxPointer->toDescriptor())); + // now that we know the ktx, let's get the header info to configure this Texture::Storage: + Format mipFormat = Format::COLOR_BGRA_32; + Format texelFormat = Format::COLOR_SRGBA_32; + if (Texture::evalTextureFormat(_ktxDescriptor->header, mipFormat, texelFormat)) { + _format = mipFormat; } - - _ktxData.reset(ktxData.release()); } PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { + if (!_ktxData) { + ktx::StoragePointer storage { new storage::FileStorage(_filename.c_str()) }; + _ktxData = _ktxDescriptor->toKTX(storage); + } return _ktxData->getMipFaceTexelsData(level, face); } -void Texture::setKtxBacking(ktx::KTXUniquePointer& ktxBacking) { - auto newBacking = std::unique_ptr<Storage>(new KtxStorage(ktxBacking)); +Size KtxStorage::getMipFaceSize(uint16 level, uint8 face) const { + return _ktxDescriptor->getMipFaceTexelsSize(level, face); +} + +void Texture::setKtxBacking(const std::string& filename) { + auto newBacking = std::unique_ptr<Storage>(new KtxStorage(filename)); setStorage(newBacking); } @@ -181,7 +184,7 @@ Texture* Texture::unserialize(const ktx::KTXUniquePointer& srcData, TextureUsage if (!srcData) { return nullptr; } - const auto& header = *srcData->getHeader(); + const auto& header = srcData->getHeader(); Format mipFormat = Format::COLOR_BGRA_32; Format texelFormat = Format::COLOR_SRGBA_32; diff --git a/libraries/ktx/src/ktx/KTX.cpp b/libraries/ktx/src/ktx/KTX.cpp index bbd4e1bc86..90ca19d762 100644 --- a/libraries/ktx/src/ktx/KTX.cpp +++ b/libraries/ktx/src/ktx/KTX.cpp @@ -108,47 +108,39 @@ KTX::~KTX() { void KTX::resetStorage(const StoragePointer& storage) { _storage = storage; + if (_storage->size() >= sizeof(Header)) { + memcpy(&_header, _storage->data(), sizeof(Header)); + } } -const Header* KTX::getHeader() const { - if (!_storage) { - return nullptr; - } - return reinterpret_cast<const Header*>(_storage->data()); +const Header& KTX::getHeader() const { + return _header; } size_t KTX::getKeyValueDataSize() const { - if (_storage) { - return getHeader()->bytesOfKeyValueData; - } else { - return 0; - } + return _header.bytesOfKeyValueData; } size_t KTX::getTexelsDataSize() const { - if (_storage) { - //return _storage->size() - (sizeof(Header) + getKeyValueDataSize()); - return (_storage->data() + _storage->size()) - getTexelsData(); - } else { + if (!_storage) { return 0; } + return (_storage->data() + _storage->size()) - getTexelsData(); } const Byte* KTX::getKeyValueData() const { - if (_storage) { - return (_storage->data() + sizeof(Header)); - } else { + if (!_storage) { return nullptr; } + return (_storage->data() + sizeof(Header)); } const Byte* KTX::getTexelsData() const { - if (_storage) { - return (_storage->data() + sizeof(Header) + getKeyValueDataSize()); - } else { + if (!_storage) { return nullptr; } + return (_storage->data() + sizeof(Header) + getKeyValueDataSize()); } storage::StoragePointer KTX::getMipFaceTexelsData(uint16_t mip, uint8_t face) const { @@ -163,3 +155,55 @@ storage::StoragePointer KTX::getMipFaceTexelsData(uint16_t mip, uint8_t face) co } return result; } + +size_t KTXDescriptor::getMipFaceTexelsSize(uint16_t mip, uint8_t face) const { + size_t result { 0 }; + if (mip < images.size()) { + const auto& faces = images[mip]; + if (face < faces._numFaces) { + result = faces._faceSize; + } + } + return result; +} + +ImageDescriptor Image::toImageDescriptor(const Byte* baseAddress) const { + FaceOffsets offsets; + offsets.resize(_faceBytes.size()); + for (size_t face = 0; face < _numFaces; ++face) { + offsets[face] = _faceBytes[face] - baseAddress; + } + // Note, implicit cast of *this to const ImageHeader& + return ImageDescriptor(*this, offsets); +} + +Image ImageDescriptor::toImage(const ktx::StoragePointer& storage) const { + FaceBytes faces; + faces.resize(_faceOffsets.size()); + for (size_t face = 0; face < _numFaces; ++face) { + faces[face] = storage->data() + _faceOffsets[face]; + } + // Note, implicit cast of *this to const ImageHeader& + return Image(*this, faces); +} + +KTXDescriptor KTX::toDescriptor() const { + ImageDescriptors newDescriptors; + auto storageStart = _storage ? _storage->data() : nullptr; + for (size_t i = 0; i < _images.size(); ++i) { + newDescriptors.emplace_back(_images[i].toImageDescriptor(storageStart)); + } + return { this->_header, this->_keyValues, newDescriptors }; +} + +std::unique_ptr<KTX> KTXDescriptor::toKTX(const ktx::StoragePointer& storage) const { + Images newImages; + for (size_t i = 0; i < images.size(); ++i) { + newImages.emplace_back(images[i].toImage(storage)); + } + + return std::unique_ptr<KTX>(new KTX { storage, header, keyValues, newImages }); +} + +KTX::KTX(const StoragePointer& storage, const Header& header, const KeyValues& keyValues, const Images& images) + : _storage(storage), _header(header), _keyValues(keyValues), _images(images) { } \ No newline at end of file diff --git a/libraries/ktx/src/ktx/KTX.h b/libraries/ktx/src/ktx/KTX.h index 8e901b1105..c34127d357 100644 --- a/libraries/ktx/src/ktx/KTX.h +++ b/libraries/ktx/src/ktx/KTX.h @@ -407,43 +407,69 @@ namespace ktx { }; using KeyValues = KeyValue::KeyValues; - - struct Image { + struct ImageHeader { + using FaceOffsets = std::vector<size_t>; using FaceBytes = std::vector<const Byte*>; - - uint32_t _numFaces{ 1 }; - uint32_t _imageSize; - uint32_t _faceSize; - uint32_t _padding; - FaceBytes _faceBytes; - - - Image(uint32_t imageSize, uint32_t padding, const Byte* bytes) : - _numFaces(1), - _imageSize(imageSize), + const uint32_t _numFaces; + const uint32_t _imageSize; + const uint32_t _faceSize; + const uint32_t _padding; + ImageHeader(bool cube, uint32_t imageSize, uint32_t padding) : + _numFaces(cube ? NUM_CUBEMAPFACES : 1), + _imageSize(imageSize * _numFaces), _faceSize(imageSize), - _padding(padding), - _faceBytes(1, bytes) {} + _padding(padding) { + } + }; + struct Image; + + struct ImageDescriptor : public ImageHeader { + const FaceOffsets _faceOffsets; + ImageDescriptor(const ImageHeader& header, const FaceOffsets& offsets) : ImageHeader(header), _faceOffsets(offsets) {} + Image toImage(const ktx::StoragePointer& storage) const; + }; + + using ImageDescriptors = std::vector<ImageDescriptor>; + + struct Image : public ImageHeader { + FaceBytes _faceBytes; + Image(const ImageHeader& header, const FaceBytes& faces) : ImageHeader(header), _faceBytes(faces) {} + Image(uint32_t imageSize, uint32_t padding, const Byte* bytes) : + ImageHeader(false, imageSize, padding), + _faceBytes(1, bytes) {} Image(uint32_t pageSize, uint32_t padding, const FaceBytes& cubeFaceBytes) : - _numFaces(NUM_CUBEMAPFACES), - _imageSize(pageSize * NUM_CUBEMAPFACES), - _faceSize(pageSize), - _padding(padding) + ImageHeader(true, pageSize, padding) { if (cubeFaceBytes.size() == NUM_CUBEMAPFACES) { _faceBytes = cubeFaceBytes; } } + + ImageDescriptor toImageDescriptor(const Byte* baseAddress) const; }; + using Images = std::vector<Image>; + class KTX; + + // A KTX descriptor is a lightweight container for all the information about a serialized KTX file, but without the + // actual image / face data available. + struct KTXDescriptor { + KTXDescriptor(const Header& header, const KeyValues& keyValues, const ImageDescriptors& imageDescriptors) : header(header), keyValues(keyValues), images(imageDescriptors) {} + const Header header; + const KeyValues keyValues; + const ImageDescriptors images; + size_t getMipFaceTexelsSize(uint16_t mip = 0, uint8_t face = 0) const; + std::unique_ptr<KTX> toKTX(const ktx::StoragePointer& storage) const; + }; + class KTX { void resetStorage(const StoragePointer& src); KTX(); + KTX(const StoragePointer& storage, const Header& header, const KeyValues& keyValues, const Images& images); public: - ~KTX(); // Define a KTX object manually to write it somewhere (in a file on disk?) @@ -475,18 +501,23 @@ namespace ktx { static Images parseImages(const Header& header, size_t srcSize, const Byte* srcBytes); // Access raw pointers to the main sections of the KTX - const Header* getHeader() const; + const Header& getHeader() const; + const Byte* getKeyValueData() const; const Byte* getTexelsData() const; storage::StoragePointer getMipFaceTexelsData(uint16_t mip = 0, uint8_t face = 0) const; const StoragePointer& getStorage() const { return _storage; } + KTXDescriptor toDescriptor() const; size_t getKeyValueDataSize() const; size_t getTexelsDataSize() const; + Header _header; StoragePointer _storage; KeyValues _keyValues; Images _images; + + friend struct KTXDescriptor; }; } diff --git a/libraries/ktx/src/ktx/Reader.cpp b/libraries/ktx/src/ktx/Reader.cpp index 277ce42e69..bf72faeba5 100644 --- a/libraries/ktx/src/ktx/Reader.cpp +++ b/libraries/ktx/src/ktx/Reader.cpp @@ -185,10 +185,10 @@ namespace ktx { result->resetStorage(src); // read metadata - result->_keyValues = parseKeyValues(result->getHeader()->bytesOfKeyValueData, result->getKeyValueData()); + result->_keyValues = parseKeyValues(result->getHeader().bytesOfKeyValueData, result->getKeyValueData()); // populate image table - result->_images = parseImages(*result->getHeader(), result->getTexelsDataSize(), result->getTexelsData()); + result->_images = parseImages(result->getHeader(), result->getTexelsDataSize(), result->getTexelsData()); return result; } diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index 5dfaddd471..17cafaa5ad 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -444,7 +444,7 @@ void NetworkTexture::loadContent(const QByteArray& content) { texture.reset(gpu::Texture::unserialize(ktx)); // Ensure that the texture population worked if (texture) { - texture->setKtxBacking(ktx); + texture->setKtxBacking(ktxFile->getFilepath()); texture = textureCache->cacheTextureByHash(hash, texture); } } @@ -586,10 +586,7 @@ void ImageReader::read() { qCWarning(modelnetworking) << _url << "file cache failed"; } else { resource.staticCast<NetworkTexture>()->_file = file; - auto fileKtx = file->getKTX(); - if (fileKtx) { - texture->setKtxBacking(fileKtx); - } + texture->setKtxBacking(file->getFilepath()); } } diff --git a/tests/ktx/src/main.cpp b/tests/ktx/src/main.cpp index aa6795e17b..3a6fcabf43 100644 --- a/tests/ktx/src/main.cpp +++ b/tests/ktx/src/main.cpp @@ -111,38 +111,40 @@ int main(int argc, char** argv) { outFile.close(); } - auto ktxFile = ktx::KTX::create(std::shared_ptr<storage::Storage>(new storage::FileStorage(TEST_IMAGE_KTX))); { - const auto& memStorage = ktxMemory->getStorage(); - const auto& fileStorage = ktxFile->getStorage(); - Q_ASSERT(memStorage->size() == fileStorage->size()); - Q_ASSERT(memStorage->data() != fileStorage->data()); - Q_ASSERT(0 == memcmp(memStorage->data(), fileStorage->data(), memStorage->size())); - Q_ASSERT(ktxFile->_images.size() == ktxMemory->_images.size()); - auto imageCount = ktxFile->_images.size(); - auto startMemory = ktxMemory->_storage->data(); - auto startFile = ktxFile->_storage->data(); - for (size_t i = 0; i < imageCount; ++i) { - auto memImages = ktxMemory->_images[i]; - auto fileImages = ktxFile->_images[i]; - Q_ASSERT(memImages._padding == fileImages._padding); - Q_ASSERT(memImages._numFaces == fileImages._numFaces); - Q_ASSERT(memImages._imageSize == fileImages._imageSize); - Q_ASSERT(memImages._faceSize == fileImages._faceSize); - Q_ASSERT(memImages._faceBytes.size() == memImages._numFaces); - Q_ASSERT(fileImages._faceBytes.size() == fileImages._numFaces); - auto faceCount = fileImages._numFaces; - for (uint32_t face = 0; face < faceCount; ++face) { - auto memFace = memImages._faceBytes[face]; - auto memOffset = memFace - startMemory; - auto fileFace = fileImages._faceBytes[face]; - auto fileOffset = fileFace - startFile; - Q_ASSERT(memOffset % 4 == 0); - Q_ASSERT(memOffset == fileOffset); + auto ktxFile = ktx::KTX::create(std::shared_ptr<storage::Storage>(new storage::FileStorage(TEST_IMAGE_KTX))); + { + const auto& memStorage = ktxMemory->getStorage(); + const auto& fileStorage = ktxFile->getStorage(); + Q_ASSERT(memStorage->size() == fileStorage->size()); + Q_ASSERT(memStorage->data() != fileStorage->data()); + Q_ASSERT(0 == memcmp(memStorage->data(), fileStorage->data(), memStorage->size())); + Q_ASSERT(ktxFile->_images.size() == ktxMemory->_images.size()); + auto imageCount = ktxFile->_images.size(); + auto startMemory = ktxMemory->_storage->data(); + auto startFile = ktxFile->_storage->data(); + for (size_t i = 0; i < imageCount; ++i) { + auto memImages = ktxMemory->_images[i]; + auto fileImages = ktxFile->_images[i]; + Q_ASSERT(memImages._padding == fileImages._padding); + Q_ASSERT(memImages._numFaces == fileImages._numFaces); + Q_ASSERT(memImages._imageSize == fileImages._imageSize); + Q_ASSERT(memImages._faceSize == fileImages._faceSize); + Q_ASSERT(memImages._faceBytes.size() == memImages._numFaces); + Q_ASSERT(fileImages._faceBytes.size() == fileImages._numFaces); + auto faceCount = fileImages._numFaces; + for (uint32_t face = 0; face < faceCount; ++face) { + auto memFace = memImages._faceBytes[face]; + auto memOffset = memFace - startMemory; + auto fileFace = fileImages._faceBytes[face]; + auto fileOffset = fileFace - startFile; + Q_ASSERT(memOffset % 4 == 0); + Q_ASSERT(memOffset == fileOffset); + } } } } - testTexture->setKtxBacking(ktxFile); + testTexture->setKtxBacking(TEST_IMAGE_KTX.toStdString()); return 0; } From a0c42bacdba585c06423078ab1ab6e2649bda401 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Mon, 27 Mar 2017 14:26:17 -0700 Subject: [PATCH 223/247] Fix problem with ContextMenu triggering on button up and button down. This is fixed by clearing the ButtonPressedMap in the KeyboardMouseDevice every update. Previously, this button would never be cleared, causing other controller actions mapped to the same button to have the incorrect state. In this case, ContextMenu action would become 2 when pressed and 1 when released, anytime after the right mouse button was pressed. --- .../input-plugins/src/input-plugins/KeyboardMouseDevice.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp index ddb2f482a1..b5a2fc6b3c 100755 --- a/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp +++ b/libraries/input-plugins/src/input-plugins/KeyboardMouseDevice.cpp @@ -25,6 +25,7 @@ void KeyboardMouseDevice::pluginUpdate(float deltaTime, const controller::InputC auto userInputMapper = DependencyManager::get<controller::UserInputMapper>(); userInputMapper->withLock([&, this]() { _inputDevice->update(deltaTime, inputCalibrationData); + eraseMouseClicked(); _inputDevice->_axisStateMap[MOUSE_AXIS_X] = _lastCursor.x(); _inputDevice->_axisStateMap[MOUSE_AXIS_Y] = _lastCursor.y(); @@ -78,8 +79,6 @@ void KeyboardMouseDevice::mousePressEvent(QMouseEvent* event) { _mousePressPos = event->pos(); _clickDeadspotActive = true; - - eraseMouseClicked(); } void KeyboardMouseDevice::mouseReleaseEvent(QMouseEvent* event) { @@ -122,7 +121,6 @@ void KeyboardMouseDevice::mouseMoveEvent(QMouseEvent* event) { const int CLICK_EVENT_DEADSPOT = 6; // pixels if (_clickDeadspotActive && (_mousePressPos - currentPos).manhattanLength() > CLICK_EVENT_DEADSPOT) { - eraseMouseClicked(); _clickDeadspotActive = false; } } From 018138f422bb639652fb492ced76e3cdf4edbada Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Mon, 27 Mar 2017 22:46:06 +0100 Subject: [PATCH 224/247] fixed some issues with tablet help --- .../resources/html/img/tablet-help-oculus.jpg | Bin 255457 -> 258949 bytes interface/resources/html/tabletHelp.html | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/resources/html/img/tablet-help-oculus.jpg b/interface/resources/html/img/tablet-help-oculus.jpg index 26f1672405322c1a6e0333be6b2a058575bcf0f2..b4f54396e08e01406ac844216590f765b2e1bb7f 100644 GIT binary patch literal 258949 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%0A4dIb)95jh?i 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 UasV@hFWCu7sVlo874m%RKSoJE6#xJL literal 255457 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�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%0A^hP_Ru|~;lQ8yV* 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 D%8dhA diff --git a/interface/resources/html/tabletHelp.html b/interface/resources/html/tabletHelp.html index 635c557de3..cbd7ffcfe7 100644 --- a/interface/resources/html/tabletHelp.html +++ b/interface/resources/html/tabletHelp.html @@ -70,7 +70,7 @@ switch (index) { case 0: - handControllerImageURL = "img/tablet-help-keyboard.jpg"; + handControllerImageURL = "img/tablet-help-oculus.jpg"; showHandControllers(); break; case 1: From 876dd4c8509befd5e9762e8c39fc9f9f66c3ea65 Mon Sep 17 00:00:00 2001 From: ZappoMan <brad@highfidelity.io> Date: Tue, 24 Jan 2017 09:50:48 -0800 Subject: [PATCH 225/247] add the default environment variable name for the kinect plugin to the search hints --- cmake/modules/FindKinect.cmake | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmake/modules/FindKinect.cmake b/cmake/modules/FindKinect.cmake index 7607de1f44..895c6ebe8a 100644 --- a/cmake/modules/FindKinect.cmake +++ b/cmake/modules/FindKinect.cmake @@ -21,7 +21,7 @@ include("${MACRO_DIR}/HifiLibrarySearchHints.cmake") hifi_library_search_hints("kinect") -find_path(KINECT_INCLUDE_DIRS Kinect.h PATH_SUFFIXES inc HINTS $ENV{KINECT_ROOT_DIR}) +find_path(KINECT_INCLUDE_DIRS Kinect.h PATH_SUFFIXES inc HINTS $ENV{KINECT_ROOT_DIR} $ENV{KINECTSDK20_DIR}) if (WIN32) @@ -35,7 +35,7 @@ if (WIN32) KINECT_LIBRARY_RELEASE Kinect20 PATH_SUFFIXES "Lib/${ARCH_DIR}" "lib" HINTS ${KINECT_SEARCH_DIRS} - PATH $ENV{KINECT_ROOT_DIR}) + PATHS $ENV{KINECT_ROOT_DIR} $ENV{KINECTSDK20_DIR}) set(KINECT_LIBRARIES ${KINECT_LIBRARY}) From 02535722ba8916b0070eab46805a2484c4d6c876 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Mon, 27 Mar 2017 23:31:41 +0100 Subject: [PATCH 226/247] removed visible to others opition from general settings --- interface/src/ui/PreferencesDialog.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index c2caf91045..5c239f6e13 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -102,11 +102,12 @@ void setupPreferences() { auto setter = [](bool value) { qApp->setHmdTabletBecomesToolbarSetting(value); }; preferences->addPreference(new CheckPreference(UI_CATEGORY, "HMD Tablet Becomes Toolbar", getter, setter)); } - { + // TODO + /*{ auto getter = []()->bool { return qApp->getTabletVisibleToOthersSetting(); }; auto setter = [](bool value) { qApp->setTabletVisibleToOthersSetting(value); }; preferences->addPreference(new CheckPreference(UI_CATEGORY, "Tablet Is Visible To Others", getter, setter)); - } + }*/ { auto getter = []()->bool { return qApp->getPreferAvatarFingerOverStylus(); }; auto setter = [](bool value) { qApp->setPreferAvatarFingerOverStylus(value); }; From 7434cc5644c583e5489a9f047623d1df8e168aa6 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 28 Mar 2017 00:02:02 +0100 Subject: [PATCH 227/247] force vto to false on start up --- interface/src/Application.cpp | 4 ++-- interface/src/ui/PreferencesDialog.cpp | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a96ef7c5c6..32d2ee506b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2000,7 +2000,7 @@ void Application::initializeUi() { rootContext->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); rootContext->setContextProperty("AudioDevice", AudioDeviceScriptingInterface::getInstance()); - // Caches + rootContext->setContextProperty("AnimationCache", DependencyManager::get<AnimationCache>().data()); rootContext->setContextProperty("TextureCache", DependencyManager::get<TextureCache>().data()); rootContext->setContextProperty("ModelCache", DependencyManager::get<ModelCache>().data()); @@ -3788,7 +3788,7 @@ void Application::loadSettings() { } getMyAvatar()->loadData(); - + setTabletVisibleToOthersSetting(false); _settingsLoaded = true; } diff --git a/interface/src/ui/PreferencesDialog.cpp b/interface/src/ui/PreferencesDialog.cpp index 5c239f6e13..5983d7cc25 100644 --- a/interface/src/ui/PreferencesDialog.cpp +++ b/interface/src/ui/PreferencesDialog.cpp @@ -103,6 +103,7 @@ void setupPreferences() { preferences->addPreference(new CheckPreference(UI_CATEGORY, "HMD Tablet Becomes Toolbar", getter, setter)); } // TODO + // Note: If this code is added back, you must remove the line "setTabletVisibleToOthersSetting(false)" from Application::loadSettings() /*{ auto getter = []()->bool { return qApp->getTabletVisibleToOthersSetting(); }; auto setter = [](bool value) { qApp->setTabletVisibleToOthersSetting(value); }; From 65be71fa69486bf9196f3f12fc89d2580d661f81 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 28 Mar 2017 00:05:02 +0100 Subject: [PATCH 228/247] min diff --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 32d2ee506b..25a585ea34 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2000,7 +2000,7 @@ void Application::initializeUi() { rootContext->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); rootContext->setContextProperty("AudioDevice", AudioDeviceScriptingInterface::getInstance()); - + // Caches rootContext->setContextProperty("AnimationCache", DependencyManager::get<AnimationCache>().data()); rootContext->setContextProperty("TextureCache", DependencyManager::get<TextureCache>().data()); rootContext->setContextProperty("ModelCache", DependencyManager::get<ModelCache>().data()); From 638364497ddf5d1cb37b19b1cbf73ff217fd198b Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis <bdavis@saintandreas.org> Date: Mon, 27 Mar 2017 16:17:09 -0700 Subject: [PATCH 229/247] Trying a different tactic to avoid multiple concurrent file access --- .../src/gpu/gl45/GL45BackendTexture.cpp | 1 - .../gpu/gl45/GL45BackendVariableTexture.cpp | 3 +- libraries/gpu/src/gpu/Texture.cpp | 42 +++++++------------ libraries/gpu/src/gpu/Texture.h | 7 +--- libraries/gpu/src/gpu/Texture_ktx.cpp | 37 +++++++--------- libraries/ktx/src/ktx/KTX.cpp | 20 +++++---- libraries/ktx/src/ktx/KTX.h | 2 +- .../src/model-networking/KTXCache.cpp | 7 ---- .../src/model-networking/KTXCache.h | 3 -- .../src/model-networking/TextureCache.cpp | 12 ++---- 10 files changed, 49 insertions(+), 85 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp index 7293c23052..36aaf75e81 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45BackendTexture.cpp @@ -222,7 +222,6 @@ GL45StrictResourceTexture::GL45StrictResourceTexture(const std::weak_ptr<GLBacke copyMipFaceFromTexture(sourceMip, targetMip, face); } } - _gpuObject.finishTransfer(); if (texture.isAutogenerateMips()) { generateMips(); } diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp index 3f6d1db268..65be154666 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp @@ -431,7 +431,6 @@ void GL45VariableAllocationTexture::executeNextTransfer(const TexturePointer& cu _currentTransferTexture = currentTexture; if (_pendingTransfers.front()->tryTransfer()) { _pendingTransfers.pop(); - _currentTransferTexture->finishTransfer(); _currentTransferTexture.reset(); } } @@ -456,7 +455,7 @@ GL45ResourceTexture::GL45ResourceTexture(const std::weak_ptr<GLBackend>& backend _memoryPressureStateStale = true; copyMipsFromTexture(); syncSampler(); - _gpuObject.finishTransfer(); + } void GL45ResourceTexture::allocateStorage(uint16 allocatedMip) { diff --git a/libraries/gpu/src/gpu/Texture.cpp b/libraries/gpu/src/gpu/Texture.cpp index 523d938854..38019c5a03 100755 --- a/libraries/gpu/src/gpu/Texture.cpp +++ b/libraries/gpu/src/gpu/Texture.cpp @@ -482,43 +482,39 @@ uint16 Texture::autoGenerateMips(uint16 maxMip) { } uint16 Texture::getStoredMipWidth(uint16 level) const { - PixelsPointer mipFace = accessStoredMipFace(level); - if (mipFace && mipFace->getSize()) { - return evalMipWidth(level); + if (!isStoredMipFaceAvailable(level)) { + return 0; } - return 0; + return evalMipWidth(level); } uint16 Texture::getStoredMipHeight(uint16 level) const { - PixelsPointer mip = accessStoredMipFace(level); - if (mip && mip->getSize()) { - return evalMipHeight(level); + if (!isStoredMipFaceAvailable(level)) { + return 0; } - return 0; + return evalMipHeight(level); } uint16 Texture::getStoredMipDepth(uint16 level) const { - PixelsPointer mipFace = accessStoredMipFace(level); - if (mipFace && mipFace->getSize()) { - return evalMipDepth(level); + if (!isStoredMipFaceAvailable(level)) { + return 0; } - return 0; + return evalMipDepth(level); } uint32 Texture::getStoredMipNumTexels(uint16 level) const { - PixelsPointer mipFace = accessStoredMipFace(level); - if (mipFace && mipFace->getSize()) { - return evalMipWidth(level) * evalMipHeight(level) * evalMipDepth(level); + if (!isStoredMipFaceAvailable(level)) { + return 0; } - return 0; + return evalMipWidth(level) * evalMipHeight(level) * evalMipDepth(level); } uint32 Texture::getStoredMipSize(uint16 level) const { - PixelsPointer mipFace = accessStoredMipFace(level); - if (mipFace && mipFace->getSize()) { - return evalMipWidth(level) * evalMipHeight(level) * evalMipDepth(level) * getTexelFormat().getSize(); + if (!isStoredMipFaceAvailable(level)) { + return 0; } - return 0; + + return evalMipWidth(level) * evalMipHeight(level) * evalMipDepth(level) * getTexelFormat().getSize(); } gpu::Resource::Size Texture::getStoredSize() const { @@ -984,9 +980,3 @@ Texture::ExternalUpdates Texture::getUpdates() const { void Texture::setStorage(std::unique_ptr<Storage>& newStorage) { _storage.swap(newStorage); } - -void Texture::finishTransfer() const { - if (_storage) { - _storage->releaseTempResources(); - } -} diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index f40e936578..1bc21cc9b0 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -267,7 +267,6 @@ public: virtual void assignMipData(uint16 level, const storage::StoragePointer& storage) = 0; virtual void assignMipFaceData(uint16 level, uint8 face, const storage::StoragePointer& storage) = 0; virtual bool isMipAvailable(uint16 level, uint8 face = 0) const = 0; - virtual void releaseTempResources() const {} Texture::Type getType() const { return _type; } Stamp getStamp() const { return _stamp; } @@ -316,12 +315,10 @@ public: throw std::runtime_error("Invalid call"); } void reset() override { } - void releaseTempResources() const override { _ktxData.release(); } protected: std::string _filename; ktx::KTXDescriptorPointer _ktxDescriptor; - mutable ktx::KTXUniquePointer _ktxData; friend class Texture; }; @@ -526,11 +523,9 @@ public: ExternalUpdates getUpdates() const; - void finishTransfer() const; - // Textures can be serialized directly to ktx data file, here is how static ktx::KTXUniquePointer serialize(const Texture& texture); - static Texture* unserialize(const ktx::KTXUniquePointer& srcData, TextureUsageType usageType = TextureUsageType::RESOURCE, Usage usage = Usage(), const Sampler::Desc& sampler = Sampler::Desc()); + static Texture* unserialize(const std::string& ktxFile, TextureUsageType usageType = TextureUsageType::RESOURCE, Usage usage = Usage(), const Sampler::Desc& sampler = Sampler::Desc()); static bool evalKTXFormat(const Element& mipFormat, const Element& texelFormat, ktx::Header& header); static bool evalTextureFormat(const ktx::Header& header, Element& mipFormat, Element& texelFormat); diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index ef96810251..ba9213683c 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -43,9 +43,11 @@ struct GPUKTXPayload { std::string GPUKTXPayload::KEY { "hifi.gpu" }; KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { - ktx::StoragePointer storage { new storage::FileStorage(_filename.c_str()) }; - auto ktxPointer = ktx::KTX::create(storage); - _ktxDescriptor.reset(new ktx::KTXDescriptor(ktxPointer->toDescriptor())); + { + ktx::StoragePointer storage { new storage::FileStorage(_filename.c_str()) }; + auto ktxPointer = ktx::KTX::create(storage); + _ktxDescriptor.reset(new ktx::KTXDescriptor(ktxPointer->toDescriptor())); + } // now that we know the ktx, let's get the header info to configure this Texture::Storage: Format mipFormat = Format::COLOR_BGRA_32; @@ -56,11 +58,13 @@ KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { } PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { - if (!_ktxData) { - ktx::StoragePointer storage { new storage::FileStorage(_filename.c_str()) }; - _ktxData = _ktxDescriptor->toKTX(storage); + storage::StoragePointer result; + auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face); + auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face); + if (faceSize != 0 && faceOffset != 0) { + result = std::make_shared<storage::FileStorage>(_filename.c_str())->createView(faceSize, faceOffset)->toMemoryStorage(); } - return _ktxData->getMipFaceTexelsData(level, face); + return result; } Size KtxStorage::getMipFaceSize(uint16 level, uint8 face) const { @@ -180,11 +184,9 @@ ktx::KTXUniquePointer Texture::serialize(const Texture& texture) { return ktxBuffer; } -Texture* Texture::unserialize(const ktx::KTXUniquePointer& srcData, TextureUsageType usageType, Usage usage, const Sampler::Desc& sampler) { - if (!srcData) { - return nullptr; - } - const auto& header = srcData->getHeader(); +Texture* Texture::unserialize(const std::string& ktxfile, TextureUsageType usageType, Usage usage, const Sampler::Desc& sampler) { + ktx::KTXDescriptor descriptor { ktx::KTX::create(ktx::StoragePointer { new storage::FileStorage(ktxfile.c_str()) })->toDescriptor() }; + const auto& header = descriptor.header; Format mipFormat = Format::COLOR_BGRA_32; Format texelFormat = Format::COLOR_SRGBA_32; @@ -212,7 +214,7 @@ Texture* Texture::unserialize(const ktx::KTXUniquePointer& srcData, TextureUsage // If found, use the GPUKTXPayload gpuktxKeyValue; - bool isGPUKTXPayload = GPUKTXPayload::findInKeyValues(srcData->_keyValues, gpuktxKeyValue); + bool isGPUKTXPayload = GPUKTXPayload::findInKeyValues(descriptor.keyValues, gpuktxKeyValue); auto tex = Texture::create( (isGPUKTXPayload ? gpuktxKeyValue._usageType : usageType), type, @@ -228,14 +230,7 @@ Texture* Texture::unserialize(const ktx::KTXUniquePointer& srcData, TextureUsage // Assing the mips availables tex->setStoredMipFormat(mipFormat); - uint16_t level = 0; - for (auto& image : srcData->_images) { - for (uint32_t face = 0; face < image._numFaces; face++) { - tex->assignStoredMipFace(level, face, image._faceSize, image._faceBytes[face]); - } - level++; - } - + tex->setKtxBacking(ktxfile); return tex; } diff --git a/libraries/ktx/src/ktx/KTX.cpp b/libraries/ktx/src/ktx/KTX.cpp index 90ca19d762..f50062b873 100644 --- a/libraries/ktx/src/ktx/KTX.cpp +++ b/libraries/ktx/src/ktx/KTX.cpp @@ -167,6 +167,17 @@ size_t KTXDescriptor::getMipFaceTexelsSize(uint16_t mip, uint8_t face) const { return result; } +size_t KTXDescriptor::getMipFaceTexelsOffset(uint16_t mip, uint8_t face) const { + size_t result { 0 }; + if (mip < images.size()) { + const auto& faces = images[mip]; + if (face < faces._numFaces) { + result = faces._faceOffsets[face]; + } + } + return result; +} + ImageDescriptor Image::toImageDescriptor(const Byte* baseAddress) const { FaceOffsets offsets; offsets.resize(_faceBytes.size()); @@ -196,14 +207,5 @@ KTXDescriptor KTX::toDescriptor() const { return { this->_header, this->_keyValues, newDescriptors }; } -std::unique_ptr<KTX> KTXDescriptor::toKTX(const ktx::StoragePointer& storage) const { - Images newImages; - for (size_t i = 0; i < images.size(); ++i) { - newImages.emplace_back(images[i].toImage(storage)); - } - - return std::unique_ptr<KTX>(new KTX { storage, header, keyValues, newImages }); -} - KTX::KTX(const StoragePointer& storage, const Header& header, const KeyValues& keyValues, const Images& images) : _storage(storage), _header(header), _keyValues(keyValues), _images(images) { } \ No newline at end of file diff --git a/libraries/ktx/src/ktx/KTX.h b/libraries/ktx/src/ktx/KTX.h index c34127d357..f09986991a 100644 --- a/libraries/ktx/src/ktx/KTX.h +++ b/libraries/ktx/src/ktx/KTX.h @@ -461,7 +461,7 @@ namespace ktx { const KeyValues keyValues; const ImageDescriptors images; size_t getMipFaceTexelsSize(uint16_t mip = 0, uint8_t face = 0) const; - std::unique_ptr<KTX> toKTX(const ktx::StoragePointer& storage) const; + size_t getMipFaceTexelsOffset(uint16_t mip = 0, uint8_t face = 0) const; }; class KTX { diff --git a/libraries/model-networking/src/model-networking/KTXCache.cpp b/libraries/model-networking/src/model-networking/KTXCache.cpp index 63d35fe4a4..8ec1c4e41c 100644 --- a/libraries/model-networking/src/model-networking/KTXCache.cpp +++ b/libraries/model-networking/src/model-networking/KTXCache.cpp @@ -38,10 +38,3 @@ std::unique_ptr<File> KTXCache::createFile(Metadata&& metadata, const std::strin KTXFile::KTXFile(Metadata&& metadata, const std::string& filepath) : cache::File(std::move(metadata), filepath) {} -std::unique_ptr<ktx::KTX> KTXFile::getKTX() const { - ktx::StoragePointer storage = std::make_shared<storage::FileStorage>(getFilepath().c_str()); - if (*storage) { - return ktx::KTX::create(storage); - } - return {}; -} diff --git a/libraries/model-networking/src/model-networking/KTXCache.h b/libraries/model-networking/src/model-networking/KTXCache.h index 4ef5e52721..bbf7ceadea 100644 --- a/libraries/model-networking/src/model-networking/KTXCache.h +++ b/libraries/model-networking/src/model-networking/KTXCache.h @@ -39,9 +39,6 @@ protected: class KTXFile : public cache::File { Q_OBJECT -public: - std::unique_ptr<ktx::KTX> getKTX() const; - protected: friend class KTXCache; diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index 17cafaa5ad..98b03eba1e 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -438,15 +438,9 @@ void NetworkTexture::loadContent(const QByteArray& content) { if (!texture) { KTXFilePointer ktxFile = textureCache->_ktxCache.getFile(hash); if (ktxFile) { - // Ensure that the KTX deserialization worked - auto ktx = ktxFile->getKTX(); - if (ktx) { - texture.reset(gpu::Texture::unserialize(ktx)); - // Ensure that the texture population worked - if (texture) { - texture->setKtxBacking(ktxFile->getFilepath()); - texture = textureCache->cacheTextureByHash(hash, texture); - } + texture.reset(gpu::Texture::unserialize(ktxFile->getFilepath())); + if (texture) { + texture = textureCache->cacheTextureByHash(hash, texture); } } } From 2cf7ba4119dae3fcdfbe0d77854aa6639c751eba Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis <bdavis@saintandreas.org> Date: Mon, 27 Mar 2017 16:34:08 -0700 Subject: [PATCH 230/247] Fixing pending transfer calculation --- .../src/gpu/gl45/GL45BackendVariableTexture.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp index 65be154666..1fbd7dc424 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp @@ -88,11 +88,13 @@ TransferJob::TransferJob(const GL45VariableAllocationTexture& parent, uint16_t s GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_parent._gpuObject.getTexelFormat(), _parent._gpuObject.getStoredMipFormat()); format = texelFormat.format; type = texelFormat.type; + auto mipSize = _parent._gpuObject.getStoredMipFaceSize(sourceMip, face); + if (0 == lines) { + _transferSize = mipSize; _bufferingLambda = [=] { auto mipData = _parent._gpuObject.accessStoredMipFace(sourceMip, face); - _transferSize = mipData->getSize(); _buffer.resize(_transferSize); memcpy(&_buffer[0], mipData->readData(), _transferSize); _bufferingCompleted = true; @@ -100,13 +102,12 @@ TransferJob::TransferJob(const GL45VariableAllocationTexture& parent, uint16_t s } else { transferDimensions.y = lines; + auto dimensions = _parent._gpuObject.evalMipDimensions(sourceMip); + auto bytesPerLine = (uint32_t)mipSize / dimensions.y; + auto sourceOffset = bytesPerLine * lineOffset; + _transferSize = bytesPerLine * lines; _bufferingLambda = [=] { auto mipData = _parent._gpuObject.accessStoredMipFace(sourceMip, face); - auto dimensions = _parent._gpuObject.evalMipDimensions(sourceMip); - auto mipSize = mipData->getSize(); - auto bytesPerLine = (uint32_t)mipSize / dimensions.y; - _transferSize = bytesPerLine * lines; - auto sourceOffset = bytesPerLine * lineOffset; _buffer.resize(_transferSize); memcpy(&_buffer[0], mipData->readData() + sourceOffset, _transferSize); _bufferingCompleted = true; From cdac011472f61e81a5ebadaf38a4c2a11cad443e Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Mon, 27 Mar 2017 18:21:00 -0700 Subject: [PATCH 231/247] fix home button --- scripts/system/controllers/handControllerGrab.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index c93a721248..95e3ba90ce 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -726,9 +726,7 @@ function calculateStylusTargetFromOverlay(stylusTip, overlayID) { var invRot = Quat.inverse(overlayRotation); var localPos = Vec3.multiplyQbyV(invRot, Vec3.subtract(position, overlayPosition)); var dpi = Overlays.getProperty(overlayID, "dpi"); - if (dpi === undefined) { - return; - } + var dimensions; if (dpi) { // Calculate physical dimensions for web3d overlay from resolution and dpi; "dimensions" property is used as a scale. From a6ef592353ca416054a8bc0f66a06f93288e57ae Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 28 Mar 2017 14:43:26 +1300 Subject: [PATCH 232/247] Non-scrolling window with images scaled to fit --- scripts/system/html/SnapshotReview.html | 17 +++--- scripts/system/html/css/SnapshotReview.css | 71 ++++++++++++++++++---- scripts/system/html/js/SnapshotReview.js | 18 ++++-- 3 files changed, 81 insertions(+), 25 deletions(-) diff --git a/scripts/system/html/SnapshotReview.html b/scripts/system/html/SnapshotReview.html index 089e223602..3a2262e308 100644 --- a/scripts/system/html/SnapshotReview.html +++ b/scripts/system/html/SnapshotReview.html @@ -8,16 +8,17 @@ </head> <body> - <div class="snapshot-container"> - <div class="snapsection"> - <label class="title">Snap</label> - </div> - <hr /> + <div class="snapsection title"> + <label>Snap</label> + </div> + <hr /> + <div id="snapshot-pane"> <div id="snapshot-images"> </div> - <div class="snapsection"> + </div> + <div id="snapshot-controls"> + <div class="snapsection" id="snap-buttons"> <div id="sharing"> - <div class="prompt">Would you like to share your pics in the Snapshots feed?</div> <div class="button"> <span class="compound-button"> <input type="button" class="blue" id="share" value="Share in Feed" onclick="shareSelected()" /> @@ -30,7 +31,7 @@ </div> </div> <hr /> - <div class="snapsection"> + <div class="snapsection" id="snap-settings"> <span class="setting"> <input type="button" class="glyph naked" id="snapshotSettings" value="@" onclick="snapshotSettings()" /> <label for="snapshotSettings">Snapshot settings</label> diff --git a/scripts/system/html/css/SnapshotReview.css b/scripts/system/html/css/SnapshotReview.css index 13fb119992..34b690a021 100644 --- a/scripts/system/html/css/SnapshotReview.css +++ b/scripts/system/html/css/SnapshotReview.css @@ -10,32 +10,81 @@ body { padding-top: 0; -} - -.snapshot-container { - width: 100%; -} - -#snapshot-images > img { - width: 100%; + padding-bottom: 14px; } .snapsection { - padding-top: 21px; + padding-top: 14px; text-align: center; } -.snapsection:first-child { +.snapsection.title { padding-top: 0; text-align: left; } -.title { +.title label { font-size: 18px; position: relative; top: 12px; } +#snapshot-pane { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + padding-top: 56px; + padding-bottom: 175px; +} + +#snapshot-images { + height: 100%; + width: 100%; + position: relative; +} + +#snapshot-images > div { + position: relative; + text-align: center; +} + +#snapshot-images img { + max-width: 100%; + max-height: 100%; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + vertical-align: middle; +} + +#snapshot-images div.property { + margin-top: 0; + position: absolute; + top: 50%; + left: 7px; + transform: translate(0%, -50%); +} + +#snapshot-images img { + box-sizing: border-box; + padding: 0 7px 0 7px; +} + +#snapshot-images img.multiple { + padding-left: 28px; +} + +#snapshot-controls { + width: 100%; + position: absolute; + left: 0; + bottom: 14px; +} + .prompt { font-family: Raleway-SemiBold; font-size: 14px; diff --git a/scripts/system/html/js/SnapshotReview.js b/scripts/system/html/js/SnapshotReview.js index efe30196ee..d97207384a 100644 --- a/scripts/system/html/js/SnapshotReview.js +++ b/scripts/system/html/js/SnapshotReview.js @@ -10,7 +10,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -var paths = [], idCounter = 0, useCheckboxes; +var paths = [], idCounter = 0, imageCount; function addImage(data) { if (!data.localPath) { return; @@ -19,11 +19,16 @@ function addImage(data) { input = document.createElement("INPUT"), label = document.createElement("LABEL"), img = document.createElement("IMG"), + div2 = document.createElement("DIV"), id = "p" + idCounter++; function toggle() { data.share = input.checked; } + div.style.height = "" + Math.floor(100 / imageCount) + "%"; + if (imageCount > 1) { + img.setAttribute("class", "multiple"); + } img.src = data.localPath; div.appendChild(img); - if (useCheckboxes) { // I'd rather use css, but the included stylesheet is quite particular. + if (imageCount > 1) { // I'd rather use css, but the included stylesheet is quite particular. // Our stylesheet(?) requires input.id to match label.for. Otherwise input doesn't display the check state. label.setAttribute('for', id); // cannot do label.for = input.id = id; @@ -31,9 +36,10 @@ function addImage(data) { input.checked = (id === "p0"); data.share = input.checked; input.addEventListener('change', toggle); - div.class = "property checkbox"; - div.appendChild(input); - div.appendChild(label); + div2.setAttribute("class", "property checkbox"); + div2.appendChild(input); + div2.appendChild(label); + div.appendChild(div2); } else { data.share = true; } @@ -73,7 +79,7 @@ window.onload = function () { handleShareButtons(shareMsg); // rest are image paths which we add - useCheckboxes = message.action.length > 1; + imageCount = message.action.length; message.action.forEach(addImage); }); EventBridge.emitWebEvent(JSON.stringify({ From 6a3dea030e0f7a2e6710e020aedd7126da6a1361 Mon Sep 17 00:00:00 2001 From: David Rowe <david@ctrlaltstudio.com> Date: Tue, 28 Mar 2017 15:15:33 +1300 Subject: [PATCH 233/247] Settings link --- scripts/system/html/SnapshotReview.html | 2 +- scripts/system/snapshot.js | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/system/html/SnapshotReview.html b/scripts/system/html/SnapshotReview.html index 3a2262e308..145cfb16a9 100644 --- a/scripts/system/html/SnapshotReview.html +++ b/scripts/system/html/SnapshotReview.html @@ -34,7 +34,7 @@ <div class="snapsection" id="snap-settings"> <span class="setting"> <input type="button" class="glyph naked" id="snapshotSettings" value="@" onclick="snapshotSettings()" /> - <label for="snapshotSettings">Snapshot settings</label> + <label for="snapshotSettings">Settings</label> </span> <span class="setting checkbox"> <input id="openFeed" type="checkbox" checked /> diff --git a/scripts/system/snapshot.js b/scripts/system/snapshot.js index 4c454dbc7b..010544a2c6 100644 --- a/scripts/system/snapshot.js +++ b/scripts/system/snapshot.js @@ -60,7 +60,12 @@ function onMessage(message) { outstanding = 0; break; case 'openSettings': - Desktop.show("hifi/dialogs/GeneralPreferencesDialog.qml", "GeneralPreferencesDialog"); + if ((HMD.active && Settings.getValue("hmdTabletBecomesToolbar")) + || (!HMD.active && Settings.getValue("desktopTabletBecomesToolbar"))) { + Desktop.show("hifi/dialogs/GeneralPreferencesDialog.qml", "General Preferences"); + } else { + tablet.loadQMLSource("TabletGeneralPreferences.qml"); + } break; case 'setOpenFeedFalse': Settings.setValue('openFeedAfterShare', false); From 651d87dc2a2f138301c5a21286ad121b779a5aba Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Tue, 28 Mar 2017 07:53:25 -0700 Subject: [PATCH 234/247] move Qt-related stuff out of model and into model-networking --- libraries/entities/CMakeLists.txt | 2 +- libraries/entities/src/EntityScriptingInterface.cpp | 2 +- .../src/model-networking}/MeshFace.cpp | 0 .../src/model-networking}/MeshFace.h | 2 +- .../src/model-networking}/MeshProxy.cpp | 0 .../src/model-networking}/MeshProxy.h | 2 +- libraries/script-engine/src/ModelScriptingInterface.cpp | 2 +- libraries/script-engine/src/ModelScriptingInterface.h | 4 ++-- 8 files changed, 7 insertions(+), 7 deletions(-) rename libraries/{model/src/model => model-networking/src/model-networking}/MeshFace.cpp (100%) rename libraries/{model/src/model => model-networking/src/model-networking}/MeshFace.h (97%) rename libraries/{model/src/model => model-networking/src/model-networking}/MeshProxy.cpp (100%) rename libraries/{model/src/model => model-networking/src/model-networking}/MeshProxy.h (98%) diff --git a/libraries/entities/CMakeLists.txt b/libraries/entities/CMakeLists.txt index 1230fe8146..b2ae0f0ab7 100644 --- a/libraries/entities/CMakeLists.txt +++ b/libraries/entities/CMakeLists.txt @@ -1,6 +1,6 @@ set(TARGET_NAME entities) setup_hifi_library(Network Script) -link_hifi_libraries(avatars shared audio octree model fbx networking animation) +link_hifi_libraries(avatars shared audio octree model model-networking fbx networking animation) target_bullet() diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index f66cf1e8f1..2c332e8d05 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -21,7 +21,7 @@ #include <VariantMapToScriptValue.h> #include <SharedUtil.h> #include <SpatialParentFinder.h> -#include <model/MeshProxy.h> +#include <model-networking/MeshProxy.h> #include "EntitiesLogging.h" #include "EntityActionFactoryInterface.h" diff --git a/libraries/model/src/model/MeshFace.cpp b/libraries/model-networking/src/model-networking/MeshFace.cpp similarity index 100% rename from libraries/model/src/model/MeshFace.cpp rename to libraries/model-networking/src/model-networking/MeshFace.cpp diff --git a/libraries/model/src/model/MeshFace.h b/libraries/model-networking/src/model-networking/MeshFace.h similarity index 97% rename from libraries/model/src/model/MeshFace.h rename to libraries/model-networking/src/model-networking/MeshFace.h index ef1e3a0b6b..3b81b372c3 100644 --- a/libraries/model/src/model/MeshFace.h +++ b/libraries/model-networking/src/model-networking/MeshFace.h @@ -16,7 +16,7 @@ #include <QScriptValueIterator> #include <QtScript/QScriptValue> -#include "Geometry.h" +#include <model/Geometry.h> using MeshPointer = std::shared_ptr<model::Mesh>; diff --git a/libraries/model/src/model/MeshProxy.cpp b/libraries/model-networking/src/model-networking/MeshProxy.cpp similarity index 100% rename from libraries/model/src/model/MeshProxy.cpp rename to libraries/model-networking/src/model-networking/MeshProxy.cpp diff --git a/libraries/model/src/model/MeshProxy.h b/libraries/model-networking/src/model-networking/MeshProxy.h similarity index 98% rename from libraries/model/src/model/MeshProxy.h rename to libraries/model-networking/src/model-networking/MeshProxy.h index fcd36e6e9c..c5b25b7895 100644 --- a/libraries/model/src/model/MeshProxy.h +++ b/libraries/model-networking/src/model-networking/MeshProxy.h @@ -16,7 +16,7 @@ #include <QScriptValueIterator> #include <QtScript/QScriptValue> -#include "Geometry.h" +#include <model/Geometry.h> using MeshPointer = std::shared_ptr<model::Mesh>; diff --git a/libraries/script-engine/src/ModelScriptingInterface.cpp b/libraries/script-engine/src/ModelScriptingInterface.cpp index c02eb642a1..f56312568e 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.cpp +++ b/libraries/script-engine/src/ModelScriptingInterface.cpp @@ -12,7 +12,7 @@ #include <QScriptEngine> #include <QScriptValueIterator> #include <QtScript/QScriptValue> -#include <model/MeshFace.h> +#include <model-networking/MeshFace.h> #include "ScriptEngine.h" #include "ScriptEngineLogging.h" #include "ModelScriptingInterface.h" diff --git a/libraries/script-engine/src/ModelScriptingInterface.h b/libraries/script-engine/src/ModelScriptingInterface.h index e3d5b18b29..d899f532d8 100644 --- a/libraries/script-engine/src/ModelScriptingInterface.h +++ b/libraries/script-engine/src/ModelScriptingInterface.h @@ -17,8 +17,8 @@ #include <QScriptValue> #include <OBJWriter.h> #include <model/Geometry.h> -#include <model/MeshProxy.h> -#include <model/MeshFace.h> +#include <model-networking/MeshProxy.h> +#include <model-networking/MeshFace.h> using MeshPointer = std::shared_ptr<model::Mesh>; class ScriptEngine; From 29a159b90d6ba09adfeefbdb8d695ec8c4eeea88 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 28 Mar 2017 09:27:13 -0700 Subject: [PATCH 235/247] WebTablet.js: Don't remove or add mouse callbacks onHMDChanged This should prevent the exception on destroy, caused by disconnecting a signal that is not attached. --- scripts/system/libraries/WebTablet.js | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 0b4186e39b..e2d2791536 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -429,16 +429,6 @@ WebTablet.prototype.calculateTabletAttachmentProperties = function (hand, useMou WebTablet.prototype.onHmdChanged = function () { - if (HMD.active) { - Controller.mousePressEvent.disconnect(this.myMousePressEvent); - Controller.mouseMoveEvent.disconnect(this.myMouseMoveEvent); - Controller.mouseReleaseEvent.disconnect(this.myMouseReleaseEvent); - } else { - Controller.mousePressEvent.connect(this.myMousePressEvent); - Controller.mouseMoveEvent.connect(this.myMouseMoveEvent); - Controller.mouseReleaseEvent.connect(this.myMouseReleaseEvent); - } - var tabletProperties = {}; // compute position, rotation & parentJointIndex of the tablet this.calculateTabletAttachmentProperties(NO_HANDS, false, tabletProperties); From ec6ef0160089de37da5231183d72adb82ea9dc9b Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 28 Mar 2017 09:53:00 -0700 Subject: [PATCH 236/247] Mark the system TabletProxy object as Cpp ownership. This should prevent the problem where the QML engine erroneously thinks the QObject has been collected/destroyed. --- interface/src/ui/overlays/Web3DOverlay.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index ae8755910b..36ad207521 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -17,6 +17,7 @@ #include <QtGui/QOpenGLContext> #include <QtQuick/QQuickItem> #include <QtQml/QQmlContext> +#include <QtQml/QQmlEngine> #include <AbstractViewStateInterface.h> #include <gpu/Batch.h> @@ -197,6 +198,10 @@ void Web3DOverlay::loadSourceURL() { _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../"); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); + // mark the TabletProxy object as cpp ownership. + QObject* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system"); + _webSurface->getRootContext()->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership); + // Override min fps for tablet UI, for silky smooth scrolling setMaxFPS(90); } From 9fc9253eeb5a46557d0254301efad870729d66e9 Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis <bdavis@saintandreas.org> Date: Tue, 28 Mar 2017 09:54:18 -0700 Subject: [PATCH 237/247] Fixing warnings --- libraries/ktx/src/ktx/KTX.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/ktx/src/ktx/KTX.cpp b/libraries/ktx/src/ktx/KTX.cpp index f50062b873..6fca39788b 100644 --- a/libraries/ktx/src/ktx/KTX.cpp +++ b/libraries/ktx/src/ktx/KTX.cpp @@ -208,4 +208,5 @@ KTXDescriptor KTX::toDescriptor() const { } KTX::KTX(const StoragePointer& storage, const Header& header, const KeyValues& keyValues, const Images& images) - : _storage(storage), _header(header), _keyValues(keyValues), _images(images) { } \ No newline at end of file + : _header(header), _storage(storage), _keyValues(keyValues), _images(images) { +} \ No newline at end of file From b0e437cc5ae06c7ad53a342fe438bf4745ed78d9 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 28 Mar 2017 18:14:05 +0100 Subject: [PATCH 238/247] remove help button from tablet when reloading scripts --- scripts/system/help.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/help.js b/scripts/system/help.js index ac411a8622..a335b2ef9c 100644 --- a/scripts/system/help.js +++ b/scripts/system/help.js @@ -56,7 +56,7 @@ }, POLL_RATE); Script.scriptEnding.connect(function () { - if (onUserScreen) { + if (onHelpScreen) { tablet.gotoHomeScreen(); } button.clicked.disconnect(onClicked); From 6f6343420c2d12ead6828af4b68643a0acf9bae7 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Tue, 28 Mar 2017 10:56:33 -0700 Subject: [PATCH 239/247] don't crash if entity dimensions somehow include a zero --- .../entities-renderer/src/RenderablePolyVoxEntityItem.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp index 5127739357..419f32f897 100644 --- a/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp +++ b/libraries/entities-renderer/src/RenderablePolyVoxEntityItem.cpp @@ -404,6 +404,9 @@ bool RenderablePolyVoxEntityItem::setSphere(glm::vec3 centerWorldCoords, float r float smallestDimensionSize = voxelSize.x; smallestDimensionSize = glm::min(smallestDimensionSize, voxelSize.y); smallestDimensionSize = glm::min(smallestDimensionSize, voxelSize.z); + if (smallestDimensionSize <= 0.0f) { + return false; + } glm::vec3 maxRadiusInVoxelCoords = glm::vec3(radiusWorldCoords / smallestDimensionSize); glm::vec3 centerInVoxelCoords = wtvMatrix * glm::vec4(centerWorldCoords, 1.0f); @@ -1310,6 +1313,7 @@ void RenderablePolyVoxEntityItem::recomputeMesh() { mesh->setVertexBuffer(vertexBufferView); + // TODO -- use 3-byte normals rather than 3-float normals mesh->addAttribute(gpu::Stream::NORMAL, gpu::BufferView(vertexBufferPtr, sizeof(float) * 3, // polyvox mesh is packed: position, normal, material From 9789476a73e81e632a8f0a8a756dd02144cf7429 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Tue, 28 Mar 2017 10:57:03 -0700 Subject: [PATCH 240/247] handle case where AAEllipsoid is entirely inside the AABox --- libraries/shared/src/AABox.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/libraries/shared/src/AABox.cpp b/libraries/shared/src/AABox.cpp index fa993856dd..b52deaa4ff 100644 --- a/libraries/shared/src/AABox.cpp +++ b/libraries/shared/src/AABox.cpp @@ -437,6 +437,7 @@ glm::vec3 AABox::getClosestPointOnFace(const glm::vec4& origin, const glm::vec4& } bool AABox::touchesAAEllipsoid(const glm::vec3& center, glm::vec3 radials) const { + // handle case where ellipsoid's alix-aligned box doesn't touch this AABox if (_corner.x - radials.x > center.x || _corner.y - radials.y > center.y || _corner.z - radials.z > center.z || @@ -446,6 +447,11 @@ bool AABox::touchesAAEllipsoid(const glm::vec3& center, glm::vec3 radials) const return false; } + // handle case where ellipsoid is entirely inside this AABox + if (contains(center)) { + return true; + } + for (int i = 0; i < FACE_COUNT; i++) { glm::vec3 closest = getClosestPointOnFace(center, (BoxFace)i) - center; float x = closest.x; From 1cf6945bf222dcbefd31f415521e602ea817eda1 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Tue, 28 Mar 2017 11:12:00 -0700 Subject: [PATCH 241/247] pass radials argument to AABox::touchesAAEllipsoid as const reference --- libraries/shared/src/AABox.cpp | 2 +- libraries/shared/src/AABox.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/shared/src/AABox.cpp b/libraries/shared/src/AABox.cpp index b52deaa4ff..3f3146cc04 100644 --- a/libraries/shared/src/AABox.cpp +++ b/libraries/shared/src/AABox.cpp @@ -436,7 +436,7 @@ glm::vec3 AABox::getClosestPointOnFace(const glm::vec4& origin, const glm::vec4& return getClosestPointOnFace(glm::vec3(origin), face); } -bool AABox::touchesAAEllipsoid(const glm::vec3& center, glm::vec3 radials) const { +bool AABox::touchesAAEllipsoid(const glm::vec3& center, const glm::vec3& radials) const { // handle case where ellipsoid's alix-aligned box doesn't touch this AABox if (_corner.x - radials.x > center.x || _corner.y - radials.y > center.y || diff --git a/libraries/shared/src/AABox.h b/libraries/shared/src/AABox.h index 022f1a6ff1..a53cc26163 100644 --- a/libraries/shared/src/AABox.h +++ b/libraries/shared/src/AABox.h @@ -70,7 +70,7 @@ public: bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face, glm::vec3& surfaceNormal) const; bool touchesSphere(const glm::vec3& center, float radius) const; // fast but may generate false positives - bool touchesAAEllipsoid(const glm::vec3& center, glm::vec3 radials) const; + bool touchesAAEllipsoid(const glm::vec3& center, const glm::vec3& radials) const; bool findSpherePenetration(const glm::vec3& center, float radius, glm::vec3& penetration) const; bool findCapsulePenetration(const glm::vec3& start, const glm::vec3& end, float radius, glm::vec3& penetration) const; From 851ea7dabc3c9ba19e45b722ef958fea6e847a91 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Tue, 28 Mar 2017 11:41:51 -0700 Subject: [PATCH 242/247] fix initial finger/stylus setting --- scripts/system/controllers/handControllerGrab.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/system/controllers/handControllerGrab.js b/scripts/system/controllers/handControllerGrab.js index 95e3ba90ce..830ca36cc2 100644 --- a/scripts/system/controllers/handControllerGrab.js +++ b/scripts/system/controllers/handControllerGrab.js @@ -1181,7 +1181,7 @@ function MyController(hand) { this.updateStylusTip(); - var DEFAULT_USE_FINGER_AS_STYLUS = false; + var DEFAULT_USE_FINGER_AS_STYLUS = true; var USE_FINGER_AS_STYLUS = Settings.getValue("preferAvatarFingerOverStylus"); if (USE_FINGER_AS_STYLUS === "") { USE_FINGER_AS_STYLUS = DEFAULT_USE_FINGER_AS_STYLUS; From 08e1a2ba4cfc682c8f1016924d3562389acbc28c Mon Sep 17 00:00:00 2001 From: samcake <sam@highfidelity.io> Date: Tue, 28 Mar 2017 14:06:09 -0700 Subject: [PATCH 243/247] Revert "Don't hold KTX files open for longer than transfers require" --- .../gpu/gl45/GL45BackendVariableTexture.cpp | 16 ++-- libraries/gpu/src/gpu/Texture.cpp | 40 ++++----- libraries/gpu/src/gpu/Texture.h | 15 +--- libraries/gpu/src/gpu/Texture_ktx.cpp | 60 ++++++------- libraries/ktx/src/ktx/KTX.cpp | 87 +++++-------------- libraries/ktx/src/ktx/KTX.h | 69 ++++----------- libraries/ktx/src/ktx/Reader.cpp | 4 +- .../src/model-networking/KTXCache.cpp | 7 ++ .../src/model-networking/KTXCache.h | 3 + .../src/model-networking/TextureCache.cpp | 17 +++- tests/ktx/src/main.cpp | 58 ++++++------- 11 files changed, 154 insertions(+), 222 deletions(-) diff --git a/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp b/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp index 4083f09251..188fff9979 100644 --- a/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp +++ b/libraries/gpu-gl/src/gpu/gl45/GL45BackendVariableTexture.cpp @@ -85,16 +85,14 @@ TransferJob::TransferJob(const GL45VariableAllocationTexture& parent, uint16_t s auto transferDimensions = _parent._gpuObject.evalMipDimensions(sourceMip); GLenum format; GLenum type; + auto mipData = _parent._gpuObject.accessStoredMipFace(sourceMip, face); GLTexelFormat texelFormat = GLTexelFormat::evalGLTexelFormat(_parent._gpuObject.getTexelFormat(), _parent._gpuObject.getStoredMipFormat()); format = texelFormat.format; type = texelFormat.type; - auto mipSize = _parent._gpuObject.getStoredMipFaceSize(sourceMip, face); - if (0 == lines) { - _transferSize = mipSize; + _transferSize = mipData->getSize(); _bufferingLambda = [=] { - auto mipData = _parent._gpuObject.accessStoredMipFace(sourceMip, face); _buffer.resize(_transferSize); memcpy(&_buffer[0], mipData->readData(), _transferSize); _bufferingCompleted = true; @@ -103,11 +101,11 @@ TransferJob::TransferJob(const GL45VariableAllocationTexture& parent, uint16_t s } else { transferDimensions.y = lines; auto dimensions = _parent._gpuObject.evalMipDimensions(sourceMip); + auto mipSize = mipData->getSize(); auto bytesPerLine = (uint32_t)mipSize / dimensions.y; - auto sourceOffset = bytesPerLine * lineOffset; _transferSize = bytesPerLine * lines; + auto sourceOffset = bytesPerLine * lineOffset; _bufferingLambda = [=] { - auto mipData = _parent._gpuObject.accessStoredMipFace(sourceMip, face); _buffer.resize(_transferSize); memcpy(&_buffer[0], mipData->readData() + sourceOffset, _transferSize); _bufferingCompleted = true; @@ -587,10 +585,10 @@ void GL45ResourceTexture::populateTransferQueue() { // break down the transfers into chunks so that no single transfer is // consuming more than X bandwidth - auto mipSize = _gpuObject.getStoredMipFaceSize(sourceMip, face); + auto mipData = _gpuObject.accessStoredMipFace(sourceMip, face); const auto lines = mipDimensions.y; - auto bytesPerLine = mipSize / lines; - Q_ASSERT(0 == (mipSize % lines)); + auto bytesPerLine = (uint32_t)mipData->getSize() / lines; + Q_ASSERT(0 == (mipData->getSize() % lines)); uint32_t linesPerTransfer = (uint32_t)(MAX_TRANSFER_SIZE / bytesPerLine); uint32_t lineOffset = 0; while (lineOffset < lines) { diff --git a/libraries/gpu/src/gpu/Texture.cpp b/libraries/gpu/src/gpu/Texture.cpp index 38019c5a03..1f66b2900e 100755 --- a/libraries/gpu/src/gpu/Texture.cpp +++ b/libraries/gpu/src/gpu/Texture.cpp @@ -149,10 +149,6 @@ PixelsPointer MemoryStorage::getMipFace(uint16 level, uint8 face) const { return PixelsPointer(); } -Size MemoryStorage::getMipFaceSize(uint16 level, uint8 face) const { - return getMipFace(level, face)->getSize(); -} - bool MemoryStorage::isMipAvailable(uint16 level, uint8 face) const { PixelsPointer mipFace = getMipFace(level, face); return (mipFace && mipFace->getSize()); @@ -482,39 +478,43 @@ uint16 Texture::autoGenerateMips(uint16 maxMip) { } uint16 Texture::getStoredMipWidth(uint16 level) const { - if (!isStoredMipFaceAvailable(level)) { - return 0; + PixelsPointer mipFace = accessStoredMipFace(level); + if (mipFace && mipFace->getSize()) { + return evalMipWidth(level); } - return evalMipWidth(level); + return 0; } uint16 Texture::getStoredMipHeight(uint16 level) const { - if (!isStoredMipFaceAvailable(level)) { - return 0; + PixelsPointer mip = accessStoredMipFace(level); + if (mip && mip->getSize()) { + return evalMipHeight(level); } - return evalMipHeight(level); + return 0; } uint16 Texture::getStoredMipDepth(uint16 level) const { - if (!isStoredMipFaceAvailable(level)) { - return 0; + PixelsPointer mipFace = accessStoredMipFace(level); + if (mipFace && mipFace->getSize()) { + return evalMipDepth(level); } - return evalMipDepth(level); + return 0; } uint32 Texture::getStoredMipNumTexels(uint16 level) const { - if (!isStoredMipFaceAvailable(level)) { - return 0; + PixelsPointer mipFace = accessStoredMipFace(level); + if (mipFace && mipFace->getSize()) { + return evalMipWidth(level) * evalMipHeight(level) * evalMipDepth(level); } - return evalMipWidth(level) * evalMipHeight(level) * evalMipDepth(level); + return 0; } uint32 Texture::getStoredMipSize(uint16 level) const { - if (!isStoredMipFaceAvailable(level)) { - return 0; + PixelsPointer mipFace = accessStoredMipFace(level); + if (mipFace && mipFace->getSize()) { + return evalMipWidth(level) * evalMipHeight(level) * evalMipDepth(level) * getTexelFormat().getSize(); } - - return evalMipWidth(level) * evalMipHeight(level) * evalMipDepth(level) * getTexelFormat().getSize(); + return 0; } gpu::Resource::Size Texture::getStoredSize() const { diff --git a/libraries/gpu/src/gpu/Texture.h b/libraries/gpu/src/gpu/Texture.h index d6185df0d4..ce71b41b77 100755 --- a/libraries/gpu/src/gpu/Texture.h +++ b/libraries/gpu/src/gpu/Texture.h @@ -25,8 +25,6 @@ namespace ktx { class KTX; using KTXUniquePointer = std::unique_ptr<KTX>; - struct KTXDescriptor; - using KTXDescriptorPointer = std::unique_ptr<KTXDescriptor>; struct Header; } @@ -263,7 +261,6 @@ public: virtual void reset() = 0; virtual PixelsPointer getMipFace(uint16 level, uint8 face = 0) const = 0; - virtual Size getMipFaceSize(uint16 level, uint8 face = 0) const = 0; virtual void assignMipData(uint16 level, const storage::StoragePointer& storage) = 0; virtual void assignMipFaceData(uint16 level, uint8 face, const storage::StoragePointer& storage) = 0; virtual bool isMipAvailable(uint16 level, uint8 face = 0) const = 0; @@ -289,7 +286,6 @@ public: public: void reset() override; PixelsPointer getMipFace(uint16 level, uint8 face = 0) const override; - Size getMipFaceSize(uint16 level, uint8 face = 0) const override; void assignMipData(uint16 level, const storage::StoragePointer& storage) override; void assignMipFaceData(uint16 level, uint8 face, const storage::StoragePointer& storage) override; bool isMipAvailable(uint16 level, uint8 face = 0) const override; @@ -301,9 +297,8 @@ public: class KtxStorage : public Storage { public: - KtxStorage(const std::string& filename); + KtxStorage(ktx::KTXUniquePointer& ktxData); PixelsPointer getMipFace(uint16 level, uint8 face = 0) const override; - Size getMipFaceSize(uint16 level, uint8 face = 0) const override; // By convention, all mip levels and faces MUST be populated when using KTX backing bool isMipAvailable(uint16 level, uint8 face = 0) const override { return true; } @@ -317,8 +312,7 @@ public: void reset() override { } protected: - std::string _filename; - ktx::KTXDescriptorPointer _ktxDescriptor; + ktx::KTXUniquePointer _ktxData; friend class Texture; }; @@ -481,10 +475,9 @@ public: // Access the the sub mips bool isStoredMipFaceAvailable(uint16 level, uint8 face = 0) const { return _storage->isMipAvailable(level, face); } const PixelsPointer accessStoredMipFace(uint16 level, uint8 face = 0) const { return _storage->getMipFace(level, face); } - Size getStoredMipFaceSize(uint16 level, uint8 face = 0) const { return _storage->getMipFaceSize(level, face); } void setStorage(std::unique_ptr<Storage>& newStorage); - void setKtxBacking(const std::string& filename); + void setKtxBacking(ktx::KTXUniquePointer& newBacking); // access sizes for the stored mips uint16 getStoredMipWidth(uint16 level) const; @@ -522,7 +515,7 @@ public: // Textures can be serialized directly to ktx data file, here is how static ktx::KTXUniquePointer serialize(const Texture& texture); - static Texture* unserialize(const std::string& ktxFile, TextureUsageType usageType = TextureUsageType::RESOURCE, Usage usage = Usage(), const Sampler::Desc& sampler = Sampler::Desc()); + static Texture* unserialize(const ktx::KTXUniquePointer& srcData, TextureUsageType usageType = TextureUsageType::RESOURCE, Usage usage = Usage(), const Sampler::Desc& sampler = Sampler::Desc()); static bool evalKTXFormat(const Element& mipFormat, const Element& texelFormat, ktx::Header& header); static bool evalTextureFormat(const ktx::Header& header, Element& mipFormat, Element& texelFormat); diff --git a/libraries/gpu/src/gpu/Texture_ktx.cpp b/libraries/gpu/src/gpu/Texture_ktx.cpp index 913ced8141..ab5be7475a 100644 --- a/libraries/gpu/src/gpu/Texture_ktx.cpp +++ b/libraries/gpu/src/gpu/Texture_ktx.cpp @@ -42,37 +42,30 @@ struct GPUKTXPayload { std::string GPUKTXPayload::KEY { "hifi.gpu" }; -KtxStorage::KtxStorage(const std::string& filename) : _filename(filename) { - { - ktx::StoragePointer storage { new storage::FileStorage(_filename.c_str()) }; - auto ktxPointer = ktx::KTX::create(storage); - _ktxDescriptor.reset(new ktx::KTXDescriptor(ktxPointer->toDescriptor())); +KtxStorage::KtxStorage(ktx::KTXUniquePointer& ktxData) { + + // if the source ktx is valid let's config this KtxStorage correctly + if (ktxData && ktxData->getHeader()) { + + // now that we know the ktx, let's get the header info to configure this Texture::Storage: + Format mipFormat = Format::COLOR_BGRA_32; + Format texelFormat = Format::COLOR_SRGBA_32; + if (Texture::evalTextureFormat(*ktxData->getHeader(), mipFormat, texelFormat)) { + _format = mipFormat; + } + + } - // now that we know the ktx, let's get the header info to configure this Texture::Storage: - Format mipFormat = Format::COLOR_BGRA_32; - Format texelFormat = Format::COLOR_SRGBA_32; - if (Texture::evalTextureFormat(_ktxDescriptor->header, mipFormat, texelFormat)) { - _format = mipFormat; - } + _ktxData.reset(ktxData.release()); } PixelsPointer KtxStorage::getMipFace(uint16 level, uint8 face) const { - storage::StoragePointer result; - auto faceOffset = _ktxDescriptor->getMipFaceTexelsOffset(level, face); - auto faceSize = _ktxDescriptor->getMipFaceTexelsSize(level, face); - if (faceSize != 0 && faceOffset != 0) { - result = std::make_shared<storage::FileStorage>(_filename.c_str())->createView(faceSize, faceOffset)->toMemoryStorage(); - } - return result; + return _ktxData->getMipFaceTexelsData(level, face); } -Size KtxStorage::getMipFaceSize(uint16 level, uint8 face) const { - return _ktxDescriptor->getMipFaceTexelsSize(level, face); -} - -void Texture::setKtxBacking(const std::string& filename) { - auto newBacking = std::unique_ptr<Storage>(new KtxStorage(filename)); +void Texture::setKtxBacking(ktx::KTXUniquePointer& ktxBacking) { + auto newBacking = std::unique_ptr<Storage>(new KtxStorage(ktxBacking)); setStorage(newBacking); } @@ -184,9 +177,11 @@ ktx::KTXUniquePointer Texture::serialize(const Texture& texture) { return ktxBuffer; } -Texture* Texture::unserialize(const std::string& ktxfile, TextureUsageType usageType, Usage usage, const Sampler::Desc& sampler) { - ktx::KTXDescriptor descriptor { ktx::KTX::create(ktx::StoragePointer { new storage::FileStorage(ktxfile.c_str()) })->toDescriptor() }; - const auto& header = descriptor.header; +Texture* Texture::unserialize(const ktx::KTXUniquePointer& srcData, TextureUsageType usageType, Usage usage, const Sampler::Desc& sampler) { + if (!srcData) { + return nullptr; + } + const auto& header = *srcData->getHeader(); Format mipFormat = Format::COLOR_BGRA_32; Format texelFormat = Format::COLOR_SRGBA_32; @@ -214,7 +209,7 @@ Texture* Texture::unserialize(const std::string& ktxfile, TextureUsageType usage // If found, use the GPUKTXPayload gpuktxKeyValue; - bool isGPUKTXPayload = GPUKTXPayload::findInKeyValues(descriptor.keyValues, gpuktxKeyValue); + bool isGPUKTXPayload = GPUKTXPayload::findInKeyValues(srcData->_keyValues, gpuktxKeyValue); auto tex = Texture::create( (isGPUKTXPayload ? gpuktxKeyValue._usageType : usageType), type, @@ -230,7 +225,14 @@ Texture* Texture::unserialize(const std::string& ktxfile, TextureUsageType usage // Assing the mips availables tex->setStoredMipFormat(mipFormat); - tex->setKtxBacking(ktxfile); + uint16_t level = 0; + for (auto& image : srcData->_images) { + for (uint32_t face = 0; face < image._numFaces; face++) { + tex->assignStoredMipFace(level, face, image._faceSize, image._faceBytes[face]); + } + level++; + } + return tex; } diff --git a/libraries/ktx/src/ktx/KTX.cpp b/libraries/ktx/src/ktx/KTX.cpp index 6fca39788b..bbd4e1bc86 100644 --- a/libraries/ktx/src/ktx/KTX.cpp +++ b/libraries/ktx/src/ktx/KTX.cpp @@ -108,39 +108,47 @@ KTX::~KTX() { void KTX::resetStorage(const StoragePointer& storage) { _storage = storage; - if (_storage->size() >= sizeof(Header)) { - memcpy(&_header, _storage->data(), sizeof(Header)); - } } -const Header& KTX::getHeader() const { - return _header; +const Header* KTX::getHeader() const { + if (!_storage) { + return nullptr; + } + return reinterpret_cast<const Header*>(_storage->data()); } size_t KTX::getKeyValueDataSize() const { - return _header.bytesOfKeyValueData; + if (_storage) { + return getHeader()->bytesOfKeyValueData; + } else { + return 0; + } } size_t KTX::getTexelsDataSize() const { - if (!_storage) { + if (_storage) { + //return _storage->size() - (sizeof(Header) + getKeyValueDataSize()); + return (_storage->data() + _storage->size()) - getTexelsData(); + } else { return 0; } - return (_storage->data() + _storage->size()) - getTexelsData(); } const Byte* KTX::getKeyValueData() const { - if (!_storage) { + if (_storage) { + return (_storage->data() + sizeof(Header)); + } else { return nullptr; } - return (_storage->data() + sizeof(Header)); } const Byte* KTX::getTexelsData() const { - if (!_storage) { + if (_storage) { + return (_storage->data() + sizeof(Header) + getKeyValueDataSize()); + } else { return nullptr; } - return (_storage->data() + sizeof(Header) + getKeyValueDataSize()); } storage::StoragePointer KTX::getMipFaceTexelsData(uint16_t mip, uint8_t face) const { @@ -155,58 +163,3 @@ storage::StoragePointer KTX::getMipFaceTexelsData(uint16_t mip, uint8_t face) co } return result; } - -size_t KTXDescriptor::getMipFaceTexelsSize(uint16_t mip, uint8_t face) const { - size_t result { 0 }; - if (mip < images.size()) { - const auto& faces = images[mip]; - if (face < faces._numFaces) { - result = faces._faceSize; - } - } - return result; -} - -size_t KTXDescriptor::getMipFaceTexelsOffset(uint16_t mip, uint8_t face) const { - size_t result { 0 }; - if (mip < images.size()) { - const auto& faces = images[mip]; - if (face < faces._numFaces) { - result = faces._faceOffsets[face]; - } - } - return result; -} - -ImageDescriptor Image::toImageDescriptor(const Byte* baseAddress) const { - FaceOffsets offsets; - offsets.resize(_faceBytes.size()); - for (size_t face = 0; face < _numFaces; ++face) { - offsets[face] = _faceBytes[face] - baseAddress; - } - // Note, implicit cast of *this to const ImageHeader& - return ImageDescriptor(*this, offsets); -} - -Image ImageDescriptor::toImage(const ktx::StoragePointer& storage) const { - FaceBytes faces; - faces.resize(_faceOffsets.size()); - for (size_t face = 0; face < _numFaces; ++face) { - faces[face] = storage->data() + _faceOffsets[face]; - } - // Note, implicit cast of *this to const ImageHeader& - return Image(*this, faces); -} - -KTXDescriptor KTX::toDescriptor() const { - ImageDescriptors newDescriptors; - auto storageStart = _storage ? _storage->data() : nullptr; - for (size_t i = 0; i < _images.size(); ++i) { - newDescriptors.emplace_back(_images[i].toImageDescriptor(storageStart)); - } - return { this->_header, this->_keyValues, newDescriptors }; -} - -KTX::KTX(const StoragePointer& storage, const Header& header, const KeyValues& keyValues, const Images& images) - : _header(header), _storage(storage), _keyValues(keyValues), _images(images) { -} \ No newline at end of file diff --git a/libraries/ktx/src/ktx/KTX.h b/libraries/ktx/src/ktx/KTX.h index f09986991a..8e901b1105 100644 --- a/libraries/ktx/src/ktx/KTX.h +++ b/libraries/ktx/src/ktx/KTX.h @@ -407,69 +407,43 @@ namespace ktx { }; using KeyValues = KeyValue::KeyValues; - struct ImageHeader { - using FaceOffsets = std::vector<size_t>; + + struct Image { using FaceBytes = std::vector<const Byte*>; - const uint32_t _numFaces; - const uint32_t _imageSize; - const uint32_t _faceSize; - const uint32_t _padding; - ImageHeader(bool cube, uint32_t imageSize, uint32_t padding) : - _numFaces(cube ? NUM_CUBEMAPFACES : 1), - _imageSize(imageSize * _numFaces), - _faceSize(imageSize), - _padding(padding) { - } - }; - struct Image; - - struct ImageDescriptor : public ImageHeader { - const FaceOffsets _faceOffsets; - ImageDescriptor(const ImageHeader& header, const FaceOffsets& offsets) : ImageHeader(header), _faceOffsets(offsets) {} - Image toImage(const ktx::StoragePointer& storage) const; - }; - - using ImageDescriptors = std::vector<ImageDescriptor>; - - struct Image : public ImageHeader { + uint32_t _numFaces{ 1 }; + uint32_t _imageSize; + uint32_t _faceSize; + uint32_t _padding; FaceBytes _faceBytes; - Image(const ImageHeader& header, const FaceBytes& faces) : ImageHeader(header), _faceBytes(faces) {} + + Image(uint32_t imageSize, uint32_t padding, const Byte* bytes) : - ImageHeader(false, imageSize, padding), + _numFaces(1), + _imageSize(imageSize), + _faceSize(imageSize), + _padding(padding), _faceBytes(1, bytes) {} + Image(uint32_t pageSize, uint32_t padding, const FaceBytes& cubeFaceBytes) : - ImageHeader(true, pageSize, padding) + _numFaces(NUM_CUBEMAPFACES), + _imageSize(pageSize * NUM_CUBEMAPFACES), + _faceSize(pageSize), + _padding(padding) { if (cubeFaceBytes.size() == NUM_CUBEMAPFACES) { _faceBytes = cubeFaceBytes; } } - - ImageDescriptor toImageDescriptor(const Byte* baseAddress) const; }; - using Images = std::vector<Image>; - class KTX; - - // A KTX descriptor is a lightweight container for all the information about a serialized KTX file, but without the - // actual image / face data available. - struct KTXDescriptor { - KTXDescriptor(const Header& header, const KeyValues& keyValues, const ImageDescriptors& imageDescriptors) : header(header), keyValues(keyValues), images(imageDescriptors) {} - const Header header; - const KeyValues keyValues; - const ImageDescriptors images; - size_t getMipFaceTexelsSize(uint16_t mip = 0, uint8_t face = 0) const; - size_t getMipFaceTexelsOffset(uint16_t mip = 0, uint8_t face = 0) const; - }; - class KTX { void resetStorage(const StoragePointer& src); KTX(); - KTX(const StoragePointer& storage, const Header& header, const KeyValues& keyValues, const Images& images); public: + ~KTX(); // Define a KTX object manually to write it somewhere (in a file on disk?) @@ -501,23 +475,18 @@ namespace ktx { static Images parseImages(const Header& header, size_t srcSize, const Byte* srcBytes); // Access raw pointers to the main sections of the KTX - const Header& getHeader() const; - + const Header* getHeader() const; const Byte* getKeyValueData() const; const Byte* getTexelsData() const; storage::StoragePointer getMipFaceTexelsData(uint16_t mip = 0, uint8_t face = 0) const; const StoragePointer& getStorage() const { return _storage; } - KTXDescriptor toDescriptor() const; size_t getKeyValueDataSize() const; size_t getTexelsDataSize() const; - Header _header; StoragePointer _storage; KeyValues _keyValues; Images _images; - - friend struct KTXDescriptor; }; } diff --git a/libraries/ktx/src/ktx/Reader.cpp b/libraries/ktx/src/ktx/Reader.cpp index bf72faeba5..277ce42e69 100644 --- a/libraries/ktx/src/ktx/Reader.cpp +++ b/libraries/ktx/src/ktx/Reader.cpp @@ -185,10 +185,10 @@ namespace ktx { result->resetStorage(src); // read metadata - result->_keyValues = parseKeyValues(result->getHeader().bytesOfKeyValueData, result->getKeyValueData()); + result->_keyValues = parseKeyValues(result->getHeader()->bytesOfKeyValueData, result->getKeyValueData()); // populate image table - result->_images = parseImages(result->getHeader(), result->getTexelsDataSize(), result->getTexelsData()); + result->_images = parseImages(*result->getHeader(), result->getTexelsDataSize(), result->getTexelsData()); return result; } diff --git a/libraries/model-networking/src/model-networking/KTXCache.cpp b/libraries/model-networking/src/model-networking/KTXCache.cpp index 8ec1c4e41c..63d35fe4a4 100644 --- a/libraries/model-networking/src/model-networking/KTXCache.cpp +++ b/libraries/model-networking/src/model-networking/KTXCache.cpp @@ -38,3 +38,10 @@ std::unique_ptr<File> KTXCache::createFile(Metadata&& metadata, const std::strin KTXFile::KTXFile(Metadata&& metadata, const std::string& filepath) : cache::File(std::move(metadata), filepath) {} +std::unique_ptr<ktx::KTX> KTXFile::getKTX() const { + ktx::StoragePointer storage = std::make_shared<storage::FileStorage>(getFilepath().c_str()); + if (*storage) { + return ktx::KTX::create(storage); + } + return {}; +} diff --git a/libraries/model-networking/src/model-networking/KTXCache.h b/libraries/model-networking/src/model-networking/KTXCache.h index bbf7ceadea..4ef5e52721 100644 --- a/libraries/model-networking/src/model-networking/KTXCache.h +++ b/libraries/model-networking/src/model-networking/KTXCache.h @@ -39,6 +39,9 @@ protected: class KTXFile : public cache::File { Q_OBJECT +public: + std::unique_ptr<ktx::KTX> getKTX() const; + protected: friend class KTXCache; diff --git a/libraries/model-networking/src/model-networking/TextureCache.cpp b/libraries/model-networking/src/model-networking/TextureCache.cpp index 98b03eba1e..5dfaddd471 100644 --- a/libraries/model-networking/src/model-networking/TextureCache.cpp +++ b/libraries/model-networking/src/model-networking/TextureCache.cpp @@ -438,9 +438,15 @@ void NetworkTexture::loadContent(const QByteArray& content) { if (!texture) { KTXFilePointer ktxFile = textureCache->_ktxCache.getFile(hash); if (ktxFile) { - texture.reset(gpu::Texture::unserialize(ktxFile->getFilepath())); - if (texture) { - texture = textureCache->cacheTextureByHash(hash, texture); + // Ensure that the KTX deserialization worked + auto ktx = ktxFile->getKTX(); + if (ktx) { + texture.reset(gpu::Texture::unserialize(ktx)); + // Ensure that the texture population worked + if (texture) { + texture->setKtxBacking(ktx); + texture = textureCache->cacheTextureByHash(hash, texture); + } } } } @@ -580,7 +586,10 @@ void ImageReader::read() { qCWarning(modelnetworking) << _url << "file cache failed"; } else { resource.staticCast<NetworkTexture>()->_file = file; - texture->setKtxBacking(file->getFilepath()); + auto fileKtx = file->getKTX(); + if (fileKtx) { + texture->setKtxBacking(fileKtx); + } } } diff --git a/tests/ktx/src/main.cpp b/tests/ktx/src/main.cpp index 3a6fcabf43..aa6795e17b 100644 --- a/tests/ktx/src/main.cpp +++ b/tests/ktx/src/main.cpp @@ -111,40 +111,38 @@ int main(int argc, char** argv) { outFile.close(); } + auto ktxFile = ktx::KTX::create(std::shared_ptr<storage::Storage>(new storage::FileStorage(TEST_IMAGE_KTX))); { - auto ktxFile = ktx::KTX::create(std::shared_ptr<storage::Storage>(new storage::FileStorage(TEST_IMAGE_KTX))); - { - const auto& memStorage = ktxMemory->getStorage(); - const auto& fileStorage = ktxFile->getStorage(); - Q_ASSERT(memStorage->size() == fileStorage->size()); - Q_ASSERT(memStorage->data() != fileStorage->data()); - Q_ASSERT(0 == memcmp(memStorage->data(), fileStorage->data(), memStorage->size())); - Q_ASSERT(ktxFile->_images.size() == ktxMemory->_images.size()); - auto imageCount = ktxFile->_images.size(); - auto startMemory = ktxMemory->_storage->data(); - auto startFile = ktxFile->_storage->data(); - for (size_t i = 0; i < imageCount; ++i) { - auto memImages = ktxMemory->_images[i]; - auto fileImages = ktxFile->_images[i]; - Q_ASSERT(memImages._padding == fileImages._padding); - Q_ASSERT(memImages._numFaces == fileImages._numFaces); - Q_ASSERT(memImages._imageSize == fileImages._imageSize); - Q_ASSERT(memImages._faceSize == fileImages._faceSize); - Q_ASSERT(memImages._faceBytes.size() == memImages._numFaces); - Q_ASSERT(fileImages._faceBytes.size() == fileImages._numFaces); - auto faceCount = fileImages._numFaces; - for (uint32_t face = 0; face < faceCount; ++face) { - auto memFace = memImages._faceBytes[face]; - auto memOffset = memFace - startMemory; - auto fileFace = fileImages._faceBytes[face]; - auto fileOffset = fileFace - startFile; - Q_ASSERT(memOffset % 4 == 0); - Q_ASSERT(memOffset == fileOffset); - } + const auto& memStorage = ktxMemory->getStorage(); + const auto& fileStorage = ktxFile->getStorage(); + Q_ASSERT(memStorage->size() == fileStorage->size()); + Q_ASSERT(memStorage->data() != fileStorage->data()); + Q_ASSERT(0 == memcmp(memStorage->data(), fileStorage->data(), memStorage->size())); + Q_ASSERT(ktxFile->_images.size() == ktxMemory->_images.size()); + auto imageCount = ktxFile->_images.size(); + auto startMemory = ktxMemory->_storage->data(); + auto startFile = ktxFile->_storage->data(); + for (size_t i = 0; i < imageCount; ++i) { + auto memImages = ktxMemory->_images[i]; + auto fileImages = ktxFile->_images[i]; + Q_ASSERT(memImages._padding == fileImages._padding); + Q_ASSERT(memImages._numFaces == fileImages._numFaces); + Q_ASSERT(memImages._imageSize == fileImages._imageSize); + Q_ASSERT(memImages._faceSize == fileImages._faceSize); + Q_ASSERT(memImages._faceBytes.size() == memImages._numFaces); + Q_ASSERT(fileImages._faceBytes.size() == fileImages._numFaces); + auto faceCount = fileImages._numFaces; + for (uint32_t face = 0; face < faceCount; ++face) { + auto memFace = memImages._faceBytes[face]; + auto memOffset = memFace - startMemory; + auto fileFace = fileImages._faceBytes[face]; + auto fileOffset = fileFace - startFile; + Q_ASSERT(memOffset % 4 == 0); + Q_ASSERT(memOffset == fileOffset); } } } - testTexture->setKtxBacking(TEST_IMAGE_KTX.toStdString()); + testTexture->setKtxBacking(ktxFile); return 0; } From a76e5ef8d9f5b1a23c39668cb53457028dad2176 Mon Sep 17 00:00:00 2001 From: Dante Ruiz <dante@highfidelity.io> Date: Tue, 28 Mar 2017 23:02:23 +0100 Subject: [PATCH 244/247] improve the design of the tablet goto --- interface/resources/qml/hifi/Card.qml | 114 +++++++++++------- .../qml/hifi/tablet/TabletAddressDialog.qml | 7 +- 2 files changed, 72 insertions(+), 49 deletions(-) diff --git a/interface/resources/qml/hifi/Card.qml b/interface/resources/qml/hifi/Card.qml index 3d1ae0e64b..217cfec707 100644 --- a/interface/resources/qml/hifi/Card.qml +++ b/interface/resources/qml/hifi/Card.qml @@ -80,7 +80,7 @@ Rectangle { id: lobby; visible: !hasGif || (animation.status !== Image.Ready); width: parent.width - (isConcurrency ? 0 : (2 * smallMargin)); - height: parent.height - messageHeight - (isConcurrency ? 0 : smallMargin); + height: parent.height - (isConcurrency ? 0 : smallMargin); source: thumbnail || defaultThumbnail; fillMode: Image.PreserveAspectCrop; anchors { @@ -153,45 +153,57 @@ Rectangle { margins: textPadding; } } + Rectangle { + id: rectRow + z: 1 + width: message.width + (users.visible ? users.width + bottomRow.spacing : 0) + + (icon.visible ? icon.width + bottomRow.spacing: 0) + bottomRow.spacing; + height: messageHeight + 1; + radius: 25 - Row { - FiraSansRegular { - id: users; - visible: isConcurrency; - text: onlineUsers; - size: textSize; - color: messageColor; - anchors.verticalCenter: message.verticalCenter; + anchors { + bottom: parent.bottom + left: parent.left + leftMargin: textPadding + bottomMargin: textPadding } - Image { - id: icon; - source: "../../images/snap-icon.svg" - width: 40; - height: 40; - visible: action === 'snapshot'; - } - RalewayRegular { - id: message; - text: isConcurrency ? ((onlineUsers === 1) ? "person" : "people") : (drillDownToPlace ? "snapshots" : ("by " + userName)); - size: textSizeSmall; - color: messageColor; - elide: Text.ElideRight; // requires a width to be specified` - width: root.width - textPadding - - (users.visible ? users.width + parent.spacing : 0) - - (icon.visible ? icon.width + parent.spacing : 0) - - (actionIcon.width + (2 * smallMargin)); + + Row { + id: bottomRow + FiraSansRegular { + id: users; + visible: isConcurrency; + text: onlineUsers; + size: textSize; + color: messageColor; + anchors.verticalCenter: message.verticalCenter; + } + Image { + id: icon; + source: "../../images/snap-icon.svg" + width: 40; + height: 40; + visible: action === 'snapshot'; + } + RalewayRegular { + id: message; + text: isConcurrency ? ((onlineUsers === 1) ? "person" : "people") : (drillDownToPlace ? "snapshots" : ("by " + userName)); + size: textSizeSmall; + color: messageColor; + elide: Text.ElideRight; // requires a width to be specified` + anchors { + bottom: parent.bottom; + bottomMargin: parent.spacing; + } + } + spacing: textPadding; + height: messageHeight; anchors { bottom: parent.bottom; - bottomMargin: parent.spacing; + left: parent.left; + leftMargin: 4 } } - spacing: textPadding; - height: messageHeight; - anchors { - bottom: parent.bottom; - left: parent.left; - leftMargin: textPadding; - } } // These two can be supplied to provide hover behavior. // For example, AddressBarDialog provides functions that set the current list view item @@ -206,15 +218,29 @@ Rectangle { onEntered: hoverThunk(); onExited: unhoverThunk(); } - StateImage { - id: actionIcon; - imageURL: "../../images/info-icon-2-state.svg"; - size: 32; - buttonState: messageArea.containsMouse ? 1 : 0; + Rectangle { + id: rectIcon + z: 1 + width: 32 + height: 32 + radius: 15 anchors { bottom: parent.bottom; right: parent.right; - margins: smallMargin; + bottomMargin: textPadding; + rightMargin: textPadding; + } + + StateImage { + id: actionIcon; + imageURL: "../../images/info-icon-2-state.svg"; + size: 32; + buttonState: messageArea.containsMouse ? 1 : 0; + anchors { + bottom: parent.bottom; + right: parent.right; + //margins: smallMargin; + } } } DropShadow { @@ -225,11 +251,9 @@ Rectangle { } MouseArea { id: messageArea; - width: parent.width; - height: messageHeight; - anchors { - top: lobby.bottom; - } + width: rectIcon.width; + height: rectIcon.height; + anchors.fill: rectIcon acceptedButtons: Qt.LeftButton; onClicked: goFunction(drillDownToPlace ? ("/places/" + placeName) : ("/user_stories/" + storyId)); hoverEnabled: true; diff --git a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml index 623054f233..a5059b4b88 100644 --- a/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml +++ b/interface/resources/qml/hifi/tablet/TabletAddressDialog.qml @@ -137,12 +137,11 @@ StackView { id: addressBar width: 480 height: 70 + color: hifiStyleConstants.colors.white anchors { top: navBar.bottom right: parent.right - rightMargin: 16 left: parent.left - leftMargin: 16 } property int inputAreaHeight: 70 @@ -174,8 +173,8 @@ StackView { bottom: parent.bottom left: parent.left right: parent.right - leftMargin: 0 - rightMargin: 0 + leftMargin: 16 + rightMargin: 16 topMargin: parent.inputAreaStep + (2 * hifi.layout.spacing) bottomMargin: parent.inputAreaStep } From 6080c4782adb357547fbfa465c67e236803caf55 Mon Sep 17 00:00:00 2001 From: Seth Alves <seth.alves@gmail.com> Date: Tue, 28 Mar 2017 16:44:31 -0700 Subject: [PATCH 245/247] fix polyvox shader --- libraries/entities-renderer/src/polyvox.slf | 1 - 1 file changed, 1 deletion(-) diff --git a/libraries/entities-renderer/src/polyvox.slf b/libraries/entities-renderer/src/polyvox.slf index bebefa9434..56f6f31d71 100644 --- a/libraries/entities-renderer/src/polyvox.slf +++ b/libraries/entities-renderer/src/polyvox.slf @@ -11,7 +11,6 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -<@include gpu/Inputs.slh@> <@include model/Material.slh@> <@include DeferredBufferWrite.slh@> From ecc31802b821f9d864f9242152a5983b76d44be1 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 28 Mar 2017 17:23:36 -0700 Subject: [PATCH 246/247] Added translation support to AC avatar animations. --- .../src/avatars/ScriptableAvatar.cpp | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/assignment-client/src/avatars/ScriptableAvatar.cpp b/assignment-client/src/avatars/ScriptableAvatar.cpp index 516bf7a1e3..7fb319031b 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.cpp +++ b/assignment-client/src/avatars/ScriptableAvatar.cpp @@ -9,11 +9,15 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +#include <QDebug> #include <QThread> +#include <glm/gtx/transform.hpp> #include <GLMHelpers.h> +#include <AnimUtil.h> #include "ScriptableAvatar.h" + QByteArray ScriptableAvatar::toByteArrayStateful(AvatarDataDetail dataDetail) { _globalPosition = getPosition(); return AvatarData::toByteArrayStateful(dataDetail); @@ -57,6 +61,14 @@ void ScriptableAvatar::setSkeletonModelURL(const QUrl& skeletonModelURL) { _animSkeleton.reset(); AvatarData::setSkeletonModelURL(skeletonModelURL); } + +static AnimPose composeAnimPose(const FBXJoint& fbxJoint, const glm::quat rotation, const glm::vec3 translation) { + glm::mat4 translationMat = glm::translate(translation); + glm::mat4 rotationMat = glm::mat4_cast(fbxJoint.preRotation * rotation * fbxJoint.postRotation); + glm::mat4 finalMat = translationMat * fbxJoint.preTransform * rotationMat * fbxJoint.postTransform; + return AnimPose(finalMat); +} + void ScriptableAvatar::update(float deltatime) { if (_bind.isNull() && !_skeletonFBXURL.isEmpty()) { // AvatarData will parse the .fst, but not get the .fbx skeleton. _bind = DependencyManager::get<AnimationCache>()->getAnimation(_skeletonFBXURL); @@ -81,32 +93,42 @@ void ScriptableAvatar::update(float deltatime) { if (_jointData.size() != nJoints) { _jointData.resize(nJoints); } - + const int frameCount = _animation->getFrames().size(); const FBXAnimationFrame& floorFrame = _animation->getFrames().at((int)glm::floor(currentFrame) % frameCount); const FBXAnimationFrame& ceilFrame = _animation->getFrames().at((int)glm::ceil(currentFrame) % frameCount); const float frameFraction = glm::fract(currentFrame); std::vector<AnimPose> poses = _animSkeleton->getRelativeDefaultPoses(); - + + float UNIT_SCALE = 0.01f; + for (int i = 0; i < animationJointNames.size(); i++) { const QString& name = animationJointNames[i]; // As long as we need the model preRotations anyway, let's get the jointIndex from the bind skeleton rather than // trusting the .fst (which is sometimes not updated to match changes to .fbx). int mapping = _bind->getGeometry().getJointIndex(name); if (mapping != -1 && !_maskedJoints.contains(name)) { - // Eventually, this should probably deal with post rotations and translations, too. - poses[mapping].rot() = modelJoints[mapping].preRotation * - safeMix(floorFrame.rotations.at(i), ceilFrame.rotations.at(i), frameFraction);; + + AnimPose floorPose = composeAnimPose(modelJoints[mapping], floorFrame.rotations[i], floorFrame.translations[i] * UNIT_SCALE); + AnimPose ceilPose = composeAnimPose(modelJoints[mapping], ceilFrame.rotations[i], floorFrame.translations[i] * UNIT_SCALE); + blend(1, &floorPose, &ceilPose, frameFraction, &poses[mapping]); } } - _animSkeleton->convertRelativePosesToAbsolute(poses); + + std::vector<AnimPose> absPoses = poses; + _animSkeleton->convertRelativePosesToAbsolute(absPoses); for (int i = 0; i < nJoints; i++) { JointData& data = _jointData[i]; - AnimPose& pose = poses[i]; - if (data.rotation != pose.rot()) { - data.rotation = pose.rot(); + AnimPose& absPose = absPoses[i]; + if (data.rotation != absPose.rot()) { + data.rotation = absPose.rot(); data.rotationSet = true; } + AnimPose& relPose = poses[i]; + if (data.translation != relPose.trans()) { + data.translation = relPose.trans(); + data.translationSet = true; + } } } else { From e100e3d19b0d38a701122b0cb29584b8f8b813c6 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" <tony@highfidelity.io> Date: Tue, 28 Mar 2017 17:34:15 -0700 Subject: [PATCH 247/247] made UNIT_SCALE const --- assignment-client/src/avatars/ScriptableAvatar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/assignment-client/src/avatars/ScriptableAvatar.cpp b/assignment-client/src/avatars/ScriptableAvatar.cpp index 7fb319031b..57456b00c3 100644 --- a/assignment-client/src/avatars/ScriptableAvatar.cpp +++ b/assignment-client/src/avatars/ScriptableAvatar.cpp @@ -100,7 +100,7 @@ void ScriptableAvatar::update(float deltatime) { const float frameFraction = glm::fract(currentFrame); std::vector<AnimPose> poses = _animSkeleton->getRelativeDefaultPoses(); - float UNIT_SCALE = 0.01f; + const float UNIT_SCALE = 0.01f; for (int i = 0; i < animationJointNames.size(); i++) { const QString& name = animationJointNames[i];