KWin
Loading...
Searching...
No Matches
tile.h
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2022 Marco Martin <mart@kde.org>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9
10#pragma once
11
12#include "effect/globals.h"
13#include <kwin_export.h>
14#include <utils/common.h>
15
16#include <QObject>
17#include <QRectF>
18
19namespace KWin
20{
21
22class TileManager;
23class Window;
24
25class KWIN_EXPORT Tile : public QObject
26{
27 Q_OBJECT
28 Q_PROPERTY(QRectF relativeGeometry READ relativeGeometry WRITE setRelativeGeometry NOTIFY relativeGeometryChanged)
29 Q_PROPERTY(QRectF absoluteGeometry READ absoluteGeometry NOTIFY absoluteGeometryChanged)
30 Q_PROPERTY(QRectF absoluteGeometryInScreen READ absoluteGeometryInScreen NOTIFY absoluteGeometryChanged)
31 Q_PROPERTY(qreal padding READ padding WRITE setPadding NOTIFY paddingChanged)
32 Q_PROPERTY(int positionInLayout READ row NOTIFY rowChanged)
33 Q_PROPERTY(Tile *parent READ parentTile CONSTANT)
34 Q_PROPERTY(QList<KWin::Tile *> tiles READ childTiles NOTIFY childTilesChanged)
35 Q_PROPERTY(QList<KWin::Window *> windows READ windows NOTIFY windowsChanged)
36 Q_PROPERTY(bool isLayout READ isLayout NOTIFY isLayoutChanged)
37 Q_PROPERTY(bool canBeRemoved READ canBeRemoved CONSTANT)
38
39public:
40 enum class LayoutDirection {
41 Floating = 0,
42 Horizontal = 1,
43 Vertical = 2
44 };
45 Q_ENUM(LayoutDirection)
46
47 explicit Tile(TileManager *tiling, Tile *parentItem = nullptr);
48 ~Tile();
49
50 void setGeometryFromWindow(const QRectF &geom);
51 void setGeometryFromAbsolute(const QRectF &geom);
52 virtual void setRelativeGeometry(const QRectF &geom);
53
54 virtual bool supportsResizeGravity(Gravity gravity);
55
59 QRectF relativeGeometry() const;
60
64 QRectF absoluteGeometry() const;
65
70 QRectF absoluteGeometryInScreen() const;
71
75 QRectF windowGeometry() const;
76
80 QRectF maximizedWindowGeometry() const;
81
82 bool isLayout() const;
83 bool canBeRemoved() const;
84
85 qreal padding() const;
86 void setPadding(qreal padding);
87
88 QuickTileMode quickTileMode() const;
89 void setQuickTileMode(QuickTileMode mode);
90
94 QList<Tile *> childTiles() const;
95
99 QList<Tile *> descendants() const;
100
104 void visitDescendants(std::function<void(const Tile *child)> callback) const;
105
106 void resizeFromGravity(Gravity gravity, int x_root, int y_root);
107
108 Q_INVOKABLE void resizeByPixels(qreal delta, Qt::Edge edge);
109
110 void addWindow(Window *window);
111 void removeWindow(Window *window);
112 QList<KWin::Window *> windows() const;
113
114 int row() const;
115 int childCount() const;
116 Tile *childTile(int row);
117 Tile *nextSibling() const;
118 Tile *previousSibling() const;
119 Tile *parentTile() const;
120 TileManager *manager() const;
121
122 static inline QSizeF minimumSize()
123 {
124 return s_minimumSize;
125 }
126
127 void destroyChild(Tile *tile);
128
129 template<class T>
130 T *createChildAt(const QRectF &relativeGeometry, int position)
131 {
132 T *t = new T(m_tiling, static_cast<T *>(this));
133 t->setRelativeGeometry(relativeGeometry);
134 insertChild(position, t);
135 return t;
136 }
137
138Q_SIGNALS:
142 void paddingChanged(qreal padding);
143 void rowChanged(int row);
144 void isLayoutChanged(bool isLayout);
146 void windowAdded(Window *window);
147 void windowRemoved(Window *window);
149
150protected:
151 void insertChild(int position, Tile *item);
152 void removeChild(Tile *child);
153
154private:
155 QList<Tile *> m_children;
156 QList<Window *> m_windows;
157 Tile *m_parentTile;
158
159 TileManager *m_tiling;
160 QRectF m_relativeGeometry;
161 static QSizeF s_minimumSize;
162 QuickTileMode m_quickTileMode = QuickTileFlag::None;
163 qreal m_padding = 4.0;
164};
165
166} // namespace KWin
T * createChildAt(const QRectF &relativeGeometry, int position)
Definition tile.h:130
static QSizeF minimumSize()
Definition tile.h:122
void isLayoutChanged(bool isLayout)
void paddingChanged(qreal padding)
void relativeGeometryChanged()
LayoutDirection
Definition tile.h:40
void windowRemoved(Window *window)
void absoluteGeometryChanged()
void childTilesChanged()
void rowChanged(int row)
void windowAdded(Window *window)
void windowsChanged()
void windowGeometryChanged()
Gravity
Definition globals.h:150