Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
AutotileConstants.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2026 fuddlesworth
2// SPDX-License-Identifier: LGPL-2.1-or-later
3
4#pragma once
5
7#include <QLatin1String>
8#include <QMetaType>
9#include <limits>
10
27namespace PhosphorTiles {
28
36namespace AutotileDefaults {
37// Default values used by tiling primitives when no setting is supplied.
38// The application config layer surfaces these as the user-facing defaults
39// (see ConfigDefaults::autotile{SplitRatio,MasterCount,MaxWindows} in
40// src/config/configdefaults.h, which delegate here).
41constexpr qreal DefaultSplitRatio = 0.5;
42constexpr int DefaultMasterCount = 1;
43constexpr int DefaultMaxWindows = 5;
44inline constexpr QLatin1String DefaultAlgorithmId{"bsp"};
45constexpr qreal DefaultSplitRatioStep = 0.05;
46constexpr qreal MinSplitRatioStep = 0.01;
47constexpr qreal MaxSplitRatioStep = 0.25;
48
49constexpr qreal MinSplitRatio = 0.1;
50constexpr qreal MaxSplitRatio = 0.9;
51constexpr int MinMasterCount = 1;
52constexpr int MaxMasterCount = 5;
53constexpr int DefaultInnerGap = 8;
54constexpr int DefaultOuterGap = 8;
55constexpr int MinGap = 0;
56constexpr int MaxGap = 50;
57constexpr int MinRectSizePx = 50;
58constexpr int GapEdgeThresholdPx = 5;
64constexpr int ResizeEdgeMoveThresholdPx = 5;
65constexpr int MinMaxWindows = 1;
66constexpr int MaxMaxWindows = 12;
67// Sentinel returned by PerScreenConfigResolver::effectiveMaxWindows() when the
68// user has selected AutotileOverflowBehavior::Unlimited. INT_MAX/2 — not
69// INT_MAX — so any caller that does `effectiveMaxWindows(...) + 1` (e.g.
70// growth-headroom calculations) can't overflow.
71constexpr int UnlimitedMaxWindowsSentinel = std::numeric_limits<int>::max() / 2;
72constexpr int MaxZones = 256;
73constexpr int MaxRuntimeTreeDepth = 50;
74// Bounds for the opaque per-algorithm script-state bag (TilingState::scriptState).
75// Enforced by TilingState::sanitizeScriptState at every script write-back and on
76// load, so a buggy or hostile algorithm can't bloat the persisted state or stall
77// serialization. A whole bag exceeding the byte cap is dropped (reset to empty).
78constexpr int ScriptStateMaxBytes = 64 * 1024;
79constexpr int ScriptStateMaxDepth = 16;
80constexpr int ScriptStateMaxKeys = 4096;
81constexpr qreal SplitRatioHysteresis = 0.05;
82constexpr int MinMetadataWindows = 1;
83constexpr int MaxMetadataWindows = 100;
84constexpr int MinInsertPosition = 0;
85constexpr int MaxInsertPosition = 2;
86// Animation duration + stagger limits previously lived here for
87// historical reasons but are NOT autotile-specific — they bound every
88// animation in the system. Moved to
89// libs/phosphor-animation/include/PhosphorAnimation/AnimationLimits.h
90// (PhosphorAnimation::Limits namespace). Consumers that need them
91// should include that header directly; ConfigDefaults already does.
96constexpr int ScriptWatchdogTimeoutMs = 100;
97
100constexpr bool isNumericMetaType(int typeId)
101{
102 return typeId == QMetaType::Double || typeId == QMetaType::Float || typeId == QMetaType::Int
103 || typeId == QMetaType::UInt || typeId == QMetaType::LongLong || typeId == QMetaType::ULongLong;
104}
105} // namespace AutotileDefaults
106
110namespace AutotileJsonKeys {
111// TilingState keys
112inline constexpr QLatin1String ScreenName{"screenName"};
113inline constexpr QLatin1String WindowOrder{"windowOrder"};
114inline constexpr QLatin1String FloatingWindows{"floatingWindows"};
115inline constexpr QLatin1String FocusedWindow{"focusedWindow"};
116inline constexpr QLatin1String MasterCount{"masterCount"};
117inline constexpr QLatin1String SplitRatio{"splitRatio"};
118inline constexpr QLatin1String SplitRatioStep{"splitRatioStep"};
119inline constexpr QLatin1String CustomParams{"customParams"};
120
121// AutotileConfig keys
122inline constexpr QLatin1String PerAlgorithmSettings{"perAlgorithmSettings"};
123inline constexpr QLatin1String AlgorithmId{"algorithmId"};
124inline constexpr QLatin1String InnerGap{"innerGap"};
125inline constexpr QLatin1String OuterGap{"outerGap"};
126
127// Per-side outer-gap keys — canonical definition in phosphor-layout-api's
128// GapKeys.h (shared with phosphor-zones ZoneJsonKeys). Re-exported here so
129// AutotileJsonKeys callers can keep their fully-qualified references
130// unchanged while both libraries consume a single source of truth.
136
137inline constexpr QLatin1String SmartGaps{"smartGaps"};
138inline constexpr QLatin1String FocusNewWindows{"focusNewWindows"};
139inline constexpr QLatin1String FocusFollowsMouse{"focusFollowsMouse"};
140inline constexpr QLatin1String InsertPosition{"insertPosition"};
141inline constexpr QLatin1String RespectMinimumSize{"respectMinimumSize"};
142inline constexpr QLatin1String MaxWindows{"maxWindows"};
143inline constexpr QLatin1String OverflowBehavior{"overflowBehavior"};
144inline constexpr QLatin1String SplitTreeKey{"splitTree"};
145inline constexpr QLatin1String ScriptStateKey{"scriptState"};
146} // namespace AutotileJsonKeys
147
155namespace AutotileJsonValues {
156// OverflowBehavior values
157inline constexpr QLatin1String OverflowFloat{"float"};
158inline constexpr QLatin1String OverflowUnlimited{"unlimited"};
159// InsertPosition values
160inline constexpr QLatin1String InsertEnd{"end"};
161inline constexpr QLatin1String InsertAfterFocused{"afterFocused"};
162inline constexpr QLatin1String InsertAsMaster{"asMaster"};
163} // namespace AutotileJsonValues
164
166 Float = 0,
167 Unlimited = 1
168};
169
171 End = 0,
172 AfterFocused = 1,
173 AsMaster = 2
174};
175
177 Float = 0,
178 Reorder = 1
179};
180
181} // namespace PhosphorTiles
constexpr QLatin1String OuterGapLeft
Definition GapKeys.h:22
constexpr QLatin1String UsePerSideOuterGap
Definition GapKeys.h:19
constexpr QLatin1String OuterGapBottom
Definition GapKeys.h:21
constexpr QLatin1String OuterGapRight
Definition GapKeys.h:23
constexpr QLatin1String OuterGapTop
Definition GapKeys.h:20
constexpr qreal MaxSplitRatio
Definition AutotileConstants.h:50
constexpr int DefaultMasterCount
Single master window.
Definition AutotileConstants.h:42
constexpr int DefaultInnerGap
Definition AutotileConstants.h:53
constexpr int DefaultOuterGap
Definition AutotileConstants.h:54
constexpr bool isNumericMetaType(int typeId)
Returns true if typeId is a numeric QMetaType (Double, Float, Int, UInt, LongLong,...
Definition AutotileConstants.h:100
constexpr int MaxMaxWindows
Definition AutotileConstants.h:66
constexpr int MinInsertPosition
Definition AutotileConstants.h:84
constexpr QLatin1String DefaultAlgorithmId
Default tiling algorithm.
Definition AutotileConstants.h:44
constexpr int ScriptStateMaxBytes
Max compact-JSON size of the bag.
Definition AutotileConstants.h:78
constexpr int MaxMasterCount
Definition AutotileConstants.h:52
constexpr int MinRectSizePx
Definition AutotileConstants.h:57
constexpr int MaxZones
Definition AutotileConstants.h:72
constexpr int MinMaxWindows
Definition AutotileConstants.h:65
constexpr int UnlimitedMaxWindowsSentinel
Definition AutotileConstants.h:71
constexpr qreal DefaultSplitRatio
50/50 split when nothing else specified
Definition AutotileConstants.h:41
constexpr int GapEdgeThresholdPx
Definition AutotileConstants.h:58
constexpr int MinGap
Definition AutotileConstants.h:55
constexpr int ScriptWatchdogTimeoutMs
Watchdog deadline for a single Luau call (tile / lifecycle hook) issued via LuauEngine::callModule.
Definition AutotileConstants.h:96
constexpr int MaxInsertPosition
Definition AutotileConstants.h:85
constexpr int DefaultMaxWindows
Maximum tiled windows before overflow.
Definition AutotileConstants.h:43
constexpr int MaxMetadataWindows
Definition AutotileConstants.h:83
constexpr int ScriptStateMaxKeys
Max total object keys across the bag.
Definition AutotileConstants.h:80
constexpr int MinMetadataWindows
Definition AutotileConstants.h:82
constexpr qreal MaxSplitRatioStep
Definition AutotileConstants.h:47
constexpr qreal MinSplitRatio
Definition AutotileConstants.h:49
constexpr int ScriptStateMaxDepth
Max object/array nesting depth.
Definition AutotileConstants.h:79
constexpr int ResizeEdgeMoveThresholdPx
Minimum pixel movement of a window edge during an interactive resize before it is treated as an inten...
Definition AutotileConstants.h:64
constexpr qreal SplitRatioHysteresis
Band within which algorithm-switch ratio reset is suppressed.
Definition AutotileConstants.h:81
constexpr int MaxRuntimeTreeDepth
Maximum recursion depth for split tree operations.
Definition AutotileConstants.h:73
constexpr qreal DefaultSplitRatioStep
Definition AutotileConstants.h:45
constexpr qreal MinSplitRatioStep
Definition AutotileConstants.h:46
constexpr int MaxGap
Definition AutotileConstants.h:56
constexpr int MinMasterCount
Definition AutotileConstants.h:51
constexpr QLatin1String FocusedWindow
Definition AutotileConstants.h:115
constexpr QLatin1String ScreenName
Definition AutotileConstants.h:112
constexpr QLatin1String ScriptStateKey
Definition AutotileConstants.h:145
constexpr QLatin1String FocusFollowsMouse
Definition AutotileConstants.h:139
constexpr QLatin1String WindowOrder
Definition AutotileConstants.h:113
constexpr QLatin1String OuterGap
Definition AutotileConstants.h:125
constexpr QLatin1String InsertPosition
Definition AutotileConstants.h:140
constexpr QLatin1String PerAlgorithmSettings
Definition AutotileConstants.h:122
constexpr QLatin1String SplitRatioStep
Definition AutotileConstants.h:118
constexpr QLatin1String FloatingWindows
Definition AutotileConstants.h:114
constexpr QLatin1String MaxWindows
Definition AutotileConstants.h:142
constexpr QLatin1String SplitRatio
Definition AutotileConstants.h:117
constexpr QLatin1String OverflowBehavior
Definition AutotileConstants.h:143
constexpr QLatin1String SmartGaps
< canonical: PhosphorLayoutApi/GapKeys.h
Definition AutotileConstants.h:137
constexpr QLatin1String CustomParams
Definition AutotileConstants.h:119
constexpr QLatin1String InnerGap
Definition AutotileConstants.h:124
constexpr QLatin1String AlgorithmId
Definition AutotileConstants.h:123
constexpr QLatin1String MasterCount
Definition AutotileConstants.h:116
constexpr QLatin1String RespectMinimumSize
Definition AutotileConstants.h:141
constexpr QLatin1String FocusNewWindows
Definition AutotileConstants.h:138
constexpr QLatin1String SplitTreeKey
Definition AutotileConstants.h:144
constexpr QLatin1String OverflowFloat
Definition AutotileConstants.h:157
constexpr QLatin1String InsertAsMaster
Definition AutotileConstants.h:162
constexpr QLatin1String InsertAfterFocused
Definition AutotileConstants.h:161
constexpr QLatin1String InsertEnd
Definition AutotileConstants.h:160
constexpr QLatin1String OverflowUnlimited
Definition AutotileConstants.h:158
Definition AutotileEngine.h:46
AutotileDragBehavior
Definition AutotileConstants.h:176
AutotileInsertPosition
Definition AutotileConstants.h:170
AutotileOverflowBehavior
Definition AutotileConstants.h:165