#ifndef MBGL_MAP_MAP #define MBGL_MAP_MAP #include #include #include #include #include #include #include #include #include #include #include namespace mbgl { class GlyphAtlas; class GlyphStore; class LayerDescription; class SpriteAtlas; class Sprite; class Style; class StyleLayer; class StyleLayerGroup; class StyleSource; class Texturepool; class FileSource; class View; class Map : private util::noncopyable { public: explicit Map(View &view); ~Map(); // Start/stop the map render thread void start(); void stop(); // Runs the map event loop. void run(); // Triggers a lazy rerender: only performs a render when the map is not clean. void rerender(); void renderLayer(std::shared_ptr layer_desc, RenderPass pass, const Tile::ID* id = nullptr, const mat4* matrix = nullptr); // Forces a map update: always triggers a rerender. void update(); // Triggers a cleanup that releases resources. void cleanup(); // Controls buffer swapping. bool needsSwap(); void swapped(); // Size void resize(uint16_t width, uint16_t height, float ratio = 1); void resize(uint16_t width, uint16_t height, float ratio, uint16_t fb_width, uint16_t fb_height); // Styling const std::set> getActiveSources() const; void setAppliedClasses(const std::vector &classes); void toggleClass(const std::string &name); const std::vector &getAppliedClasses() const; void setDefaultTransitionDuration(uint64_t duration_milliseconds = 0); void setStyleURL(const std::string &url); void setStyleJSON(std::string newStyleJSON, const std::string &base = ""); std::string getStyleJSON() const; void setAccessToken(std::string access_token); std::string getAccessToken() const; // Transition void cancelTransitions(); // 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(); double getMinZoom() const; double getMaxZoom() const; // Rotation void rotateBy(double sx, double sy, double ex, double ey, double duration = 0); void setBearing(double degrees, double duration = 0); void setBearing(double degrees, double cx, double cy); double getBearing() const; void resetNorth(); void startRotating(); void stopRotating(); bool canRotate(); // Debug void setDebug(bool value); void toggleDebug(); bool getDebug() const; public: inline const TransformState &getState() const { return state; } inline std::shared_ptr getFileSource() const { return fileSource; } inline std::shared_ptr