From 0edcc373698189f27ac24fb0985570ef2ecd8b0d Mon Sep 17 00:00:00 2001 From: Tsu Jan Date: Sun, 31 May 2020 18:04:48 +0430 Subject: [PATCH 1/4] Added an option to change window color MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It is in LXQt Appearance Configuration → Widget Style. Note: For the option to work, lxqt-qtplugin 0.15.1 should be installed; otherwise, it will have no effect. --- lxqt-config-appearance/CMakeLists.txt | 1 + lxqt-config-appearance/colorLabel.cpp | 65 ++++++++++++++++++++++++++ lxqt-config-appearance/colorLabel.h | 53 +++++++++++++++++++++ lxqt-config-appearance/styleconfig.cpp | 16 ++++++- lxqt-config-appearance/styleconfig.ui | 34 ++++++++++++++ 5 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 lxqt-config-appearance/colorLabel.cpp create mode 100644 lxqt-config-appearance/colorLabel.h diff --git a/lxqt-config-appearance/CMakeLists.txt b/lxqt-config-appearance/CMakeLists.txt index 184a8309..1ec118b7 100644 --- a/lxqt-config-appearance/CMakeLists.txt +++ b/lxqt-config-appearance/CMakeLists.txt @@ -27,6 +27,7 @@ set(CPP_FILES styleconfig.cpp fontconfigfile.cpp configothertoolkits.cpp + colorLabel.cpp ) set(UI_FILES diff --git a/lxqt-config-appearance/colorLabel.cpp b/lxqt-config-appearance/colorLabel.cpp new file mode 100644 index 00000000..a3e22df0 --- /dev/null +++ b/lxqt-config-appearance/colorLabel.cpp @@ -0,0 +1,65 @@ +/* BEGIN_COMMON_COPYRIGHT_HEADER + * (c)LGPL2+ + * + * LXQt - a lightweight, Qt based, desktop toolset + * https://lxqt.org/ + * + * Copyright: 2020 LXQt team + * + * This program or library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * END_COMMON_COPYRIGHT_HEADER */ + +#include "colorLabel.h" +#include + +ColorLabel::ColorLabel(QWidget* parent, Qt::WindowFlags f) + : QLabel(parent, f) +{ + setFrameStyle(QFrame::Panel | QFrame::Sunken); + setFixedWidth(100); + setToolTip(tr("Click to change color.")); +} + +ColorLabel::~ColorLabel() {} + +void ColorLabel::setColor(const QColor& color) +{ + if (!color.isValid()) + return; + stylesheetColor_ = color; + // ignore translucency + stylesheetColor_.setAlpha(255); + setStyleSheet(QStringLiteral("QLabel{background-color: rgb(%1, %2, %3);}") + .arg(color.red()).arg(color.green()).arg(color.blue())); +} + +QColor ColorLabel::getColor() const +{ + if (stylesheetColor_.isValid()) + return stylesheetColor_; // the window color may be different from the stylesheet color + return palette().color(QPalette::Window); +} + +void ColorLabel::mousePressEvent(QMouseEvent* /*event*/) { + QColor prevColor = getColor(); + QColor color = QColorDialog::getColor(prevColor, window(), tr("Select Color")); + if (color.isValid() && color != prevColor) + { + emit colorChanged(); + setColor(color); + } +} diff --git a/lxqt-config-appearance/colorLabel.h b/lxqt-config-appearance/colorLabel.h new file mode 100644 index 00000000..1ea1b62c --- /dev/null +++ b/lxqt-config-appearance/colorLabel.h @@ -0,0 +1,53 @@ +/* BEGIN_COMMON_COPYRIGHT_HEADER + * (c)LGPL2+ + * + * LXQt - a lightweight, Qt based, desktop toolset + * https://lxqt.org/ + * + * Copyright: 2020 LXQt team + * + * This program or library is free software; you can redistribute it + * and/or modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + + * You should have received a copy of the GNU Lesser General + * Public License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301 USA + * + * END_COMMON_COPYRIGHT_HEADER */ + +#ifndef COLORLABEL_H +#define COLORLABEL_H + +#include +#include +#include + +class ColorLabel : public QLabel { + Q_OBJECT + +public: + explicit ColorLabel(QWidget* parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags()); + ~ColorLabel(); + + void setColor(const QColor& color); + QColor getColor() const; + +signals: + void colorChanged(); + +protected: + void mousePressEvent(QMouseEvent* event); + +private: + QColor stylesheetColor_; +}; + +#endif // COLORLABEL_H diff --git a/lxqt-config-appearance/styleconfig.cpp b/lxqt-config-appearance/styleconfig.cpp index 73f336e7..ce10aff1 100644 --- a/lxqt-config-appearance/styleconfig.cpp +++ b/lxqt-config-appearance/styleconfig.cpp @@ -61,6 +61,7 @@ StyleConfig::StyleConfig(LXQt::Settings* settings, QSettings* qtSettings, LXQt:: connect(ui->gtk3ComboBox, QOverload::of(&QComboBox::activated), this, &StyleConfig::settingsChanged); connect(ui->toolButtonStyle, QOverload::of(&QComboBox::activated), this, &StyleConfig::settingsChanged); connect(ui->singleClickActivate, &QAbstractButton::clicked, this, &StyleConfig::settingsChanged); + connect(ui->winColorLabel, &ColorLabel::colorChanged, this, &StyleConfig::settingsChanged); } @@ -97,7 +98,6 @@ void StyleConfig::initControls() // activate item views with single click ui->singleClickActivate->setChecked( mSettings->value(QStringLiteral("single_click_activate"), false).toBool()); - // Fill Qt themes ui->qtComboBox->clear(); ui->qtComboBox->addItems(qtThemes); @@ -108,8 +108,16 @@ void StyleConfig::initControls() ui->gtk2ComboBox->setCurrentText(mConfigOtherToolKits->getGTKThemeFromRCFile(QStringLiteral("2.0"))); ui->gtk3ComboBox->setCurrentText(mConfigOtherToolKits->getGTKThemeFromRCFile(QStringLiteral("3.0"))); + mSettings->beginGroup(QLatin1String("Qt")); + // Qt style ui->qtComboBox->setCurrentText(mSettings->value(QStringLiteral("style")).toString()); + // Qt window color + QColor color; + color.setNamedColor(mSettings->value(QStringLiteral("window_color")).toString()); + if (!color.isValid()) + color = QGuiApplication::palette().color(QPalette::Active,QPalette::Window); + ui->winColorLabel->setColor(color); mSettings->endGroup(); update(); @@ -122,6 +130,12 @@ void StyleConfig::applyStyle() mQtSettings->beginGroup(QLatin1String("Qt")); if(mQtSettings->value(QStringLiteral("style")).toString() != themeName) mQtSettings->setValue(QStringLiteral("style"), themeName); + // Qt window color + QColor winColor = ui->winColorLabel->getColor(); + QColor oldWinColor; + oldWinColor.setNamedColor(mQtSettings->value(QStringLiteral("window_color")).toString()); + if (winColor != oldWinColor) + mQtSettings->setValue(QStringLiteral("window_color"), winColor.name()); mQtSettings->endGroup(); // single click setting diff --git a/lxqt-config-appearance/styleconfig.ui b/lxqt-config-appearance/styleconfig.ui index 15394024..6edbe470 100644 --- a/lxqt-config-appearance/styleconfig.ui +++ b/lxqt-config-appearance/styleconfig.ui @@ -146,8 +146,42 @@ Make sure 'xsettingsd' is installed to help GTK applications apply themes on the + + + + 5 + + + 10 + + + 10 + + + + + Window Color: + + + + + + + + + + + + + + + ColorLabel + QLabel +
colorLabel.h
+
+
From 99ecfabccceb827256b7ef32c75c6aa6434d2d9f Mon Sep 17 00:00:00 2001 From: Tsu Jan Date: Mon, 1 Jun 2020 23:46:49 +0430 Subject: [PATCH 2/4] Added a distinguishable border to the color label --- lxqt-config-appearance/colorLabel.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lxqt-config-appearance/colorLabel.cpp b/lxqt-config-appearance/colorLabel.cpp index a3e22df0..c3b69d8d 100644 --- a/lxqt-config-appearance/colorLabel.cpp +++ b/lxqt-config-appearance/colorLabel.cpp @@ -43,8 +43,10 @@ void ColorLabel::setColor(const QColor& color) stylesheetColor_ = color; // ignore translucency stylesheetColor_.setAlpha(255); - setStyleSheet(QStringLiteral("QLabel{background-color: rgb(%1, %2, %3);}") - .arg(color.red()).arg(color.green()).arg(color.blue())); + QString borderColor = qGray(stylesheetColor_.rgb()) < 255 / 2 + ? QStringLiteral("white") : QStringLiteral("black"); + setStyleSheet(QStringLiteral("QLabel{background-color: rgb(%1, %2, %3); border: 1px solid %4;}}") + .arg(color.red()).arg(color.green()).arg(color.blue()).arg(borderColor)); } QColor ColorLabel::getColor() const From 37f55579da91bfd78310a0e2c28c8551ad484414 Mon Sep 17 00:00:00 2001 From: Tsu Jan Date: Thu, 4 Jun 2020 15:47:22 +0430 Subject: [PATCH 3/4] Removed an extra curly bracket in stylesheet --- lxqt-config-appearance/colorLabel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxqt-config-appearance/colorLabel.cpp b/lxqt-config-appearance/colorLabel.cpp index c3b69d8d..de730baf 100644 --- a/lxqt-config-appearance/colorLabel.cpp +++ b/lxqt-config-appearance/colorLabel.cpp @@ -45,7 +45,7 @@ void ColorLabel::setColor(const QColor& color) stylesheetColor_.setAlpha(255); QString borderColor = qGray(stylesheetColor_.rgb()) < 255 / 2 ? QStringLiteral("white") : QStringLiteral("black"); - setStyleSheet(QStringLiteral("QLabel{background-color: rgb(%1, %2, %3); border: 1px solid %4;}}") + setStyleSheet(QStringLiteral("QLabel{background-color: rgb(%1, %2, %3); border: 1px solid %4;}") .arg(color.red()).arg(color.green()).arg(color.blue()).arg(borderColor)); } From 30cf8267ce4af08f9953b169f9d8109fb9437f7d Mon Sep 17 00:00:00 2001 From: Tsu Jan Date: Sat, 6 Jun 2020 14:15:53 +0430 Subject: [PATCH 4/4] A small improvement --- lxqt-config-appearance/colorLabel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lxqt-config-appearance/colorLabel.cpp b/lxqt-config-appearance/colorLabel.cpp index de730baf..98d01729 100644 --- a/lxqt-config-appearance/colorLabel.cpp +++ b/lxqt-config-appearance/colorLabel.cpp @@ -46,7 +46,7 @@ void ColorLabel::setColor(const QColor& color) QString borderColor = qGray(stylesheetColor_.rgb()) < 255 / 2 ? QStringLiteral("white") : QStringLiteral("black"); setStyleSheet(QStringLiteral("QLabel{background-color: rgb(%1, %2, %3); border: 1px solid %4;}") - .arg(color.red()).arg(color.green()).arg(color.blue()).arg(borderColor)); + .arg(QString::number(color.red()), QString::number(color.green()), QString::number(color.blue()), borderColor)); } QColor ColorLabel::getColor() const