mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-02 08:51:12 +02:00
Merge pull request #12163 from ElderOrb/FB11109
FB11109 Preview disabled image swap (Commerce only)
This commit is contained in:
commit
9d6e62d6bf
6 changed files with 106 additions and 12 deletions
BIN
interface/resources/images/preview-privacy.png
Normal file
BIN
interface/resources/images/preview-privacy.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 52 KiB |
|
@ -209,6 +209,7 @@
|
||||||
#include "commerce/QmlCommerce.h"
|
#include "commerce/QmlCommerce.h"
|
||||||
|
|
||||||
#include "webbrowser/WebBrowserSuggestionsEngine.h"
|
#include "webbrowser/WebBrowserSuggestionsEngine.h"
|
||||||
|
#include <DesktopPreviewProvider.h>
|
||||||
|
|
||||||
// On Windows PC, NVidia Optimus laptop, we want to enable NVIDIA GPU
|
// On Windows PC, NVidia Optimus laptop, we want to enable NVIDIA GPU
|
||||||
// FIXME seems to be broken.
|
// FIXME seems to be broken.
|
||||||
|
@ -631,6 +632,7 @@ bool setupEssentials(int& argc, char** argv, bool runningMarkerExisted) {
|
||||||
DependencyManager::set<PointerScriptingInterface>();
|
DependencyManager::set<PointerScriptingInterface>();
|
||||||
DependencyManager::set<PickScriptingInterface>();
|
DependencyManager::set<PickScriptingInterface>();
|
||||||
DependencyManager::set<Cursor::Manager>();
|
DependencyManager::set<Cursor::Manager>();
|
||||||
|
DependencyManager::set<DesktopPreviewProvider>();
|
||||||
DependencyManager::set<AccountManager>(std::bind(&Application::getUserAgent, qApp));
|
DependencyManager::set<AccountManager>(std::bind(&Application::getUserAgent, qApp));
|
||||||
DependencyManager::set<StatTracker>();
|
DependencyManager::set<StatTracker>();
|
||||||
DependencyManager::set<ScriptEngines>(ScriptEngine::CLIENT_SCRIPT);
|
DependencyManager::set<ScriptEngines>(ScriptEngine::CLIENT_SCRIPT);
|
||||||
|
@ -5763,6 +5765,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEnginePointe
|
||||||
scriptEngine->registerFunction("OverlayWindow", QmlWindowClass::constructor);
|
scriptEngine->registerFunction("OverlayWindow", QmlWindowClass::constructor);
|
||||||
|
|
||||||
scriptEngine->registerGlobalObject("Menu", MenuScriptingInterface::getInstance());
|
scriptEngine->registerGlobalObject("Menu", MenuScriptingInterface::getInstance());
|
||||||
|
scriptEngine->registerGlobalObject("DesktopPreviewProvider", DependencyManager::get<DesktopPreviewProvider>().data());
|
||||||
scriptEngine->registerGlobalObject("Stats", Stats::getInstance());
|
scriptEngine->registerGlobalObject("Stats", Stats::getInstance());
|
||||||
scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance());
|
scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance());
|
||||||
scriptEngine->registerGlobalObject("Snapshot", DependencyManager::get<Snapshot>().data());
|
scriptEngine->registerGlobalObject("Snapshot", DependencyManager::get<Snapshot>().data());
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
#include "../Logging.h"
|
#include "../Logging.h"
|
||||||
#include "../CompositorHelper.h"
|
#include "../CompositorHelper.h"
|
||||||
|
|
||||||
|
#include "DesktopPreviewProvider.h"
|
||||||
#include "render-utils/hmd_ui_vert.h"
|
#include "render-utils/hmd_ui_vert.h"
|
||||||
#include "render-utils/hmd_ui_frag.h"
|
#include "render-utils/hmd_ui_frag.h"
|
||||||
|
|
||||||
|
@ -254,17 +255,9 @@ void HmdDisplayPlugin::internalPresent() {
|
||||||
swapBuffers();
|
swapBuffers();
|
||||||
|
|
||||||
} else if (_clearPreviewFlag) {
|
} else if (_clearPreviewFlag) {
|
||||||
QImage image;
|
|
||||||
if (_vsyncEnabled) {
|
|
||||||
image = QImage(PathUtils::resourcesPath() + "images/preview.png");
|
|
||||||
} else {
|
|
||||||
image = QImage(PathUtils::resourcesPath() + "images/preview-disabled.png");
|
|
||||||
}
|
|
||||||
|
|
||||||
image = image.mirrored();
|
QImage image = DesktopPreviewProvider::getInstance()->getPreviewDisabledImage(_vsyncEnabled);
|
||||||
image = image.convertToFormat(QImage::Format_RGBA8888);
|
_previewTexture = gpu::Texture::createStrict(
|
||||||
if (!_previewTexture) {
|
|
||||||
_previewTexture = gpu::Texture::createStrict(
|
|
||||||
gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA),
|
gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA),
|
||||||
image.width(), image.height(),
|
image.width(), image.height(),
|
||||||
gpu::Texture::MAX_NUM_MIPS,
|
gpu::Texture::MAX_NUM_MIPS,
|
||||||
|
@ -274,7 +267,6 @@ void HmdDisplayPlugin::internalPresent() {
|
||||||
_previewTexture->setStoredMipFormat(gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA));
|
_previewTexture->setStoredMipFormat(gpu::Element(gpu::VEC4, gpu::NUINT8, gpu::RGBA));
|
||||||
_previewTexture->assignStoredMip(0, image.byteCount(), image.constBits());
|
_previewTexture->assignStoredMip(0, image.byteCount(), image.constBits());
|
||||||
_previewTexture->setAutoGenerateMips(true);
|
_previewTexture->setAutoGenerateMips(true);
|
||||||
}
|
|
||||||
|
|
||||||
auto viewport = getViewportForSourceSize(uvec2(_previewTexture->getDimensions()));
|
auto viewport = getViewportForSourceSize(uvec2(_previewTexture->getDimensions()));
|
||||||
|
|
||||||
|
|
46
libraries/ui/src/DesktopPreviewProvider.cpp
Normal file
46
libraries/ui/src/DesktopPreviewProvider.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include "DesktopPreviewProvider.h"
|
||||||
|
#include <PathUtils.h>
|
||||||
|
#include <QMetaEnum>
|
||||||
|
#include <QtPlugin>
|
||||||
|
#include <cassert>
|
||||||
|
|
||||||
|
DesktopPreviewProvider::DesktopPreviewProvider() {
|
||||||
|
}
|
||||||
|
|
||||||
|
constexpr const char* DesktopPreviewProvider::imagePaths[];
|
||||||
|
|
||||||
|
QSharedPointer<DesktopPreviewProvider> DesktopPreviewProvider::getInstance() {
|
||||||
|
static QSharedPointer<DesktopPreviewProvider> instance = DependencyManager::get<DesktopPreviewProvider>();
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
QImage DesktopPreviewProvider::getPreviewDisabledImage(bool vsyncEnabled) const {
|
||||||
|
|
||||||
|
auto imageIndex = vsyncEnabled ? VSYNC : m_previewDisabledReason;
|
||||||
|
assert(imageIndex >= 0 && imageIndex <= VSYNC);
|
||||||
|
|
||||||
|
return !m_previewDisabled[imageIndex].isNull() ? m_previewDisabled[imageIndex] : loadPreviewImage(m_previewDisabled[imageIndex], PathUtils::resourcesPath() + imagePaths[imageIndex]);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DesktopPreviewProvider::setPreviewDisabledReason(PreviewDisabledReasons reason) {
|
||||||
|
if (reason == VSYNC) {
|
||||||
|
qDebug() << "Preview disabled reason can't be forced to " << QMetaEnum::fromType<DesktopPreviewProvider::PreviewDisabledReasons>().valueToKey(reason);
|
||||||
|
return; // Not settable via this interface, as VSYNC is controlled by HMD plugin..
|
||||||
|
}
|
||||||
|
|
||||||
|
m_previewDisabledReason = reason;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DesktopPreviewProvider::setPreviewDisabledReason(const QString& reasonString) {
|
||||||
|
PreviewDisabledReasons reason = USER;
|
||||||
|
bool ok = false;
|
||||||
|
|
||||||
|
reason = (PreviewDisabledReasons) QMetaEnum::fromType<DesktopPreviewProvider::PreviewDisabledReasons>().keyToValue(reasonString.toLatin1().data(), &ok);
|
||||||
|
if (ok) {
|
||||||
|
setPreviewDisabledReason(reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QImage& DesktopPreviewProvider::loadPreviewImage(QImage& image, const QString& path) const {
|
||||||
|
return image = QImage(path).mirrored().convertToFormat(QImage::Format_RGBA8888);
|
||||||
|
}
|
47
libraries/ui/src/DesktopPreviewProvider.h
Normal file
47
libraries/ui/src/DesktopPreviewProvider.h
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
//
|
||||||
|
// Created by Alexander Ivash on 2018/01/08
|
||||||
|
// Copyright 2018 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 <DependencyManager.h>
|
||||||
|
#include <QImage>
|
||||||
|
|
||||||
|
class DesktopPreviewProvider : public QObject, public Dependency {
|
||||||
|
SINGLETON_DEPENDENCY
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
DesktopPreviewProvider();
|
||||||
|
DesktopPreviewProvider(const DesktopPreviewProvider& other) = delete;
|
||||||
|
|
||||||
|
constexpr static const char* imagePaths[] = {
|
||||||
|
"images/preview-disabled.png", // USER
|
||||||
|
"images/preview-privacy.png", // SECURE_SCREEN
|
||||||
|
"images/preview.png", // VSYNC
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum PreviewDisabledReasons {
|
||||||
|
USER = 0,
|
||||||
|
SECURE_SCREEN,
|
||||||
|
VSYNC // Not settable via this interface, as VSYNC is controlled by HMD plugin..
|
||||||
|
};
|
||||||
|
Q_ENUM(PreviewDisabledReasons)
|
||||||
|
|
||||||
|
static QSharedPointer<DesktopPreviewProvider> getInstance();
|
||||||
|
|
||||||
|
QImage getPreviewDisabledImage(bool vsyncEnabled) const;
|
||||||
|
void setPreviewDisabledReason(PreviewDisabledReasons reason);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setPreviewDisabledReason(const QString& reason);
|
||||||
|
|
||||||
|
private:
|
||||||
|
QImage& loadPreviewImage(QImage& image, const QString& path) const;
|
||||||
|
|
||||||
|
PreviewDisabledReasons m_previewDisabledReason = { USER };
|
||||||
|
|
||||||
|
mutable QImage m_previewDisabled[3];
|
||||||
|
};
|
|
@ -562,9 +562,11 @@
|
||||||
break;
|
break;
|
||||||
case 'disableHmdPreview':
|
case 'disableHmdPreview':
|
||||||
isHmdPreviewDisabled = Menu.isOptionChecked("Disable Preview");
|
isHmdPreviewDisabled = Menu.isOptionChecked("Disable Preview");
|
||||||
|
DesktopPreviewProvider.setPreviewDisabledReason("SECURE_SCREEN");
|
||||||
Menu.setIsOptionChecked("Disable Preview", true);
|
Menu.setIsOptionChecked("Disable Preview", true);
|
||||||
break;
|
break;
|
||||||
case 'maybeEnableHmdPreview':
|
case 'maybeEnableHmdPreview':
|
||||||
|
DesktopPreviewProvider.setPreviewDisabledReason("USER");
|
||||||
Menu.setIsOptionChecked("Disable Preview", isHmdPreviewDisabled);
|
Menu.setIsOptionChecked("Disable Preview", isHmdPreviewDisabled);
|
||||||
break;
|
break;
|
||||||
case 'passphraseReset':
|
case 'passphraseReset':
|
||||||
|
@ -635,7 +637,11 @@
|
||||||
// -Called when the TabletScriptingInterface::screenChanged() signal is emitted. The "type" argument can be either the string
|
// -Called when the TabletScriptingInterface::screenChanged() signal is emitted. The "type" argument can be either the string
|
||||||
// value of "Home", "Web", "Menu", "QML", or "Closed". The "url" argument is only valid for Web and QML.
|
// value of "Home", "Web", "Menu", "QML", or "Closed". The "url" argument is only valid for Web and QML.
|
||||||
function onTabletScreenChanged(type, url) {
|
function onTabletScreenChanged(type, url) {
|
||||||
onWalletScreen = (type === "QML" && url === WALLET_QML_SOURCE);
|
var onWalletScreenNow = (type === "QML" && url === WALLET_QML_SOURCE);
|
||||||
|
if (!onWalletScreenNow && onWalletScreen) {
|
||||||
|
DesktopPreviewProvider.setPreviewDisabledReason("USER");
|
||||||
|
}
|
||||||
|
onWalletScreen = onWalletScreenNow;
|
||||||
wireEventBridge(onWalletScreen);
|
wireEventBridge(onWalletScreen);
|
||||||
// Change button to active when window is first openend, false otherwise.
|
// Change button to active when window is first openend, false otherwise.
|
||||||
if (button) {
|
if (button) {
|
||||||
|
|
Loading…
Reference in a new issue