diff --git a/dock-network-plugin/quickpanelwidget.cpp b/dock-network-plugin/quickpanelwidget.cpp index e61f7c41..523277bd 100644 --- a/dock-network-plugin/quickpanelwidget.cpp +++ b/dock-network-plugin/quickpanelwidget.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd. +// Copyright (C) 2022 ~ 2026 Deepin Technology Co., Ltd. // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later @@ -68,6 +68,11 @@ QuickPanelWidget::QuickPanelWidget(QWidget *parent) , m_nameLabel(new DLabel(this)) , m_stateLabel(new DLabel(this)) , m_expandLabel(new DIconButton(this)) + , m_iconOpacityEffect(new QGraphicsOpacityEffect(this)) + , m_nameOpacityEffect(new QGraphicsOpacityEffect(this)) + , m_stateOpacityEffect(new QGraphicsOpacityEffect(this)) + , m_hover(false) + , m_active(true) { initUi(); initConnection(); @@ -98,7 +103,9 @@ void QuickPanelWidget::setDescription(const QString &description) void QuickPanelWidget::setActive(bool active) { + m_active = active; m_iconWidget->setBackgroundRole(active ? QPalette::Highlight : QPalette::BrightText); + m_iconOpacityEffect->setOpacity(active ? 1.0 : (m_hover ? kHoverOpacity : kNormalOpacity)); } void QuickPanelWidget::mousePressEvent(QMouseEvent *event) @@ -126,6 +133,26 @@ void QuickPanelWidget::mouseReleaseEvent(QMouseEvent *event) m_clickPoint = QPoint(); return QWidget::mouseReleaseEvent(event); } + +void QuickPanelWidget::enterEvent(QEnterEvent *event) +{ + m_hover = true; + m_nameOpacityEffect->setOpacity(kHoverOpacity); + m_stateOpacityEffect->setOpacity(kHoverOpacity); + if (!m_active) + m_iconOpacityEffect->setOpacity(kHoverOpacity); + QWidget::enterEvent(event); +} + +void QuickPanelWidget::leaveEvent(QEvent *event) +{ + m_hover = false; + m_nameOpacityEffect->setOpacity(kNormalOpacity); + m_stateOpacityEffect->setOpacity(kNormalOpacity); + if (!m_active) + m_iconOpacityEffect->setOpacity(kNormalOpacity); + QWidget::leaveEvent(event); +} void QuickPanelWidget::initUi() { @@ -154,6 +181,15 @@ void QuickPanelWidget::initUi() m_iconWidget->setCheckable(false); m_iconWidget->setFixedSize(QSize(40, 40)); m_iconWidget->setFocusPolicy(Qt::NoFocus); + + m_iconOpacityEffect->setOpacity(kNormalOpacity); + m_iconWidget->setGraphicsEffect(m_iconOpacityEffect); + + m_nameOpacityEffect->setOpacity(kNormalOpacity); + m_nameLabel->setGraphicsEffect(m_nameOpacityEffect); + + m_stateOpacityEffect->setOpacity(kNormalOpacity); + m_stateLabel->setGraphicsEffect(m_stateOpacityEffect); // 进入图标 m_expandLabel->setIcon(DStyle::standardIcon(style(), DStyle::SP_ArrowEnter)); diff --git a/dock-network-plugin/quickpanelwidget.h b/dock-network-plugin/quickpanelwidget.h index 77dd0a15..0b87b277 100644 --- a/dock-network-plugin/quickpanelwidget.h +++ b/dock-network-plugin/quickpanelwidget.h @@ -1,4 +1,4 @@ -// Copyright (C) 2022 ~ 2022 Deepin Technology Co., Ltd. +// Copyright (C) 2022 ~ 2026 Deepin Technology Co., Ltd. // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later @@ -10,6 +10,7 @@ #include #include +#include class QLabel; @@ -36,6 +37,8 @@ public Q_SLOTS: void iconClicked(); protected: + void enterEvent(QEnterEvent *event) override; + void leaveEvent(QEvent *event) override; void mousePressEvent(QMouseEvent *event) override; void mouseReleaseEvent(QMouseEvent *event) override; @@ -48,6 +51,13 @@ public Q_SLOTS: Dtk::Widget::DLabel *m_nameLabel; Dtk::Widget::DLabel *m_stateLabel; Dtk::Widget::DIconButton *m_expandLabel; + QGraphicsOpacityEffect *m_iconOpacityEffect; + QGraphicsOpacityEffect *m_nameOpacityEffect; + QGraphicsOpacityEffect *m_stateOpacityEffect; + bool m_hover; + bool m_active; + static constexpr qreal kNormalOpacity = 0.7; + static constexpr qreal kHoverOpacity = 1.0; QPoint m_clickPoint; }; } // namespace network diff --git a/dock-network-plugin/widget/jumpsettingbutton.cpp b/dock-network-plugin/widget/jumpsettingbutton.cpp index fa9a6501..69d70608 100644 --- a/dock-network-plugin/widget/jumpsettingbutton.cpp +++ b/dock-network-plugin/widget/jumpsettingbutton.cpp @@ -22,6 +22,8 @@ JumpSettingButton::JumpSettingButton(QWidget *parent) , m_autoShowPage(true) , m_iconButton(new CommonIconButton(this)) , m_descriptionLabel(new DLabel(this)) + , m_iconOpacityEffect(new QGraphicsOpacityEffect(this)) + , m_descOpacityEffect(new QGraphicsOpacityEffect(this)) { initUI(); } @@ -32,6 +34,8 @@ JumpSettingButton::JumpSettingButton(const QIcon& icon, const QString& descripti , m_autoShowPage(true) , m_iconButton(new CommonIconButton(this)) , m_descriptionLabel(new DLabel(this)) + , m_iconOpacityEffect(new QGraphicsOpacityEffect(this)) + , m_descOpacityEffect(new QGraphicsOpacityEffect(this)) { initUI(); @@ -59,6 +63,13 @@ void JumpSettingButton::initUI() layout->setContentsMargins(10, 0, 10, 0); layout->addWidget(m_iconButton); layout->addWidget(m_descriptionLabel); + + m_iconOpacityEffect->setOpacity(kNormalOpacity); + m_iconButton->setGraphicsEffect(m_iconOpacityEffect); + + m_descOpacityEffect->setOpacity(kNormalOpacity); + m_descriptionLabel->setGraphicsEffect(m_descOpacityEffect); + layout->addStretch(); } @@ -76,11 +87,16 @@ bool JumpSettingButton::event(QEvent* e) { switch (e->type()) { case QEvent::Leave: - case QEvent::Enter: + case QEvent::Enter: { m_hover = e->type() == QEvent::Enter; + qreal opacity = m_hover ? kHoverOpacity : kNormalOpacity; + m_iconOpacityEffect->setOpacity(opacity); + m_descOpacityEffect->setOpacity(opacity); update(); - break; + } break; case QEvent::Hide: + m_iconOpacityEffect->setOpacity(kNormalOpacity); + m_descOpacityEffect->setOpacity(kNormalOpacity); m_hover = false; update(); break; diff --git a/dock-network-plugin/widget/jumpsettingbutton.h b/dock-network-plugin/widget/jumpsettingbutton.h index 9a6ba9e4..4ed27f07 100644 --- a/dock-network-plugin/widget/jumpsettingbutton.h +++ b/dock-network-plugin/widget/jumpsettingbutton.h @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2019 - 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2019 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later @@ -9,6 +9,7 @@ #include #include +#include #include @@ -44,6 +45,10 @@ class JumpSettingButton : public QFrame QString m_secondPage; CommonIconButton *m_iconButton; Dtk::Widget::DLabel *m_descriptionLabel; + QGraphicsOpacityEffect *m_iconOpacityEffect; + QGraphicsOpacityEffect *m_descOpacityEffect; + static constexpr qreal kNormalOpacity = 0.7; + static constexpr qreal kHoverOpacity = 1.0; }; #endif diff --git a/net-view/window/private/netdelegate.cpp b/net-view/window/private/netdelegate.cpp index 82c4ac42..15c85c7c 100644 --- a/net-view/window/private/netdelegate.cpp +++ b/net-view/window/private/netdelegate.cpp @@ -28,6 +28,7 @@ #include #include #include +#include DWIDGET_USE_NAMESPACE @@ -891,7 +892,10 @@ NetItemWidget::NetItemWidget(NetItem *item, QWidget *parent) : NetWidget (item, parent) , m_portalLabel (nullptr) , m_isEnter(false) + , m_opacityEffect(new QGraphicsOpacityEffect(this)) { + m_opacityEffect->setOpacity(kNormalOpacity); + setGraphicsEffect(m_opacityEffect); } void NetItemWidget::removePasswordWidget() @@ -912,6 +916,8 @@ void NetItemWidget::removePasswordWidget() void NetItemWidget::setHover(bool isHover) { + m_opacityEffect->setOpacity(isHover ? kHoverOpacity : kNormalOpacity); + if (!m_portalLabel) return; diff --git a/net-view/window/private/netdelegate.h b/net-view/window/private/netdelegate.h index 4a19c168..c8f4deee 100644 --- a/net-view/window/private/netdelegate.h +++ b/net-view/window/private/netdelegate.h @@ -13,6 +13,7 @@ class QSortFilterProxyModel; class QVBoxLayout; +class QGraphicsOpacityEffect; class QLabel; namespace Dtk { @@ -181,6 +182,9 @@ protected slots: QLabel *m_portalLabel; NetType::NetManagerFlags m_flag; bool m_isEnter; + QGraphicsOpacityEffect *m_opacityEffect; + static constexpr qreal kNormalOpacity = 0.7; + static constexpr qreal kHoverOpacity = 1.0; }; class NetWirelessWidget : public NetItemWidget