From 27a914815e757ed12523edf968c9da134dabeaf8 Mon Sep 17 00:00:00 2001 From: George Wright Date: Fri, 18 May 2012 14:10:44 -0400 Subject: [PATCH 01/10] Bug 755869 - [4] Re-apply bug 687189 - Implement SkPaint::getPosTextPath r=mattwoodrow --- gfx/skia/include/core/SkPaint.h | 3 +++ gfx/skia/src/core/SkPaint.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 0 deletions(-) diff --git a/gfx/skia/include/core/SkPaint.h b/gfx/skia/include/core/SkPaint.h index 1930db1..ff37d77 100644 --- a/gfx/skia/include/core/SkPaint.h +++ b/gfx/skia/include/core/SkPaint.h @@ -813,6 +813,9 @@ public: void getTextPath(const void* text, size_t length, SkScalar x, SkScalar y, SkPath* path) const; + void getPosTextPath(const void* text, size_t length, + const SkPoint pos[], SkPath* path) const; + #ifdef SK_BUILD_FOR_ANDROID const SkGlyph& getUnicharMetrics(SkUnichar); const SkGlyph& getGlyphMetrics(uint16_t); diff --git a/gfx/skia/src/core/SkPaint.cpp b/gfx/skia/src/core/SkPaint.cpp index 1b74fa1..4c119aa 100644 --- a/gfx/skia/src/core/SkPaint.cpp +++ b/gfx/skia/src/core/SkPaint.cpp @@ -1355,6 +1355,33 @@ void SkPaint::getTextPath(const void* textData, size_t length, } } +void SkPaint::getPosTextPath(const void* textData, size_t length, + const SkPoint pos[], SkPath* path) const { + SkASSERT(length == 0 || textData != NULL); + + const char* text = (const char*)textData; + if (text == NULL || length == 0 || path == NULL) { + return; + } + + SkTextToPathIter iter(text, length, *this, false); + SkMatrix matrix; + SkPoint prevPos; + prevPos.set(0, 0); + + matrix.setScale(iter.getPathScale(), iter.getPathScale()); + path->reset(); + + unsigned int i = 0; + const SkPath* iterPath; + while ((iterPath = iter.next(NULL)) != NULL) { + matrix.postTranslate(pos[i].fX - prevPos.fX, pos[i].fY - prevPos.fY); + path->addPath(*iterPath, matrix); + prevPos = pos[i]; + i++; + } +} + static void add_flattenable(SkDescriptor* desc, uint32_t tag, SkFlattenableWriteBuffer* buffer) { buffer->flatten(desc->addEntry(tag, buffer->size(), NULL)); -- 1.7.5.4