#Topic Text_Blob_Builder #Alias Text_Blob_Builder_Reference ## #Class SkTextBlobBuilder #Code #Populate ## Helper class for constructing SkTextBlob. # ------------------------------------------------------------------------------ #Struct RunBuffer #Line # storage for Glyphs and Glyph positions ## #Code struct RunBuffer { SkGlyphID* glyphs; SkScalar* pos; char* utf8text; uint32_t* clusters; }; ## RunBuffer supplies storage for Glyphs and positions within a run. A run is a sequence of Glyphs sharing Font_Metrics and positioning. Each run may position its Glyphs in one of three ways: by specifying where the first Glyph is drawn, and allowing Font_Metrics to determine the advance to subsequent Glyphs; by specifying a baseline, and the position on that baseline for each Glyph in run; or by providing Point array, one per Glyph. #Member SkGlyphID* glyphs #Line # storage for Glyphs in run ## glyphs points to memory for one or more Glyphs. glyphs memory must be written to by the caller. ## #Member SkScalar* pos #Line # storage for positions in run ## pos points to memory for Glyph positions. Depending on how RunBuffer is allocated, pos may point to zero bytes per Glyph, one Scalar per Glyph, or one Point per Glyph. ## #Member char* utf8text #Line # reserved for future use ## Reserved for future use. utf8text should not be read or written. ## #Member uint32_t* clusters #Line # reserved for future use ## Reserved for future use. clusters should not be read or written. ## #SeeAlso allocRun allocRunPos allocRunPosH #Struct RunBuffer ## # ------------------------------------------------------------------------------ #Method SkTextBlobBuilder() #In Constructors #Line # constructs with default values ## #Populate #Example SkTextBlobBuilder builder; sk_sp blob = builder.make(); SkDebugf("blob " "%s" " nullptr", blob == nullptr ? "equals" : "does not equal"); #StdOut blob equals nullptr ## ## #SeeAlso make SkTextBlob::MakeFromText #Method ## # ------------------------------------------------------------------------------ #Method ~SkTextBlobBuilder() #In Constructors #Line # deletes storage ## #Populate #NoExample ## #SeeAlso SkTextBlobBuilder() #Method ## # ------------------------------------------------------------------------------ #Method sk_sp make() #In Constructors #Line # constructs Text_Blob from bulider ## #Populate #Example SkTextBlobBuilder builder; sk_sp blob = builder.make(); SkDebugf("blob " "%s" " nullptr\n", blob == nullptr ? "equals" : "does not equal"); SkPaint paint; paint.setTextEncoding(kGlyphID_SkTextEncoding); SkFont font; paint.textToGlyphs("x", 1, builder.allocRun(font, 1, 20, 20).glyphs); blob = builder.make(); SkDebugf("blob " "%s" " nullptr\n", blob == nullptr ? "equals" : "does not equal"); blob = builder.make(); SkDebugf("blob " "%s" " nullptr\n", blob == nullptr ? "equals" : "does not equal"); #StdOut blob equals nullptr blob does not equal nullptr blob equals nullptr ## ## #SeeAlso SkTextBlob::MakeFromText #Method ## # ------------------------------------------------------------------------------ #Method const RunBuffer& allocRun(const SkFont& font, int count, SkScalar x, SkScalar y, const SkRect* bounds = nullptr) #In Allocator #Line # returns writable glyph buffer at Point ## #Populate #Example #Height 60 SkTextBlobBuilder builder; SkFont font; SkPaint paint; const SkTextBlobBuilder::RunBuffer& run = builder.allocRun(font, 5, 20, 20); paint.textToGlyphs("hello", 5, run.glyphs); canvas->drawRect({20, 20, 30, 30}, paint); canvas->drawTextBlob(builder.make(), 20, 20, paint); ## #SeeAlso allocRunPosH allocRunPos #Method ## # ------------------------------------------------------------------------------ #Method const RunBuffer& allocRunPosH(const SkFont& font, int count, SkScalar y, const SkRect* bounds = nullptr) #In Allocator #Line # returns writable glyph and x-axis position buffers ## #Populate #Example #Height 60 SkTextBlobBuilder builder; SkPaint paint; SkFont font; const SkTextBlobBuilder::RunBuffer& run = builder.allocRunPosH(font, 5, 20); paint.textToGlyphs("hello", 5, run.glyphs); SkScalar positions[] = {0, 10, 20, 40, 80}; memcpy(run.pos, positions, sizeof(positions)); canvas->drawTextBlob(builder.make(), 20, 20, paint); ## #SeeAlso allocRunPos allocRun #Method ## # ------------------------------------------------------------------------------ #Method const RunBuffer& allocRunPos(const SkFont& font, int count, const SkRect* bounds = nullptr) #In Allocator #Line # returns writable glyph and Point buffers ## #Populate #Example #Height 90 SkTextBlobBuilder builder; SkPaint paint; SkFont font; const SkTextBlobBuilder::RunBuffer& run = builder.allocRunPos(font, 5); paint.textToGlyphs("hello", 5, run.glyphs); SkPoint positions[] = {{0, 0}, {10, 10}, {20, 20}, {40, 40}, {80, 80}}; memcpy(run.pos, positions, sizeof(positions)); canvas->drawTextBlob(builder.make(), 20, 20, paint); ## #SeeAlso allocRunPosH allocRun #Method ## #Class SkTextBlobBuilder ## #Topic Text_Blob_Builder ##