diff --git a/resources/qml/Avatar.qml b/resources/qml/Avatar.qml index 54875f9f..b1007469 100644 --- a/resources/qml/Avatar.qml +++ b/resources/qml/Avatar.qml @@ -1,4 +1,5 @@ import QtQuick 2.6 +import QtQuick.Controls 2.3 import QtGraphicalEffects 1.0 Rectangle { @@ -10,15 +11,15 @@ Rectangle { property alias url: img.source property string displayName - Text { + Label { anchors.fill: parent text: chat.model.escapeEmoji(String.fromCodePoint(displayName.codePointAt(0))) textFormat: Text.RichText - color: colors.text font.pixelSize: avatar.height/2 verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter visible: img.status != Image.Ready + color: colors.brightText } Image { @@ -42,5 +43,5 @@ Rectangle { } } } - color: colors.base + color: colors.dark } diff --git a/resources/qml/TimelineRow.qml b/resources/qml/TimelineRow.qml index a9ae5f5c..e13cde28 100644 --- a/resources/qml/TimelineRow.qml +++ b/resources/qml/TimelineRow.qml @@ -54,6 +54,20 @@ MouseArea { } } + StatusIndicator { + state: model.state + Layout.alignment: Qt.AlignRight | Qt.AlignTop + Layout.preferredHeight: 16 + width: 16 + } + + EncryptionIndicator { + visible: model.isEncrypted + Layout.alignment: Qt.AlignRight | Qt.AlignTop + Layout.preferredHeight: 16 + width: 16 + } + ImageButton { visible: timelineSettings.buttons Layout.alignment: Qt.AlignRight | Qt.AlignTop @@ -87,21 +101,7 @@ MouseArea { } - StatusIndicator { - state: model.state - Layout.alignment: Qt.AlignRight | Qt.AlignTop - Layout.preferredHeight: 16 - width: 16 - } - - EncryptionIndicator { - visible: model.isEncrypted - Layout.alignment: Qt.AlignRight | Qt.AlignTop - Layout.preferredHeight: 16 - width: 16 - } - - Text { + Label { Layout.alignment: Qt.AlignRight | Qt.AlignTop text: model.timestamp.toLocaleTimeString("HH:mm") color: inactiveColors.text diff --git a/resources/qml/TimelineView.qml b/resources/qml/TimelineView.qml index 5612b04c..5b051235 100644 --- a/resources/qml/TimelineView.qml +++ b/resources/qml/TimelineView.qml @@ -9,12 +9,14 @@ import im.nheko 1.0 import "./delegates" -Item { +Page { property var colors: currentActivePalette property var systemInactive: SystemPalette { colorGroup: SystemPalette.Disabled } property var inactiveColors: currentInactivePalette ? currentInactivePalette : systemInactive property int avatarSize: 40 + palette: colors + Settings { id: settings category: "user" @@ -29,7 +31,6 @@ Item { Menu { id: messageContextMenu - palette: colors modal: true function show(eventId_, eventType_, showAt) { @@ -73,12 +74,11 @@ Item { anchors.fill: parent color: colors.window - Text { + Label { visible: !timelineManager.timeline && !timelineManager.isInitialSync anchors.centerIn: parent text: qsTr("No room open") font.pointSize: 24 - color: colors.windowText } BusyIndicator { @@ -206,14 +206,14 @@ Item { anchors.horizontalCenter: parent ? parent.horizontalCenter : undefined visible: section.includes(" ") text: chat.model.formatDateSeparator(modelData.timestamp) - color: colors.windowText + color: colors.brightText height: contentHeight * 1.2 width: contentWidth * 1.2 horizontalAlignment: Text.AlignHCenter background: Rectangle { radius: parent.height / 2 - color: colors.base + color: colors.dark } } Row { @@ -233,7 +233,7 @@ Item { } } - Text { + Label { id: userName text: chat.model.escapeEmoji(modelData.userName) color: timelineManager.userColor(modelData.userId, colors.window) @@ -268,7 +268,7 @@ Item { anchors.left: parent.left anchors.right: parent.right - Text { + Label { id: typingDisplay anchors.left: parent.left anchors.right: parent.right @@ -277,7 +277,6 @@ Item { text: chat.model ? chat.model.formatTypingUsers(chat.model.typingUsers, colors.window) : "" textFormat: Text.RichText - color: colors.windowText } Rectangle { diff --git a/resources/qml/delegates/FileMessage.qml b/resources/qml/delegates/FileMessage.qml index 2fe0a490..9a5300bb 100644 --- a/resources/qml/delegates/FileMessage.qml +++ b/resources/qml/delegates/FileMessage.qml @@ -3,7 +3,7 @@ import QtQuick.Layouts 1.2 Rectangle { radius: 10 - color: colors.base + color: colors.dark height: row.height + 24 width: parent ? parent.width : undefined diff --git a/resources/qml/delegates/NoticeMessage.qml b/resources/qml/delegates/NoticeMessage.qml index 12664fb5..62ada6d1 100644 --- a/resources/qml/delegates/NoticeMessage.qml +++ b/resources/qml/delegates/NoticeMessage.qml @@ -1,4 +1,4 @@ TextMessage { font.italic: true - color: inactiveColors.text + color: colors.buttonText } diff --git a/resources/qml/delegates/Pill.qml b/resources/qml/delegates/Pill.qml index b19d9a54..27985b58 100644 --- a/resources/qml/delegates/Pill.qml +++ b/resources/qml/delegates/Pill.qml @@ -2,13 +2,13 @@ import QtQuick 2.5 import QtQuick.Controls 2.1 Label { - color: inactiveColors.text + color: colors.brightText horizontalAlignment: Text.AlignHCenter height: contentHeight * 1.2 width: contentWidth * 1.2 background: Rectangle { radius: parent.height / 2 - color: colors.base + color: colors.dark } } diff --git a/resources/qml/delegates/PlayableMediaMessage.qml b/resources/qml/delegates/PlayableMediaMessage.qml index a4096864..20177a04 100644 --- a/resources/qml/delegates/PlayableMediaMessage.qml +++ b/resources/qml/delegates/PlayableMediaMessage.qml @@ -8,7 +8,7 @@ import im.nheko 1.0 Rectangle { id: bg radius: 10 - color: colors.base + color: colors.dark height: content.height + 24 width: parent ? parent.width : undefined diff --git a/resources/qtquickcontrols2.conf b/resources/qtquickcontrols2.conf new file mode 100644 index 00000000..d64f816e --- /dev/null +++ b/resources/qtquickcontrols2.conf @@ -0,0 +1,2 @@ +[Controls] +FallbackStyle=Fusion diff --git a/resources/res.qrc b/resources/res.qrc index 7080fdd6..c94f0f19 100644 --- a/resources/res.qrc +++ b/resources/res.qrc @@ -109,6 +109,8 @@ styles/nheko-dark.qss + qtquickcontrols2.conf + qml/TimelineView.qml qml/Avatar.qml qml/ImageButton.qml diff --git a/resources/styles/nheko-dark.qss b/resources/styles/nheko-dark.qss index c0d91f99..875a3828 100644 --- a/resources/styles/nheko-dark.qss +++ b/resources/styles/nheko-dark.qss @@ -31,7 +31,6 @@ UserMentionsWidget > * { } QLineEdit, -QListWidget, WelcomePage, LoginPage, RegisterPage, @@ -160,7 +159,7 @@ CommunitiesListItem { qproperty-backgroundColor: #2d3139; qproperty-avatarBgColor: #202228; - qproperty-avatarFgColor: white; + qproperty-avatarFgColor: palette(window); } LoadingIndicator { @@ -177,14 +176,6 @@ UserInfoWidget { border-bottom: 1px solid #202228; } -#UserSettingScrollWidget > QComboBox { - color: #202228; -} - -#UserSettingScrollWidget > QComboBox { - color: #202228; -} - Avatar { qproperty-textColor: white; qproperty-backgroundColor: #2d3139; @@ -246,6 +237,11 @@ Toggle { qproperty-trackColor: rgb(240, 240, 240); } +QListWidget { + color: #caccd1; + background-color: #202228; +} + SnackBar { qproperty-textColor: #caccd1; qproperty-bgColor: #202228; diff --git a/resources/styles/nheko.qss b/resources/styles/nheko.qss index 960809de..51e5d64e 100644 --- a/resources/styles/nheko.qss +++ b/resources/styles/nheko.qss @@ -183,6 +183,8 @@ TopSection { WelcomePage, LoginPage, +QComboBox, +QPushButton, RegisterPage { background-color: white; color: #333; @@ -221,6 +223,14 @@ TextField { qproperty-labelColor: #333; } +QListWidget, +TextInputWidget, +QTextEdit, +QLineEdit { + background-color: white; + color: #333; +} + TextInputWidget { border: none; border-top: 1px solid #dcdcdc; diff --git a/resources/styles/system.qss b/resources/styles/system.qss index 3ae3147a..dd2a90ef 100644 --- a/resources/styles/system.qss +++ b/resources/styles/system.qss @@ -70,7 +70,7 @@ FileItem { } RaisedButton { - qproperty-foregroundColor: palette(buttonText); + qproperty-foregroundColor: palette(button-text); } TextField { @@ -95,18 +95,18 @@ UserMentionsWidget { qproperty-titleColor: palette(text); qproperty-subtitleColor: palette(text); - qproperty-highlightedTitleColor: palette(highlightedtext); - qproperty-highlightedSubtitleColor: palette(highlightedtext); + qproperty-highlightedTitleColor: palette(highlighted-text); + qproperty-highlightedSubtitleColor: palette(highlighted-text); qproperty-hoverTitleColor: palette(highlightedtext); qproperty-hoverSubtitleColor: palette(highlightedtext); - qproperty-btnColor: palette(button); - qproperty-btnTextColor: palette(buttonText); + qproperty-btnColor: palette(dark); + qproperty-btnTextColor: palette(bright-text); qproperty-timestampColor: palette(text); - qproperty-highlightedTimestampColor: palette(highlightedtext); - qproperty-hoverTimestampColor: palette(highlightedtext); + qproperty-highlightedTimestampColor: palette(highlighted-text); + qproperty-hoverTimestampColor: palette(highlighted-text); qproperty-bubbleBgColor: palette(base); qproperty-bubbleFgColor: palette(text); diff --git a/src/Logging.cpp b/src/Logging.cpp index 5d64a630..b63c2e5a 100644 --- a/src/Logging.cpp +++ b/src/Logging.cpp @@ -25,11 +25,18 @@ qmlMessageHandler(QtMsgType type, const QMessageLogContext &context, const QStri const char *file = context.file ? context.file : ""; const char *function = context.function ? context.function : ""; - // Surpress binding wrning for now, as we can't set restore mode to keep compat with qt 5.10 - if (msg.endsWith( - "QML Binding: Not restoring previous value because restoreMode has not been set.This " - "behavior is deprecated.In Qt < 6.0 the default is Binding.RestoreBinding.In Qt >= " - "6.0 the default is Binding.RestoreBindingOrValue.")) + if ( + // Surpress binding wrning for now, as we can't set restore mode to keep compat with + // qt 5.10 + msg.endsWith( + "QML Binding: Not restoring previous value because restoreMode has not been set.This " + "behavior is deprecated.In Qt < 6.0 the default is Binding.RestoreBinding.In Qt >= " + "6.0 the default is Binding.RestoreBindingOrValue.") || + // The default style has the point size set. If you use pixel size anywhere, you get + // that warning, which is useless, since sometimes you need the pixel size to match the + // text to the size of the outer element for example. This is done in the avatar and + // without that you get one warning for every Avatar displayed, which is stupid! + msg.endsWith("Both point size and pixel size set. Using pixel size.")) return; switch (type) { diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index 6cd9a95c..3afff83b 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -103,12 +103,46 @@ UserSettings::applyTheme() { QFile stylefile; - if (theme() == "light") { + static QPalette original; + if (this->theme() == "light") { stylefile.setFileName(":/styles/styles/nheko.qss"); - } else if (theme() == "dark") { + QPalette lightActive( + /*windowText*/ QColor("#333"), + /*button*/ QColor("#333"), + /*light*/ QColor(0xef, 0xef, 0xef), + /*dark*/ QColor(220, 220, 220), + /*mid*/ QColor(0, 0xff, 0), // not used anywhere, this is for debugging + /*text*/ QColor("#333"), + /*bright_text*/ QColor("#333"), + /*base*/ QColor("white"), + /*window*/ QColor("white")); + lightActive.setColor(QPalette::Highlight, QColor("#38a3d8")); + lightActive.setColor(QPalette::ToolTipBase, lightActive.base().color()); + lightActive.setColor(QPalette::ToolTipText, lightActive.text().color()); + lightActive.setColor(QPalette::Link, QColor("#0077b5")); + lightActive.setColor(QPalette::ButtonText, QColor("gray")); + QApplication::setPalette(lightActive); + } else if (this->theme() == "dark") { stylefile.setFileName(":/styles/styles/nheko-dark.qss"); + QPalette darkActive( + /*windowText*/ QColor("#caccd1"), + /*button*/ QColor(0xff, 0xff, 0xff), + /*light*/ QColor("#caccd1"), + /*dark*/ QColor("#2d3139"), + /*mid*/ QColor(0, 0xff, 0), // not used anywhere, this is for debugging + /*text*/ QColor("#caccd1"), + /*bright_text*/ QColor(0xff, 0xff, 0xff), + /*base*/ QColor("#2d3139"), + /*window*/ QColor("#202228")); + darkActive.setColor(QPalette::Highlight, QColor("#38a3d8")); + darkActive.setColor(QPalette::ToolTipBase, darkActive.base().color()); + darkActive.setColor(QPalette::ToolTipText, darkActive.text().color()); + darkActive.setColor(QPalette::Link, QColor("#38a3d8")); + darkActive.setColor(QPalette::ButtonText, QColor(77, 77, 77)); + QApplication::setPalette(darkActive); } else { stylefile.setFileName(":/styles/styles/system.qss"); + QApplication::setPalette(original); } stylefile.open(QFile::ReadOnly); diff --git a/src/dialogs/UserProfile.cpp b/src/dialogs/UserProfile.cpp index f1dd77df..3415b127 100644 --- a/src/dialogs/UserProfile.cpp +++ b/src/dialogs/UserProfile.cpp @@ -142,8 +142,6 @@ UserProfile::UserProfile(QWidget *parent) devices_->setSelectionMode(QAbstractItemView::NoSelection); devices_->setAttribute(Qt::WA_MacShowFocusRect, 0); devices_->setSpacing(DEVICE_SPACING); - devices_->setMinimumHeight(devices_->sizeHint().height() * 1.2); - devices_->hide(); QFont descriptionLabelFont; descriptionLabelFont.setWeight(65); @@ -151,6 +149,7 @@ UserProfile::UserProfile(QWidget *parent) devicesLabel_ = new QLabel(tr("Devices").toUpper(), this); devicesLabel_->setFont(descriptionLabelFont); devicesLabel_->hide(); + devicesLabel_->setFixedSize(devicesLabel_->sizeHint()); auto okBtn = new QPushButton("OK", this); @@ -160,29 +159,24 @@ UserProfile::UserProfile(QWidget *parent) closeLayout->addWidget(okBtn); auto vlayout = new QVBoxLayout{this}; - vlayout->addWidget(avatar_); + vlayout->addWidget(avatar_, 0, Qt::AlignCenter | Qt::AlignTop); vlayout->addLayout(textLayout); vlayout->addLayout(btnLayout); - vlayout->addWidget(devicesLabel_, Qt::AlignLeft); - vlayout->addWidget(devices_); + vlayout->addWidget(devicesLabel_, 0, Qt::AlignLeft); + vlayout->addWidget(devices_, 1); vlayout->addLayout(closeLayout); - vlayout->addStretch(1); - - vlayout->setAlignment(avatar_, Qt::AlignCenter | Qt::AlignTop); - vlayout->setAlignment(userIdLabel_, Qt::AlignCenter | Qt::AlignTop); QFont largeFont; largeFont.setPointSizeF(largeFont.pointSizeF() * 1.5); setMinimumWidth( std::max(devices_->sizeHint().width() + 4 * WIDGET_MARGIN, conf::window::minModalWidth)); - setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); + setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); vlayout->setSpacing(WIDGET_SPACING); vlayout->setContentsMargins(WIDGET_MARGIN, TOP_WIDGET_MARGIN, WIDGET_MARGIN, WIDGET_MARGIN); - static auto ignored = qRegisterMetaType>(); - (void)ignored; + qRegisterMetaType>(); auto closeShortcut = new QShortcut(QKeySequence(QKeySequence::Cancel), this); connect(closeShortcut, &QShortcut::activated, this, &UserProfile::close); @@ -307,4 +301,5 @@ UserProfile::updateDeviceList(const QString &user_id, const std::vectorshow(); devices_->show(); + adjustSize(); } diff --git a/src/timeline/TimelineViewManager.cpp b/src/timeline/TimelineViewManager.cpp index eead46a2..794c13aa 100644 --- a/src/timeline/TimelineViewManager.cpp +++ b/src/timeline/TimelineViewManager.cpp @@ -22,36 +22,11 @@ TimelineViewManager::updateColorPalette() userColors.clear(); if (settings->theme() == "light") { - QPalette lightActive(/*windowText*/ QColor("#333"), - /*button*/ QColor("#333"), - /*light*/ QColor(), - /*dark*/ QColor(220, 220, 220), - /*mid*/ QColor(), - /*text*/ QColor("#333"), - /*bright_text*/ QColor(), - /*base*/ QColor(220, 220, 220), - /*window*/ QColor("white")); - lightActive.setColor(QPalette::ToolTipBase, lightActive.base().color()); - lightActive.setColor(QPalette::ToolTipText, lightActive.text().color()); - lightActive.setColor(QPalette::Link, QColor("#0077b5")); - view->rootContext()->setContextProperty("currentActivePalette", lightActive); - view->rootContext()->setContextProperty("currentInactivePalette", lightActive); + view->rootContext()->setContextProperty("currentActivePalette", QPalette()); + view->rootContext()->setContextProperty("currentInactivePalette", QPalette()); } else if (settings->theme() == "dark") { - QPalette darkActive(/*windowText*/ QColor("#caccd1"), - /*button*/ QColor("#caccd1"), - /*light*/ QColor(), - /*dark*/ QColor("#2d3139"), - /*mid*/ QColor(), - /*text*/ QColor("#caccd1"), - /*bright_text*/ QColor(), - /*base*/ QColor("#2d3139"), - /*window*/ QColor("#202228")); - darkActive.setColor(QPalette::Highlight, QColor("#e7e7e9")); - darkActive.setColor(QPalette::ToolTipBase, darkActive.base().color()); - darkActive.setColor(QPalette::ToolTipText, darkActive.text().color()); - darkActive.setColor(QPalette::Link, QColor("#38a3d8")); - view->rootContext()->setContextProperty("currentActivePalette", darkActive); - view->rootContext()->setContextProperty("currentInactivePalette", darkActive); + view->rootContext()->setContextProperty("currentActivePalette", QPalette()); + view->rootContext()->setContextProperty("currentInactivePalette", QPalette()); } else { view->rootContext()->setContextProperty("currentActivePalette", QPalette()); view->rootContext()->setContextProperty("currentInactivePalette", nullptr);