56 bool has(
Attr a)
const {
return fStorage[
a] != kNone; }
69 inline static constexpr auto kNone = std::numeric_limits<float>::infinity();
71 float fStorage[5] = { kNone, kNone, kNone, kNone, kNone };
72 bool fImplicitRotate =
false;
97 const size_t fCharIndexOffset;
98 const std::vector<float> fX,
102 const std::vector<float>& fRotate;
105 mutable size_t fLastPosIndex = std::numeric_limits<size_t>::max();
123 struct PositionAdjustment {
133 void reserve(
size_t size) {
140 fUtf8PosAdjust.
clear();
143 void append(
SkUnichar, PositionAdjustment);
148 std::unique_ptr<SkPaint> fillPaint,
150 std::unique_ptr<SkGlyphID[]>
glyphs;
151 std::unique_ptr<SkPoint[]> glyphPos;
152 std::unique_ptr<PositionAdjustment[]> glyhPosAdjust;
164 float length()
const {
return fLength; }
167 std::vector<sk_sp<SkContourMeasure>> fContours;
174 const PositionAdjustment&)
const;
180 Buffer
runBuffer(
const RunInfo& ri)
override;
187 std::unique_ptr<SkShaper> fShaper;
188 std::vector<RunRec> fRuns;
189 const ScopedPosResolver* fPosResolver =
nullptr;
190 std::unique_ptr<PathData> fPathData;
193 ShapeBuffer fShapeBuffer;
194 std::vector<uint32_t> fShapeClusterBuffer;
199 float fChunkAlignmentFactor;
202 size_t fCurrentCharIndex = 0;
208 bool fPrevCharSpace =
true;
209 bool fForcePrimitiveShaping =
false;
float & operator[](Attr a)
void setImplicitRotate(bool imp)
float operator[](Attr a) const
bool isImplicitRotate() const
PosAttrs resolve(size_t charIndex) const
const ShapedTextCallback & getCallback() const
void commitRunBuffer(const RunInfo &ri) override
Buffer runBuffer(const RunInfo &ri) override
void beginLine() override
void flushChunk(const SkSVGRenderContext &ctx)
void shapeFragment(const SkString &, const SkSVGRenderContext &, SkSVGXmlSpace)
void runInfo(const RunInfo &) override
std::function< void(const SkSVGRenderContext &, const sk_sp< SkTextBlob > &, const SkPaint *, const SkPaint *)> ShapedTextCallback
void commitRunInfo() override
void commitLine() override
~SkSVGTextContext() override