ui/core/material/cfmaterial_scheme.h¶
Material Design 3 Color Scheme with EmbeddedTokenRegistry. More...
Namespaces¶
| Name |
|---|
| cf |
| cf::ui |
| cf::ui::core |
| cf::ui::core::tokens |
Classes¶
| Name | |
|---|---|
| struct | cf::ui::core::PrimaryColors Primary color group. |
| struct | cf::ui::core::SecondaryColors Secondary color group. |
| struct | cf::ui::core::TertiaryColors Tertiary color group. |
| struct | cf::ui::core::ErrorColors Error color group. |
| struct | cf::ui::core::SurfaceColors Background and Surface color group. |
| struct | cf::ui::core::UtilityColors Utility color group. |
| class | cf::ui::core::MaterialColorScheme Material Design 3 Color Scheme with EmbeddedTokenRegistry. |
Detailed Description¶
Material Design 3 Color Scheme with EmbeddedTokenRegistry.
Author: Charliechen114514 (chengh1922@mails.jlu.edu.cn)
Version: 0.1
Date: 2026-02-25
Copyright: Copyright © 2026
Source code¶
#pragma once
#include <QByteArray>
#include <QColor>
#include <string>
#include <unordered_map>
#include "../../export.h"
#include "base/color.h"
#include "base/hash/constexpr_fnv1a.hpp"
#include "color_scheme.h"
#include "token.hpp"
#include "token/material_scheme/cfmaterial_token_literals.h"
namespace cf::ui::core {
using CFColor = cf::ui::base::CFColor;
// =============================================================================
// Color Token Type Aliases - Material Color System
// =============================================================================
namespace tokens {
using namespace cf::ui::core::token::literals;
// Primary color tokens
using PrimaryToken = StaticToken<CFColor, cf::hash::fnv1a64(PRIMARY)>;
using OnPrimaryToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_PRIMARY)>;
using PrimaryContainerToken = StaticToken<CFColor, cf::hash::fnv1a64(PRIMARY_CONTAINER)>;
using OnPrimaryContainerToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_PRIMARY_CONTAINER)>;
// Secondary color tokens
using SecondaryToken = StaticToken<CFColor, cf::hash::fnv1a64(SECONDARY)>;
using OnSecondaryToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_SECONDARY)>;
using SecondaryContainerToken = StaticToken<CFColor, cf::hash::fnv1a64(SECONDARY_CONTAINER)>;
using OnSecondaryContainerToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_SECONDARY_CONTAINER)>;
// Tertiary color tokens
using TertiaryToken = StaticToken<CFColor, cf::hash::fnv1a64(TERTIARY)>;
using OnTertiaryToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_TERTIARY)>;
using TertiaryContainerToken = StaticToken<CFColor, cf::hash::fnv1a64(TERTIARY_CONTAINER)>;
using OnTertiaryContainerToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_TERTIARY_CONTAINER)>;
// Error color tokens
using ErrorToken = StaticToken<CFColor, cf::hash::fnv1a64(ERROR)>;
using OnErrorToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_ERROR)>;
using ErrorContainerToken = StaticToken<CFColor, cf::hash::fnv1a64(ERROR_CONTAINER)>;
using OnErrorContainerToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_ERROR_CONTAINER)>;
// Surface color tokens
using BackgroundToken = StaticToken<CFColor, cf::hash::fnv1a64(BACKGROUND)>;
using OnBackgroundToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_BACKGROUND)>;
using SurfaceToken = StaticToken<CFColor, cf::hash::fnv1a64(SURFACE)>;
using OnSurfaceToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_SURFACE)>;
using SurfaceVariantToken = StaticToken<CFColor, cf::hash::fnv1a64(SURFACE_VARIANT)>;
using OnSurfaceVariantToken = StaticToken<CFColor, cf::hash::fnv1a64(ON_SURFACE_VARIANT)>;
using OutlineToken = StaticToken<CFColor, cf::hash::fnv1a64(OUTLINE)>;
using OutlineVariantToken = StaticToken<CFColor, cf::hash::fnv1a64(OUTLINE_VARIANT)>;
// Utility color tokens
using ShadowToken = StaticToken<CFColor, cf::hash::fnv1a64(SHADOW)>;
using ScrimToken = StaticToken<CFColor, cf::hash::fnv1a64(SCRIM)>;
using InverseSurfaceToken = StaticToken<CFColor, cf::hash::fnv1a64(INVERSE_SURFACE)>;
using InverseOnSurfaceToken = StaticToken<CFColor, cf::hash::fnv1a64(INVERSE_ON_SURFACE)>;
using InversePrimaryToken = StaticToken<CFColor, cf::hash::fnv1a64(INVERSE_PRIMARY)>;
} // namespace tokens
// =============================================================================
// Color Group Structs - Material Color System
// =============================================================================
struct PrimaryColors {
tokens::PrimaryToken primary;
tokens::OnPrimaryToken onPrimary;
tokens::PrimaryContainerToken primaryContainer;
tokens::OnPrimaryContainerToken onPrimaryContainer;
};
struct SecondaryColors {
tokens::SecondaryToken secondary;
tokens::OnSecondaryToken onSecondary;
tokens::SecondaryContainerToken secondaryContainer;
tokens::OnSecondaryContainerToken onSecondaryContainer;
};
struct TertiaryColors {
tokens::TertiaryToken tertiary;
tokens::OnTertiaryToken onTertiary;
tokens::TertiaryContainerToken tertiaryContainer;
tokens::OnTertiaryContainerToken onTertiaryContainer;
};
struct ErrorColors {
tokens::ErrorToken error;
tokens::OnErrorToken onError;
tokens::ErrorContainerToken errorContainer;
tokens::OnErrorContainerToken onErrorContainer;
};
struct SurfaceColors {
tokens::BackgroundToken background;
tokens::OnBackgroundToken onBackground;
tokens::SurfaceToken surface;
tokens::OnSurfaceToken onSurface;
tokens::SurfaceVariantToken surfaceVariant;
tokens::OnSurfaceVariantToken onSurfaceVariant;
tokens::OutlineToken outline;
tokens::OutlineVariantToken outlineVariant;
};
struct UtilityColors {
tokens::ShadowToken shadow;
tokens::ScrimToken scrim;
tokens::InverseSurfaceToken inverseSurface;
tokens::InverseOnSurfaceToken inverseOnSurface;
tokens::InversePrimaryToken inversePrimary;
};
// =============================================================================
// Material Color Scheme
// =============================================================================
class CF_UI_EXPORT MaterialColorScheme : public ICFColorScheme {
public:
MaterialColorScheme();
~MaterialColorScheme() override = default;
// Non-copyable, movable
MaterialColorScheme(const MaterialColorScheme&) = delete;
MaterialColorScheme& operator=(const MaterialColorScheme&) = delete;
MaterialColorScheme(MaterialColorScheme&&) noexcept = default;
MaterialColorScheme& operator=(MaterialColorScheme&&) noexcept = default;
QColor& queryExpectedColor(const char* name) override;
QColor queryColor(const char* name) const;
EmbeddedTokenRegistry& registry() { return registry_; }
const EmbeddedTokenRegistry& registry() const { return registry_; }
// Color group accessors - return structs with token types
[[nodiscard]] PrimaryColors primary() const { return {}; }
[[nodiscard]] SecondaryColors secondary() const { return {}; }
[[nodiscard]] TertiaryColors tertiary() const { return {}; }
[[nodiscard]] ErrorColors error() const { return {}; }
[[nodiscard]] SurfaceColors surface() const { return {}; }
[[nodiscard]] UtilityColors utility() const { return {}; }
private:
EmbeddedTokenRegistry registry_;
mutable std::unordered_map<std::string, QColor> color_cache_;
};
} // namespace cf::ui::core
Updated on 2026-03-09 at 10:14:01 +0000