[core] add MapChangeDidFinishLoadingStyle signal (#6371)

This commit is contained in:
Ivo van Dongen
2016-09-20 09:55:53 +02:00
committed by GitHub
parent 073a675c29
commit f3b38df91d
5 changed files with 29 additions and 0 deletions

View File

@@ -19,6 +19,7 @@ enum MapChange : uint8_t {
MapChangeWillStartRenderingMap = 11,
MapChangeDidFinishRenderingMap = 12,
MapChangeDidFinishRenderingMapFullyRendered = 13,
MapChangeDidFinishLoadingStyle = 14
};
} // namespace mbgl

View File

@@ -39,6 +39,7 @@ public:
Impl(View&, FileSource&, MapMode, GLContextMode, ConstrainMode, ViewportMode);
void onUpdate(Update) override;
void onStyleLoaded() override;
void onStyleError() override;
void onResourceError(std::exception_ptr) override;
@@ -965,6 +966,10 @@ void Map::Impl::onUpdate(Update flags) {
updateFlags |= flags;
asyncUpdate.send();
}
void Map::Impl::onStyleLoaded() {
view.notifyMapChange(MapChangeDidFinishLoadingStyle);
}
void Map::Impl::onStyleError() {
view.notifyMapChange(MapChangeDidFailLoadingMap);

View File

@@ -14,6 +14,7 @@ class Observer : public GlyphAtlasObserver,
public:
virtual void onUpdate(Update) {}
virtual void onStyleError() {}
virtual void onStyleLoaded() {}
virtual void onResourceError(std::exception_ptr) {}
};

View File

@@ -105,6 +105,8 @@ void Style::setJSON(const std::string& json) {
observer->onResourceError(error);
return;
} else {
observer->onStyleLoaded();
}
for (auto& source : parser.sources) {

View File

@@ -202,6 +202,26 @@ TEST(Map, StyleEarlyMutation) {
EXPECT_NE(nullptr, map.getLayer("water"));
}
TEST(Map, StyleLoadedSignal) {
MapTest test;
Map map(test.view, test.fileSource, MapMode::Still);
// The map should emit a signal on style loaded
bool emitted = false;
test.view.setMapChangeCallback([&](MapChange change) {
if (change == mbgl::MapChangeDidFinishLoadingStyle) {
emitted = true;
}
});
map.setStyleJSON(util::read_file("test/fixtures/api/empty.json"));
EXPECT_TRUE(emitted);
// But not when the style couldn't be parsed
emitted = false;
map.setStyleJSON("invalid");
EXPECT_FALSE(emitted);
}
TEST(Map, AddLayer) {
MapTest test;