From 682eaec87cff73e7a2c547fddea889d478e7d29d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20Ka=CC=88fer?= Date: Tue, 15 Jul 2014 18:08:14 -0700 Subject: [PATCH] add icon render test --- include/llmr/map/sprite.hpp | 1 + include/llmr/platform/event.hpp | 2 ++ src/map/map.cpp | 1 + src/map/sprite.cpp | 11 +++--- src/style/filter_expression.cpp | 6 ++-- src/util/io.cpp | 4 +-- test/fixtures/fixture_log.cpp | 9 ++--- test/fixtures/styles/icons.info.json | 18 ++++++++++ test/fixtures/styles/icons.style.json | 33 ++++++++++++++++++ .../styles/icons/default.expected.png | Bin 0 -> 6538 bytes 10 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 test/fixtures/styles/icons.info.json create mode 100644 test/fixtures/styles/icons.style.json create mode 100644 test/fixtures/styles/icons/default.expected.png diff --git a/include/llmr/map/sprite.hpp b/include/llmr/map/sprite.hpp index 07f5903e5..079f0decc 100644 --- a/include/llmr/map/sprite.hpp +++ b/include/llmr/map/sprite.hpp @@ -52,6 +52,7 @@ private: private: Map ↦ + std::string url; std::string body; std::string image; std::atomic loaded; diff --git a/include/llmr/platform/event.hpp b/include/llmr/platform/event.hpp index 133cfc3c5..81b3e1d02 100644 --- a/include/llmr/platform/event.hpp +++ b/include/llmr/platform/event.hpp @@ -32,6 +32,7 @@ enum class Event : uint8_t { ParseTile, Render, HttpRequest, + Sprite, }; LLMR_DEFINE_ENUM_CLASS(EventClass, Event, { @@ -42,6 +43,7 @@ LLMR_DEFINE_ENUM_CLASS(EventClass, Event, { { Event::ParseTile, "ParseTile" }, { Event::Render, "Render" }, { Event::HttpRequest, "HttpRequest" }, + { Event::Sprite, "Sprite" }, { Event(-1), "Unknown" }, }); diff --git a/src/map/map.cpp b/src/map/map.cpp index 68db66370..4d374f1d5 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -97,6 +97,7 @@ void Map::run() { // If the map rendering wasn't started asynchronously, we perform one render // *after* all events have been processed. if (!async) { + prepare(); render(); } } diff --git a/src/map/sprite.cpp b/src/map/sprite.cpp index 4b23b120c..823d64665 100644 --- a/src/map/sprite.cpp +++ b/src/map/sprite.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -27,6 +28,8 @@ Sprite::Sprite(Map &map, float pixelRatio) } void Sprite::load(const std::string& base_url) { + loaded = false; + url = base_url; std::shared_ptr sprite = shared_from_this(); std::string suffix = (pixelRatio > 1 ? "@2x" : ""); @@ -53,12 +56,12 @@ void Sprite::load(const std::string& base_url) { } void Sprite::complete(std::shared_ptr &sprite) { - if (sprite->raster && sprite->pos.size()) { + const bool raster = bool(sprite->raster); + const bool json = bool(sprite->pos.size()); + if (raster && json && !sprite->loaded) { sprite->loaded = true; sprite->map.update(); -#if defined(DEBUG) - fprintf(stderr, "sprite loaded\n"); -#endif + Log::Info(Event::Sprite, "loaded %s", sprite->url.c_str()); } } diff --git a/src/style/filter_expression.cpp b/src/style/filter_expression.cpp index 58483acca..cba7e21f1 100644 --- a/src/style/filter_expression.cpp +++ b/src/style/filter_expression.cpp @@ -61,11 +61,11 @@ bool FilterComparison::Instance::compare(const std::forward_list &propert switch (op) { case Operator::Equal: for (const Value &property_value : property_values) { - if (!includes(property_value, util::relaxed_equal)) { - return false; + if (includes(property_value, util::relaxed_equal)) { + return true; } } - return true; + return false; case Operator::NotEqual: for (const Value &property_value : property_values) { if (includes(property_value, util::relaxed_equal)) { diff --git a/src/util/io.cpp b/src/util/io.cpp index 1312b907b..2fd638cdf 100644 --- a/src/util/io.cpp +++ b/src/util/io.cpp @@ -15,7 +15,7 @@ void write_file(const std::string &filename, const std::string &data) { fwrite(data.data(), sizeof(std::string::value_type), data.size(), fd); fclose(fd); } else { - fprintf(stderr, "Failed to open file\n"); + throw std::runtime_error(std::string("Failed to open file ") + filename); } } @@ -26,7 +26,7 @@ std::string read_file(const std::string &filename) { data << file.rdbuf(); return data.str(); } else { - throw std::runtime_error("Cannot read file " + filename); + throw std::runtime_error(std::string("Cannot read file ") + filename); } } diff --git a/test/fixtures/fixture_log.cpp b/test/fixtures/fixture_log.cpp index 159f927e2..9253f5f98 100644 --- a/test/fixtures/fixture_log.cpp +++ b/test/fixtures/fixture_log.cpp @@ -24,6 +24,7 @@ std::vector FixtureLogBackend::unchecked() const for (const LogMessage &msg : messages) { if (!msg.checked) { unchecked.push_back(msg); + msg.checked = true; } } return unchecked; @@ -37,10 +38,10 @@ std::vector FixtureLogBackend::unchecked() const } ::std::ostream& operator<<(::std::ostream& os, const FixtureLogBackend::LogMessage& message) { - os << "[\"" << message.severity.get() << "\", \"" << message.event.get(); - if (message.code) os << "\", " << message.code.get(); - if (message.msg) os << ", \"" << message.msg.get(); - return os << "\"]" << std::endl; + os << "[\"" << message.severity.get() << "\", \"" << message.event.get() << "\""; + if (message.code) os << ", " << message.code.get(); + if (message.msg) os << ", \"" << message.msg.get() << "\""; + return os << "]" << std::endl; } } \ No newline at end of file diff --git a/test/fixtures/styles/icons.info.json b/test/fixtures/styles/icons.info.json new file mode 100644 index 000000000..e116913aa --- /dev/null +++ b/test/fixtures/styles/icons.info.json @@ -0,0 +1,18 @@ +{ + "default": { + "zoom": 14, + "center": [52.499167, 13.418056], + "height": 256, + "log": [ + [1, "INFO", "HttpRequest", 200, "sprites/outdoors.json"], + [1, "INFO", "HttpRequest", 200, "sprites/outdoors.png"], + [1, "INFO", "HttpRequest", 200, "tiles/14-8803-5375.vector.pbf"], + [1, "INFO", "HttpRequest", 200, "tiles/14-8802-5375.vector.pbf"], + [1, "INFO", "HttpRequest", 200, "tiles/14-8803-5374.vector.pbf"], + [1, "INFO", "HttpRequest", 200, "tiles/14-8802-5374.vector.pbf"], + [6, "INFO", "HttpRequest"], + + [1, "INFO", "Sprite", "loaded sprites/outdoors"] + ] + } +} diff --git a/test/fixtures/styles/icons.style.json b/test/fixtures/styles/icons.style.json new file mode 100644 index 000000000..46adfbd40 --- /dev/null +++ b/test/fixtures/styles/icons.style.json @@ -0,0 +1,33 @@ +{ + "version": 3, + "sources": { + "mapbox": { + "type": "vector", + "url": "tiles/{z}-{x}-{y}.vector.pbf", + "tileSize": 512, + "maxZoom": 14 + } + }, + "sprite": "sprites/outdoors", + "layers": [ + { + "id": "background", + "type": "background", + "style": { + "background-color": "green" + } + }, + { + "id": "poi", + "source": "mapbox", + "source-layer": "poi_label", + "type": "icon", + "filter": { "maki": "restaurant" }, + "render": { + "icon-image": "{maki}-12", + "icon-size": 12, + "icon-allow-overlap": true + } + } + ] +} diff --git a/test/fixtures/styles/icons/default.expected.png b/test/fixtures/styles/icons/default.expected.png new file mode 100644 index 0000000000000000000000000000000000000000..17e3252c888b78f796adf891fe3d5cb7b8bf88c8 GIT binary patch literal 6538 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 literal 0 HcmV?d00001