use class ids rather than names for storing styles

This commit is contained in:
Konstantin Käfer
2014-06-27 15:57:47 +02:00
parent e989478b27
commit 38d9cd0d4f
3 changed files with 8 additions and 5 deletions

View File

@@ -8,6 +8,7 @@
#include <llmr/geometry/sprite_atlas.hpp>
#include <llmr/util/transition.hpp>
#include <llmr/util/uv.hpp>
#include <llmr/style/class_dictionary.hpp>
#include <map>
#include <unordered_map>
@@ -38,7 +39,7 @@ public:
public:
std::string id;
StyleBucket::Ptr bucket;
std::unordered_map<std::string, ClassProperties> styles;
std::map<ClassID, ClassProperties> styles;
StyleProperties style;
std::unique_ptr<RasterizeProperties> rasterize;
std::shared_ptr<StyleLayerGroup> layers;

View File

@@ -164,14 +164,15 @@ void Style::cascade(const std::shared_ptr<StyleLayerGroup> &layers, float z) {
layer->style = resetClassProperties(*layer);
// Apply default class (if exists)
auto default_it = layer->styles.find("");
auto default_it = layer->styles.find(ClassID::Default);
if (default_it != layer->styles.end()) {
applyClassProperties(layer->style, default_it->second, z);
}
// Apply overriding classes in order.
for (const std::string &class_name : appliedClasses) {
auto class_it = layer->styles.find(class_name);
const ClassID class_id = ClassDictionary::Lookup(class_name);
auto class_it = layer->styles.find(class_id);
if (class_it != layer->styles.end()) {
applyClassProperties(layer->style, class_it->second, z);
}

View File

@@ -469,9 +469,10 @@ void StyleParser::parseStyles(JSVal value, std::shared_ptr<StyleLayer> &layer) {
const std::string name { itr->name.GetString(), itr->name.GetStringLength() };
if (name == "style") {
parseStyle(replaceConstant(itr->value), layer->styles[""]);
parseStyle(replaceConstant(itr->value), layer->styles[ClassID::Default]);
} else if (name.compare(0, 6, "style.") == 0 && name.length() > 6) {
parseStyle(replaceConstant(itr->value), layer->styles[name.substr(6)]);
const ClassID class_id = ClassDictionary::Lookup(name.substr(6));
parseStyle(replaceConstant(itr->value), layer->styles[class_id]);
}
}
}