Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
PerScreenConfigResolver.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
6#include <phosphortileengine_export.h>
10#include <QHash>
11#include <QString>
12#include <QVariantMap>
13#include <functional>
14#include <optional>
15
16namespace PhosphorTiles {
17class TilingAlgorithm;
18}
19
20namespace PhosphorTileEngine {
21
23
24class AutotileConfig;
25class AutotileEngine;
26
40class PHOSPHORTILEENGINE_EXPORT PerScreenConfigResolver
41{
42public:
44
45 // ═══════════════════════════════════════════════════════════════════════════
46 // Per-screen override storage
47 // ═══════════════════════════════════════════════════════════════════════════
48
58 void applyPerScreenConfig(const QString& screenId, const QVariantMap& overrides);
59
68 void clearPerScreenConfig(const QString& screenId);
69
73 QVariantMap perScreenOverrides(const QString& screenId) const;
74
78 bool hasPerScreenOverride(const QString& screenId, const QString& key) const;
79
87 void updatePerScreenOverride(const QString& screenId, const QString& key, const QVariant& value);
88
105 void removeOverridesForScreen(const QString& screenId);
106
118
126 void forgetScreen(const QString& screenId);
127
134 void removeOverridesMatching(const std::function<bool(const QString&)>& pred);
135
156 void applyGlobalAlgorithmChange(const QString& previousGlobalId, const QString& newGlobalId);
157
171 using ContextGapProvider = std::function<QVariantMap(const QString& screenId)>;
173 {
174 m_contextGapProvider = std::move(provider);
175 }
176
177 // ═══════════════════════════════════════════════════════════════════════════
178 // Effective per-screen values (per-screen override → global fallback)
179 // ═══════════════════════════════════════════════════════════════════════════
180
181 int effectiveInnerGap(const QString& screenId) const;
182 ::PhosphorLayout::EdgeGaps effectiveOuterGaps(const QString& screenId) const;
184 {
185 int inner = 0;
187 };
192 EffectiveGaps effectiveGaps(const QString& screenId) const;
193 bool effectiveSmartGaps(const QString& screenId) const;
194 bool effectiveRespectMinimumSize(const QString& screenId) const;
195 int effectiveMaxWindows(const QString& screenId) const;
202 QVariantMap effectiveCustomParamsOverride(const QString& screenId) const;
203 qreal effectiveSplitRatioStep(const QString& screenId) const;
204 QString effectiveAlgorithmId(const QString& screenId) const;
205 PhosphorTiles::TilingAlgorithm* effectiveAlgorithm(const QString& screenId) const;
206
207private:
208 std::optional<QVariant> perScreenOverride(const QString& screenId, const QString& key) const;
209
214 void wipeStateBagsOnEffectiveAlgorithmChange(const QString& screenId, const QString& oldEffectiveId,
215 const QString& newEffectiveId);
216
222 bool screenFollowsGlobalAlgorithm(const QString& screenId, const QString& previousGlobalId) const;
223
228 static QString algorithmIdFromMap(const QVariantMap& map, const QString& fallback);
229
233 QString rememberedAlgorithmId(const QString& screenId, const QVariantMap& previousOverrides) const;
234
240 QVariantMap contextGapMap(const QString& screenId) const;
241
244 static std::optional<int> contextGapFromMap(const QVariantMap& ctx, QLatin1String key);
245
249 int innerGapFromMap(const QString& screenId, const QVariantMap& ctx) const;
250 ::PhosphorLayout::EdgeGaps outerGapsFromMap(const QString& screenId, const QVariantMap& ctx) const;
251
255 std::optional<::PhosphorLayout::EdgeGaps> contextOuterGapsFromMap(const QVariantMap& ctx) const;
256
261 int outerGapBase(const QString& screenId, const QVariantMap& ctx) const;
262
263 AutotileEngine* m_engine = nullptr;
264 QHash<QString, QVariantMap> m_perScreenOverrides;
270 QHash<QString, QString> m_rememberedAlgorithmId;
271 ContextGapProvider m_contextGapProvider{};
272};
273
274} // namespace PhosphorTileEngine
Algorithm-layer constants for the autotile/tile primitives.
Core engine for automatic window tiling.
Definition AutotileEngine.h:78
Resolves per-screen configuration overrides for autotiling.
Definition PerScreenConfigResolver.h:41
bool effectiveRespectMinimumSize(const QString &screenId) const
PerScreenConfigResolver(AutotileEngine *engine)
void removeOverridesForScreen(const QString &screenId)
Drop a screen's in-memory overrides while REMEMBERING the algorithm they resolved to (autotile toggle...
void forgetScreen(const QString &screenId)
Drop a screen's overrides AND the remembered algorithm, for an id that will never be reused (an orpha...
int effectiveMaxWindows(const QString &screenId) const
void clearPerScreenConfig(const QString &screenId)
Clear per-screen configuration overrides.
PhosphorTiles::AutotileInsertPosition effectiveInsertPosition(const QString &screenId) const
::PhosphorLayout::EdgeGaps effectiveOuterGaps(const QString &screenId) const
void applyPerScreenConfig(const QString &screenId, const QVariantMap &overrides)
Apply per-screen configuration overrides.
PhosphorTiles::AutotileOverflowBehavior effectiveOverflowBehavior(const QString &screenId) const
void forgetRememberedAlgorithmsForUnknownScreens()
Drop remembered algorithms for screens that are no longer connected.
QString effectiveAlgorithmId(const QString &screenId) const
EffectiveGaps effectiveGaps(const QString &screenId) const
Both gap keys from ONE context resolve.
PhosphorTiles::TilingAlgorithm * effectiveAlgorithm(const QString &screenId) const
bool effectiveSmartGaps(const QString &screenId) const
std::function< QVariantMap(const QString &screenId)> ContextGapProvider
Inject a per-context (window-rule) gap-override provider.
Definition PerScreenConfigResolver.h:171
void setContextGapProvider(ContextGapProvider provider)
Definition PerScreenConfigResolver.h:172
QVariantMap effectiveCustomParamsOverride(const QString &screenId) const
The per-screen custom-parameter override map (a SetAlgorithmParam rule the daemon injected),...
QVariantMap perScreenOverrides(const QString &screenId) const
Get currently applied per-screen overrides for comparison.
qreal effectiveSplitRatioStep(const QString &screenId) const
void updatePerScreenOverride(const QString &screenId, const QString &key, const QVariant &value)
Update a single per-screen override value in-place.
bool hasPerScreenOverride(const QString &screenId, const QString &key) const
Check if a screen has a per-screen override for a specific key.
int effectiveInnerGap(const QString &screenId) const
void applyGlobalAlgorithmChange(const QString &previousGlobalId, const QString &newGlobalId)
Apply a GLOBAL algorithm switch to every screen that follows it.
void removeOverridesMatching(const std::function< bool(const QString &)> &pred)
forgetScreen for every stored id matching pred — the whole-OUTPUT reap.
Abstract base class for tiling algorithms.
Definition TilingAlgorithm.h:54
Definition PerScreenKeys.h:9
Definition AutotileConfig.h:13
Definition AutotileEngine.h:59
AutotileInsertPosition
Definition AutotileConstants.h:191
AutotileOverflowBehavior
Definition AutotileConstants.h:186
Per-side edge gap values (resolved, non-negative pixel values)
Definition EdgeGaps.h:27
Definition PerScreenConfigResolver.h:184
::PhosphorLayout::EdgeGaps outer
Definition PerScreenConfigResolver.h:186