nosignal-shell/plugin/src/Caelestia/Config/tokens.hpp
2026-05-04 03:47:03 +10:00

374 lines
11 KiB
C++

#pragma once
#include "rootconfig.hpp"
#include <limits>
#include <qlist.h>
#include <qqmlengine.h>
namespace caelestia::config {
class AnimCurves : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_GLOBAL_PROPERTY(QList<qreal>, emphasized)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, emphasizedAccel)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, emphasizedDecel)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, standard)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, standardAccel)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, standardDecel)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, expressiveFastSpatial)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, expressiveDefaultSpatial)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, expressiveSlowSpatial)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, expressiveFastEffects)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, expressiveDefaultEffects)
CONFIG_GLOBAL_PROPERTY(QList<qreal>, expressiveSlowEffects)
public:
explicit AnimCurves(QObject* parent = nullptr)
: ConfigObject(parent)
, m_emphasized({ 0.05, 0, 2.0 / 15.0, 0.06, 1.0 / 6.0, 0.4, 5.0 / 24.0, 0.82, 0.25, 1, 1, 1 })
, m_emphasizedAccel({ 0.3, 0, 0.8, 0.15, 1, 1 })
, m_emphasizedDecel({ 0.05, 0.7, 0.1, 1, 1, 1 })
, m_standard({ 0.2, 0, 0, 1, 1, 1 })
, m_standardAccel({ 0.3, 0, 1, 1, 1, 1 })
, m_standardDecel({ 0, 0, 0, 1, 1, 1 })
, m_expressiveFastSpatial({ 0.42, 1.67, 0.21, 0.9, 1, 1 })
, m_expressiveDefaultSpatial({ 0.38, 1.21, 0.22, 1, 1, 1 })
, m_expressiveSlowSpatial({ 0.39, 1.29, 0.35, 0.98, 1, 1 })
, m_expressiveFastEffects({ 0.31, 0.94, 0.34, 1, 1, 1 })
, m_expressiveDefaultEffects({ 0.34, 0.8, 0.34, 1, 1, 1 })
, m_expressiveSlowEffects({ 0.34, 0.88, 0.34, 1, 1, 1 }) {}
};
class RoundingTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, extraSmall, 4)
CONFIG_PROPERTY(int, small, 8)
CONFIG_PROPERTY(int, medium, 12)
CONFIG_PROPERTY(int, large, 16)
CONFIG_PROPERTY(int, largeIncreased, 20)
CONFIG_PROPERTY(int, extraLarge, 28)
CONFIG_PROPERTY(int, extraLargeIncreased, 32)
CONFIG_PROPERTY(int, extraExtraLarge, 48)
CONFIG_PROPERTY(int, full, std::numeric_limits<int>::max())
public:
explicit RoundingTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class SpacingTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, extraSmall, 4)
CONFIG_PROPERTY(int, small, 8)
CONFIG_PROPERTY(int, medium, 12)
CONFIG_PROPERTY(int, large, 16)
CONFIG_PROPERTY(int, largeIncreased, 20)
CONFIG_PROPERTY(int, extraLarge, 28)
CONFIG_PROPERTY(int, extraLargeIncreased, 32)
CONFIG_PROPERTY(int, extraExtraLarge, 48)
public:
explicit SpacingTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class PaddingTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, extraSmall, 4)
CONFIG_PROPERTY(int, small, 8)
CONFIG_PROPERTY(int, medium, 12)
CONFIG_PROPERTY(int, large, 16)
CONFIG_PROPERTY(int, largeIncreased, 20)
CONFIG_PROPERTY(int, extraLarge, 28)
CONFIG_PROPERTY(int, extraLargeIncreased, 32)
CONFIG_PROPERTY(int, extraExtraLarge, 48)
public:
explicit PaddingTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class FontSizeTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, small, 11)
CONFIG_PROPERTY(int, smaller, 12)
CONFIG_PROPERTY(int, normal, 13)
CONFIG_PROPERTY(int, larger, 15)
CONFIG_PROPERTY(int, large, 18)
CONFIG_PROPERTY(int, extraLarge, 28)
public:
explicit FontSizeTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class AnimDurationTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_GLOBAL_PROPERTY(int, small, 200)
CONFIG_GLOBAL_PROPERTY(int, normal, 400)
CONFIG_GLOBAL_PROPERTY(int, large, 600)
CONFIG_GLOBAL_PROPERTY(int, extraLarge, 1000)
CONFIG_GLOBAL_PROPERTY(int, expressiveFastSpatial, 350)
CONFIG_GLOBAL_PROPERTY(int, expressiveDefaultSpatial, 500)
CONFIG_GLOBAL_PROPERTY(int, expressiveSlowSpatial, 650)
CONFIG_GLOBAL_PROPERTY(int, expressiveFastEffects, 150)
CONFIG_GLOBAL_PROPERTY(int, expressiveDefaultEffects, 200)
CONFIG_GLOBAL_PROPERTY(int, expressiveSlowEffects, 300)
public:
explicit AnimDurationTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class AppearanceTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_SUBOBJECT(AnimCurves, curves)
CONFIG_SUBOBJECT(RoundingTokens, rounding)
CONFIG_SUBOBJECT(SpacingTokens, spacing)
CONFIG_SUBOBJECT(PaddingTokens, padding)
CONFIG_SUBOBJECT(FontSizeTokens, fontSize)
CONFIG_SUBOBJECT(AnimDurationTokens, animDurations)
public:
explicit AppearanceTokens(QObject* parent = nullptr)
: ConfigObject(parent)
, m_curves(new AnimCurves(this))
, m_rounding(new RoundingTokens(this))
, m_spacing(new SpacingTokens(this))
, m_padding(new PaddingTokens(this))
, m_fontSize(new FontSizeTokens(this))
, m_animDurations(new AnimDurationTokens(this)) {}
};
class BarTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, innerWidth, 40)
CONFIG_PROPERTY(int, windowPreviewSize, 400)
CONFIG_PROPERTY(int, trayMenuWidth, 300)
CONFIG_PROPERTY(int, batteryWidth, 250)
CONFIG_PROPERTY(int, networkWidth, 320)
CONFIG_PROPERTY(int, kbLayoutWidth, 320)
public:
explicit BarTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class DashboardTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, tabIndicatorHeight, 3)
CONFIG_PROPERTY(int, tabIndicatorSpacing, 5)
CONFIG_PROPERTY(int, userWidth, 340)
CONFIG_PROPERTY(int, logoSize, 30)
CONFIG_PROPERTY(int, uptimeSize, 30)
CONFIG_PROPERTY(int, bubbleSize, 8)
CONFIG_PROPERTY(int, dateTimeWidth, 110)
CONFIG_PROPERTY(int, mediaWidth, 200)
CONFIG_PROPERTY(int, mediaProgressSweep, 180)
CONFIG_PROPERTY(int, mediaProgressThickness, 6)
CONFIG_PROPERTY(int, resourceProgressThickness, 6)
CONFIG_PROPERTY(int, weatherWidth, 275)
CONFIG_PROPERTY(int, mediaCoverArtSize, 200)
CONFIG_PROPERTY(int, mediaTabWidth, 1000)
CONFIG_PROPERTY(int, mediaTabHeight, 320)
CONFIG_PROPERTY(int, mediaSectionWidth, 300)
CONFIG_PROPERTY(int, perfHeroCardWidth, 400)
CONFIG_PROPERTY(int, perfUsageShapeSize, 100)
CONFIG_PROPERTY(int, perfStorageTextWidth, 160)
CONFIG_PROPERTY(int, perfNetworkCardWidth, 390)
CONFIG_PROPERTY(int, perfNetworkCardHeight, 220)
CONFIG_PROPERTY(int, perfBattWidth, 150)
CONFIG_PROPERTY(int, perfBattWidthSingle, 400)
CONFIG_PROPERTY(int, perfBattHeight, 160)
CONFIG_PROPERTY(int, perfPlaceholderWidth, 700)
public:
explicit DashboardTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class LauncherTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, itemWidth, 600)
CONFIG_PROPERTY(int, itemHeight, 57)
CONFIG_PROPERTY(int, wallpaperWidth, 280)
CONFIG_PROPERTY(int, wallpaperHeight, 200)
public:
explicit LauncherTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class NotifsTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, width, 400)
CONFIG_GLOBAL_PROPERTY(int, image, 41)
CONFIG_PROPERTY(int, badge, 20)
public:
explicit NotifsTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class OsdTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, sliderWidth, 30)
CONFIG_PROPERTY(int, sliderHeight, 150)
public:
explicit OsdTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class SessionTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, button, 80)
public:
explicit SessionTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class SidebarTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, width, 430)
public:
explicit SidebarTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class UtilitiesTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(int, width, 430)
CONFIG_PROPERTY(int, toastWidth, 430)
public:
explicit UtilitiesTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class LockTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(qreal, heightMult, 0.7)
CONFIG_PROPERTY(qreal, ratio, 16.0 / 9.0)
CONFIG_PROPERTY(int, centerWidth, 600)
public:
explicit LockTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class WInfoTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(qreal, heightMult, 0.7)
CONFIG_PROPERTY(qreal, detailsWidth, 500)
public:
explicit WInfoTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class ControlCenterTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_PROPERTY(qreal, heightMult, 0.7)
CONFIG_PROPERTY(qreal, ratio, 16.0 / 9.0)
public:
explicit ControlCenterTokens(QObject* parent = nullptr)
: ConfigObject(parent) {}
};
class SizeTokens : public ConfigObject {
Q_OBJECT
QML_ANONYMOUS
CONFIG_SUBOBJECT(BarTokens, bar)
CONFIG_SUBOBJECT(DashboardTokens, dashboard)
CONFIG_SUBOBJECT(LauncherTokens, launcher)
CONFIG_SUBOBJECT(NotifsTokens, notifs)
CONFIG_SUBOBJECT(OsdTokens, osd)
CONFIG_SUBOBJECT(SessionTokens, session)
CONFIG_SUBOBJECT(SidebarTokens, sidebar)
CONFIG_SUBOBJECT(UtilitiesTokens, utilities)
CONFIG_SUBOBJECT(LockTokens, lock)
CONFIG_SUBOBJECT(WInfoTokens, winfo)
CONFIG_SUBOBJECT(ControlCenterTokens, controlCenter)
public:
explicit SizeTokens(QObject* parent = nullptr)
: ConfigObject(parent)
, m_bar(new BarTokens(this))
, m_dashboard(new DashboardTokens(this))
, m_launcher(new LauncherTokens(this))
, m_notifs(new NotifsTokens(this))
, m_osd(new OsdTokens(this))
, m_session(new SessionTokens(this))
, m_sidebar(new SidebarTokens(this))
, m_utilities(new UtilitiesTokens(this))
, m_lock(new LockTokens(this))
, m_winfo(new WInfoTokens(this))
, m_controlCenter(new ControlCenterTokens(this)) {}
};
class TokenConfig : public RootConfig {
Q_OBJECT
QML_ELEMENT
QML_SINGLETON
CONFIG_SUBOBJECT(AppearanceTokens, appearance)
CONFIG_SUBOBJECT(SizeTokens, sizes)
public:
static TokenConfig* instance();
[[nodiscard]] Q_INVOKABLE TokenConfig* defaults();
[[nodiscard]] Q_INVOKABLE static TokenConfig* forScreen(const QString& screen);
static TokenConfig* create(QQmlEngine*, QJSEngine*);
private:
friend class MonitorConfigManager;
explicit TokenConfig(QObject* parent = nullptr);
explicit TokenConfig(
TokenConfig* fallback, const QString& filePath, const QString& screen = {}, QObject* parent = nullptr);
TokenConfig* m_defaults = nullptr;
};
} // namespace caelestia::config