Skip to content

Commit a9d2cf9

Browse files
committed
feat: add preview follows the system opacity.
as title. PMS-BUG-314371
1 parent 50edcae commit a9d2cf9

File tree

6 files changed

+79
-0
lines changed

6 files changed

+79
-0
lines changed

panels/dock/taskmanager/taskmanager.cpp

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,12 @@ bool TaskManager::init()
152152
m_windowFullscreen = isFullscreen;
153153
emit windowFullscreenChanged(isFullscreen);
154154
});
155+
156+
// 设置preview opacity
157+
DS_NAMESPACE::DAppletBridge appearanceBridge("org.deepin.ds.dde-appearance");
158+
auto appearanceApplet = appearanceBridge.applet();
159+
connect(appearanceApplet, SIGNAL(opacityChanged()), this, SLOT(onOpacityChanged()));
160+
155161
return true;
156162
}
157163

@@ -418,6 +424,24 @@ void TaskManager::activateWindow(uint32_t windowID)
418424
#endif
419425
}
420426

427+
void TaskManager::onOpacityChanged()
428+
{
429+
DS_NAMESPACE::DAppletBridge appearanceBridge("org.deepin.ds.dde-appearance");
430+
if (appearanceBridge.isValid()) {
431+
auto appearanceApplet = appearanceBridge.applet();
432+
QVariant opacityVariant = appearanceApplet->property("opacity");
433+
if (opacityVariant.isValid()) {
434+
double opacity = opacityVariant.toReal();
435+
if (m_windowMonitor) {
436+
auto x11Monitor = qobject_cast<X11WindowMonitor*>(m_windowMonitor.data());
437+
if (x11Monitor) {
438+
x11Monitor->setPreviewOpacity(opacity);
439+
}
440+
}
441+
}
442+
}
443+
}
444+
421445
D_APPLET_CLASS(TaskManager)
422446
}
423447

panels/dock/taskmanager/taskmanager.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ class TaskManager : public DS_NAMESPACE::DContainment, public AbstractTaskManage
101101
Q_INVOKABLE void setAppItemWindowIconGeometry(const QString& appid, QObject* relativePositionItem, const int& x1, const int& y1, const int& x2, const int& y2);
102102
Q_INVOKABLE void activateWindow(uint32_t windowID);
103103

104+
104105
Q_SIGNALS:
105106
void dataModelChanged();
106107
void windowSplitChanged();
@@ -109,6 +110,7 @@ class TaskManager : public DS_NAMESPACE::DContainment, public AbstractTaskManage
109110

110111
private Q_SLOTS:
111112
void handleWindowAdded(QPointer<AbstractWindow> window);
113+
void onOpacityChanged();
112114

113115
private:
114116
void loadDockedAppItems();

panels/dock/taskmanager/x11preview.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,7 @@ X11WindowPreviewContainer::X11WindowPreviewContainer(X11WindowMonitor* monitor,
401401
, m_isDockPreviewCount(0)
402402
, m_model(new AppItemWindowModel(this))
403403
, m_titleWidget(new QWidget())
404+
, m_systemOpacity(0.2)
404405
{
405406
m_hideTimer = new QTimer(this);
406407
m_hideTimer->setSingleShot(true);
@@ -518,6 +519,33 @@ void X11WindowPreviewContainer::resizeEvent(QResizeEvent *event)
518519
updatePosition();
519520
}
520521

522+
void X11WindowPreviewContainer::paintEvent(QPaintEvent *event)
523+
{
524+
Q_UNUSED(event)
525+
526+
QPainter painter(this);
527+
painter.setRenderHint(QPainter::Antialiasing);
528+
529+
QColor backgroundColor;
530+
531+
auto themeType = DGuiApplicationHelper::instance()->themeType();
532+
if (themeType == DGuiApplicationHelper::DarkType) {
533+
backgroundColor = QColor(0, 0, 0, static_cast<int>(255 * m_systemOpacity));
534+
} else {
535+
backgroundColor = QColor(255, 255, 255, static_cast<int>(255 * m_systemOpacity));
536+
}
537+
538+
painter.setBrush(backgroundColor);
539+
painter.setPen(Qt::NoPen);
540+
541+
// 获取圆角半径
542+
DStyleHelper dstyle(style());
543+
const int radius = dstyle.pixelMetric(DStyle::PM_FrameRadius);
544+
545+
// 绘制带圆角的背景
546+
painter.drawRoundedRect(rect(), radius, radius);
547+
}
548+
521549
void X11WindowPreviewContainer::updatePosition()
522550
{
523551
auto screenRect = m_baseWindow->screen()->geometry();
@@ -754,4 +782,16 @@ void X11WindowPreviewContainer::updatePreviewIconFromBase64(const QString &base6
754782
m_previewIcon->setPixmap(QIcon::fromTheme(m_previewItem->icon()).pixmap(PREVIEW_TITLE_HEIGHT, PREVIEW_TITLE_HEIGHT));
755783
}
756784
}
785+
786+
double X11WindowPreviewContainer::getOpacity() const
787+
{
788+
return m_systemOpacity;
789+
}
790+
791+
void X11WindowPreviewContainer::setOpacity(double opacity)
792+
{
793+
m_systemOpacity = opacity;
794+
update();
795+
}
796+
757797
}

panels/dock/taskmanager/x11preview.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ class X11WindowPreviewContainer: public DBlurEffectWidget
6868
explicit X11WindowPreviewContainer(X11WindowMonitor* monitor, QWidget *parent = nullptr);
6969
void showPreview(const QPointer<AppItem> &item, const QPointer<QWindow> &window, int32_t previewXoffset, int32_t previewYoffset, uint32_t direction);
7070
void hidePreView();
71+
double getOpacity() const;
72+
void setOpacity(double opacity);
7173

7274
protected:
7375
bool eventFilter(QObject *watched, QEvent *event) override;
@@ -76,6 +78,7 @@ class X11WindowPreviewContainer: public DBlurEffectWidget
7678
void showEvent(QShowEvent *event) override;
7779
void hideEvent(QHideEvent *event) override;
7880
void resizeEvent(QResizeEvent *event) override;
81+
void paintEvent(QPaintEvent *event) override;
7982

8083
private:
8184
inline void updatePreviewTitle(const QString& title);
@@ -114,6 +117,8 @@ private Q_SLOTS:
114117
QPointer<AppItem> m_previewItem;
115118

116119
QString m_previewTitleStr;
120+
121+
double m_systemOpacity;
117122
};
118123

119124
}

panels/dock/taskmanager/x11windowmonitor.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,13 @@ void X11WindowMonitor::cancelPreviewWindow()
141141
.call().waitForFinished();
142142
}
143143

144+
void X11WindowMonitor::setPreviewOpacity(double opacity)
145+
{
146+
if (!m_windowPreview.isNull()) {
147+
m_windowPreview->setOpacity(opacity);
148+
}
149+
}
150+
144151
void X11WindowMonitor::onWindowMapped(xcb_window_t xcb_window)
145152
{
146153
auto window = m_windows.value(xcb_window, nullptr);

panels/dock/taskmanager/x11windowmonitor.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class X11WindowMonitor : public AbstractWindowMonitor
4141
virtual void hideItemPreview() override;
4242
void previewWindow(uint32_t winId);
4343
void cancelPreviewWindow();
44+
void setPreviewOpacity(double opacity);
4445

4546
Q_SIGNALS:
4647
void windowMapped(xcb_window_t window);

0 commit comments

Comments
 (0)