mirror of
https://github.com/overte-org/overte.git
synced 2025-08-05 12:20:00 +02:00
Finally fix the grey security pic bug!
This commit is contained in:
parent
0870a083e3
commit
a411760f0c
5 changed files with 79 additions and 78 deletions
|
@ -13,8 +13,9 @@
|
||||||
#include "Ledger.h"
|
#include "Ledger.h"
|
||||||
#include "Wallet.h"
|
#include "Wallet.h"
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
#include "ui/ImageProvider.h"
|
#include "ui/SecurityImageProvider.h"
|
||||||
#include "scripting/HMDScriptingInterface.h"
|
#include "scripting/HMDScriptingInterface.h"
|
||||||
|
#include <ui/TabletScriptingInterface.h>
|
||||||
|
|
||||||
#include <PathUtils.h>
|
#include <PathUtils.h>
|
||||||
#include <OffscreenUi.h>
|
#include <OffscreenUi.h>
|
||||||
|
@ -607,11 +608,17 @@ QString Wallet::signWithKey(const QByteArray& text, const QString& key) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wallet::updateImageProvider() {
|
void Wallet::updateImageProvider() {
|
||||||
// inform the image provider. Note it doesn't matter which one you inform, as the
|
SecurityImageProvider* securityImageProvider;
|
||||||
// images are statics
|
|
||||||
auto engine = DependencyManager::get<OffscreenUi>()->getSurfaceContext()->engine();
|
// inform offscreenUI security image provider
|
||||||
auto imageProvider = reinterpret_cast<ImageProvider*>(engine->imageProvider(ImageProvider::PROVIDER_NAME));
|
QQmlEngine* engine = DependencyManager::get<OffscreenUi>()->getSurfaceContext()->engine();
|
||||||
imageProvider->setSecurityImage(_securityImage);
|
securityImageProvider = reinterpret_cast<SecurityImageProvider*>(engine->imageProvider(SecurityImageProvider::PROVIDER_NAME));
|
||||||
|
securityImageProvider->setSecurityImage(_securityImage);
|
||||||
|
|
||||||
|
// inform tablet security image provider
|
||||||
|
QQmlEngine* tabletEngine = DependencyManager::get<TabletScriptingInterface>()->getTablet("com.highfidelity.interface.tablet.system")->getTabletSurface()->getSurfaceContext()->engine();
|
||||||
|
securityImageProvider = reinterpret_cast<SecurityImageProvider*>(tabletEngine->imageProvider(SecurityImageProvider::PROVIDER_NAME));
|
||||||
|
securityImageProvider->setSecurityImage(_securityImage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Wallet::chooseSecurityImage(const QString& filename) {
|
void Wallet::chooseSecurityImage(const QString& filename) {
|
||||||
|
@ -651,6 +658,7 @@ bool Wallet::getSecurityImage() {
|
||||||
|
|
||||||
// if already decrypted, don't do it again
|
// if already decrypted, don't do it again
|
||||||
if (_securityImage) {
|
if (_securityImage) {
|
||||||
|
updateImageProvider();
|
||||||
emit securityImageResult(true);
|
emit securityImageResult(true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,59 +0,0 @@
|
||||||
//
|
|
||||||
// ImageProvider.cpp
|
|
||||||
// interface/src/ui
|
|
||||||
//
|
|
||||||
// Created by David Kelly on 8/23/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
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "ImageProvider.h"
|
|
||||||
|
|
||||||
#include <QReadLocker>
|
|
||||||
#include <QWriteLocker>
|
|
||||||
|
|
||||||
const QString ImageProvider::PROVIDER_NAME = "security";
|
|
||||||
QReadWriteLock ImageProvider::_rwLock;
|
|
||||||
QPixmap* ImageProvider::_securityImage = nullptr;
|
|
||||||
|
|
||||||
ImageProvider::~ImageProvider() {
|
|
||||||
QWriteLocker lock(&_rwLock);
|
|
||||||
if (_securityImage) {
|
|
||||||
delete _securityImage;
|
|
||||||
_securityImage = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ImageProvider::setSecurityImage(const QPixmap* pixmap) {
|
|
||||||
// no need to delete old one, that is managed by the wallet
|
|
||||||
QWriteLocker lock(&_rwLock);
|
|
||||||
if (_securityImage) {
|
|
||||||
delete _securityImage;
|
|
||||||
}
|
|
||||||
if (pixmap) {
|
|
||||||
_securityImage = new QPixmap(*pixmap);
|
|
||||||
} else {
|
|
||||||
_securityImage = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QPixmap ImageProvider::requestPixmap(const QString& id, QSize* size, const QSize& requestedSize) {
|
|
||||||
|
|
||||||
// adjust the internal pixmap to have the requested size
|
|
||||||
QReadLocker lock(&_rwLock);
|
|
||||||
if (id == "securityImage" && _securityImage) {
|
|
||||||
*size = _securityImage->size();
|
|
||||||
if (requestedSize.width() > 0 && requestedSize.height() > 0) {
|
|
||||||
return _securityImage->scaled(requestedSize.width(), requestedSize.height(), Qt::KeepAspectRatio);
|
|
||||||
} else {
|
|
||||||
return _securityImage->copy();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// otherwise just return a grey pixmap. This avoids annoying error messages in qml we would get
|
|
||||||
// when sending a 'null' pixmap (QPixmap())
|
|
||||||
QPixmap greyPixmap(200, 200);
|
|
||||||
greyPixmap.fill(QColor("darkGrey"));
|
|
||||||
return greyPixmap;
|
|
||||||
}
|
|
|
@ -48,7 +48,7 @@
|
||||||
#include <gl/Context.h>
|
#include <gl/Context.h>
|
||||||
#include <shared/ReadWriteLockable.h>
|
#include <shared/ReadWriteLockable.h>
|
||||||
|
|
||||||
#include "ImageProvider.h"
|
#include "SecurityImageProvider.h"
|
||||||
#include "types/FileTypeProfile.h"
|
#include "types/FileTypeProfile.h"
|
||||||
#include "types/HFWebEngineProfile.h"
|
#include "types/HFWebEngineProfile.h"
|
||||||
#include "types/SoundEffect.h"
|
#include "types/SoundEffect.h"
|
||||||
|
@ -233,8 +233,8 @@ void OffscreenQmlSurface::initializeEngine(QQmlEngine* engine) {
|
||||||
qmlRegisterType<SoundEffect>("Hifi", 1, 0, "SoundEffect");
|
qmlRegisterType<SoundEffect>("Hifi", 1, 0, "SoundEffect");
|
||||||
});
|
});
|
||||||
|
|
||||||
// register the pixmap image provider (used only for security image, for now)
|
// Register the pixmap Security Image Provider
|
||||||
engine->addImageProvider(ImageProvider::PROVIDER_NAME, new ImageProvider());
|
engine->addImageProvider(SecurityImageProvider::PROVIDER_NAME, new SecurityImageProvider());
|
||||||
|
|
||||||
engine->setNetworkAccessManagerFactory(new QmlNetworkAccessManagerFactory);
|
engine->setNetworkAccessManagerFactory(new QmlNetworkAccessManagerFactory);
|
||||||
auto importList = engine->importPathList();
|
auto importList = engine->importPathList();
|
||||||
|
@ -335,6 +335,7 @@ void OffscreenQmlSurface::onRootCreated() {
|
||||||
tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", this);
|
tabletScriptingInterface->setQmlTabletRoot("com.highfidelity.interface.tablet.system", this);
|
||||||
QObject* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system");
|
QObject* tablet = tabletScriptingInterface->getTablet("com.highfidelity.interface.tablet.system");
|
||||||
getSurfaceContext()->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership);
|
getSurfaceContext()->engine()->setObjectOwnership(tablet, QQmlEngine::CppOwnership);
|
||||||
|
getSurfaceContext()->engine()->addImageProvider(SecurityImageProvider::PROVIDER_NAME, new SecurityImageProvider());
|
||||||
}
|
}
|
||||||
QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection);
|
QMetaObject::invokeMethod(this, "forceQmlAudioOutputDeviceUpdate", Qt::QueuedConnection);
|
||||||
}
|
}
|
||||||
|
|
52
libraries/ui/src/ui/SecurityImageProvider.cpp
Normal file
52
libraries/ui/src/ui/SecurityImageProvider.cpp
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
//
|
||||||
|
// SecurityImageProvider.cpp
|
||||||
|
// interface/src/ui
|
||||||
|
//
|
||||||
|
// Created by David Kelly on 8/23/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
|
||||||
|
//
|
||||||
|
|
||||||
|
#include "SecurityImageProvider.h"
|
||||||
|
|
||||||
|
#include <QReadLocker>
|
||||||
|
#include <QWriteLocker>
|
||||||
|
|
||||||
|
const QString SecurityImageProvider::PROVIDER_NAME = "security";
|
||||||
|
|
||||||
|
SecurityImageProvider::~SecurityImageProvider() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void SecurityImageProvider::setSecurityImage(const QPixmap* pixmap) {
|
||||||
|
// no need to delete old one, that is managed by the wallet
|
||||||
|
QWriteLocker lock(&_rwLock);
|
||||||
|
|
||||||
|
if (pixmap) {
|
||||||
|
_securityImage = pixmap->copy();
|
||||||
|
} else {
|
||||||
|
QPixmap greyPixmap(200, 200);
|
||||||
|
greyPixmap.fill(QColor("darkGrey"));
|
||||||
|
_securityImage = greyPixmap.copy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QPixmap SecurityImageProvider::requestPixmap(const QString& id, QSize* size, const QSize& requestedSize) {
|
||||||
|
|
||||||
|
// adjust the internal pixmap to have the requested size
|
||||||
|
QReadLocker lock(&_rwLock);
|
||||||
|
if (id == "securityImage") {
|
||||||
|
*size = _securityImage.size();
|
||||||
|
if (requestedSize.width() > 0 && requestedSize.height() > 0) {
|
||||||
|
return _securityImage.scaled(requestedSize.width(), requestedSize.height(), Qt::KeepAspectRatio);
|
||||||
|
} else {
|
||||||
|
return _securityImage.copy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// otherwise just return a grey pixmap. This avoids annoying error messages in qml we would get
|
||||||
|
// when sending a 'null' pixmap (QPixmap())
|
||||||
|
QPixmap greyPixmap(200, 200);
|
||||||
|
greyPixmap.fill(QColor("darkGrey"));
|
||||||
|
return greyPixmap;
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// ImageProvider.h
|
// SecurityImageProvider.h
|
||||||
//
|
//
|
||||||
// Created by David Kelly on 2017/08/23
|
// Created by David Kelly on 2017/08/23
|
||||||
// Copyright 2017 High Fidelity, Inc.
|
// Copyright 2017 High Fidelity, Inc.
|
||||||
|
@ -9,26 +9,25 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
#ifndef hifi_ImageProvider_h
|
#ifndef hifi_SecurityImageProvider_h
|
||||||
#define hifi_ImageProvider_h
|
#define hifi_SecurityImageProvider_h
|
||||||
|
|
||||||
#include <QQuickImageProvider>
|
#include <QQuickImageProvider>
|
||||||
#include <QReadWriteLock>
|
#include <QReadWriteLock>
|
||||||
|
|
||||||
class ImageProvider: public QQuickImageProvider {
|
class SecurityImageProvider: public QQuickImageProvider {
|
||||||
public:
|
public:
|
||||||
static const QString PROVIDER_NAME;
|
static const QString PROVIDER_NAME;
|
||||||
|
|
||||||
ImageProvider() : QQuickImageProvider(QQuickImageProvider::Pixmap) {}
|
SecurityImageProvider() : QQuickImageProvider(QQuickImageProvider::Pixmap) {}
|
||||||
virtual ~ImageProvider();
|
virtual ~SecurityImageProvider();
|
||||||
QPixmap requestPixmap(const QString& id, QSize* size, const QSize& requestedSize) override;
|
QPixmap requestPixmap(const QString& id, QSize* size, const QSize& requestedSize) override;
|
||||||
|
|
||||||
void setSecurityImage(const QPixmap* pixmap);
|
void setSecurityImage(const QPixmap* pixmap);
|
||||||
protected:
|
protected:
|
||||||
static QReadWriteLock _rwLock;
|
QReadWriteLock _rwLock;
|
||||||
static QPixmap* _securityImage;
|
QPixmap _securityImage;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //hifi_ImageProvider_h
|
#endif //hifi_SecurityImageProvider_h
|
||||||
|
|
Loading…
Reference in a new issue