summaryrefslogtreecommitdiffstats
path: root/core/jni/android/graphics/MinikinUtils.cpp
diff options
context:
space:
mode:
authorRaph Levien <raph@google.com>2014-06-05 20:08:56 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2014-06-05 20:08:56 +0000
commit4c25e5a1f9bb24e84d50d97266388408fa878ebd (patch)
treee205a319545415069b0e0d1f0f99cdf4837619ff /core/jni/android/graphics/MinikinUtils.cpp
parentef7dfc08ba8d0ec7b830dd8084b26cd0e6ecd69a (diff)
parent30d3c97f297ed484938992bc669bd0e6b7713d9a (diff)
downloadframeworks_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.cpp25
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);
}