Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
PhosphorLayout::LayoutPreview Struct Reference

Renderer-ready snapshot of one layout entry (manual zone layout OR autotile algorithm result). More...

#include <phosphor-layout-api/include/PhosphorLayoutApi/LayoutPreview.h>

Public Member Functions

bool isAutotile () const noexcept
 True when this preview backs an autotile algorithm (equivalent to algorithm.has_value()).
 
bool isValid () const noexcept
 Structural consistency check.
 

Public Attributes

QString id
 Stable identifier for this layout entry.
 
QString displayName
 Human-readable name for the picker UI (i18n'd by the source).
 
QString description
 Optional longer description shown in tooltips / detail views.
 
QVector< QRectF > zones
 Zone rectangles in 0.0–1.0 relative coordinates.
 
QVector< int > zoneNumbers
 Per-zone display label.
 
int zoneCount = 0
 Number of zones in the preview.
 
bool recommended = true
 True when the layout matches the rendering canvas's aspect ratio well enough to be a "recommended" pick.
 
qreal referenceAspectRatio = 0.0
 For fixed-geometry manual layouts: the reference aspect ratio the zones were authored for.
 
AspectRatioClass aspectRatioClass = AspectRatioClass::Any
 Aspect-ratio class hint propagated up from the layout source.
 
QString sectionKey
 Section-grouping metadata for the picker UI.
 
QString sectionLabel
 
int sectionOrder = 0
 
bool autoAssign = false
 True when new windows should auto-fill the first empty zone (manual layouts only — the autotile equivalent is implicit).
 
bool isSystem = false
 True when the layout is "system-owned" and should render with a lock badge in the picker.
 
std::optional< AlgorithmMetadataalgorithm
 Optional autotile algorithm metadata.
 

Static Public Attributes

static constexpr int UnlimitedZoneCount = 0
 Sentinel for zoneCount meaning "no hard limit on window count" (typical for unlimited autotile algorithms).
 

Detailed Description

Renderer-ready snapshot of one layout entry (manual zone layout OR autotile algorithm result).

Plain data — no Qt object lifecycle, no signals.

Both phosphor-zones (manual Layout -> preview) and the future phosphor-tile-algo (autotile algorithm @ N windows -> preview) produce values of this type. Editor / settings / overlay code consumes LayoutPreview uniformly without branching on the underlying source — the only renderer-relevant difference between manual and autotile is whether isAutotile is set (used for badge / icon styling).

Coordinate system: every QRectF in zones is in 0.0–1.0 relative space, ready to be scaled into any pixel rectangle. For autotile entries the "preview" geometry is computed for some specific window count (see ILayoutSource::previewAt) — different counts yield different previews from the same algorithm.

zoneCount carries a logical "this layout supports N windows" value that's distinct from zones.size(). The sentinel UnlimitedZoneCount (== 0) means "no hard limit" and is used by unlimited autotile algorithms whose rendered preview still contains a fixed example geometry. Consumers validate the shape via isValid().

Member Function Documentation

◆ isAutotile()

bool PhosphorLayout::LayoutPreview::isAutotile ( ) const
inlinenoexcept

True when this preview backs an autotile algorithm (equivalent to algorithm.has_value()).

Consumers branch on this to toggle UI affordances like the system-vs-user badge and algorithm-specific parameter editors. The invariant isAutotile() == algorithm.has_value() holds by construction — the flag is computed, not stored.

◆ isValid()

bool PhosphorLayout::LayoutPreview::isValid ( ) const
inlinenoexcept

Structural consistency check.

Returns true when:

  • zoneCount is UnlimitedZoneCount, or matches zones.size() (a bounded-count preview renders exactly as many rects as it claims to support);
  • zoneNumbers is either empty (unnumbered — typical for autotile algorithms that only emit a count) or exactly matches zones.size() (1:1 parallel arrays).

Empty previews (default-constructed, used by ILayoutSource to signal "id not mine") are valid — zones is empty, zoneCount is 0, and zoneNumbers is empty.

Member Data Documentation

◆ algorithm

std::optional<AlgorithmMetadata> PhosphorLayout::LayoutPreview::algorithm

Optional autotile algorithm metadata.

Presence is the sole signal that this preview backs an autotile algorithm rather than a static manual layout — isAutotile() reads the optional's has_value(). Picker reads the metadata for capability flags (supports master count / split ratio editors, lock badge, etc.).

◆ aspectRatioClass

AspectRatioClass PhosphorLayout::LayoutPreview::aspectRatioClass = AspectRatioClass::Any

Aspect-ratio class hint propagated up from the layout source.

Picker uses this for section grouping; renderer ignores. Manual layouts source this from Layout::aspectRatioClass; autotile entries leave it at the default (AspectRatioClass::Any).

◆ autoAssign

bool PhosphorLayout::LayoutPreview::autoAssign = false

True when new windows should auto-fill the first empty zone (manual layouts only — the autotile equivalent is implicit).

Drives auto-snap behaviour at the daemon side; renderer ignores.

◆ description

QString PhosphorLayout::LayoutPreview::description

Optional longer description shown in tooltips / detail views.

◆ displayName

QString PhosphorLayout::LayoutPreview::displayName

Human-readable name for the picker UI (i18n'd by the source).

◆ id

QString PhosphorLayout::LayoutPreview::id

Stable identifier for this layout entry.

For manual layouts this is the layout's UUID string (with braces); for autotile entries it's the prefixed form "autotile:<algorithmId>" so manual + autotile IDs share a single namespace at the consumer level.

◆ isSystem

bool PhosphorLayout::LayoutPreview::isSystem = false

True when the layout is "system-owned" and should render with a lock badge in the picker.

For manual layouts this reflects whether the layout file came from the system install (vs. a user-created copy). For autotile layouts the source computes this from !algorithm->isScripted || !algorithm->isUserScript — i.e. built-in C++ algorithms and system-installed scripts are system entries; user scripts are not.

Sources (ZonesLayoutSource, AutotileLayoutSource) are the sole populators. Consumers treat this as authoritative — do not recompute from algorithm flags; that's the source's job.

◆ recommended

bool PhosphorLayout::LayoutPreview::recommended = true

True when the layout matches the rendering canvas's aspect ratio well enough to be a "recommended" pick.

False entries can still render (they just appear in a collapsed "Other" section in the picker). Sources fill this when called with an aspect-ratio hint; otherwise leave the default (true) so unranked previews show normally.

◆ referenceAspectRatio

qreal PhosphorLayout::LayoutPreview::referenceAspectRatio = 0.0

For fixed-geometry manual layouts: the reference aspect ratio the zones were authored for.

Renderer uses this so the preview tile shows the layout in its native aspect rather than stretched. Zero when the layout has no fixed-geometry zones (relative layouts adapt to any aspect).

◆ sectionKey

QString PhosphorLayout::LayoutPreview::sectionKey

Section-grouping metadata for the picker UI.

Sources fill these to drive grouped headers ("Built-in", "Custom", "Standard 16:9", etc.). All optional; empty values mean "no section header".

◆ sectionLabel

QString PhosphorLayout::LayoutPreview::sectionLabel

◆ sectionOrder

int PhosphorLayout::LayoutPreview::sectionOrder = 0

◆ UnlimitedZoneCount

constexpr int PhosphorLayout::LayoutPreview::UnlimitedZoneCount = 0
staticconstexpr

Sentinel for zoneCount meaning "no hard limit on window count" (typical for unlimited autotile algorithms).

Distinct from a partially-populated preview — isValid checks the relationship between zoneCount and zones.size() rather than the sentinel itself.

◆ zoneCount

int PhosphorLayout::LayoutPreview::zoneCount = 0

Number of zones in the preview.

Identical to zones.size() for finished previews — kept as an explicit field because some autotile algorithms expose a logical "this layout supports N windows" value distinct from the number of preview rectangles (e.g. unlimited algorithms use a sentinel here while zones renders a fixed example geometry).

◆ zoneNumbers

QVector<int> PhosphorLayout::LayoutPreview::zoneNumbers

Per-zone display label.

Same length as zones (or empty when the source doesn't number its zones — autotile algorithms often emit just the count). Numbering is 1-based; consumer renders the literal integer.

◆ zones

QVector<QRectF> PhosphorLayout::LayoutPreview::zones

Zone rectangles in 0.0–1.0 relative coordinates.

Renderer scales these into the preview canvas. Order matches zoneNumbers.


The documentation for this struct was generated from the following file: