9#include <phosphorzones_export.h>
41class PHOSPHORZONES_EXPORT
Layout :
public QObject
45 Q_PROPERTY(QUuid
id READ
id CONSTANT)
46 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
47 Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged)
48 Q_PROPERTY(
int zonePadding READ zonePadding WRITE setZonePadding NOTIFY zonePaddingChanged)
49 Q_PROPERTY(
int outerGap READ outerGap WRITE setOuterGap NOTIFY outerGapChanged)
50 Q_PROPERTY(
bool hasZonePaddingOverride READ hasZonePaddingOverride NOTIFY zonePaddingChanged)
51 Q_PROPERTY(
bool hasOuterGapOverride READ hasOuterGapOverride NOTIFY outerGapChanged)
52 Q_PROPERTY(
bool usePerSideOuterGap READ usePerSideOuterGap WRITE setUsePerSideOuterGap NOTIFY outerGapChanged)
53 Q_PROPERTY(
int outerGapTop READ outerGapTop WRITE setOuterGapTop NOTIFY outerGapChanged)
54 Q_PROPERTY(
int outerGapBottom READ outerGapBottom WRITE setOuterGapBottom NOTIFY outerGapChanged)
55 Q_PROPERTY(
int outerGapLeft READ outerGapLeft WRITE setOuterGapLeft NOTIFY outerGapChanged)
56 Q_PROPERTY(
int outerGapRight READ outerGapRight WRITE setOuterGapRight NOTIFY outerGapChanged)
57 Q_PROPERTY(
bool hasPerSideOuterGapOverride READ hasPerSideOuterGapOverride NOTIFY outerGapChanged)
58 Q_PROPERTY(
bool showZoneNumbers READ showZoneNumbers WRITE setShowZoneNumbers NOTIFY showZoneNumbersChanged)
60 int overlayDisplayMode READ overlayDisplayMode WRITE setOverlayDisplayMode NOTIFY overlayDisplayModeChanged)
61 Q_PROPERTY(
bool hasOverlayDisplayModeOverride READ hasOverlayDisplayModeOverride NOTIFY overlayDisplayModeChanged)
62 Q_PROPERTY(
int zoneCount READ zoneCount NOTIFY zonesChanged)
63 Q_PROPERTY(QString sourcePath READ sourcePath WRITE setSourcePath NOTIFY sourcePathChanged)
64 Q_PROPERTY(
bool isSystemLayout READ isSystemLayout NOTIFY sourcePathChanged)
65 Q_PROPERTY(QString shaderId READ shaderId WRITE setShaderId NOTIFY shaderIdChanged)
66 Q_PROPERTY(QVariantMap shaderParams READ shaderParams WRITE setShaderParams NOTIFY shaderParamsChanged)
69 Q_PROPERTY(
bool autoAssign READ autoAssign WRITE setAutoAssign NOTIFY autoAssignChanged)
72 Q_PROPERTY(
bool useFullScreenGeometry READ useFullScreenGeometry WRITE setUseFullScreenGeometry NOTIFY
73 useFullScreenGeometryChanged)
77 int aspectRatioClass READ aspectRatioClassInt WRITE setAspectRatioClassInt NOTIFY aspectRatioClassChanged)
78 Q_PROPERTY(qreal minAspectRatio READ minAspectRatio WRITE setMinAspectRatio NOTIFY aspectRatioClassChanged)
79 Q_PROPERTY(qreal maxAspectRatio READ maxAspectRatio WRITE setMaxAspectRatio NOTIFY aspectRatioClassChanged)
83 bool hiddenFromSelector READ hiddenFromSelector WRITE setHiddenFromSelector NOTIFY hiddenFromSelectorChanged)
84 Q_PROPERTY(QStringList allowedScreens READ allowedScreens WRITE setAllowedScreens NOTIFY allowedScreensChanged)
85 Q_PROPERTY(QList<int> allowedDesktops READ allowedDesktops WRITE setAllowedDesktops NOTIFY allowedDesktopsChanged)
87 QStringList allowedActivities READ allowedActivities WRITE setAllowedActivities NOTIFY allowedActivitiesChanged)
90 explicit Layout(QObject* parent =
nullptr);
91 explicit Layout(
const QString& name, QObject* parent =
nullptr);
130 return m_description;
137 return m_zonePadding;
142 return m_zonePadding >= 0;
153 return m_outerGap >= 0;
160 return m_usePerSideOuterGap;
165 return m_outerGapTop;
170 return m_outerGapBottom;
175 return m_outerGapLeft;
180 return m_outerGapRight;
185 return m_usePerSideOuterGap
186 && (m_outerGapTop >= 0 || m_outerGapBottom >= 0 || m_outerGapLeft >= 0 || m_outerGapRight >= 0);
195 return {m_outerGapTop, m_outerGapBottom, m_outerGapLeft, m_outerGapRight};
200 return m_showZoneNumbers;
206 return m_overlayDisplayMode;
211 return m_overlayDisplayMode >= 0;
230 return m_systemSourcePath;
234 m_systemSourcePath = path;
238 return !m_systemSourcePath.isEmpty();
249 return m_shaderParams;
256 return m_aspectRatioClass;
261 return static_cast<int>(m_aspectRatioClass);
266 return m_minAspectRatio;
271 return m_maxAspectRatio;
285 return m_hiddenFromSelector;
290 return m_allowedScreens;
295 return m_allowedDesktops;
300 return m_allowedActivities;
314 return m_useFullScreenGeometry;
340 static constexpr int DefaultOrderUnset = 999;
345 return m_defaultOrder;
349 m_defaultOrder = order;
355 return m_zones.size();
374 Q_INVOKABLE
void moveZone(
int fromIndex,
int toIndex);
380 Q_INVOKABLE QVector<Zone*>
adjacentZones(
const QPointF& point, qreal threshold = 20)
const;
386 return m_lastRecalcGeometry;
390 m_lastRecalcGeometry = geom;
400 return screenGeometry != m_lastRecalcGeometry || m_zoneGeometryDirty;
408 m_lastRecalcGeometry = geom;
409 m_zoneGeometryDirty =
false;
494 void emitModifiedIfNotBatched();
502 void initFromJson(
const QJsonObject& json);
506 QString m_description;
507 int m_zonePadding = -1;
509 bool m_usePerSideOuterGap =
false;
510 int m_outerGapTop = -1;
511 int m_outerGapBottom = -1;
512 int m_outerGapLeft = -1;
513 int m_outerGapRight = -1;
514 bool m_showZoneNumbers =
true;
515 int m_overlayDisplayMode = -1;
516 QString m_sourcePath;
517 QString m_systemSourcePath;
518 int m_defaultOrder = DefaultOrderUnset;
519 QVector<Zone*> m_zones;
522 bool m_autoAssign =
false;
525 bool m_useFullScreenGeometry =
false;
529 QVariantMap m_shaderParams;
533 qreal m_minAspectRatio = 0.0;
534 qreal m_maxAspectRatio = 0.0;
537 bool m_hiddenFromSelector =
false;
538 QStringList m_allowedScreens;
539 QList<int> m_allowedDesktops;
540 QStringList m_allowedActivities;
545 mutable QRectF m_lastRecalcGeometry;
554 bool m_zoneGeometryDirty =
false;
559 bool m_isSystemLayout =
false;
562 bool m_dirty =
false;
563 int m_batchModifyDepth = 0;
Represents a collection of zones that form a layout.
Definition Layout.h:42
bool hasOuterGapOverride() const
Definition Layout.h:151
int overlayDisplayMode() const
Definition Layout.h:204
Zone * nearestZone(const QPointF &point, qreal maxDistance=-1) const
int zonePadding() const
Definition Layout.h:135
QList< int > allowedDesktops() const
Definition Layout.h:293
int outerGapLeft() const
Definition Layout.h:173
::PhosphorLayout::EdgeGaps rawOuterGaps() const
Raw per-side gap overrides.
Definition Layout.h:193
bool usePerSideOuterGap() const
Definition Layout.h:158
bool isSystemLayout() const
bool isDirty() const
Definition Layout.h:445
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:228
int defaultOrder() const
Definition Layout.h:343
void setShaderId(const QString &id)
void zoneRemoved(Zone *zone)
static Layout * createPriorityGridLayout(QObject *parent=nullptr)
int outerGapTop() const
Definition Layout.h:163
void allowedScreensChanged()
void aspectRatioClassChanged()
void setDefaultOrder(int order)
Definition Layout.h:347
bool hasFixedGeometryZones() const
Returns true if any zone uses fixed (pixel) geometry mode.
void setAspectRatioClass(::PhosphorLayout::AspectRatioClass cls)
void setOuterGapTop(int gap)
void clearOuterGapOverride()
void shaderParamsChanged()
void setLastRecalcGeometry(const QRectF &geom)
Definition Layout.h:388
void setUseFullScreenGeometry(bool enabled)
void setHiddenFromSelector(bool hidden)
qreal maxAspectRatio() const
Definition Layout.h:269
QRectF fixedZoneBoundingBox() const
Bounding box of all fixed-geometry zones in pixel coordinates, anchored at (0, 0).
void markDirty()
Definition Layout.h:449
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:140
Layout(const QString &name, QObject *parent=nullptr)
QVariantMap shaderParams() const
Definition Layout.h:247
void setZonePadding(int padding)
QString sourcePath() const
Definition Layout.h:216
void setAutoAssign(bool enabled)
Layout(const Layout &)=delete
QVector< Zone * > adjacentZones(const QPointF &point, qreal threshold=20) const
bool hasSystemOrigin() const
Definition Layout.h:236
static void setScreenIdResolver(ScreenIdResolver resolver)
int zoneCount() const
Definition Layout.h:353
void recalculateZoneGeometries(const QRectF &screenGeometry)
Recalculate every zone's absolute geometry against screenGeometry.
QJsonObject toJson() const
Zone * zoneByNumber(int number) const
void markRecalculated(const QRectF &geom)
Full-recalc bookkeeping for external appliers (the async worker path): stamps the rect AND clears the...
Definition Layout.h:406
void hiddenFromSelectorChanged()
bool hasPerSideOuterGapOverride() const
Definition Layout.h:183
bool hasOverlayDisplayModeOverride() const
Definition Layout.h:209
Zone * zone(int index) const
std::function< QString(const QString &)> ScreenIdResolver
Screen-id resolver.
Definition Layout.h:428
QStringList allowedActivities() const
Definition Layout.h:298
void setOverlayDisplayMode(int mode)
int outerGapRight() const
Definition Layout.h:178
int outerGap() const
Definition Layout.h:146
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:312
void setDescription(const QString &description)
bool hiddenFromSelector() const
Definition Layout.h:283
::PhosphorLayout::AspectRatioClass aspectRatioClass() const
Definition Layout.h:254
void setMinAspectRatio(qreal ratio)
Layout & operator=(const Layout &)=delete
QRectF lastRecalcGeometry() const
Definition Layout.h:384
void setSystemSourcePath(const QString &path)
Definition Layout.h:232
Zone * zoneAtPoint(const QPointF &point) const
QStringList allowedScreens() const
Definition Layout.h:288
bool showZoneNumbers() const
Definition Layout.h:198
void setAspectRatioClassInt(int cls)
void allowedDesktopsChanged()
void removeZone(Zone *zone)
void showZoneNumbersChanged()
void setAllowedScreens(const QStringList &screens)
Zone * zoneByName(const QString &name) const
First zone (in zone-number order) whose name equals name after trimming, compared case-insensitively.
bool needsRecalc(const QRectF &screenGeometry) const
The complete staleness predicate recalculateZoneGeometries() gates on: the screen rect changed OR the...
Definition Layout.h:398
QString shaderId() const
Definition Layout.h:242
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:122
QUuid id() const
Definition Layout.h:118
Layout * clone(QObject *parent=nullptr) const
Deep-copy this layout into a new, independently owned Layout.
void setMaxAspectRatio(qreal ratio)
void zonePaddingChanged()
QString description() const
Definition Layout.h:128
qreal minAspectRatio() const
Definition Layout.h:264
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:357
int outerGapBottom() const
Definition Layout.h:168
bool autoAssign() const
Definition Layout.h:305
void descriptionChanged()
void zoneAdded(Zone *zone)
void setShaderParams(const QVariantMap ¶ms)
void setShowZoneNumbers(bool show)
int aspectRatioClassInt() const
Definition Layout.h:259
static Layout * createColumnsLayout(int columns, QObject *parent=nullptr)
void clearDirty()
Definition Layout.h:453
Represents a single zone within a layout.
Definition Zone.h:44
AspectRatioClass
Screen aspect-ratio classification.
Definition AspectRatioClass.h:22
@ Any
Suitable for all aspect ratios (default)
Definition IWindowTrackingService.h:23
LayoutCategory
Category for layout type.
Definition Layout.h:28
@ Autotile
Dynamic auto-tiling algorithm.
@ Manual
Traditional zone-based layout.
Per-side edge gap values (resolved, non-negative pixel values)
Definition EdgeGaps.h:27