DtkGui
DTK Gui module
载入中...
搜索中...
未找到
dtreelandplatformwindowinterface.h
1// SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: LGPL-3.0-or-later
4
5#ifndef DTREELANDPLATFORMWINDOWINTERFACE_H
6#define DTREELANDPLATFORMWINDOWINTERFACE_H
7
8#include "dtkgui_global.h"
9#include <QColor>
10#include <QObject>
11#include <QtWaylandClient/private/qwaylandwindow_p.h>
12#include "private/dplatformwindowinterface_p.h"
13
14DGUI_BEGIN_NAMESPACE
16class DTreeLandPlatformWindowHelper : public QObject {
17 Q_OBJECT
18public:
19 static DTreeLandPlatformWindowHelper *get(QWindow *window);
21
22 enum Feature {
23 NoTitlebar = 1 << 0,
24 Radius = 1 << 1,
25 Blur = 1 << 2,
26 Border = 1 << 3,
27 Shadow = 1 << 4,
28 WindowEffect = 1 << 5,
29 };
30 Q_DECLARE_FLAGS(Features, Feature)
31
32 QWindow *window() const { return qobject_cast<QWindow *>(parent()); }
33 PersonalizationWindowContext *windowContext() const;
34
35 void setEnabledNoTitlebar(bool enable);
36 void setWindowRadius(int windowRadius);
37 void setBorderWidth(int borderWidth);
38 void setBorderColor(const QColor &borderColor);
39 void setShadowRadius(int shadowRadius);
40 void setShadowOffset(const QPoint &shadowOffset);
41 void setShadowColor(const QColor &shadowColor);
42 void setEnableBlurWindow(bool enableBlurWindow);
43 void setWindowEffect(DPlatformHandle::EffectScenes effectScene);
44 void setPlatformHandle(DPlatformHandle *handle);
45
46 bool isEnabledNoTitlebar() const { return m_noTitlebar; }
47 int windowRadius() const { return m_radius; }
48 int borderWidth() const { return m_borderWidth; }
49 QColor borderColor() const { return m_borderColor; }
50 int shadowRadius() const { return m_shadowRadius; }
51 QPoint shadowOffset() const { return m_shadowOffset; }
52 QColor shadowColor() const { return m_shadowColor; }
53 bool enableBlurWindow() const { return m_blur; }
54 DPlatformHandle::EffectScenes windowEffect() const { return m_effectScene; }
55
56private slots:
57 void onActiveChanged();
58 void onSurfaceCreated();
59 void onSurfaceDestroyed();
60 void applyPending();
61private:
62 explicit DTreeLandPlatformWindowHelper(QWindow *window);
63 bool eventFilter(QObject *watched, QEvent *event) override;
64 void initWaylandWindow();
65 void scheduleApply();
66
67 template<typename T>
68 void updateFeature(T &member, const T &value, Feature flag) {
69 member = value;
70 m_initialized |= flag;
71 m_dirty |= flag;
72 scheduleApply();
73 }
74
75private:
76 PersonalizationWindowContext *m_windowContext = nullptr;
77 static QMap<QWindow *, DTreeLandPlatformWindowHelper*> windowMap;
78 DPlatformHandle *m_platformHandle = nullptr;
79
80 bool m_noTitlebar = false;
81 bool m_blur = false;
82 int m_radius = 0;
83 int m_borderWidth = 0;
84 QColor m_borderColor;
85 int m_shadowRadius = 0;
86 QPoint m_shadowOffset;
87 QColor m_shadowColor;
88 DPlatformHandle::EffectScenes m_effectScene;
89 Features m_initialized;
90 Features m_dirty;
91 bool m_applyScheduled = false;
92};
93
95{
96 Q_OBJECT
97public:
98 DTreeLandPlatformWindowInterface(QWindow *window, DPlatformHandle *platformHandle, QObject *parent = nullptr);
100
101 void setEnabled(bool enabled) override;
102 bool isEnabled() const override;
103
104 bool isEnabledNoTitlebar() const override;
105 bool setEnabledNoTitlebar(bool enable) override;
106
107 int windowRadius() const override;
108 void setWindowRadius(int windowRadius) override;
109
110 int borderWidth() const override;
111 void setBorderWidth(int borderWidth) override;
112 QColor borderColor() const override;
113 void setBorderColor(const QColor &borderColor) override;
114 int shadowRadius() const override;
115 void setShadowRadius(int shadowRadius) override;
116 QPoint shadowOffset() const override;
117 void setShadowOffset(const QPoint &shadowOffset) override;
118 QColor shadowColor() const override;
119 void setShadowColor(const QColor &shadowColor) override;
120
121 bool enableBlurWindow() const override;
122 void setEnableBlurWindow(bool enableBlurWindow) override;
123
124 DPlatformHandle::EffectScene windowEffect() override;
125 void setWindowEffect(DPlatformHandle::EffectScenes effectScene) override;
126};
127
128DGUI_END_NAMESPACE
129
130#endif // DTREELANDPLATFORMWINDOWINTERFACE_H
一个和Qt dxcb平台插件交互的工具类.
Definition dplatformhandle.h:24
Definition dplatformwindowinterface_p.h:16
Definition dtreelandplatformwindowinterface.h:16
Definition dtreelandplatformwindowinterface.h:95
Definition personalizationwaylandclientextension.h:47
Definition main.cpp:22