summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@google.com>2014-07-29 12:46:07 -0400
committerBehdad Esfahbod <behdad@google.com>2014-07-29 12:46:07 -0400
commit09f1901d6befcab49ed46cb77151a5d4af14a3b9 (patch)
treec52c933c28a0cb2a88b1a6ff1e5dc6a225740f7f
parent41b1aa18d7c32b4383993cd1b0a7e2e6648be14e (diff)
downloadandroid_frameworks_minikin-09f1901d6befcab49ed46cb77151a5d4af14a3b9.tar.gz
android_frameworks_minikin-09f1901d6befcab49ed46cb77151a5d4af14a3b9.tar.bz2
android_frameworks_minikin-09f1901d6befcab49ed46cb77151a5d4af14a3b9.zip
Add doLayout variant that does NOT take css string
New API removes CSS string and directly takes needed objects. Bug: 16651112 Change-Id: Ie5f7c2ab05be6cbd77cae0a5fd6bb453771ada59
-rw-r--r--include/minikin/Layout.h4
-rw-r--r--libs/minikin/Layout.cpp28
2 files changed, 24 insertions, 8 deletions
diff --git a/include/minikin/Layout.h b/include/minikin/Layout.h
index 11e5819..cd08e00 100644
--- a/include/minikin/Layout.h
+++ b/include/minikin/Layout.h
@@ -68,9 +68,13 @@ public:
void dump() const;
void setFontCollection(const FontCollection* collection);
+ // Deprecated. Will be removed.
void doLayout(const uint16_t* buf, size_t start, size_t count, size_t bufSize,
const std::string& css);
+ void doLayout(const uint16_t* buf, size_t start, size_t count, size_t bufSize,
+ int bidiFlags, const FontStyle &style, const MinikinPaint &paint);
+
void draw(Bitmap*, int x0, int y0, float size) const;
// This must be called before any invocations.
diff --git a/libs/minikin/Layout.cpp b/libs/minikin/Layout.cpp
index 072ceda..2a396dc 100644
--- a/libs/minikin/Layout.cpp
+++ b/libs/minikin/Layout.cpp
@@ -497,24 +497,36 @@ static void clearHbFonts(LayoutContext* ctx) {
void Layout::doLayout(const uint16_t* buf, size_t start, size_t count, size_t bufSize,
const string& css) {
- AutoMutex _l(gMinikinLock);
- LayoutContext ctx;
CssProperties props;
props.parse(css);
- ctx.style = styleFromCss(props);
+ FontStyle style = styleFromCss(props);
+ MinikinPaint paint;
- ctx.paint.size = props.value(fontSize).getDoubleValue();
- ctx.paint.scaleX = props.hasTag(fontScaleX)
+ paint.size = props.value(fontSize).getDoubleValue();
+ paint.scaleX = props.hasTag(fontScaleX)
? props.value(fontScaleX).getDoubleValue() : 1;
- ctx.paint.skewX = props.hasTag(fontSkewX)
+ paint.skewX = props.hasTag(fontSkewX)
? props.value(fontSkewX).getDoubleValue() : 0;
- ctx.paint.letterSpacing = props.hasTag(letterSpacing)
+ paint.letterSpacing = props.hasTag(letterSpacing)
? props.value(letterSpacing).getDoubleValue() : 0;
- ctx.paint.paintFlags = props.hasTag(paintFlags)
+ paint.paintFlags = props.hasTag(paintFlags)
? props.value(paintFlags).getUintValue() : 0;
+
int bidiFlags = props.hasTag(minikinBidi) ? props.value(minikinBidi).getIntValue() : 0;
+
+ doLayout(buf, start, count, bufSize, bidiFlags, style, paint);
+}
+
+void Layout::doLayout(const uint16_t* buf, size_t start, size_t count, size_t bufSize,
+ int bidiFlags, const FontStyle &style, const MinikinPaint &paint) {
+ AutoMutex _l(gMinikinLock);
+
+ LayoutContext ctx;
+ ctx.style = style;
+ ctx.paint = paint;
+
bool isRtl = (bidiFlags & kDirection_Mask) != 0;
bool doSingleRun = true;