#include #include #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { Style::Style() : mtx(std::make_unique()) { } // Note: This constructor is seemingly empty, but we need to declare it anyway // because this file includes uv_detail.hpp, which has the declarations necessary // for deleting the std::unique_ptr. Style::~Style() {} void Style::updateProperties(float z, timestamp now) { uv::writelock lock(mtx); if (layers) { layers->updateProperties(z, now); } // Apply transitions after the first time. if (!initial_render_complete) { initial_render_complete = true; return; } } const std::string &Style::getSpriteURL() const { return sprite_url; } void Style::setDefaultTransitionDuration(uint16_t duration_milliseconds) { defaultTransition.duration = duration_milliseconds; } const std::vector &Style::getAppliedClasses() const { return appliedClasses; } void Style::setAppliedClasses(const std::vector &class_names) { appliedClasses = class_names; updateClasses(); } void Style::toggleClass(const std::string &name) { if (name.length()) { auto it = std::find(appliedClasses.begin(), appliedClasses.end(), name); if (it == appliedClasses.end()) { appliedClasses.push_back(name); } else { appliedClasses.erase(it); } } updateClasses(); } void Style::updateClasses() { if (layers) { layers->setClasses(appliedClasses, util::now(), defaultTransition); } } bool Style::hasTransitions() const { if (layers) { if (layers->hasTransitions()) { return true; } } return false; } void Style::loadJSON(const uint8_t *const data) { uv::writelock lock(mtx); rapidjson::Document doc; doc.Parse<0>((const char *const)data); if (doc.HasParseError()) { throw error::style_parse(doc.GetErrorOffset(), doc.GetParseError()); } StyleParser parser; parser.parse(const_cast(doc)); layers = parser.getLayers(); sprite_url = parser.getSprite(); glyph_url = parser.getGlyphURL(); updateClasses(); } }