mirror of
https://git.jami.net/savoirfairelinux/jami-client-qt.git
synced 2025-08-04 14:55:43 +02:00
misc: better dpi scaling performance
Gitlab: #302 On X11 based, https://bugreports.qt.io/browse/QTBUG-84082 Change-Id: Id775a6a31fc9f6f9493556fca458555c5962727e
This commit is contained in:
parent
2a9e624007
commit
637b7d6480
6 changed files with 111 additions and 34 deletions
|
@ -18,9 +18,10 @@
|
||||||
|
|
||||||
import QtQuick 2.14
|
import QtQuick 2.14
|
||||||
import QtQuick.Controls 2.14
|
import QtQuick.Controls 2.14
|
||||||
import QtQuick.Window 2.14
|
|
||||||
import net.jami.Adapters 1.0
|
import net.jami.Adapters 1.0
|
||||||
import net.jami.Constants 1.0
|
import net.jami.Constants 1.0
|
||||||
|
import net.jami.Models 1.0
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
id: root
|
id: root
|
||||||
|
@ -98,6 +99,16 @@ Item {
|
||||||
saveAvatarToConfig()
|
saveAvatarToConfig()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function reloadImageSource() {
|
||||||
|
var tempEnableAnimation = enableAnimation
|
||||||
|
var tempImageSource = rootImage.source
|
||||||
|
|
||||||
|
enableAnimation = false
|
||||||
|
rootImage.source = ""
|
||||||
|
rootImage.source = tempImageSource
|
||||||
|
enableAnimation = tempEnableAnimation
|
||||||
|
}
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: rootImage
|
id: rootImage
|
||||||
|
|
||||||
|
@ -208,4 +219,12 @@ Item {
|
||||||
radius: 30
|
radius: 30
|
||||||
color: JamiTheme.notificationRed
|
color: JamiTheme.notificationRed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: ScreenInfo
|
||||||
|
|
||||||
|
function onDevicePixelRatioChanged(){
|
||||||
|
reloadImageSource()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,8 @@
|
||||||
import QtQuick 2.14
|
import QtQuick 2.14
|
||||||
import QtQuick.Controls 2.14
|
import QtQuick.Controls 2.14
|
||||||
import QtGraphicalEffects 1.14
|
import QtGraphicalEffects 1.14
|
||||||
import QtQuick.Window 2.14
|
|
||||||
|
import net.jami.Models 1.0
|
||||||
|
|
||||||
Image {
|
Image {
|
||||||
id: root
|
id: root
|
||||||
|
@ -34,7 +35,6 @@ Image {
|
||||||
property string checkedSource
|
property string checkedSource
|
||||||
property string color: "transparent"
|
property string color: "transparent"
|
||||||
|
|
||||||
property real pixelDensity: Screen.pixelDensity
|
|
||||||
property bool isSvg: {
|
property bool isSvg: {
|
||||||
var match = /[^.]+$/.exec(source)
|
var match = /[^.]+$/.exec(source)
|
||||||
return match !== null && match[0] === 'svg'
|
return match !== null && match[0] === 'svg'
|
||||||
|
@ -62,12 +62,20 @@ Image {
|
||||||
|
|
||||||
function setSourceSize() {
|
function setSourceSize() {
|
||||||
if (isSvg) {
|
if (isSvg) {
|
||||||
sourceSize.width = width
|
sourceSize = Qt.size(0, 0)
|
||||||
sourceSize.height = height
|
sourceSize = Qt.size(width, height)
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
sourceSize = undefined
|
sourceSize = undefined
|
||||||
}
|
}
|
||||||
|
|
||||||
onPixelDensityChanged: setSourceSize()
|
Connections {
|
||||||
|
target: ScreenInfo
|
||||||
|
|
||||||
|
function onDevicePixelRatioChanged(){
|
||||||
|
setSourceSize()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Component.onCompleted: setSourceSize()
|
Component.onCompleted: setSourceSize()
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,6 @@
|
||||||
#include <QFontDatabase>
|
#include <QFontDatabase>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QQmlContext>
|
#include <QQmlContext>
|
||||||
#include <QWindow>
|
|
||||||
|
|
||||||
#include <locale.h>
|
#include <locale.h>
|
||||||
|
|
||||||
|
@ -120,6 +119,29 @@ fileDebug(QFile* debugFile)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ScreenInfo::setCurrentFocusWindow(QWindow* window)
|
||||||
|
{
|
||||||
|
if (window && !currentFocusWindow_) {
|
||||||
|
currentFocusWindow_ = window;
|
||||||
|
setDevicePixelRatio(currentFocusWindow_->screen()->devicePixelRatio());
|
||||||
|
|
||||||
|
disconnect(devicePixelRatioConnection_);
|
||||||
|
disconnect(currentFocusWindowScreenConnection_);
|
||||||
|
|
||||||
|
currentFocusWindowScreenConnection_
|
||||||
|
= connect(currentFocusWindow_, &QWindow::screenChanged, [this] {
|
||||||
|
currentFocusWindowScreen_ = currentFocusWindow_->screen();
|
||||||
|
setDevicePixelRatio(currentFocusWindowScreen_->devicePixelRatio());
|
||||||
|
|
||||||
|
devicePixelRatioConnection_ = connect(
|
||||||
|
currentFocusWindowScreen_, &QScreen::physicalDotsPerInchChanged, [this] {
|
||||||
|
setDevicePixelRatio(currentFocusWindowScreen_->devicePixelRatio());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
MainApplication::MainApplication(int& argc, char** argv)
|
MainApplication::MainApplication(int& argc, char** argv)
|
||||||
: QApplication(argc, argv)
|
: QApplication(argc, argv)
|
||||||
, engine_(new QQmlApplicationEngine())
|
, engine_(new QQmlApplicationEngine())
|
||||||
|
@ -185,11 +207,14 @@ MainApplication::init()
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
connect(connectivityMonitor_, &ConnectivityMonitor::connectivityChanged, [] {
|
connect(connectivityMonitor_, &ConnectivityMonitor::connectivityChanged, [] {
|
||||||
LRCInstance::connectivityChanged();
|
LRCInstance::connectivityChanged();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
connect(this, &QGuiApplication::focusWindowChanged, [this] {
|
||||||
|
screenInfo_.setCurrentFocusWindow(this->focusWindow());
|
||||||
|
});
|
||||||
|
|
||||||
QObject::connect(
|
QObject::connect(
|
||||||
&LRCInstance::instance(),
|
&LRCInstance::instance(),
|
||||||
&LRCInstance::quitEngineRequested,
|
&LRCInstance::quitEngineRequested,
|
||||||
|
@ -241,37 +266,27 @@ MainApplication::loadTranslations()
|
||||||
QTranslator* lrcTranslator_lang = new QTranslator(this);
|
QTranslator* lrcTranslator_lang = new QTranslator(this);
|
||||||
QTranslator* lrcTranslator_name = new QTranslator(this);
|
QTranslator* lrcTranslator_name = new QTranslator(this);
|
||||||
if (locale_name != locale_lang) {
|
if (locale_name != locale_lang) {
|
||||||
if (lrcTranslator_lang->load(appDir
|
if (lrcTranslator_lang->load(appDir + QDir::separator() + "libringclient" + QDir::separator()
|
||||||
+ QDir::separator() + "libringclient"
|
+ "translations" + QDir::separator() + "lrc_" + locale_lang)) {
|
||||||
+ QDir::separator() + "translations"
|
|
||||||
+ QDir::separator() + "lrc_"
|
|
||||||
+ locale_lang)) {
|
|
||||||
installTranslator(lrcTranslator_lang);
|
installTranslator(lrcTranslator_lang);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (lrcTranslator_name->load(appDir
|
if (lrcTranslator_name->load(appDir + QDir::separator() + "libringclient" + QDir::separator()
|
||||||
+ QDir::separator() + "libringclient"
|
+ "translations" + QDir::separator() + "lrc_" + locale_name)) {
|
||||||
+ QDir::separator() + "translations"
|
|
||||||
+ QDir::separator() + "lrc_"
|
|
||||||
+ locale_name)) {
|
|
||||||
installTranslator(lrcTranslator_name);
|
installTranslator(lrcTranslator_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
QTranslator* mainTranslator_lang = new QTranslator(this);
|
QTranslator* mainTranslator_lang = new QTranslator(this);
|
||||||
QTranslator* mainTranslator_name = new QTranslator(this);
|
QTranslator* mainTranslator_name = new QTranslator(this);
|
||||||
if (locale_name != locale_lang) {
|
if (locale_name != locale_lang) {
|
||||||
if (mainTranslator_lang->load(appDir
|
if (mainTranslator_lang->load(appDir + QDir::separator() + "ring" + QDir::separator()
|
||||||
+ QDir::separator() + "ring"
|
+ "translations" + QDir::separator() + "ring_client_windows_"
|
||||||
+ QDir::separator() + "translations"
|
|
||||||
+ QDir::separator() + "ring_client_windows_"
|
|
||||||
+ locale_lang)) {
|
+ locale_lang)) {
|
||||||
installTranslator(mainTranslator_lang);
|
installTranslator(mainTranslator_lang);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (mainTranslator_name->load(appDir
|
if (mainTranslator_name->load(appDir + QDir::separator() + "ring" + QDir::separator()
|
||||||
+ QDir::separator() + "ring"
|
+ "translations" + QDir::separator() + "ring_client_windows_"
|
||||||
+ QDir::separator() + "translations"
|
|
||||||
+ QDir::separator() + "ring_client_windows_"
|
|
||||||
+ locale_name)) {
|
+ locale_name)) {
|
||||||
installTranslator(mainTranslator_name);
|
installTranslator(mainTranslator_name);
|
||||||
}
|
}
|
||||||
|
@ -381,6 +396,8 @@ MainApplication::initQmlEngine()
|
||||||
engine_->addImageProvider(QLatin1String("tintedPixmap"), new TintedButtonImageProvider());
|
engine_->addImageProvider(QLatin1String("tintedPixmap"), new TintedButtonImageProvider());
|
||||||
engine_->addImageProvider(QLatin1String("avatarImage"), new AvatarImageProvider());
|
engine_->addImageProvider(QLatin1String("avatarImage"), new AvatarImageProvider());
|
||||||
|
|
||||||
|
engine_->rootContext()->setContextProperty("ScreenInfo", &screenInfo_);
|
||||||
|
|
||||||
engine_->setObjectOwnership(&LRCInstance::avModel(), QQmlEngine::CppOwnership);
|
engine_->setObjectOwnership(&LRCInstance::avModel(), QQmlEngine::CppOwnership);
|
||||||
engine_->setObjectOwnership(&LRCInstance::pluginModel(), QQmlEngine::CppOwnership);
|
engine_->setObjectOwnership(&LRCInstance::pluginModel(), QQmlEngine::CppOwnership);
|
||||||
engine_->setObjectOwnership(LRCInstance::getUpdateManager(), QQmlEngine::CppOwnership);
|
engine_->setObjectOwnership(LRCInstance::getUpdateManager(), QQmlEngine::CppOwnership);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/*!
|
/*!
|
||||||
* Copyright (C) 2020 by Savoir-faire Linux
|
* Copyright (C) 2020 by Savoir-faire Linux
|
||||||
* Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>
|
* Author: Edric Ladent Milaret <edric.ladent-milaret@savoirfairelinux.com>
|
||||||
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
* Author: Andreas Traczyk <andreas.traczyk@savoirfairelinux.com>
|
||||||
|
@ -24,11 +24,42 @@
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QQmlApplicationEngine>
|
#include <QQmlApplicationEngine>
|
||||||
#include <QQmlEngine>
|
#include <QQmlEngine>
|
||||||
|
#include <QScreen>
|
||||||
|
#include <QWindow>
|
||||||
|
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
class ConnectivityMonitor;
|
class ConnectivityMonitor;
|
||||||
|
|
||||||
|
// Provides information about the screen the app is displayed on
|
||||||
|
class ScreenInfo : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_PROPERTY(double devicePixelRatio MEMBER devicePixelRatio_ NOTIFY devicePixelRatioChanged)
|
||||||
|
public:
|
||||||
|
void setCurrentFocusWindow(QWindow* window);
|
||||||
|
void setDevicePixelRatio(double ratio)
|
||||||
|
{
|
||||||
|
if (ratio != devicePixelRatio_) {
|
||||||
|
devicePixelRatio_ = ratio;
|
||||||
|
|
||||||
|
emit devicePixelRatioChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void devicePixelRatioChanged();
|
||||||
|
|
||||||
|
private:
|
||||||
|
double devicePixelRatio_ {0.0};
|
||||||
|
|
||||||
|
QMetaObject::Connection currentFocusWindowScreenConnection_;
|
||||||
|
QMetaObject::Connection devicePixelRatioConnection_;
|
||||||
|
|
||||||
|
QWindow* currentFocusWindow_ {nullptr};
|
||||||
|
QScreen* currentFocusWindowScreen_ {nullptr};
|
||||||
|
};
|
||||||
|
|
||||||
class MainApplication : public QApplication
|
class MainApplication : public QApplication
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -52,5 +83,7 @@ private:
|
||||||
private:
|
private:
|
||||||
QScopedPointer<QFile> debugFile_;
|
QScopedPointer<QFile> debugFile_;
|
||||||
QScopedPointer<QQmlApplicationEngine> engine_;
|
QScopedPointer<QQmlApplicationEngine> engine_;
|
||||||
ConnectivityMonitor* connectivityMonitor_;
|
ConnectivityMonitor* connectivityMonitor_ {nullptr};
|
||||||
|
|
||||||
|
ScreenInfo screenInfo_;
|
||||||
};
|
};
|
||||||
|
|
|
@ -49,8 +49,8 @@ Rectangle {
|
||||||
id: jamiLogoImage
|
id: jamiLogoImage
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignCenter
|
Layout.alignment: Qt.AlignCenter
|
||||||
Layout.preferredWidth: welcomePageColumnLayout.width
|
Layout.preferredWidth: Math.min(welcomePageColumnLayout.width, 330)
|
||||||
Layout.preferredHeight: 100
|
Layout.preferredHeight: Math.min(welcomePageColumnLayout.width / 3, 110)
|
||||||
Layout.bottomMargin: 10
|
Layout.bottomMargin: 10
|
||||||
|
|
||||||
smooth: true
|
smooth: true
|
||||||
|
|
|
@ -65,8 +65,8 @@ Rectangle {
|
||||||
id: welcomeLogo
|
id: welcomeLogo
|
||||||
|
|
||||||
Layout.alignment: Qt.AlignCenter
|
Layout.alignment: Qt.AlignCenter
|
||||||
Layout.preferredWidth: 300
|
Layout.preferredWidth: 330
|
||||||
Layout.preferredHeight: 150
|
Layout.preferredHeight: 110
|
||||||
|
|
||||||
smooth: true
|
smooth: true
|
||||||
antialiasing: true
|
antialiasing: true
|
||||||
|
|
Loading…
Add table
Reference in a new issue