summaryrefslogtreecommitdiff
path: root/src/mbgl/text/glyph.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/text/glyph.hpp')
-rw-r--r--src/mbgl/text/glyph.hpp46
1 files changed, 37 insertions, 9 deletions
diff --git a/src/mbgl/text/glyph.hpp b/src/mbgl/text/glyph.hpp
index ba9c521f77..19a0d037a9 100644
--- a/src/mbgl/text/glyph.hpp
+++ b/src/mbgl/text/glyph.hpp
@@ -60,38 +60,66 @@ using GlyphMap = std::map<FontStackHash, Glyphs>;
class PositionedGlyph {
public:
- explicit PositionedGlyph(GlyphID glyph_, float x_, float y_, bool vertical_, FontStackHash font_, float scale_, std::size_t sectionIndex_ = 0)
- : glyph(glyph_), x(x_), y(y_), vertical(vertical_), font(font_), scale(scale_), sectionIndex(sectionIndex_)
- {}
+ explicit PositionedGlyph(GlyphID glyph_,
+ float x_,
+ float y_,
+ bool vertical_,
+ FontStackHash font_,
+ float scale_,
+ Rect<uint16_t> rect_,
+ GlyphMetrics metrics_,
+ optional<std::string> imageID_,
+ std::size_t sectionIndex_ = 0)
+ : glyph(glyph_),
+ x(x_),
+ y(y_),
+ vertical(vertical_),
+ font(font_),
+ scale(scale_),
+ rect(std::move(rect_)),
+ metrics(std::move(metrics_)),
+ imageID(std::move(imageID_)),
+ sectionIndex(sectionIndex_) {}
GlyphID glyph = 0;
float x = 0;
float y = 0;
bool vertical = false;
-
FontStackHash font = 0;
float scale = 0.0;
+ Rect<uint16_t> rect;
+ GlyphMetrics metrics;
+ optional<std::string> imageID;
// Maps positioned glyph to TaggedString section
std::size_t sectionIndex;
};
enum class WritingModeType : uint8_t;
+struct PositionedLine {
+ std::vector<PositionedGlyph> positionedGlyphs;
+ float lineOffset = 0.0;
+};
+
class Shaping {
public:
Shaping() = default;
- explicit Shaping(float x, float y, WritingModeType writingMode_, std::size_t lineCount_)
- : top(y), bottom(y), left(x), right(x), writingMode(writingMode_), lineCount(lineCount_) {}
- std::vector<PositionedGlyph> positionedGlyphs;
+ explicit Shaping(float x, float y, WritingModeType writingMode_)
+ : top(y), bottom(y), left(x), right(x), writingMode(writingMode_) {}
+ std::vector<PositionedLine> positionedLines;
float top = 0;
float bottom = 0;
float left = 0;
float right = 0;
WritingModeType writingMode;
- std::size_t lineCount = 0u;
- explicit operator bool() const { return !positionedGlyphs.empty(); }
+ explicit operator bool() const {
+ return std::any_of(positionedLines.begin(), positionedLines.end(), [](const auto& line) {
+ return !line.positionedGlyphs.empty();
+ });
+ }
// The y offset *should* be part of the font metadata.
static constexpr int32_t yOffset = -17;
+ bool verticalizable = false;
};
enum class WritingModeType : uint8_t {