summaryrefslogtreecommitdiffstats
path: root/sample
diff options
context:
space:
mode:
authorRaph Levien <raph@google.com>2013-04-23 15:45:41 -0700
committerRaph Levien <raph@google.com>2013-04-25 12:23:57 -0700
commit9cc9bbe1461f359f0b27c5e7645c17dda001ab1d (patch)
treef7ef7ea18618b4be52dbc53a9b88fbdcb661a970 /sample
parentcd404cb5e1aed30b46a7af7ddb91ba6e126fe4c2 (diff)
downloadandroid_frameworks_minikin-9cc9bbe1461f359f0b27c5e7645c17dda001ab1d.tar.gz
android_frameworks_minikin-9cc9bbe1461f359f0b27c5e7645c17dda001ab1d.tar.bz2
android_frameworks_minikin-9cc9bbe1461f359f0b27c5e7645c17dda001ab1d.zip
Initial commit of Minikin library
This is the initial draft of Minikin, a library intended to perform text layout functions. This version does basic weight selection and font runs for scripts, and also has a simple renderer for drawing into bitmaps, but is lacking measurement, line breaking, and a number of other important features. It also lacks caching and other performance refinements. Change-Id: I789a2e47d11d71202dc84b4751b51a5e2cd9c451
Diffstat (limited to 'sample')
-rw-r--r--sample/Android.mk42
-rw-r--r--sample/example.cpp100
2 files changed, 142 insertions, 0 deletions
diff --git a/sample/Android.mk b/sample/Android.mk
new file mode 100644
index 0000000..335e7ce
--- /dev/null
+++ b/sample/Android.mk
@@ -0,0 +1,42 @@
+# Copyright (C) 2013 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+include external/stlport/libstlport.mk
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_C_INCLUDES += \
+ external/harfbuzz_ng/src \
+ external/freetype/include \
+ external/icu4c/common \
+ frameworks/minikin/include
+
+LOCAL_SRC_FILES:= example.cpp
+
+LOCAL_SHARED_LIBRARIES += \
+ libutils \
+ liblog \
+ libcutils \
+ libstlport \
+ libharfbuzz_ng \
+ libicuuc
+
+LOCAL_STATIC_LIBRARIES += libminikin libft2
+
+LOCAL_MODULE:= minikin_example
+
+include $(BUILD_EXECUTABLE)
diff --git a/sample/example.cpp b/sample/example.cpp
new file mode 100644
index 0000000..3f0ad9d
--- /dev/null
+++ b/sample/example.cpp
@@ -0,0 +1,100 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// This is a test program that uses Minikin to layout and draw some text.
+// At the moment, it just draws a string into /data/local/tmp/foo.pgm.
+
+#include <stdio.h>
+#include <vector>
+#include <fstream>
+
+#include <unicode/unistr.h>
+#include <unicode/utf16.h>
+
+#include <minikin/Layout.h>
+
+using std::vector;
+
+namespace android {
+
+FT_Library library; // TODO: this should not be a global
+
+FontCollection *makeFontCollection() {
+ vector<FontFamily *>typefaces;
+ const char *fns[] = {
+ "/system/fonts/Roboto-Regular.ttf",
+ "/system/fonts/Roboto-Italic.ttf",
+ "/system/fonts/Roboto-BoldItalic.ttf",
+ "/system/fonts/Roboto-Light.ttf",
+ "/system/fonts/Roboto-Thin.ttf",
+ "/system/fonts/Roboto-Bold.ttf",
+ "/system/fonts/Roboto-ThinItalic.ttf",
+ "/system/fonts/Roboto-LightItalic.ttf"
+ };
+
+ FontFamily *family = new FontFamily();
+ FT_Face face;
+ FT_Error error;
+ for (size_t i = 0; i < sizeof(fns)/sizeof(fns[0]); i++) {
+ const char *fn = fns[i];
+ printf("adding %s\n", fn);
+ error = FT_New_Face(library, fn, 0, &face);
+ if (error != 0) {
+ printf("error loading %s, %d\n", fn, error);
+ }
+ family->addFont(face);
+ }
+ typefaces.push_back(family);
+
+#if 0
+ family = new FontFamily();
+ const char *fn = "/system/fonts/DroidSansDevanagari-Regular.ttf";
+ error = FT_New_Face(library, fn, 0, &face);
+ family->addFont(face);
+ typefaces.push_back(family);
+#endif
+
+ return new FontCollection(typefaces);
+}
+
+int runMinikinTest() {
+ FT_Error error = FT_Init_FreeType(&library);
+ if (error) {
+ return -1;
+ }
+ Layout::init();
+
+ FontCollection *collection = makeFontCollection();
+ Layout layout;
+ layout.setFontCollection(collection);
+ layout.setProperties("font-size: 32;");
+ const char *text = "hello world";
+ icu::UnicodeString icuText = icu::UnicodeString::fromUTF8(text);
+ layout.doLayout(icuText.getBuffer(), icuText.length());
+ layout.dump();
+ Bitmap bitmap(200, 50);
+ layout.draw(&bitmap, 10, 40);
+ std::ofstream o;
+ o.open("/data/local/tmp/foo.pgm", std::ios::out | std::ios::binary);
+ bitmap.writePnm(o);
+ return 0;
+}
+
+}
+
+int main(int argc, const char** argv) {
+ return android::runMinikinTest();
+} \ No newline at end of file