diff options
author | Hal Canary <halcanary@google.com> | 2018-07-24 11:33:21 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-25 17:21:56 +0000 |
commit | 4014ba6ec7a7825495ac0a6ed591c5dadd30751d (patch) | |
tree | 7439f79dce6e1768d7cdf3e36d4952fd9ed8ef1b /src/core/SkOverdrawCanvas.cpp | |
parent | ba5c439809fb2be3b1db159b29aeffaa39f786df (diff) |
SkUtils: remove some versions of UTF routines.
Change-Id: Ib1f776ae472117c23d2145253adf25fceb412b32
Reviewed-on: https://skia-review.googlesource.com/143111
Reviewed-by: Herb Derby <herb@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
Diffstat (limited to 'src/core/SkOverdrawCanvas.cpp')
-rw-r--r-- | src/core/SkOverdrawCanvas.cpp | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/core/SkOverdrawCanvas.cpp b/src/core/SkOverdrawCanvas.cpp index e8327e55cc..35656e0829 100644 --- a/src/core/SkOverdrawCanvas.cpp +++ b/src/core/SkOverdrawCanvas.cpp @@ -95,22 +95,26 @@ void SkOverdrawCanvas::onDrawTextOnPath(const void* text, size_t byteLength, con return; } -typedef int (*CountTextProc)(const char* text); -static int count_utf16(const char* text) { - const uint16_t* prev = (uint16_t*)text; - (void)SkUTF16_NextUnichar(&prev); +typedef int (*CountTextProc)(const char* text, const char* stop); +static int count_utf16(const char* text, const char* stop) { + const uint16_t* prev = (const uint16_t*)text; + (void)SkUTF16_NextUnichar(&prev, (const uint16_t*)stop); return SkToInt((const char*)prev - text); } -static int return_4(const char* text) { return 4; } -static int return_2(const char* text) { return 2; } +static int return_4(const char* text, const char* stop) { return 4; } +static int return_2(const char* text, const char* stop) { return 2; } +static int count_utf8(const char* text, const char* stop) { + return SkUTF8_LeadByteToCount(*(const uint8_t*)text); +} void SkOverdrawCanvas::onDrawTextRSXform(const void* text, size_t byteLength, const SkRSXform xform[], const SkRect*, const SkPaint& paint) { + const char* stop = (const char*)text + byteLength; CountTextProc proc = nullptr; switch (paint.getTextEncoding()) { case SkPaint::kUTF8_TextEncoding: - proc = SkUTF8_CountUTF8Bytes; + proc = count_utf8; break; case SkPaint::kUTF16_TextEncoding: proc = count_utf16; @@ -129,7 +133,8 @@ void SkOverdrawCanvas::onDrawTextRSXform(const void* text, size_t byteLength, while ((const char*)text < (const char*)stopText) { matrix.setRSXform(*xform++); matrix.setConcat(this->getTotalMatrix(), matrix); - int subLen = proc((const char*)text); + int subLen = proc((const char*)text, stop); + SkASSERT(subLen > 0); this->save(); this->concat(matrix); |