bool RObject::updateStructure (RData *new_data) { RK_TRACE (OBJECTS); if (new_data->getDataLength () == 0) { // can happen, if the object no longer exists return false; } RK_ASSERT (new_data->getDataLength () >= 5); RK_ASSERT (new_data->getDataType () == RData::StructureVector); if (!canAccommodateStructure (new_data)) return false; bool properties_change = false; properties_change = updateName (new_data->getStructureVector ()[0]); properties_change = updateType (new_data->getStructureVector ()[1]); properties_change = updateClasses (new_data->getStructureVector ()[2]); properties_change = updateMeta (new_data->getStructureVector ()[3]); properties_change = updateDimensions (new_data->getStructureVector ()[4]); if (properties_change) RKGlobals::tracker ()->objectMetaChanged (this); if (type & NeedDataUpdate) updateDataFromR (0); if (isPending ()) type -= Pending; return true; }
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::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<const rapidjson::Document &>(doc)); layers = parser.getLayers(); sprite_url = parser.getSprite(); glyph_url = parser.getGlyphURL(); updateClasses(); }
void Style::setAppliedClasses(const std::vector<std::string> &class_names) { appliedClasses = class_names; updateClasses(); }