aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkOverdrawCanvas.cpp
diff options
context:
space:
mode:
authorGravatar Hal Canary <halcanary@google.com>2018-07-24 11:33:21 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-25 17:21:56 +0000
commit4014ba6ec7a7825495ac0a6ed591c5dadd30751d (patch)
tree7439f79dce6e1768d7cdf3e36d4952fd9ed8ef1b /src/core/SkOverdrawCanvas.cpp
parentba5c439809fb2be3b1db159b29aeffaa39f786df (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.cpp21
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);