9#include <phosphorzones_export.h>
39class PHOSPHORZONES_EXPORT
Layout :
public QObject
43 Q_PROPERTY(QUuid
id READ
id CONSTANT)
44 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
45 Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged)
46 Q_PROPERTY(
int zonePadding READ zonePadding WRITE setZonePadding NOTIFY zonePaddingChanged)
47 Q_PROPERTY(
int outerGap READ outerGap WRITE setOuterGap NOTIFY outerGapChanged)
48 Q_PROPERTY(
bool hasZonePaddingOverride READ hasZonePaddingOverride NOTIFY zonePaddingChanged)
49 Q_PROPERTY(
bool hasOuterGapOverride READ hasOuterGapOverride NOTIFY outerGapChanged)
50 Q_PROPERTY(
bool usePerSideOuterGap READ usePerSideOuterGap WRITE setUsePerSideOuterGap NOTIFY outerGapChanged)
51 Q_PROPERTY(
int outerGapTop READ outerGapTop WRITE setOuterGapTop NOTIFY outerGapChanged)
52 Q_PROPERTY(
int outerGapBottom READ outerGapBottom WRITE setOuterGapBottom NOTIFY outerGapChanged)
53 Q_PROPERTY(
int outerGapLeft READ outerGapLeft WRITE setOuterGapLeft NOTIFY outerGapChanged)
54 Q_PROPERTY(
int outerGapRight READ outerGapRight WRITE setOuterGapRight NOTIFY outerGapChanged)
55 Q_PROPERTY(
bool hasPerSideOuterGapOverride READ hasPerSideOuterGapOverride NOTIFY outerGapChanged)
56 Q_PROPERTY(
bool showZoneNumbers READ showZoneNumbers WRITE setShowZoneNumbers NOTIFY showZoneNumbersChanged)
58 int overlayDisplayMode READ overlayDisplayMode WRITE setOverlayDisplayMode NOTIFY overlayDisplayModeChanged)
59 Q_PROPERTY(
bool hasOverlayDisplayModeOverride READ hasOverlayDisplayModeOverride NOTIFY overlayDisplayModeChanged)
60 Q_PROPERTY(
int zoneCount READ zoneCount NOTIFY zonesChanged)
61 Q_PROPERTY(QString sourcePath READ sourcePath WRITE setSourcePath NOTIFY sourcePathChanged)
62 Q_PROPERTY(
bool isSystemLayout READ isSystemLayout NOTIFY sourcePathChanged)
63 Q_PROPERTY(QString shaderId READ shaderId WRITE setShaderId NOTIFY shaderIdChanged)
64 Q_PROPERTY(QVariantMap shaderParams READ shaderParams WRITE setShaderParams NOTIFY shaderParamsChanged)
67 Q_PROPERTY(
bool autoAssign READ autoAssign WRITE setAutoAssign NOTIFY autoAssignChanged)
70 Q_PROPERTY(
bool useFullScreenGeometry READ useFullScreenGeometry WRITE setUseFullScreenGeometry NOTIFY
71 useFullScreenGeometryChanged)
75 int aspectRatioClass READ aspectRatioClassInt WRITE setAspectRatioClassInt NOTIFY aspectRatioClassChanged)
76 Q_PROPERTY(qreal minAspectRatio READ minAspectRatio WRITE setMinAspectRatio NOTIFY aspectRatioClassChanged)
77 Q_PROPERTY(qreal maxAspectRatio READ maxAspectRatio WRITE setMaxAspectRatio NOTIFY aspectRatioClassChanged)
81 bool hiddenFromSelector READ hiddenFromSelector WRITE setHiddenFromSelector NOTIFY hiddenFromSelectorChanged)
82 Q_PROPERTY(QStringList allowedScreens READ allowedScreens WRITE setAllowedScreens NOTIFY allowedScreensChanged)
83 Q_PROPERTY(QList<int> allowedDesktops READ allowedDesktops WRITE setAllowedDesktops NOTIFY allowedDesktopsChanged)
85 QStringList allowedActivities READ allowedActivities WRITE setAllowedActivities NOTIFY allowedActivitiesChanged)
88 explicit Layout(QObject* parent =
nullptr);
89 explicit Layout(
const QString& name, QObject* parent =
nullptr);
108 return m_description;
115 return m_zonePadding;
120 return m_zonePadding >= 0;
131 return m_outerGap >= 0;
138 return m_usePerSideOuterGap;
143 return m_outerGapTop;
148 return m_outerGapBottom;
153 return m_outerGapLeft;
158 return m_outerGapRight;
163 return m_usePerSideOuterGap
164 && (m_outerGapTop >= 0 || m_outerGapBottom >= 0 || m_outerGapLeft >= 0 || m_outerGapRight >= 0);
173 return {m_outerGapTop, m_outerGapBottom, m_outerGapLeft, m_outerGapRight};
178 return m_showZoneNumbers;
184 return m_overlayDisplayMode;
189 return m_overlayDisplayMode >= 0;
208 return m_systemSourcePath;
212 m_systemSourcePath = path;
216 return !m_systemSourcePath.isEmpty();
227 return m_shaderParams;
234 return m_aspectRatioClass;
239 return static_cast<int>(m_aspectRatioClass);
244 return m_minAspectRatio;
249 return m_maxAspectRatio;
263 return m_hiddenFromSelector;
268 return m_allowedScreens;
273 return m_allowedDesktops;
278 return m_allowedActivities;
292 return m_useFullScreenGeometry;
315 return m_defaultOrder;
319 m_defaultOrder = order;
325 return m_zones.size();
339 Q_INVOKABLE
void moveZone(
int fromIndex,
int toIndex);
345 Q_INVOKABLE QVector<Zone*>
adjacentZones(
const QPointF& point, qreal threshold = 20)
const;
351 return m_lastRecalcGeometry;
355 m_lastRecalcGeometry = geom;
440 void emitModifiedIfNotBatched();
448 void initFromJson(
const QJsonObject& json);
452 QString m_description;
453 int m_zonePadding = -1;
455 bool m_usePerSideOuterGap =
false;
456 int m_outerGapTop = -1;
457 int m_outerGapBottom = -1;
458 int m_outerGapLeft = -1;
459 int m_outerGapRight = -1;
460 bool m_showZoneNumbers =
true;
461 int m_overlayDisplayMode = -1;
462 QString m_sourcePath;
463 QString m_systemSourcePath;
464 int m_defaultOrder = 999;
465 QVector<Zone*> m_zones;
468 bool m_autoAssign =
false;
471 bool m_useFullScreenGeometry =
false;
475 QVariantMap m_shaderParams;
479 qreal m_minAspectRatio = 0.0;
480 qreal m_maxAspectRatio = 0.0;
483 bool m_hiddenFromSelector =
false;
484 QStringList m_allowedScreens;
485 QList<int> m_allowedDesktops;
486 QStringList m_allowedActivities;
489 mutable QRectF m_lastRecalcGeometry;
494 bool m_isSystemLayout =
false;
497 bool m_dirty =
false;
498 int m_batchModifyDepth = 0;
Represents a collection of zones that form a layout.
Definition Layout.h:40
bool hasOuterGapOverride() const
Definition Layout.h:129
int overlayDisplayMode() const
Definition Layout.h:182
Zone * nearestZone(const QPointF &point, qreal maxDistance=-1) const
int zonePadding() const
Definition Layout.h:113
QList< int > allowedDesktops() const
Definition Layout.h:271
int outerGapLeft() const
Definition Layout.h:151
::PhosphorLayout::EdgeGaps rawOuterGaps() const
Raw per-side gap overrides.
Definition Layout.h:171
bool usePerSideOuterGap() const
Definition Layout.h:136
bool isSystemLayout() const
bool isDirty() const
Definition Layout.h:391
void moveZone(int fromIndex, int toIndex)
Zone * zoneById(const QUuid &id) const
void setSourcePath(const QString &path)
void setAllowedActivities(const QStringList &activities)
QString systemSourcePath() const
Definition Layout.h:206
int defaultOrder() const
Definition Layout.h:313
void setShaderId(const QString &id)
void zoneRemoved(Zone *zone)
static Layout * createPriorityGridLayout(QObject *parent=nullptr)
int outerGapTop() const
Definition Layout.h:141
void allowedScreensChanged()
void aspectRatioClassChanged()
void setDefaultOrder(int order)
Definition Layout.h:317
bool hasFixedGeometryZones() const
Returns true if any zone uses fixed (pixel) geometry mode.
Layout(const Layout &other)
void setAspectRatioClass(::PhosphorLayout::AspectRatioClass cls)
void setOuterGapTop(int gap)
void clearOuterGapOverride()
void shaderParamsChanged()
void setLastRecalcGeometry(const QRectF &geom)
Definition Layout.h:353
void setUseFullScreenGeometry(bool enabled)
void setHiddenFromSelector(bool hidden)
qreal maxAspectRatio() const
Definition Layout.h:247
QRectF fixedZoneBoundingBox() const
Bounding box of all fixed-geometry zones in pixel coordinates, anchored at (0, 0).
void markDirty()
Definition Layout.h:395
void overlayDisplayModeChanged()
QRectF fixedZoneReferenceGeometry() const
Reference geometry suitable for normalizing fixed-pixel zones to 0–1 relative coordinates.
void setOuterGap(int gap)
bool matchesAspectRatio(qreal screenAspectRatio) const
Check if this layout is suitable for a screen with the given aspect ratio.
void setUsePerSideOuterGap(bool enabled)
bool hasZonePaddingOverride() const
Definition Layout.h:118
Layout(const QString &name, QObject *parent=nullptr)
QVariantMap shaderParams() const
Definition Layout.h:225
void setZonePadding(int padding)
QString sourcePath() const
Definition Layout.h:194
void setAutoAssign(bool enabled)
QVector< Zone * > adjacentZones(const QPointF &point, qreal threshold=20) const
bool hasSystemOrigin() const
Definition Layout.h:214
static void setScreenIdResolver(ScreenIdResolver resolver)
int zoneCount() const
Definition Layout.h:323
void recalculateZoneGeometries(const QRectF &screenGeometry)
Recalculate every zone's absolute geometry against screenGeometry.
QJsonObject toJson() const
Zone * zoneByNumber(int number) const
void hiddenFromSelectorChanged()
bool hasPerSideOuterGapOverride() const
Definition Layout.h:161
bool hasOverlayDisplayModeOverride() const
Definition Layout.h:187
Zone * zone(int index) const
std::function< QString(const QString &)> ScreenIdResolver
Screen-id resolver.
Definition Layout.h:374
QStringList allowedActivities() const
Definition Layout.h:276
void setOverlayDisplayMode(int mode)
int outerGapRight() const
Definition Layout.h:156
int outerGap() const
Definition Layout.h:124
static Layout * createGridLayout(int columns, int rows, QObject *parent=nullptr)
QVector< Zone * > zonesInRect(const QRectF &rect) const
static Layout * createFocusLayout(QObject *parent=nullptr)
Layout(QObject *parent=nullptr)
bool useFullScreenGeometry() const
Definition Layout.h:290
void setDescription(const QString &description)
bool hiddenFromSelector() const
Definition Layout.h:261
::PhosphorLayout::AspectRatioClass aspectRatioClass() const
Definition Layout.h:232
void setMinAspectRatio(qreal ratio)
QRectF lastRecalcGeometry() const
Definition Layout.h:349
void setSystemSourcePath(const QString &path)
Definition Layout.h:210
Zone * zoneAtPoint(const QPointF &point) const
QStringList allowedScreens() const
Definition Layout.h:266
bool showZoneNumbers() const
Definition Layout.h:176
void setAspectRatioClassInt(int cls)
void allowedDesktopsChanged()
void removeZone(Zone *zone)
void showZoneNumbersChanged()
void setAllowedScreens(const QStringList &screens)
QString shaderId() const
Definition Layout.h:220
static ScreenIdResolver screenIdResolver()
Returns a copy of the currently-installed resolver (empty if none).
void allowedActivitiesChanged()
void setName(const QString &name)
void setOuterGapRight(int gap)
void clearOverlayDisplayModeOverride()
void setOuterGapBottom(int gap)
void setOuterGapLeft(int gap)
void clearZonePaddingOverride()
void removeZoneAt(int index)
QString name() const
Definition Layout.h:100
QUuid id() const
Definition Layout.h:96
void setMaxAspectRatio(qreal ratio)
void zonePaddingChanged()
QString description() const
Definition Layout.h:106
Layout & operator=(const Layout &other)
qreal minAspectRatio() const
Definition Layout.h:242
void useFullScreenGeometryChanged()
void setAllowedDesktops(const QList< int > &desktops)
static Layout * fromJson(const QJsonObject &json, QObject *parent=nullptr)
static Layout * createRowsLayout(int rows, QObject *parent=nullptr)
QVector< Zone * > zones() const
Definition Layout.h:327
int outerGapBottom() const
Definition Layout.h:146
bool autoAssign() const
Definition Layout.h:283
void descriptionChanged()
void zoneAdded(Zone *zone)
void setShaderParams(const QVariantMap ¶ms)
void setShowZoneNumbers(bool show)
int aspectRatioClassInt() const
Definition Layout.h:237
static Layout * createColumnsLayout(int columns, QObject *parent=nullptr)
void clearDirty()
Definition Layout.h:399
Represents a single zone within a layout.
Definition Zone.h:44
AspectRatioClass
Screen aspect-ratio classification.
Definition AspectRatioClass.h:21
@ Any
Suitable for all aspect ratios (default)
Definition IWindowTrackingService.h:23
LayoutCategory
Category for layout type.
Definition Layout.h:27
@ Autotile
Dynamic auto-tiling algorithm.
@ Manual
Traditional zone-based layout.
Per-side edge gap values (resolved, non-negative pixel values)
Definition EdgeGaps.h:27