diff options
author | Raph Levien <raph@google.com> | 2014-06-05 20:08:56 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-06-05 20:08:56 +0000 |
commit | 4c25e5a1f9bb24e84d50d97266388408fa878ebd (patch) | |
tree | e205a319545415069b0e0d1f0f99cdf4837619ff /core/jni/android/graphics/MinikinUtils.cpp | |
parent | ef7dfc08ba8d0ec7b830dd8084b26cd0e6ecd69a (diff) | |
parent | 30d3c97f297ed484938992bc669bd0e6b7713d9a (diff) | |
download | frameworks_base-4c25e5a1f9bb24e84d50d97266388408fa878ebd.zip frameworks_base-4c25e5a1f9bb24e84d50d97266388408fa878ebd.tar.gz frameworks_base-4c25e5a1f9bb24e84d50d97266388408fa878ebd.tar.bz2 |
am 79fbad97: Merge "Support for scaleX and skewX in Minikin" into lmp-preview-dev
* commit '79fbad97705d191f80d7af7e494ca4a5fed3a783':
Support for scaleX and skewX in Minikin
Diffstat (limited to 'core/jni/android/graphics/MinikinUtils.cpp')
-rw-r--r-- | core/jni/android/graphics/MinikinUtils.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/core/jni/android/graphics/MinikinUtils.cpp b/core/jni/android/graphics/MinikinUtils.cpp index a88b747..146bc3d9 100644 --- a/core/jni/android/graphics/MinikinUtils.cpp +++ b/core/jni/android/graphics/MinikinUtils.cpp @@ -14,6 +14,9 @@ * limitations under the License. */ +#define LOG_TAG "Minikin" +#include <cutils/log.h> + #include "SkPaint.h" #include "minikin/Layout.h" #include "TypefaceImpl.h" @@ -23,23 +26,37 @@ namespace android { +// Do an sprintf starting at offset n, abort on overflow +static int snprintfcat(char* buf, int off, int size, const char* format, ...) { + va_list args; + va_start(args, format); + int n = vsnprintf(buf + off, size - off, format, args); + LOG_ALWAYS_FATAL_IF(n >= size - off, "String overflow in setting layout properties"); + va_end(args); + return off + n; +} + void MinikinUtils::SetLayoutProperties(Layout* layout, const SkPaint* paint, int flags, TypefaceImpl* typeface) { TypefaceImpl* resolvedFace = TypefaceImpl_resolveDefault(typeface); layout->setFontCollection(resolvedFace->fFontCollection); FontStyle style = resolvedFace->fStyle; char css[256]; - int off = snprintf(css, sizeof(css), - "font-size: %d; font-weight: %d; font-style: %s; -minikin-bidi: %d;", + int off = snprintfcat(css, 0, sizeof(css), + "font-size: %d; font-scale-x: %f; font-skew-x: %f; -paint-flags: %d;" + " font-weight: %d; font-style: %s; -minikin-bidi: %d;", (int)paint->getTextSize(), + paint->getTextScaleX(), + paint->getTextSkewX(), + MinikinFontSkia::packPaintFlags(paint), style.getWeight() * 100, style.getItalic() ? "italic" : "normal", flags); SkString langString = paint->getPaintOptionsAndroid().getLanguage().getTag(); - off += snprintf(css + off, sizeof(css) - off, " lang: %s;", langString.c_str()); + off = snprintfcat(css, off, sizeof(css), " lang: %s;", langString.c_str()); SkPaintOptionsAndroid::FontVariant var = paint->getPaintOptionsAndroid().getFontVariant(); const char* varstr = var == SkPaintOptionsAndroid::kElegant_Variant ? "elegant" : "compact"; - off += snprintf(css + off, sizeof(css) - off, " -minikin-variant: %s;", varstr); + off = snprintfcat(css, off, sizeof(css), " -minikin-variant: %s;", varstr); layout->setProperties(css); } |