Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Unified Diff: include/core/SkTextBlob.h

Issue 2084533004: SkTextBlob: Begin implementing Extended TextBlob API (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: 2016-06-20 (Monday) 15:33:30 EDT Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: include/core/SkTextBlob.h
diff --git a/include/core/SkTextBlob.h b/include/core/SkTextBlob.h
index e43ff74a85f22ee2ebb751de060e757299f53653..0427c16726d064d5400983e542ebb9d7a948471e 100644
--- a/include/core/SkTextBlob.h
+++ b/include/core/SkTextBlob.h
@@ -10,6 +10,7 @@
#include "../private/SkTemplates.h"
#include "SkPaint.h"
+#include "SkString.h"
#include "SkRefCnt.h"
class SkReadBuffer;
@@ -45,7 +46,7 @@ public:
*/
static const SkTextBlob* CreateFromBuffer(SkReadBuffer&);
- enum GlyphPositioning {
+ enum GlyphPositioning : uint8_t {
kDefault_Positioning = 0, // Default glyph advances -- zero scalars per glyph.
kHorizontal_Positioning = 1, // Horizontal positioning -- one scalar per glyph.
kFull_Positioning = 2 // Point positioning -- two scalars per glyph.
@@ -104,10 +105,20 @@ public:
* Glyph and position buffers associated with a run.
*
* A run is a sequence of glyphs sharing the same font metrics and positioning mode.
+ *
+ * If textByteCount is 0, utf8text and clusters will be NUL.
Rik 2016/06/20 23:05:16 It's unclear where textByteCount comes from. Maybe
tomhudson 2016/06/21 14:51:28 nit: NULL?
hal.canary 2016/06/22 17:59:57 Done.
hal.canary 2016/06/22 17:59:57 Acknowledged.
+ *
+ * utf8text will point to a buffer of size textByteCount bytes.
+ *
+ * clusters (if not NULL) will point to an array of size count.
Rik 2016/06/20 23:05:16 Could be more descriptive.
hal.canary 2016/06/22 17:59:57 Done.
+ * For each glyph, give the byte-offset into the text for the
+ * first character in that glyph's cluster.
*/
struct RunBuffer {
uint16_t* glyphs;
SkScalar* pos;
+ char* utf8text;
+ uint32_t* clusters;
};
/**
@@ -117,14 +128,26 @@ public:
* @param font The font to be used for this run.
* @param count Number of glyphs.
* @param x,y Position within the blob.
+ * @param textByteCount length of the original UTF-8 text that corresponds to this
+ * sequence of glyphs. If 0, text will be unkown.
tomhudson 2016/06/21 14:51:28 nit: unknown?
hal.canary 2016/06/22 17:59:57 Done.
+ * @param lang Language code, currently unimplemented.
* @param bounds Optional run bounding box. If known in advance (!= NULL), it will
* be used when computing the blob bounds, to avoid re-measuring.
*
* @return A writable glyph buffer, valid until the next allocRun() or
* build() call. The buffer is guaranteed to hold @count@ glyphs.
*/
+ const RunBuffer& allocRunText(const SkPaint& font,
+ int count,
+ SkScalar x,
+ SkScalar y,
+ int textByteCount,
Rik 2016/06/20 23:05:16 Why not pass the UTF-8 buffer here?
hal.canary 2016/06/22 17:59:57 Let's pass the text and glyphs the same way.
+ SkString lang,
+ const SkRect* bounds = NULL);
const RunBuffer& allocRun(const SkPaint& font, int count, SkScalar x, SkScalar y,
- const SkRect* bounds = NULL);
+ const SkRect* bounds = NULL) {
+ return this->allocRunText(font, count, x, y, 0, SkString(), bounds);
+ }
/**
* Allocates a new horizontally-positioned run and returns its writable glyph and position
@@ -133,14 +156,22 @@ public:
* @param font The font to be used for this run.
* @param count Number of glyphs.
* @param y Vertical offset within the blob.
+ * @param textByteCount length of the original UTF-8 text that corresponds to this
+ * sequence of glyphs. If 0, text will be unkown.
+ * @param lang Language code, currently unimplemented.
* @param bounds Optional run bounding box. If known in advance (!= NULL), it will
* be used when computing the blob bounds, to avoid re-measuring.
*
* @return Writable glyph and position buffers, valid until the next allocRun()
* or build() call. The buffers are guaranteed to hold @count@ elements.
*/
+ const RunBuffer& allocRunTextPosH(const SkPaint& font, int count, SkScalar y,
+ int textByteCount, SkString lang,
+ const SkRect* bounds = NULL);
const RunBuffer& allocRunPosH(const SkPaint& font, int count, SkScalar y,
- const SkRect* bounds = NULL);
+ const SkRect* bounds = NULL) {
+ return this->allocRunTextPosH(font, count, y, 0, SkString(), bounds);
+ }
/**
* Allocates a new fully-positioned run and returns its writable glyph and position
@@ -148,6 +179,9 @@ public:
*
* @param font The font to be used for this run.
* @param count Number of glyphs.
+ * @param textByteCount length of the original UTF-8 text that corresponds to this
+ * sequence of glyphs. If 0, text will be unkown.
+ * @param lang Language code, currently unimplemented.
* @param bounds Optional run bounding box. If known in advance (!= NULL), it will
* be used when computing the blob bounds, to avoid re-measuring.
*
@@ -155,12 +189,18 @@ public:
* or build() call. The glyph buffer and position buffer are
* guaranteed to hold @count@ and 2 * @count@ elements, respectively.
*/
- const RunBuffer& allocRunPos(const SkPaint& font, int count, const SkRect* bounds = NULL);
+ const RunBuffer& allocRunTextPos(const SkPaint& font, int count,
+ int textByteCount, SkString lang,
+ const SkRect* bounds = NULL);
+ const RunBuffer& allocRunPos(const SkPaint& font, int count,
+ const SkRect* bounds = NULL) {
+ return this->allocRunTextPos(font, count, 0, SkString(), bounds);
+ }
private:
void reserve(size_t size);
void allocInternal(const SkPaint& font, SkTextBlob::GlyphPositioning positioning,
- int count, SkPoint offset, const SkRect* bounds);
+ int count, int testSize, SkPoint offset, const SkRect* bounds);
reed1 2016/06/20 19:56:24 size_t? testSize -> textSize? is this a byte count
hal.canary 2016/06/22 17:59:57 I don't know. int, unsigned, or size_t would all
bool mergeRun(const SkPaint& font, SkTextBlob::GlyphPositioning positioning,
int count, SkPoint offset);
void updateDeferredBounds();
« no previous file with comments | « include/core/SkPicture.h ('k') | src/core/SkTextBlob.cpp » ('j') | src/core/SkTextBlob.cpp » ('J')

Powered by Google App Engine
This is Rietveld 408576698