#pragma once #include #include #include #include #include #include namespace mbgl { namespace style { using ImageStretch = std::pair; using ImageStretches = std::vector; class ImageContent { public: float left; float top; float right; float bottom; bool operator==(const ImageContent& rhs) const { return left == rhs.left && top == rhs.top && right == rhs.right && bottom == rhs.bottom; } }; class Image { public: Image(std::string id, PremultipliedImage&&, float pixelRatio, bool sdf, ImageStretches stretchX = {}, ImageStretches stretchY = {}, const optional& content = nullopt); Image(std::string id, PremultipliedImage&& image, float pixelRatio, ImageStretches stretchX = {}, ImageStretches stretchY = {}, const optional& content = nullopt) : Image(std::move(id), std::move(image), pixelRatio, false, std::move(stretchX), std::move(stretchY), content) { } Image(const Image&); std::string getID() const; const PremultipliedImage& getImage() const; // Pixel ratio of the sprite image. float getPixelRatio() const; // Whether this image should be interpreted as a signed distance field icon. bool isSdf() const; // Stretch areas of this image. const ImageStretches& getStretchX() const; const ImageStretches& getStretchY() const; // The space where text can be fit into this image. const optional& getContent() const; class Impl; Immutable baseImpl; explicit Image(Immutable baseImpl_) : baseImpl(std::move(baseImpl_)) {} }; } // namespace style } // namespace mbgl