diff --git a/plugins/dde-dock/datetime/calendar/pagebutton.cpp b/plugins/dde-dock/datetime/calendar/pagebutton.cpp new file mode 100644 index 000000000..3748fd43f --- /dev/null +++ b/plugins/dde-dock/datetime/calendar/pagebutton.cpp @@ -0,0 +1,109 @@ +// SPDX-FileCopyrightText: 2019 - 2025 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: LGPL-3.0-or-later +#include "pagebutton.h" + +#include +#include +#include + +#include + +DGUI_USE_NAMESPACE +DWIDGET_USE_NAMESPACE + +PageButton::PageButton(QWidget *parent) + : QFrame(parent) + , m_hover(false) + , m_mousePress(false) + , m_iconButton(new CommonIconButton(this)) +{ + initUI(); +} + +PageButton::~PageButton() +{ +} + +void PageButton::initUI() +{ + setFixedSize(30, 30); + setForegroundRole(QPalette::BrightText); + m_iconButton->setFixedSize(12, 12); + m_iconButton->setForegroundRole(QPalette::BrightText); + + // 居中放置图标 + QHBoxLayout* hLayout = new QHBoxLayout(this); + hLayout->addWidget(m_iconButton, 0, Qt::AlignCenter); +} + +void PageButton::setIcon(const QIcon &icon) +{ + m_iconButton->setIcon(icon, Qt::black, Qt::white); +} + +bool PageButton::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 PageButton::paintEvent(QPaintEvent* e) +{ + Q_UNUSED(e) + QPainter p(this); + QPalette palette = this->palette(); + QColor bgColor, textColor; + if (m_mousePress) { + textColor = palette.highlight().color(); + bgColor = palette.windowText().color(); + bgColor.setAlphaF(0.15); + } else if(m_hover) { + textColor = palette.windowText().color(); + bgColor = palette.windowText().color(); + bgColor.setAlphaF(0.1); + } else { + textColor = palette.windowText().color(); + bgColor = DPaletteHelper::instance()->palette(this).color(DPalette::ItemBackground); + bgColor.setAlphaF(0); + } + palette.setBrush(QPalette::BrightText, textColor); + m_iconButton->setPalette(palette); + + p.setBrush(bgColor); + p.setRenderHint(QPainter::Antialiasing); + p.setPen(Qt::NoPen); + p.drawRoundedRect(rect(), 8, 8); + return QFrame::paintEvent(e); +} + +void PageButton::mousePressEvent(QMouseEvent *event) +{ + if(m_mousePress != true) { + m_mousePress = true; + update(); + } + QWidget::mousePressEvent(event); +} + +void PageButton::mouseReleaseEvent(QMouseEvent* event) +{ + if(m_mousePress == true) { + m_mousePress = false; + update(); + } + + if (underMouse() && this->rect().contains(event->pos())) { + Q_EMIT clicked(); + } + + QWidget::mouseReleaseEvent(event); +} \ No newline at end of file diff --git a/plugins/dde-dock/datetime/calendar/pagebutton.h b/plugins/dde-dock/datetime/calendar/pagebutton.h new file mode 100644 index 000000000..cbcb55af3 --- /dev/null +++ b/plugins/dde-dock/datetime/calendar/pagebutton.h @@ -0,0 +1,38 @@ +// SPDX-FileCopyrightText: 2019 - 2025 UnionTech Software Technology Co., Ltd. +// +// SPDX-License-Identifier: LGPL-3.0-or-later +#ifndef PAGEBUTTON_H +#define PAGEBUTTON_H + +#include "commoniconbutton.h" + +#include + +class PageButton : public QFrame +{ + Q_OBJECT +public: + explicit PageButton(QWidget *parent = nullptr); + ~PageButton(); + + void setIcon(const QIcon &icon); + +signals: + void clicked(); + +protected: + bool event(QEvent* e) override; + void paintEvent(QPaintEvent* e) override; + void mousePressEvent(QMouseEvent* event) override; + void mouseReleaseEvent(QMouseEvent* event) override; + +private: + void initUI(); + +private: + bool m_hover; + bool m_mousePress; + CommonIconButton *m_iconButton; +}; + +#endif // PAGEBUTTON_H diff --git a/plugins/dde-dock/datetime/calendar/sidebarcalendarwidget.cpp b/plugins/dde-dock/datetime/calendar/sidebarcalendarwidget.cpp index 030a328c9..8e1d5051f 100644 --- a/plugins/dde-dock/datetime/calendar/sidebarcalendarwidget.cpp +++ b/plugins/dde-dock/datetime/calendar/sidebarcalendarwidget.cpp @@ -6,6 +6,7 @@ #include "constants.h" #include "units.h" #include "jumpcalendarbutton.h" +#include "pagebutton.h" #include "regionFormat.h" #include @@ -27,8 +28,8 @@ SidebarCalendarWidget::SidebarCalendarWidget(RegionFormat *regionFormat, QWidget , m_keyWidget(new QWidget(this)) , m_keyLayout(new QGridLayout) , m_dateLabel(new QLabel(this)) - , m_nextPage(new DToolButton(this)) - , m_previousPage(new DToolButton(this)) + , m_nextPage(new PageButton(this)) + , m_previousPage(new PageButton(this)) , m_firstday(Qt::Sunday) , m_dateTitleWidget(new DateTitleWidget(this)) , m_weekLabel(new DLabel(this)) @@ -85,10 +86,6 @@ void SidebarCalendarWidget::initView() DFontSizeManager::instance()->bind(m_dateLabel, DFontSizeManager::T5, 65); m_nextPage->setIcon(DStyle().standardIcon(QStyle::SP_ArrowRight)); m_previousPage->setIcon(DStyle().standardIcon(QStyle::SP_ArrowLeft)); - m_nextPage->setIconSize(QSize(12, 12)); - m_previousPage->setIconSize(QSize(12, 12)); - m_nextPage->setFixedSize(30, 30); - m_previousPage->setFixedSize(30, 30); m_nextPage->setFocusPolicy(Qt::NoFocus); m_previousPage->setFocusPolicy(Qt::NoFocus); @@ -154,8 +151,8 @@ void SidebarCalendarWidget::initView() */ void SidebarCalendarWidget::initConnection() { - connect(m_nextPage, &QPushButton::clicked, this, &SidebarCalendarWidget::onNextPageClicked); - connect(m_previousPage, &QPushButton::clicked, this, &SidebarCalendarWidget::onPreviousPageClicked); + connect(m_nextPage, &PageButton::clicked, this, &SidebarCalendarWidget::onNextPageClicked); + connect(m_previousPage, &PageButton::clicked, this, &SidebarCalendarWidget::onPreviousPageClicked); connect(m_manager, &CalendarManager::sidebarFirstDayChanged, this, &SidebarCalendarWidget::onFirstDayChanged); // connect(m_manager, &CalendarManager::dateFormatChanged, this, &SidebarCalendarWidget::onDateFormatChanged); connect(m_regionFormat, &RegionFormat::shortDateFormatChanged, this, &SidebarCalendarWidget::onShortDateFormatChanged); diff --git a/plugins/dde-dock/datetime/calendar/sidebarcalendarwidget.h b/plugins/dde-dock/datetime/calendar/sidebarcalendarwidget.h index 7c91fc3ec..e817ae71b 100644 --- a/plugins/dde-dock/datetime/calendar/sidebarcalendarwidget.h +++ b/plugins/dde-dock/datetime/calendar/sidebarcalendarwidget.h @@ -24,6 +24,7 @@ class CalendarManager; class SidebarCalendarKeyButton; class JumpCalendarButton; class RegionFormat; +class PageButton; //小日历类 class SidebarCalendarWidget : public QWidget { @@ -99,8 +100,8 @@ private slots: QWidget* m_keyWidget; //日期按钮区域控件 QGridLayout* m_keyLayout; //按钮布局 QLabel* m_dateLabel; //头部日期显示label - DToolButton* m_nextPage; //下一页切换按键 - DToolButton* m_previousPage; //上一页切换按键 + PageButton* m_nextPage; //下一页切换按键 + PageButton* m_previousPage; //上一页切换按键 QList m_keyButtonList; //所有的日期按钮控件 int m_firstday; DateTitleWidget *m_dateTitleWidget;