跳转至

ui/core/material/cfmaterial_radius_scale.cpp

Material Design 3 Radius Scale Implementation. More...

Namespaces

Name
cf
cf::ui
cf::ui::core

Detailed Description

Material Design 3 Radius Scale Implementation.

Author: Charliechen114514 (chengh1922@mails.jlu.edu.cn)

Version: 0.1

Date: 2026-02-26

Copyright: Copyright © 2026

Source code

#include "cfmaterial_radius_scale.h"

namespace cf::ui::core {

MaterialRadiusScale::MaterialRadiusScale() {
    registerDefaultCorners();
}

void MaterialRadiusScale::registerDefaultCorners() {
    namespace literals = cf::ui::core::token::literals;
    auto& r = registry_;

    // 注册默认值(Material Design 3 规范)
    r.register_dynamic<float>(literals::CORNER_NONE, 0.0f);
    r.register_dynamic<float>(literals::CORNER_EXTRA_SMALL, 4.0f);
    r.register_dynamic<float>(literals::CORNER_SMALL, 8.0f);
    r.register_dynamic<float>(literals::CORNER_MEDIUM, 12.0f);
    r.register_dynamic<float>(literals::CORNER_LARGE, 16.0f);
    r.register_dynamic<float>(literals::CORNER_EXTRA_LARGE, 28.0f);
    r.register_dynamic<float>(literals::CORNER_EXTRA_EXTRA_LARGE, 32.0f);
}

float MaterialRadiusScale::queryRadiusScale(const char* name) {
    // 先查缓存
    auto it = radius_cache_.find(name);
    if (it != radius_cache_.end()) {
        return it->second;
    }

    // 从注册表获取
    auto result = registry_.get_dynamic<float>(name);
    if (result && *result) {
        auto [iter, inserted] = radius_cache_.emplace(name, **result);
        return iter->second;
    }

    // 默认回退值
    return 0.0f;
}

} // namespace cf::ui::core

Updated on 2026-03-09 at 10:14:01 +0000