本文整理汇总了C++中StyleContext::evalStyle方法的典型用法代码示例。如果您正苦于以下问题:C++ StyleContext::evalStyle方法的具体用法?C++ StyleContext::evalStyle怎么用?C++ StyleContext::evalStyle使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StyleContext
的用法示例。
在下文中一共展示了StyleContext::evalStyle方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: eval
bool DrawRule::eval(const StyleContext& _ctx) {
for (auto& param : parameters) {
if (param.function >= 0) {
if (!_ctx.evalStyle(param.function, param.key, param.value)) {
if (StyleParam::isRequired(param.key)){
return false;
}
}
}
if (param.stops) {
if (StyleParam::isColor(param.key)) {
param.value = param.stops->evalColor(_ctx.getGlobalZoom());
} else if (StyleParam::isWidth(param.key)) {
param.value = param.stops->evalWidth(_ctx.getGlobalZoom());
} else {
param.value = param.stops->evalFloat(_ctx.getGlobalZoom());
}
}
}
return true;
}
示例2: apply
void DrawRuleMergeSet::apply(const Feature& _feature, const SceneLayer& _layer,
StyleContext& _ctx, TileBuilder& _builder) {
// If no rules matched the feature, return immediately
if (!match(_feature, _layer, _ctx)) { return; }
// For each matched rule, find the style to be used and
// build the feature with the rule's parameters
for (auto& rule : m_matchedRules) {
StyleBuilder* style = _builder.getStyleBuilder(rule.getStyleName());
if (!style) {
LOGE("Invalid style %s", rule.getStyleName().c_str());
continue;
}
bool visible;
if (rule.get(StyleParamKey::visible, visible) && !visible) {
continue;
}
bool valid = true;
for (size_t i = 0; i < StyleParamKeySize; ++i) {
if (!rule.active[i]) {
rule.params[i].param = nullptr;
continue;
}
auto*& param = rule.params[i].param;
// Evaluate JS functions and Stops
if (param->function >= 0) {
// Copy param into 'evaluated' and point param to the evaluated StyleParam.
m_evaluated[i] = *param;
param = &m_evaluated[i];
if (!_ctx.evalStyle(param->function, param->key, m_evaluated[i].value)) {
if (StyleParam::isRequired(param->key)) {
valid = false;
break;
} else {
rule.active[i] = false;
}
}
} else if (param->stops) {
m_evaluated[i] = *param;
param = &m_evaluated[i];
Stops::eval(*param->stops, param->key, _ctx.getGlobalZoom(),
m_evaluated[i].value);
}
}
if (valid) {
// build outline explicitly with outline style
const auto& outlineStyleName = rule.findParameter(StyleParamKey::outline_style);
if (outlineStyleName) {
auto& styleName = outlineStyleName.value.get<std::string>();
auto* outlineStyle = _builder.getStyleBuilder(styleName);
if (!outlineStyle) {
LOGE("Invalid style %s", styleName.c_str());
} else {
rule.isOutlineOnly = true;
outlineStyle->addFeature(_feature, rule);
rule.isOutlineOnly = false;
}
}
// build feature with style
style->addFeature(_feature, rule);
}
}
}