[core] add MapChangeDidFinishLoadingStyle signal (#6371)
This commit is contained in:
@@ -19,6 +19,7 @@ enum MapChange : uint8_t {
|
||||
MapChangeWillStartRenderingMap = 11,
|
||||
MapChangeDidFinishRenderingMap = 12,
|
||||
MapChangeDidFinishRenderingMapFullyRendered = 13,
|
||||
MapChangeDidFinishLoadingStyle = 14
|
||||
};
|
||||
|
||||
} // namespace mbgl
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {}
|
||||
};
|
||||
|
||||
|
||||
@@ -105,6 +105,8 @@ void Style::setJSON(const std::string& json) {
|
||||
observer->onResourceError(error);
|
||||
|
||||
return;
|
||||
} else {
|
||||
observer->onStyleLoaded();
|
||||
}
|
||||
|
||||
for (auto& source : parser.sources) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user