/* * Copyright 2018 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef SkTextBlobPriv_DEFINED #define SkTextBlobPriv_DEFINED #include "include/core/SkColorFilter.h" #include "include/core/SkFont.h" #include "include/core/SkImageFilter.h" #include "include/core/SkMaskFilter.h" #include "include/core/SkPathEffect.h" #include "include/core/SkShader.h" #include "include/core/SkTextBlob.h" #include "include/core/SkTypeface.h" #include "src/base/SkSafeMath.h" #include "src/core/SkPaintPriv.h" class SkReadBuffer; class SkWriteBuffer; class SkTextBlobPriv { … }; // // Textblob data is laid out into externally-managed storage as follows: // // ----------------------------------------------------------------------------- // | SkTextBlob | RunRecord | Glyphs[] | Pos[] | RunRecord | Glyphs[] | Pos[] | ... // ----------------------------------------------------------------------------- // // Each run record describes a text blob run, and can be used to determine the (implicit) // location of the following record. // // Extended Textblob runs have more data after the Pos[] array: // // ------------------------------------------------------------------------- // ... | RunRecord | Glyphs[] | Pos[] | TextSize | Clusters[] | Text[] | ... // ------------------------------------------------------------------------- // // To determine the length of the extended run data, the TextSize must be read. // // Extended Textblob runs may be mixed with non-extended runs. SkDEBUGCODE(…) class SkTextBlob::RunRecord { … }; /** * Iterate through all of the text runs of the text blob. For example: * for (SkTextBlobRunIterator it(blob); !it.done(); it.next()) { * ..... * } */ class SK_SPI SkTextBlobRunIterator { … }; #endif // SkTextBlobPriv_DEFINED