#ifndef LLMR_MAP_MAP #define LLMR_MAP_MAP #include #include #include #include #include #include #include namespace llmr { class Settings; class Map : private util::noncopyable { public: explicit Map(Settings& settings); ~Map(); /* setup */ void setup(float pixelRatio = 1); void loadStyle(const uint8_t *const data, uint32_t bytes); void loadSprite(const std::string& url); void loadSettings(); void resize(uint32_t width, uint32_t height, uint32_t fb_width, uint32_t fb_height); /* callback */ bool render(); void cancelAnimations(); /* position */ void moveBy(double dx, double dy, double duration = 0); void setLonLat(double lon, double lat, double duration = 0); void getLonLat(double &lon, double &lat) const; void startPanning(); void stopPanning(); void resetPosition(); /* scale */ void scaleBy(double ds, double cx = -1, double cy = -1, double duration = 0); void setScale(double scale, double cx = -1, double cy = -1, double duration = 0); double getScale() const; void setZoom(double zoom, double duration = 0); double getZoom() const; void setLonLatZoom(double lon, double lat, double zoom, double duration = 0); void getLonLatZoom(double &lon, double &lat, double &zoom) const; void resetZoom(); void startScaling(); void stopScaling(); /* rotation */ void rotateBy(double cx, double cy, double sx, double sy, double ex, double ey, double duration = 0); void setAngle(double angle, double cx = -1, double cy = -1, double duration = 0); double getAngle() const; void resetNorth(); void startRotating(); void stopRotating(); void toggleDebug(); private: bool findLoadedChildren(const Tile::ID& id, int32_t maxCoveringZoom, std::forward_list& retain); bool findLoadedParent(const Tile::ID& id, int32_t minCoveringZoom, std::forward_list& retain); bool updateTiles(); std::shared_ptr addTile(const Tile::ID& id); std::shared_ptr hasTile(const Tile::ID& id); void update(); private: Settings& settings; Transform transform; Style style; Painter painter; int32_t min_zoom; int32_t max_zoom; float pixel_ratio; std::forward_list> tiles; std::forward_list> historic_tiles; }; } #endif