From 6d03b7872e922cbc3c2b5aaad328f88b11f451be Mon Sep 17 00:00:00 2001 From: zhaoyingzhen Date: Mon, 13 May 2024 13:49:55 +0800 Subject: [PATCH] fix: brightness-popup's setting button no blur effect and txt color has error fix brightness-popup's setting button no blur effect and txt color has error Log: fix brightness-popup's setting button no blur effect and txt color has error Issue: https://github.com/linuxdeepin/developer-center/issues/8470 Influence: brightness-popup's setting button --- .../plugins/display/displaysettingwidget.cpp | 5 +- .../plugins/display/displaysettingwidget.h | 4 +- .../tray/plugins/display/settingbutton.cpp | 88 +++++++++++++++++++ .../dock/tray/plugins/display/settingbutton.h | 35 ++++++++ 4 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 panels/dock/tray/plugins/display/settingbutton.cpp create mode 100644 panels/dock/tray/plugins/display/settingbutton.h diff --git a/panels/dock/tray/plugins/display/displaysettingwidget.cpp b/panels/dock/tray/plugins/display/displaysettingwidget.cpp index 432f2df32..954cb219b 100644 --- a/panels/dock/tray/plugins/display/displaysettingwidget.cpp +++ b/panels/dock/tray/plugins/display/displaysettingwidget.cpp @@ -4,6 +4,7 @@ // SPDX-License-Identifier: LGPL-3.0-or-later #include "displaysettingwidget.h" +#include "settingbutton.h" #include #include @@ -15,10 +16,10 @@ const int ItemSpacing = 10; DisplaySettingWidget::DisplaySettingWidget(BrightnessModel *model, QWidget *parent) : QWidget(parent) , m_brightnessAdjWidget(new BrightnessAdjWidget(model, this)) - , m_settingBtn(new QPushButton(tr("Display Settings"), this)) + , m_settingBtn(new SettingButton(tr("Display Settings"), this)) { initUI(); - connect(m_settingBtn, &QPushButton::clicked, this, [ this ](){ + connect(m_settingBtn, &SettingButton::clicked, this, [ this ](){ DDBusSender().service("org.deepin.dde.ControlCenter1") .path("/org/deepin/dde/ControlCenter1") .interface("org.deepin.dde.ControlCenter1") diff --git a/panels/dock/tray/plugins/display/displaysettingwidget.h b/panels/dock/tray/plugins/display/displaysettingwidget.h index 8425f32a3..22bd3eb47 100644 --- a/panels/dock/tray/plugins/display/displaysettingwidget.h +++ b/panels/dock/tray/plugins/display/displaysettingwidget.h @@ -10,7 +10,7 @@ #include -class QPushButton; +class SettingButton; class BrightnessAdjWidget; /*! @@ -33,7 +33,7 @@ class DisplaySettingWidget : public QWidget private: BrightnessAdjWidget *m_brightnessAdjWidget; // 亮度调整 - QPushButton *m_settingBtn; // 设置按钮 + SettingButton *m_settingBtn; // 设置按钮 }; diff --git a/panels/dock/tray/plugins/display/settingbutton.cpp b/panels/dock/tray/plugins/display/settingbutton.cpp new file mode 100644 index 000000000..b24a969c0 --- /dev/null +++ b/panels/dock/tray/plugins/display/settingbutton.cpp @@ -0,0 +1,88 @@ +// SPDX-FileCopyrightText: 2019 - 2024 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: LGPL-3.0-or-later + +#include "settingbutton.h" + +#include + +#include +#include + +DWIDGET_USE_NAMESPACE +DGUI_USE_NAMESPACE + +SettingButton::SettingButton(const QString &txt, QWidget *parent) + : QFrame(parent) + , m_hover(false) + , m_descriptionLabel(new DLabel(txt, this)) +{ + initUI(); +} + +SettingButton::~SettingButton() +{ + +} + +void SettingButton::initUI() +{ + setFixedHeight(36); + setForegroundRole(QPalette::BrightText); + + m_descriptionLabel->setElideMode(Qt::ElideRight); + m_descriptionLabel->setForegroundRole(foregroundRole()); + DFontSizeManager::instance()->bind(m_descriptionLabel, DFontSizeManager::T6); + + auto* layout = new QHBoxLayout(this); + layout->setContentsMargins(20, 0, 10, 0); + layout->addWidget(m_descriptionLabel); + layout->addStretch(); +} + +bool SettingButton::event(QEvent* e) +{ + switch (e->type()) { + case QEvent::Leave: + case QEvent::Enter: + m_hover = e->type() == QEvent::Enter; + update(); + break; + default: + break; + } + return QWidget::event(e); +} + +void SettingButton::paintEvent(QPaintEvent* e) +{ + Q_UNUSED(e) + QPainter p(this); + QPalette palette = this->palette(); + QColor bgColor, textColor; + if (m_hover) { + textColor = palette.highlightedText().color(); + bgColor = palette.color(QPalette::Active, QPalette::Highlight); + } else { + textColor = palette.brightText().color(); + bgColor = palette.brightText().color(); + bgColor.setAlphaF(0.05); + } + palette.setBrush(QPalette::BrightText, textColor); + m_descriptionLabel->setPalette(palette); + + p.setBrush(bgColor); + p.setRenderHint(QPainter::Antialiasing); + p.setPen(Qt::NoPen); + p.drawRoundedRect(rect(), 8, 8); + return QFrame::paintEvent(e); +} + +void SettingButton::mouseReleaseEvent(QMouseEvent* event) +{ + if (underMouse()) { + Q_EMIT clicked(); + } + + return QWidget::mouseReleaseEvent(event); +} \ No newline at end of file diff --git a/panels/dock/tray/plugins/display/settingbutton.h b/panels/dock/tray/plugins/display/settingbutton.h new file mode 100644 index 000000000..e05252acc --- /dev/null +++ b/panels/dock/tray/plugins/display/settingbutton.h @@ -0,0 +1,35 @@ +// SPDX-FileCopyrightText: 2019 - 2024 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: LGPL-3.0-or-later + +#ifndef SETTING_BUTTON_H +#define SETTING_BUTTON_H + +#include + +#include + +class SettingButton : public QFrame +{ + Q_OBJECT +public: + explicit SettingButton(const QString &txt, QWidget *parent = nullptr); + ~SettingButton(); + +signals: + void clicked(); + +protected: + bool event(QEvent* e) override; + void paintEvent(QPaintEvent* e) override; + void mouseReleaseEvent(QMouseEvent* event) override; + +private: + void initUI(); + +private: + bool m_hover; + Dtk::Widget::DLabel *m_descriptionLabel; +}; + +#endif