Merge branch 'tablet-ui' into tablet-ui-entity-statistics

This commit is contained in:
Vladyslav Stelmakhovskyi 2017-03-13 19:54:40 +01:00
commit 9e9c64021c
11 changed files with 197 additions and 15 deletions

View file

@ -36,7 +36,7 @@ Slider {
Rectangle { Rectangle {
width: parent.height - 2 width: parent.height - 2
height: slider.value * slider.width - 1 height: slider.value * (slider.width/(slider.maximumValue - slider.minimumValue)) - 1
radius: height / 2 radius: height / 2
anchors { anchors {
top: parent.top top: parent.top

View file

@ -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);
}
}
}
}

View file

@ -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"]
}
}

View file

@ -6366,6 +6366,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::loadEntityStatisticsDialog() { void Application::loadEntityStatisticsDialog() {
auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>(); auto tabletScriptingInterface = DependencyManager::get<TabletScriptingInterface>();

View file

@ -403,6 +403,7 @@ public slots:
void addAssetToWorldMessageClose(); void addAssetToWorldMessageClose();
Q_INVOKABLE void toggleMuteAudio(); Q_INVOKABLE void toggleMuteAudio();
void loadLODToolsDialog();
void loadEntityStatisticsDialog(); void loadEntityStatisticsDialog();
private slots: private slots:

View file

@ -308,7 +308,8 @@ Menu::Menu() {
// Settings > LOD... // Settings > LOD...
action = addActionToQMenuAndActionHash(settingsMenu, "LOD..."); action = addActionToQMenuAndActionHash(settingsMenu, "LOD...");
connect(action, &QAction::triggered, [] { 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] // Settings > Control with Speech [advanced]
@ -408,7 +409,8 @@ Menu::Menu() {
// Developer > Render > LOD Tools // 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 // HACK enable texture decimation
{ {

View file

@ -43,6 +43,7 @@
#include "FileDialogHelper.h" #include "FileDialogHelper.h"
#include "avatar/AvatarManager.h" #include "avatar/AvatarManager.h"
#include "AudioClient.h" #include "AudioClient.h"
#include "LODManager.h"
#include "ui/OctreeStatsProvider.h" #include "ui/OctreeStatsProvider.h"
static const float DPI = 30.47f; static const float DPI = 30.47f;
@ -183,6 +184,7 @@ void Web3DOverlay::loadSourceURL() {
_webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data()); _webSurface->getRootContext()->setContextProperty("ScriptDiscoveryService", DependencyManager::get<ScriptEngines>().data());
_webSurface->getRootContext()->setContextProperty("Tablet", DependencyManager::get<TabletScriptingInterface>().data()); _webSurface->getRootContext()->setContextProperty("Tablet", DependencyManager::get<TabletScriptingInterface>().data());
_webSurface->getRootContext()->setContextProperty("Assets", DependencyManager::get<AssetMappingsScriptingInterface>().data()); _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("OctreeStats", DependencyManager::get<OctreeStatsProvider>().data());
_webSurface->getRootContext()->setContextProperty("pathToFonts", "../../"); _webSurface->getRootContext()->setContextProperty("pathToFonts", "../../");
tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data()); tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", _webSurface->getRootItem(), _webSurface.data());

View file

@ -1310,17 +1310,18 @@ void Rig::copyJointsFromJointData(const QVector<JointData>& jointDataVec) {
if (!_animSkeleton) { if (!_animSkeleton) {
return; return;
} }
if (jointDataVec.size() != (int)_internalPoseSet._relativePoses.size()) { int numJoints = jointDataVec.size();
// animations haven't fully loaded yet. const AnimPoseVec& absoluteDefaultPoses = _animSkeleton->getAbsoluteDefaultPoses();
_internalPoseSet._relativePoses = _animSkeleton->getRelativeDefaultPoses(); if (numJoints != (int)absoluteDefaultPoses.size()) {
// jointData is incompatible
return;
} }
// make a vector of rotations in absolute-geometry-frame // make a vector of rotations in absolute-geometry-frame
const AnimPoseVec& absoluteDefaultPoses = _animSkeleton->getAbsoluteDefaultPoses();
std::vector<glm::quat> rotations; std::vector<glm::quat> rotations;
rotations.reserve(absoluteDefaultPoses.size()); rotations.reserve(numJoints);
const glm::quat rigToGeometryRot(glmExtractRotation(_rigToGeometryTransform)); const glm::quat rigToGeometryRot(glmExtractRotation(_rigToGeometryTransform));
for (int i = 0; i < jointDataVec.size(); i++) { for (int i = 0; i < numJoints; i++) {
const JointData& data = jointDataVec.at(i); const JointData& data = jointDataVec.at(i);
if (data.rotationSet) { if (data.rotationSet) {
// JointData rotations are in absolute rig-frame so we rotate them to absolute geometry-frame // JointData rotations are in absolute rig-frame so we rotate them to absolute geometry-frame
@ -1334,8 +1335,11 @@ void Rig::copyJointsFromJointData(const QVector<JointData>& jointDataVec) {
_animSkeleton->convertAbsoluteRotationsToRelative(rotations); _animSkeleton->convertAbsoluteRotationsToRelative(rotations);
// store new relative poses // store new relative poses
if (numJoints != (int)_internalPoseSet._relativePoses.size()) {
_internalPoseSet._relativePoses = _animSkeleton->getRelativeDefaultPoses();
}
const AnimPoseVec& relativeDefaultPoses = _animSkeleton->getRelativeDefaultPoses(); const AnimPoseVec& relativeDefaultPoses = _animSkeleton->getRelativeDefaultPoses();
for (int i = 0; i < jointDataVec.size(); i++) { for (int i = 0; i < numJoints; i++) {
const JointData& data = jointDataVec.at(i); const JointData& data = jointDataVec.at(i);
_internalPoseSet._relativePoses[i].scale() = Vectors::ONE; _internalPoseSet._relativePoses[i].scale() = Vectors::ONE;
_internalPoseSet._relativePoses[i].rot() = rotations[i]; _internalPoseSet._relativePoses[i].rot() = rotations[i];

View file

@ -1548,7 +1548,7 @@ var PropertiesTool = function (opts) {
}); });
} }
selectionManager.addEventListener(function (selectionUpdated) { function updateSelections(selectionUpdated) {
var data = { var data = {
type: 'update' type: 'update'
}; };
@ -1589,7 +1589,8 @@ var PropertiesTool = function (opts) {
} }
data.selections = selections; data.selections = selections;
webView.emitScriptEvent(JSON.stringify(data)); webView.emitScriptEvent(JSON.stringify(data));
}); }
selectionManager.addEventListener(updateSelections);
webView.webEventReceived.connect(function (data) { webView.webEventReceived.connect(function (data) {
try { try {
@ -1751,6 +1752,8 @@ var PropertiesTool = function (opts) {
} }
} }
} }
} else if (data.type === "propertiesPageReady") {
updateSelections(true);
} }
}); });

View file

@ -1704,4 +1704,8 @@ function loaded() {
document.addEventListener("contextmenu", function(event) { document.addEventListener("contextmenu", function(event) {
event.preventDefault(); event.preventDefault();
}, false); }, false);
setTimeout(function() {
EventBridge.emitWebEvent(JSON.stringify({ type: 'propertiesPageReady' }));
}, 1000);
} }

View file

@ -75,8 +75,9 @@
function showTabletUI() { function showTabletUI() {
tabletShown = true; tabletShown = true;
if (!tabletRezzed) { if (!tabletRezzed || !tabletIsValid()) {
rezTablet(false); closeTabletUI()
rezTablet();
} }
if (UIWebTablet && tabletRezzed) { if (UIWebTablet && tabletRezzed) {
@ -199,7 +200,7 @@
preMakeTime = now; preMakeTime = now;
if (!tabletIsValid()) { if (!tabletIsValid()) {
closeTabletUI(); closeTabletUI();
rezTablet(false); rezTablet();
tabletShown = false; tabletShown = false;
} else if (!tabletShown) { } else if (!tabletShown) {
hideTabletUI(); hideTabletUI();