Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions panels/dock/tray/plugins/display/displaysettingwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
// SPDX-License-Identifier: LGPL-3.0-or-later

#include "displaysettingwidget.h"
#include "settingbutton.h"

#include <QPushButton>
#include <QVBoxLayout>
Expand All @@ -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")
Expand Down
4 changes: 2 additions & 2 deletions panels/dock/tray/plugins/display/displaysettingwidget.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

#include <QWidget>

class QPushButton;
class SettingButton;
class BrightnessAdjWidget;

/*!
Expand All @@ -33,7 +33,7 @@ class DisplaySettingWidget : public QWidget

private:
BrightnessAdjWidget *m_brightnessAdjWidget; // 亮度调整
QPushButton *m_settingBtn; // 设置按钮
SettingButton *m_settingBtn; // 设置按钮
};


Expand Down
88 changes: 88 additions & 0 deletions panels/dock/tray/plugins/display/settingbutton.cpp
Original file line number Diff line number Diff line change
@@ -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 <QHBoxLayout>

#include <DFontSizeManager>
#include <DPaletteHelper>

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);
}
35 changes: 35 additions & 0 deletions panels/dock/tray/plugins/display/settingbutton.h
Original file line number Diff line number Diff line change
@@ -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 <QFrame>

#include <DLabel>

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