summaryrefslogtreecommitdiffstats
path: root/libs/minikin/AnalyzeStyle.cpp
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 /libs/minikin/AnalyzeStyle.cpp
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 'libs/minikin/AnalyzeStyle.cpp')
-rw-r--r--libs/minikin/AnalyzeStyle.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/libs/minikin/AnalyzeStyle.cpp b/libs/minikin/AnalyzeStyle.cpp
new file mode 100644
index 0000000..0961645
--- /dev/null
+++ b/libs/minikin/AnalyzeStyle.cpp
@@ -0,0 +1,43 @@
+/*
+ * 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.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+
+#include <minikin/AnalyzeStyle.h>
+
+namespace android {
+
+// should we have a single FontAnalyzer class this stuff lives in, to avoid dup?
+static int32_t readU16(const uint8_t* data, size_t offset) {
+ return data[offset] << 8 | data[offset + 1];
+}
+
+bool analyzeStyle(const uint8_t* os2_data, size_t os2_size, int* weight, bool* italic) {
+ const size_t kUsWeightClassOffset = 4;
+ const size_t kFsSelectionOffset = 62;
+ const uint16_t kItalicFlag = (1 << 0);
+ if (os2_size < kFsSelectionOffset + 2) {
+ return false;
+ }
+ uint16_t weightClass = readU16(os2_data, kUsWeightClassOffset);
+ *weight = weightClass / 100;
+ uint16_t fsSelection = readU16(os2_data, kFsSelectionOffset);
+ *italic = (fsSelection & kItalicFlag) != 0;
+ return true;
+}
+
+} // namespace android