Phosphor
Qt6 / Wayland library suite for window-management tools
 
Loading...
Searching...
No Matches
GapResolution.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
8#include <QVariantMap>
9#include <optional>
10
11namespace PhosphorEngine {
12
22namespace GapResolution {
23
26template<typename Normalize>
27std::optional<int> gapFromOverrideMap(const QVariantMap& map, QLatin1String key, Normalize normalize)
28{
29 const auto it = map.constFind(key);
30 if (it == map.constEnd()) {
31 return std::nullopt;
32 }
33 return normalize(it->toInt());
34}
35
47template<typename Normalize>
48std::optional<::PhosphorLayout::EdgeGaps> outerGapsFromOverrideMap(const QVariantMap& map, int missingSideBase,
49 Normalize normalize)
50{
51 if (map.isEmpty()) {
52 return std::nullopt;
53 }
54 const auto uniformIt = map.constFind(QString(PerScreenKeys::OuterGap));
55 const bool usePerSide = map.value(QString(PerScreenKeys::UsePerSideOuterGap), false).toBool();
56 if (usePerSide) {
57 const auto topIt = map.constFind(QString(PerScreenKeys::OuterGapTop));
58 const auto bottomIt = map.constFind(QString(PerScreenKeys::OuterGapBottom));
59 const auto leftIt = map.constFind(QString(PerScreenKeys::OuterGapLeft));
60 const auto rightIt = map.constFind(QString(PerScreenKeys::OuterGapRight));
61 if (topIt != map.constEnd() || bottomIt != map.constEnd() || leftIt != map.constEnd()
62 || rightIt != map.constEnd()) {
63 const int base = (uniformIt != map.constEnd()) ? normalize(uniformIt->toInt()) : normalize(missingSideBase);
64 return ::PhosphorLayout::EdgeGaps{(topIt != map.constEnd()) ? normalize(topIt->toInt()) : base,
65 (bottomIt != map.constEnd()) ? normalize(bottomIt->toInt()) : base,
66 (leftIt != map.constEnd()) ? normalize(leftIt->toInt()) : base,
67 (rightIt != map.constEnd()) ? normalize(rightIt->toInt()) : base};
68 }
69 }
70 if (uniformIt != map.constEnd()) {
71 return ::PhosphorLayout::EdgeGaps::uniform(normalize(uniformIt->toInt()));
72 }
73 return std::nullopt;
74}
75
76} // namespace GapResolution
77} // namespace PhosphorEngine
std::optional<::PhosphorLayout::EdgeGaps > outerGapsFromOverrideMap(const QVariantMap &map, int missingSideBase, Normalize normalize)
Resolve the outer-gap portion of an override map as ONE atomic layer.
Definition GapResolution.h:48
std::optional< int > gapFromOverrideMap(const QVariantMap &map, QLatin1String key, Normalize normalize)
Single gap value from an override map, or nullopt when map lacks key.
Definition GapResolution.h:27
constexpr QLatin1String OuterGapBottom
Definition PerScreenKeys.h:20
constexpr QLatin1String OuterGapLeft
Definition PerScreenKeys.h:21
constexpr QLatin1String OuterGapRight
Definition PerScreenKeys.h:22
constexpr QLatin1String OuterGapTop
Definition PerScreenKeys.h:19
constexpr QLatin1String OuterGap
Definition PerScreenKeys.h:17
constexpr QLatin1String UsePerSideOuterGap
Definition PerScreenKeys.h:18
Definition EngineTypes.h:14