994aa84f7b18466806fe552ea57da1852b909f24 |
08-Mar-2016 |
Seigo Nonaka <nona@google.com> |
Returns hasVariationSelector true for VS15/VS16 Minikin has a special font fallback for VS15/VS16, so hasVariationSelector for emojis with VS15/VS16 should always return true. Bug: 27531970 Change-Id: Ieebd58f48b135b6ec50d999df68dcc09b1284606
inikin/FontFamily.h
|
b1203b648acb109fddd537f8d76d168b7f70103e |
13-Apr-2016 |
Raph Levien <raph@google.com> |
Merge "Clear mLineWidths in LineBreaker::finish()" into nyc-dev
|
879e8a3a479b2cedd05e652f082683a02aa57dcf |
13-Apr-2016 |
Raph Levien <raph@google.com> |
Clear mLineWidths in LineBreaker::finish() There was the possibility of stale indents from previous invocations persisting in the mLineWidths across multiple invocations. This patch clears them. Bug: 28090810 Change-Id: I3621dfbe983512046289373711709aeade52eab4
inikin/LineBreaker.h
|
6c60831cfce24b0749f50f37231e0a56d8fd4b85 |
11-Apr-2016 |
Seigo Nonaka <nona@google.com> |
Fix minikin_unittests This CL fixes following test cases in minikin_tests - FontFamilyTest.hasVariationSelectorTest - HbFontCacheTest.getHbFontLockedTest - HbFontCacheTest.purgeCacheTest For the fix of FontFamilyTest.hasVariationSelectorTest, removing virtual from GetUniqueId() in MinikinFont. After [1], MinikinFont's destructor started calling purgeHbCache() which calls virtual method, MinikinFont::GetUniqueId(). Fortunately, the SkTypeface::uniqueID() returns just internal value, so we can store it at the construction time and use it instead of calling SkTypeface::uniqueID() every time. This patch also changes purgeHbFont to purgeHbFontLocked, as all uses of it were already under global mutex. This change avoids deadlock on explicit unref, as when invoked by a Java finalizer from the Java object that holds a reference to the font. Some of the tests needed to change to using the ref counting protocol rather than explicitly destructing font objects, as well. [1] 9afcc6e2bd4d89e4e1deb6e18c3c4daca4e114fd Bug: 28105730 Bug: 28105688 Change-Id: Ie5983c4869147dacabdca81af1605066cd680b3f
inikin/MinikinFont.h
inikin/MinikinFontFreeType.h
inikin/MinikinRefCounted.h
|
aaa4e3470270496e6eb80704eadecb2cb7c56bf0 |
07-Apr-2016 |
Raph Levien <raph@google.com> |
Avoid copying of font table data The hb_font_t object holds on to tables of font data, acquired through the MinikinFont::GetTable interface, which is based on copying data into caller-owned buffers. Now that we're caching lots of hb_font_t's, the cost of these buffers is significant. This patch moves to a different interface, inspired by HarfBuzz's hb_reference_table API, where the font can provide a pointer to the actual font data (which will often be mmap'ed, so it doesn't even consume physical RAM). Bug: 27860101 Change-Id: Id766ab16a8d342bf7322a90e076e801271d527d4
inikin/MinikinFont.h
inikin/MinikinFontFreeType.h
|
9afcc6e2bd4d89e4e1deb6e18c3c4daca4e114fd |
07-Apr-2016 |
Raph Levien <raph@google.com> |
Purge hb font on Minikin font destruction This patch eagerly purges the corresponding hb_font_t object from the HbFontCache when the underlying MinikinFont is destroyed. After that, the key will no longer be accessed, so having the entry is wastes memory. Bug: 27251075 Bug: 27860101 Change-Id: I1b98016133fe3baf6525ac37d970a65ddccadb4f
inikin/MinikinFont.h
|
cee83d40324b1f3b8e113eb8c9eda8e12ef36923 |
04-Mar-2016 |
Seigo Nonaka <nona@google.com> |
Suppress log span due to returning null for itemize result. Bug: 26808815 Change-Id: I2a5a52f2c441d27c7ef270342b4ef93c3de9e56e
inikin/FontCollection.h
|
ea408fc18e8e78d984ebdf63703da668a15720de |
18-Feb-2016 |
Keisuke Kuroyanagi <ksk@google.com> |
Optimize: Use measureText instead of doLayout. With this CL, measureText is used for getRunAdvance, getOffsetForAdvance and line breaking. Bug: 24505153 Change-Id: Ib699f6b1391b46537736fc274cdb41686586b550
inikin/Measurement.h
|
bcb024df56c8ae7a5914d6f060ac99a2b5d118d9 |
18-Feb-2016 |
Seigo Nonaka <nona@google.com> |
Merge "Improve Paint.measureText and Paint.hasGlyph for variation sequences." into nyc-dev
|
c88ef135fcc2661ec7addc171ebc60787df38aff |
09-Sep-2015 |
Raph Levien <raph@google.com> |
Add penalty for breaks in URLs and email addresses Recent changes have added special cases for line breaks within URLs and email addresses. Such breaks are undesirable when they can be avoided, but at other times are needed to avoid huge gaps, or indeed to make the line fit at all. This patch assigns a penalty for such breaks, equal to the hyphenation penalty. The mechanism is currently very simple, but would be easy to fine-tune based on more detailed information about break quality. Bug: 20126487 Bug: 20566159 Change-Id: I0d3323897737a2850f1e734fa17b96b065eabd9c
inikin/WordBreaker.h
|
6d15657e4a3826d4d47d5358f1dde211484527e9 |
09-Sep-2015 |
Raph Levien <raph@google.com> |
Add line breaks to email addresses and URLs This change adds accceptable line breaks according to sections 7.42 (Dividing URLs and e-mail addresses) and 14.12 (URLs or DOIs and line breaks) of the Chicago Manual of Style (16th ed.). In general, these place breaks before punctuation symbols, and suppresses them after hyphens. Bug: 20126487 Bug: 20566159 Change-Id: I2d07d516b920a506a2f718c38fb435c5eb1ee1f8
inikin/WordBreaker.h
|
9c4cc648abcae144f3b99d612e58ef01d5e52cce |
09-Sep-2015 |
Raph Levien <raph@google.com> |
Special-case URLs and email addresses for line breaking Detect URLs and email addresses, and suppress both line breaking and hyphenation within them. Bug: 20126487 Bug: 20566159 Change-Id: I43629347a063dcf579e355e5b678d7195f453ad9
inikin/WordBreaker.h
|
6b1c227da6492a435f0341d7fe95d9992669920e |
02-Feb-2016 |
Seigo Nonaka <nona@google.com> |
Improve Paint.measureText and Paint.hasGlyph for variation sequences. Before this patch, the font fallback chain iterated all installed font families if a variation selector was specified. This CL narrows down the range of iteration. To decide the font family for the variation sequence, we need to search for both the variation sequence and its base code point. The new range of the iteration is a union of them. With this change, the running time of Paint.hasGlyph for the variation sequence improves 50% and the running time of Paint.measureText for the variation sequence improves 40% for the large text case on Nexus 6 userdebug. Bug: 26784699 Bug: 11750374 Change-Id: Iced1349e3ca750821d8882c551551f65bb569794
inikin/CmapCoverage.h
inikin/FontCollection.h
inikin/FontFamily.h
|
57b6dae9894b9362ef04517ff477fd491f9d433b |
05-Sep-2015 |
Raph Levien <raph@google.com> |
Refine hyphenation around punctuation Implement a WordBreaker that defines our concept of valid word boundaries, customizing the ICU behavior. Currently, we suppress line breaks at soft hyphens (these are handled specially). Also, the new WordBreaker class has methods that determine the start and end of the word (punctuation stripped) for the purpose of hyphenation. This patch, in its current form, doesn't handle email addresses and URLs specially, but the WordBreaker class is the correct place to do so. Also, special case handling of hyphens and dashes is still done in LineBreaker, but all of that should be moved to WordBreaker. Bug: 20126487 Bug: 20566159 Change-Id: I492cbad963f9b74a2915f010dad46bb91f97b2fe
inikin/LineBreaker.h
inikin/WordBreaker.h
|
89e80237bc27af084c9ff316d4f47abf426eced8 |
03-Feb-2016 |
Seigo Nonaka <nona@google.com> |
Improve Paint.hasGlyph performance by caching hb_font_t It turned out that hb_font_t creation is not a lightweight operation. Especially, Paint.hasGlyph creates hb_font_t for all existing fonts every time. To improve the performance, cache hb_font_t instead of hb_face_t. Note that to calculate horizontal advance, MinikinPaint needs to be associated with hb_font_t by calling hb_font_set_funcs. With this patch, hb_font_set_funcs may be called multiple times for the same hb_font_t object. However this is not an issue since MinikinPaint is unique during layout. Bug: 26784699 Change-Id: I516498ae9f0127d700fc9829327e9789845a1416
inikin/FontCollection.h
inikin/FontFamily.h
|
6344de60fa37c4e4246cb37d82215564826c2b8b |
13-Oct-2015 |
Keisuke Kuroyanagi <ksk@google.com> |
Add light weight methods for text measurement. The intruduced method measureText can be used instead of doLayout for text measurement purpose. Bug: 24505153 Change-Id: Ic29bbb347daf18d1f6c13f86970dcdd11dd6a2bd
inikin/Layout.h
|
6f9966ea7c1910fd780cf7779cc59701c9b98a2b |
12-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Introduce multiple language based font fallback. The motivation of this CL is enhance the font fallback score design to support multiple language font fallback. This CL contains following changes: - Break language based font score into two: script-based score and primary-language-based score. - The primary-language-based score is 0 if the script-based score is 0. If the script-based score is not 0 and the primary language is the as same as the requested one, the font gets an extra score of 1. - The language score gets a higher multiplier for languages higher in the locale list. Bug: 25122318 Bug: 26168983 Change-Id: Ib999997a88e6977e341f4c325e2a1b41a59db2d5
inikin/FontCollection.h
|
198b46f1fea3f47ef8eb6317799c0d77aaec52f6 |
15-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Save all kind of script tags into FontLanguage. This is 2nd attempt of I8df992a6851021903478972601a9a5c9424b100c. The main purpose of this CL is expanding FontLanguage to be able to save full script tag. Previously, FontLangauge kept only limited script tags. With this CL, FontLanguage keeps all script tags. This CL contains the following changes: - FontLanguage changes: -- Moved to private directory not to be instantiated outside of Minikin. -- Removed bool(), bits(), FontLanguage(uint32_t) methods which are no longer used. -- Change the FontLanguage internal data structure. -- Introduces script match logic. - FontLanguages changes: -- Moved to private directory not to be instantiated outside of Minikin. -- This is now std::vector<FontLanguage> - FontLanguageListCache changes: -- Now FontLanguageListCache::getId through FontStyle::registerLanguageList is the only way to instantiate the FontLanguage. -- Normalize input to be BCP47 compliant identifier by ICU. Bug: 26168983 Change-Id: I431b3f361a7635497c05b85e8ecbeb48d9aef63e
inikin/FontFamily.h
|
6c4c098cbd37eccef483ab1986127250b4d2ddf2 |
22-Dec-2015 |
Bart Sears <bsears@google.com> |
Revert "Save all kind of script tags into FontLanguage." This reverts commit 5e995fb850c2b32631914c3815dfb421855fba9b. Change-Id: I761e0e41906742fbe3d3ac34170af3101e18042a
inikin/FontFamily.h
|
5e995fb850c2b32631914c3815dfb421855fba9b |
15-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Save all kind of script tags into FontLanguage. The main purpose of this CL is expanding FontLanguage to be able to save full script tag. Previously, FontLangauge kept only limited script tags. With this CL, FontLanguage keeps all script tags. This CL contains the following changes: - FontLanguage changes: -- Moved to private directory not to be instantiated outside of Minikin. -- Removed bool(), bits(), FontLanguage(uint32_t) methods which are no longer used. -- Change the FontLanguage internal data structure. -- Introduces script match logic. - FontLanguages changes: -- Moved to private directory not to be instantiated outside of Minikin. -- This is now std::vector<FontLanguage> - FontLanguageListCache changes: -- Now FontLanguageListCache::getId through FontStyle::registerLanguageList is the only way to instantiate the FontLanguage. -- Normalize input to be BCP47 compliant identifier by ICU. Bug: 26168983 Change-Id: I8df992a6851021903478972601a9a5c9424b100c
inikin/FontFamily.h
|
43bb9743ca91a761b9723674ac862660dd2be834 |
10-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Remove script matching score from the font selection fallback. Removing the extra score of 2 for the script matching from the font fallback score calculation. If the two langauges have different scripts, we should treat them as different languages. Change-Id: Ie0d6f27bd1086248895935a7bd01b5d404044ad0
inikin/FontFamily.h
|
6d9dcd2cf3d3ed26a886e02d94c907311e7b1f83 |
02-Dec-2015 |
Seigo Nonaka <nona@google.com> |
Introduce FontLanguageListCache. FontLanguageListCache is an intentionally leaky singleton and its internal cache won't be purged. BUG: 25122318 Change-Id: I272097e979fe44b83fd86822235350e12eda8f51
inikin/FontCollection.h
inikin/FontFamily.h
|
369d2d44cb09ac4346cdd9e3b131bb173d764f88 |
29-Oct-2015 |
Seigo Nonaka <nona@google.com> |
Select emoji font based on variation selectors. If U+FE0E is appended to the emoji code point, the glyph should have a text presentation. On the other hand, if U+FE0F is appended to the emoji code point, the glyph should have an emoji presentation. Bug: 11256006 Change-Id: I5187d44500b13a138e7ffbcf2c72e2da06374c8c
inikin/FontFamily.h
|
80d113bcd4bbc395218503354af1a5a6dba59b4b |
21-Oct-2015 |
Seigo Nonaka <nona@google.com> |
Introduce FontCollection::hasVariationSelector method. To implement Paint.hasGlyph(), we need a new method to ask the FontCollection if it has a glyph for the code point and variation selector pair. Bug: 11256006 Change-Id: Ie4185c91bcaa4d01aee6beb97784b1f9d2a88f12
inikin/FontCollection.h
|
bae347682989d2627081310129a5b60541ed6ad0 |
27-Oct-2015 |
Seigo Nonaka <nona@google.com> |
Add -Werror -Wall -Wextra to compiler option. This is 2nd trial of I30a0914a4633bd93eb60957cdf378770f04d8428 - To suppress noisy unused parameter warnings, comment out unused arguments. - Add -Werror for suppressing further warning. - Add -Wall -Wextra for safety. - Use "z" prefix for format string of size_t. Verified that compile succeeded on all arm,arm64,mips,x86,x86_64. Change-Id: I7ad208464486b8a35da53929cb1cfe541ed0052f
inikin/Layout.h
|
b4c799180458fc37b96ee43ef9111f64e0cc99f7 |
28-Oct-2015 |
Bart Sears <bsears@google.com> |
Revert "Add -Werror -Wall -Wextra to compiler option." This reverts commit 63635cff5861dcaed963c7332eecf51b9d7d920a. Change-Id: I2b4b10e8afedc85dbe2d07f3e47315652b65cd14
inikin/Layout.h
|
63635cff5861dcaed963c7332eecf51b9d7d920a |
27-Oct-2015 |
Seigo Nonaka <nona@google.com> |
Add -Werror -Wall -Wextra to compiler option. - To suppress noisy unused parameter warnings, comment out unused arguments. - Add -Werror for suppressing further warning. - Add -Wall -Wextra for safety. Change-Id: I30a0914a4633bd93eb60957cdf378770f04d8428
inikin/Layout.h
|
4b723bf22b1bbc5fcdaa9bd96178c921199905d5 |
20-Oct-2015 |
Roozbeh Pournader <roozbeh@google.com> |
Basic scaffolding for handling a language list. The behavior hasn't changed much yet: all languages are ignored for rendering text, except the very first supported language. Change-Id: I1695fb985927ae5e28e4f59c1b531e4993af8688
inikin/FontFamily.h
|
16da66db748ce4877bc1d3e7af783eed8a08c77a |
20-Oct-2015 |
Seigo Nonaka <nona@google.com> |
Merge "Support Variation Selector in font selection."
|
bbdd73ec077a1bb6801b25a639834be16dfd78cb |
01-Oct-2015 |
Seigo Nonaka <nona@google.com> |
Support Variation Selector in font selection. This CL contains the following changes: - Add a variation selector argument into getFamilyForChar to be able to select fonts which support variation selector. - In case no fonts support the codepoint and variation selector pair, add a fallback rule which selects font family with ignoring variation selector. - Change FontCollection::itemize to not change the font family immediately preceding a variation selector. - Introduce unit tests for variation selectors. With this CL, TextView can render the variation selectors correctly. Bug: 11256006 Change-Id: I22ce0e9eadc941f84e3a9b23462f194e51dd7180
inikin/FontCollection.h
|
210dfa01db0defb3c23b60c446e97b1ee6f1287e |
13-Oct-2015 |
Seigo Nonaka <nona@google.com> |
Remove MinikinFont::GetGlyph interface. MinikinFont:GetGlyph is no longer used. No behavior chnages are expected with this CL. Change-Id: I13398503841ac06f930b04815017d4b33338efa1
inikin/MinikinFont.h
inikin/MinikinFontFreeType.h
|
0f2a025d135f9ca52cc3cf917fffc29d6c126094 |
24-Sep-2015 |
Seigo Nonaka <nona@google.com> |
Introduce FontFamily::hasVariationSelector This CL introduces new method hasVariationSelector into FontFamily but it is not used in production code. So no behavior changes are expected. This CL contains the following changes: - Introduce hasVariationSelector which returns true if the corresponding font has a glyph for a code point and variation selector pair. - Introduce purgeHbFontCache since hb_face_t won't be released by keeping hb_font_t. - Introduce unit tests with self-built font. Change-Id: I659a6d03d9ec446b409e1fba2758452abb9f44fa
inikin/FontCollection.h
inikin/FontFamily.h
|
7c8ac67a9022590d32d25e61094f29f7af42357d |
01-Oct-2015 |
Keisuke Kuroyanagi <ksk@google.com> |
Merge "Refactoring: Introduce helper class to iterate runs."
|
f0be43de02a1e07308d3d95408349c3c7f973430 |
27-Aug-2015 |
Raph Levien <raph@google.com> |
Binary format for hyphenation patterns In the current state, hyphenation in all languages than Sanskrit seems to work (case-folding edge cases). Thus, we just disable Sanskrit. Packed tries are implemented, but not the finite state machine (space/speed tradeoff). This commit contains a throw-away test app, which runs on the host. I think I want to replace it with unit tests, but I'm including it in the CL because it's useful during development. Bug: 21562869 Bug: 21826930 Bug: 23317038 Bug: 23317904 Change-Id: I7479a565a4a062fa319651c2c14c0fa18c5ceaea
inikin/Hyphenator.h
|
6292e1a966da86af7045c356fcad6ab8864089b8 |
24-Sep-2015 |
Keisuke Kuroyanagi <ksk@google.com> |
Refactoring: Introduce helper class to iterate runs. This doesn't change current behavior. It's a preparation for the following CLs. Bug: 22408712 Change-Id: Ic018422254aa3904655f499194caad74f0c0fc5d
inikin/Layout.h
|
71ec97055357b6ccb13a2697a56254bb19f43ae9 |
08-Aug-2015 |
Roozbeh Pournader <roozbeh@google.com> |
Support three-letter language codes in FontLanguage. Also handle the case of weird language code that we don't understand properly better, by treating them not equal to each other. Change-Id: Iaccb251fa38d700932f6eadac254d3d1fa09b3ea
inikin/FontFamily.h
|
6c4d167bff33c24c239d77ddb1044b18d180766a |
10-Jul-2015 |
Raph Levien <raph@google.com> |
Add HyphenEdit to layout cache We bypass the word layout cache for "complex" cases, which includes things like OpenType features. We were counting a hyphen edit as such a case, but the problem is that we measure a _lot_ of these when doing layout with hyphenation. This patch adds plumbing for hyphen edits to the layout cache, so that word fragments with hyphens can be cached as well. Bug: 22378829 Change-Id: Idba4df4faa14f48a5faccc8a7a7955a36c19ef27
inikin/MinikinFont.h
|
abae97a39c26e191e350575932611a90e6b04d06 |
08-Jun-2015 |
Raph Levien <raph@google.com> |
Increase hyphenation penalty for short last line Tuning for hyphenation parameters. We discourage hyphenation on the last line, but offset this penalty by also applying a penalty for each line, which optimizes for minimizing the number of lines. Thus, when hyphenation can reduce the number of lines, it increases the chance they're used. There's probably more tuning and refinement that can be done, but testing suggests that the tunable parameters are appropriate. Bug: 20883322 Change-Id: Ida7eaf8aced109e426694f5a386924a842d29c4b
inikin/LineBreaker.h
|
0dc07c0be325b7c12c50729e04c4b2785a673fd7 |
12-May-2015 |
Roozbeh Pournader <roozbeh@google.com> |
Support hyphenation frequency in Minikin. Three hyphenation frequencies are now supported: kHyphenationFrequency_None, which turns off both automatic hyphenation and soft hyphens. kHyphenationFrequency_Normal, which has aconservative amount of hyphenation useful as a conservative default. kHyphenationFrequency_Full, which has a typographic-quality amount of hyphenation useful for running text and tight screens. Bug: 21038249 Change-Id: I2800f718c887c9389a1a059d7ec07d7fa2ca1dee
inikin/LineBreaker.h
|
8920e81717c6e51b92ff8f4479a1f959af260556 |
17-Apr-2015 |
John Reck <jreck@google.com> |
Move Bitmap to a different namespace namespace naming collision. Move minikin's Bitmap out of android:: and into minikin:: Change-Id: I5ae3925f81b848dc79576429ab55243b96f7fed2
inikin/Layout.h
|
40beb7744a61248de82a6077996c83c14e0122c2 |
07-Apr-2015 |
Raph Levien <raph@google.com> |
Add functions for measuring cursor positioning New functions for computing the correspondence between cursor position and advance, respecting grapheme boundaries. Change-Id: I620378d5f64cd74300cd43db522adeb555825dff
inikin/Layout.h
inikin/Measurement.h
|
bb86b433f97a301c11800806b1ce5331fa227d4a |
16-Apr-2015 |
Raph Levien <raph@google.com> |
Rename "margins" to "indents" The name "margin" conflicts with another meaning, so we're making the name in the public api "idents" and the code consistent in naming. Change-Id: I9170116b4d972e4b25f0f319e78376310288eb41
inikin/LineBreaker.h
|
dc7bc6e39e1ef6b713b927baf24db8b4f02f1a3f |
15-Apr-2015 |
Raph Levien <raph@google.com> |
Add margins array to line widths object In order to support layout in non-rectangular regions, the LineWidths object needs to accept an arbitrary array of margins. This is implemented in addition to the existing firstWidthLineCount/restWidth mechanism for convenience, though using only arrays would have the same expressive power. Bug: 20182243 Change-Id: Iea96bca1a92012314ac27e617c67f306c1f1b2f2
inikin/LineBreaker.h
|
5cdad92c300a65cab89b172e952186f0c5870657 |
30-Mar-2015 |
Raph Levien <raph@google.com> |
Revert "Fix build: Revert "Add hyphenation to line breaking"" This reverts commit 0b25d5ac85533f64764a0d53d5e5d33b46b715fa.
inikin/Hyphenator.h
inikin/LineBreaker.h
|
0b25d5ac85533f64764a0d53d5e5d33b46b715fa |
30-Mar-2015 |
Ed Heyl <edheyl@google.com> |
Fix build: Revert "Add hyphenation to line breaking" This reverts commit daf6a6bdbf2ff1f66496d6200cb253e2f50759d5. Change-Id: I3fed65046274d3aeb748f0730585ab89927f5741
inikin/Hyphenator.h
inikin/LineBreaker.h
|
daf6a6bdbf2ff1f66496d6200cb253e2f50759d5 |
19-Mar-2015 |
Raph Levien <raph@google.com> |
Add hyphenation to line breaking This patch adds hyphenation using the Liang hyphenation algorithm, similar to TeX. It also improves the optimized line breaker so that it works correctly and efficiently even when the line width is not constant (there is a specialization for constant width, which is probably worthwhile, but performance TODOs remain). Still to be done: * hyphenator has many shortcuts, only tested with English * interaction between punctuation and hyphenation is problematic Change-Id: I2d94a1668ebc536398b7c43fcf486333eeb7c6aa
inikin/Hyphenator.h
inikin/LineBreaker.h
|
01f526614431e3a0a6e1a48039e00b8a9b7d6fbf |
14-Mar-2015 |
Raph Levien <raph@google.com> |
Add LineBreaker to Minikin This patch adds a LineBreaker class to Minikin, which will be used for computing line breaks in StaticLayout. The version in this patch contains basically the same functionality that existed before, but hopefully better performance and an interface that's suitable for more sophisticated paragraph layout. Note that this version contains a high quality strategy, which mostly works but doesn't respect varying line width. Change-Id: I02485d58b1e52856296a72cdd4efd963bc572933
inikin/Layout.h
inikin/LineBreaker.h
|
d692d6a9791145d41d7778cdf6b40b20c2be8cb4 |
30-Jan-2015 |
Raph Levien <raph@google.com> |
HyphenEdit in support of hyphenation Adds a "HyphenEdit" field to the Minikin Paint object, which represents an edit to the text to add a hyphen (and, in the future, other edits to support nonstandard hyphenation). Change-Id: Ib4ee690b0fe2137e1d1e2c9251e5526b274ec3a7
inikin/MinikinFont.h
|
cb20a2f0b366bfc16db3a489a60156dec7a9fe21 |
25-Nov-2014 |
Andreas Gampe <agampe@google.com> |
Minikin: Remove unused variables, fix init order For build-system CFLAGS clean-up, fix unused variables. Reorder initializer list to initialize in the order of member declarations. Change-Id: I64358b2dcf0e39d0f4e18fdc3473de867f84fcba
inikin/FontFamily.h
|
13f1aae02bacd475722bc8ea3fc2cf6abc1a82e3 |
29-Oct-2014 |
Raph Levien <raph@google.com> |
Move coverage bitmap from FontCollection to FontFamily This will significantly reduce memory usage and also speed the creation of new font families. In particular, the coverage bitmaps for the fonts in the fallback stack will be computed once in the Zygote, rather than separately in each app process. Bug: 17756900 Change-Id: I66f5706bddd4658d78fe5b709f7251ca9d2ff4f8
inikin/FontCollection.h
inikin/FontFamily.h
|
6740536e3927d25bf5c2567e5f6e8c175973cbb7 |
03-Sep-2014 |
Raph Levien <raph@google.com> |
Snap advance widths to integers Fractional advance widths were causing subtle problems with text positioning when the same text was drawn with different spans in the hwui renderer. Quantizing the coordinates on layout (as opposed to waiting until the renderer draws the glyphs) solves the problem. This patch also fixes a discrepancy between x position and advance widths when letterspacing. Bug: 17347779 Change-Id: Ia705944047408c2839d5ad078eefd6bbec446872
inikin/MinikinFont.h
|
6da7796cbe8a17efd61a3302369e69bb222fdb4f |
21-Aug-2014 |
Behdad Esfahbod <behdad@google.com> |
Fix Layout initialization in the skipCache path C++ local var initialization always tricks me. Previously, Layout didn't have a constructor, which meant that defining it on the stack left mAdvance uninitialized. This was not an issue when we were doing "new Layout()", since that invokes zero-initialization, but was an issue for the skipCache path that was allocating layout on stack by just "Layout l" instead of "Layout l = Layout()". To avoid surprises, add a constructors that clears everything. Also adds reset() method to reset the layout for reuse. Change-Id: I3e02f00da9dd7d360abe13f63c310f6882292d0a
inikin/Layout.h
|
288c915963b3500c7efb958ba613650e2ecdfdfa |
20-Aug-2014 |
Behdad Esfahbod <behdad@google.com> |
Speed up cache lookup Avoid copying the string for cache lookup. Bug: 17111260 Change-Id: Ic220bfc991fc6b3dada197304aabdf72a8941bd7
inikin/Layout.h
|
5986f6048ae21e0ec094c1f2ca0169d0ca6ec6b5 |
29-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Support fontFeatureSettings Bug: 15246510 Change-Id: I544915d29b2be4fb9f82f1989188a3a918c50fbc
inikin/MinikinFont.h
|
d50c99df4efbc57eb4419bd7944a979b9a1d53cc |
29-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Merge "Remove CSS string doLayout entrypoint and supporting code" into lmp-dev
|
83d5a3c53d77c34fbeac7012ab3612933982d494 |
29-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Initialize MinikinPaint members We are stack-allocating MinikinPaint objects in Minikin clients, and without a constructor adding new members to the struct cannot be done without updating all clients (only one right now!). Change-Id: I4170f16498bb6b07cb795495011aca58087ed0bd
inikin/MinikinFont.h
|
c924dd126db5d029af407ae6dd1a41c3652a6a64 |
29-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Remove CSS string doLayout entrypoint and supporting code All usage is ported to the new doLayout() API now. Bug: 16651112 Change-Id: I2c959138a69853b5e30098889d771fe5f4cfaa66
inikin/CssParse.h
inikin/Layout.h
|
09f1901d6befcab49ed46cb77151a5d4af14a3b9 |
29-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Add doLayout variant that does NOT take css string New API removes CSS string and directly takes needed objects. Bug: 16651112 Change-Id: Ie5f7c2ab05be6cbd77cae0a5fd6bb453771ada59
inikin/Layout.h
|
a5bb91190edbea0be0e78a8511b3c920b6e99c4e |
25-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Towards CSS removal Extract language from FontStyle during shaping. Don't attach CSS to LayoutContext. Change-Id: Ie621d3415410178d0d15fa7b810eb8e412342ab6
inikin/FontFamily.h
|
f0a1e5b2da5aaccbc1c010413365cd8c304cf5d9 |
25-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Remove deprecated API It has been unused outside minikin. Change-Id: Iaa2237767d81c77f90d0264e633375e601dd72f1
inikin/Layout.h
|
8e7a3dae37e9a22b2c054aec852615843d71caf6 |
18-Jul-2014 |
Behdad Esfahbod <behdad@google.com> |
Add letter-spacing support Bug: 15594400 Change-Id: Ied94d7674be4097b0f44c9b0770d3294dc6433c1
inikin/CssParse.h
inikin/MinikinFont.h
|
22e41754f6470ff1f4c0e0a56d01f7f555b59e21 |
26-Jun-2014 |
Raph Levien <raph@google.com> |
Add purgeCaches() method Expose a method to purge caches used for TextLayout, useful for low memory conditions. Change-Id: I92f41afe987b7be4af5ca0a0c50fb51be35a2758
inikin/Layout.h
|
3d28a3fcebfed4744d1ef0307a8bdc8fc01e364c |
16-Jun-2014 |
Raph Levien <raph@google.com> |
Implement grapheme cluster breaking This patch includes an implementation of grapheme cluster breaking, which is especially useful for repositioning the cursor for left and right arrow key presses. The implementation is closely based on Unicode TR29, and uses the ICU grapheme cluster break property, but is tailored to more closely match the existing implementation and expected behavior. Part of a fix for b/15653110 Improve behavior of arrow keys in EditText Change-Id: I8eb742f77039c9ab7b2838285018cf8a8fc88343
inikin/GraphemeBreak.h
|
9a5f713add8cfb91ac2c9ed5c917309053201ab6 |
07-Jun-2014 |
Raph Levien <raph@google.com> |
Support for fake bold and italics This patch adds support for computing when fake bold and fake italics are needed (because the styles are requested but not provided by the matching FontFamily), and providing them as part of the layout result. Part of the fix for bug 15436379 Fake bold doesn't fully work (Minikin) Change-Id: I180c034b559837943673b5c272c8e890178dff0d
inikin/FontCollection.h
inikin/FontFamily.h
inikin/Layout.h
inikin/MinikinFont.h
|
89566f0ada1cafe673efa064cde38467990235d4 |
06-Jun-2014 |
Raph Levien <raph@google.com> |
Add baseFont method to FontCollection This patch adds a method to retrieve the base font from a FontCollection, which is useful when querying global font metrics. Part of the fix for bug 15467288 "Inconsistent line heights on Minikin builds" Change-Id: I268ae5128d0852a020d746bc22af81fc1a623228
inikin/FontCollection.h
|
3f1ea5da2ee12b0d95c17c56928c3e553d4eeda0 |
05-Jun-2014 |
Raph Levien <raph@google.com> |
Support for context in API This patch completes support for adding context for complex script layout, for example when a string with joins straddles two spans. Part of the fix for 15431028: "Properly support context for joining scripts (Minikin)" Change-Id: I65b0833be92eb477aa531bbef0ac6eddeb3a962a
inikin/Layout.h
|
3164d1a77eecf3185347a44342131f4275de824f |
05-Jun-2014 |
Raph Levien <raph@google.com> |
Make paint flags consistently uint32_t Change internal plumbing of paint flags (including CssParse) to uint32_t consistently, to match the type used in the client. This will probably prevent compiler warnings. Also renames "float" to "double" to avoid confusion about precision. Change-Id: I80374712c4067ca9e7711cc2d4ec33c440ab9c7c
inikin/CssParse.h
inikin/MinikinFont.h
|
448b0fd720d7ba902b9be224a287d08abe3ebea8 |
31-May-2014 |
Raph Levien <raph@google.com> |
Support for scaleX and skewX Adds pseudo-css properties for scaleX and skewX, as well as paint flags, and plumb them through to the MinikinPaint abstraction and to Harfbuzz, to support nontrivial scale and stretch of text. This is the Minikin part of the fix for bug 15186705 "Usability of the suggestion strip in recent OTA's is severely reduced" Change-Id: Ifa60355e086e4691ff92c5d50d84eb7cea0fea95
inikin/CssParse.h
inikin/MinikinFont.h
|
066e8575af64fb452617ac6005de6ccf6509553b |
29-May-2014 |
Raph Levien <raph@google.com> |
Fix ZWJ not working for Indic fonts This is a fix for bug 15185229 ZWJ not working in Sinhala and Kannada. Indic fonts (unlike Arabic) require the entire string, including ZWJ, to be passed to Harfbuzz; it's not enough for the ZWJ to be present in the context. The solution is to be "sticky" in font itemization, continuing to use the same font as long as it has Unicode coverage. Change-Id: I7673bc56fbda09f1e1a4582e8d88342343b706f1
inikin/FontCollection.h
|
7b221d97b7b64dc5ce457e19666d55d042e22e62 |
27-May-2014 |
Raph Levien <raph@google.com> |
Language and variant selection This patch adds a "lang" pseudo-CSS property and uses it both to select an appropriate font and control the "locl" OpenType feature to get the most appropriate rendering for the langauge and script. In addition, the "-minikin-variant" property selects between "compact" and "elegant" variants of a font, as the former is needed for vertically cramped spaces. This is part of the fix for bug 15179652 "Japanese font isn't shown on LMP". Change-Id: I7fab23c12d4c797a6d339a16e497b79a3afe9df1
inikin/CssParse.h
inikin/FontCollection.h
inikin/FontFamily.h
|
4d4e6bc8118d15542f1f2a9218f0f7a91a29474f |
21-May-2014 |
Raph Levien <raph@google.com> |
Caching for layouts and harfbuzz faces This patch adds caching for both layouts and for HarfBuzz face objects. The granularity of the cache for layouts is words, so it splits the input string at word boundaries (using a heuristic). There are is also some refactoring to reduce the amount of allocation and copying, and movement towards properly supporting contexts. The size of the caches is a fixed number of entries; thus, it is possible to consume a large amount of memory by filling the cache with lots of large strings. This should be refined towards a scheme that bounds the total memory used by the cache. This patch fixes bug 15237293 "Regression: Measure performance is significantly slower with minikin". Change-Id: Ie8176857e2d78656ce5479a7c04969819ef2718d
inikin/FontCollection.h
inikin/FontFamily.h
inikin/Layout.h
inikin/MinikinFont.h
|
86fa46c5ebb0d2c3319e08f4fbf487d8c2abbbfc |
19-May-2014 |
Raph Levien <raph@google.com> |
Do BiDi algorithm for text layout This is a fix for bug 15130102 "Language name for Hebrew displayed the wrong way around on keyboard". This patch extends the previous BiDi support (when the direction for the entire string was given by the caller) to run the BiDi algorithm (provided by ICU) over the string to break it into BiDi runs. Thus, it handles mixed LTR and RTL strings in a single layout, and also respects heuristics for inferring the paragraph direction from the string. Change-Id: Ia4b869de3c139c5a7d16b8ce7766870b98a815ea (cherry picked from commit 4b3a941128454e55893d65433a835e78a9e9781d)
inikin/Layout.h
|
c31e3883456e018d742e9f29815ba5ff8b315ea1 |
19-May-2014 |
Raph Levien <raph@google.com> |
Fix incomplete refcounting and locking These changes were supposed to be committed in the previous patch "Better refcounting and locking" but seem to have gotten lost in a rebase. It fixes a memory leak and some possible race conditions. Change-Id: I54ca1e37500ec49756fe317cc6d6d03da9911501
inikin/FontFamily.h
inikin/Layout.h
|
d231a4b0b1d482c7ae7717b048112e1fe5d0f5a9 |
13-May-2014 |
Raph Levien <raph@google.com> |
Initial BiDi support This patch contains a very basic implementation of BiDi. It respects the BiDi flags passed in as an explicit parameter (through the "-minikin-bidi" pseudo-CSS property), but doesn't yet do its own BiDi run detection. It also takes some shortcuts (marked as TODO) that are based on reasonable assumptions of the current font stack, but not universally valid. Even with these shortcomings, it seems to display RTL text from TextView correctly. Change-Id: I223433923c4eb06f90c0327e86bfbe0aff71d4f5
inikin/CssParse.h
|
d133eab2a1a59ce4a5b1b3db04ec00dc0dbdf349 |
14-May-2014 |
Raph Levien <raph@google.com> |
Fix build breakage in sample code This updates the Skia sample implementation to implement GetBounds, but the FreeType implementation is NYI (to be fixed in future commit). Change-Id: I24eda14d5fb11c2a1e81394ad8c779de3292dd79
inikin/MinikinFontFreeType.h
|
b80c1f19c58b927820a8a24bf2218e5645724608 |
06-May-2014 |
Raph Levien <raph@google.com> |
Better refcounting and locking All major externally accessible objects (especially FontFamily and FontCollection) are now reference counted. In addition, there is a global lock intended to make operations thread-safe. WIP notice: in this version of the patch, not all external API entry points are protected by the lock. That should be fixed. Change-Id: I14106196e99eb101e8bf1bcb4b81359759d2086c
inikin/FontCollection.h
inikin/FontFamily.h
inikin/MinikinFont.h
inikin/MinikinRefCounted.h
|
ecc2d34ac23a497988f21e5f415b53c007b9d8c5 |
15-Jul-2013 |
Raph Levien <raph@google.com> |
A basket of features: itemization, bounds, refcount This patch improves script run itemization and also exposes metrics and bounds for layouts. In addition, there is a fair amount of internal cleanup, including ref counting, and making the MinikinFont abstraction strong enough to support both FreeType and Skia implementations. There is also a sample implementation using Skia, in the sample directory. As part of its functionality, his patch measures the bounds of the layout and gives access through Layout::GetBounds(). The corresponding method is not implemented in the FreeType-only implementation of MinikinFont, so that will probably have to be fixed. Change-Id: Ib1a3fe9d7c90519ac651fb4aa957848e4bb758ec
inikin/Layout.h
inikin/MinikinFont.h
|
5adafc0d84d238948b5d257ec5311030ca04271c |
12-Sep-2013 |
Kenny Root <kroot@google.com> |
Use canonical UniquePtr.h file Change-Id: I00953971034a7d00ca165accdab528d2b8ff27a7
inikin/SparseBitSet.h
|
f660ef9ee63a500b7fb878e502ea5fd519c39607 |
14-Jun-2013 |
Raph Levien <raph@google.com> |
Fix build breakage The MinikinFont class was missing a destructor. The build error was not caught because incremental builds didn't see fit to relink after I deleted one of the source files (that contained the impl of this destructor). Change-Id: Ic72d56fe28316cd2b2f808910e34ca6f177a1220
inikin/MinikinFont.h
|
bcc3dc5a2591a95a57e379e27cbad69c18e91e67 |
23-May-2013 |
Raph Levien <raph@google.com> |
Introduce MinikinFont abstraction This commit removes the direct dependency on FreeType and replaces it with a MinikinFont abstraction, which is designed to support both FreeType and Skia fonts (and possibly others in the future). Also adds a "total advance" to the Layout, with an API for retrieving it. Change-Id: If20f92db9a43fd15b0fe9794b761ba00fb21338c
inikin/FontCollection.h
inikin/FontFamily.h
inikin/Layout.h
inikin/MinikinFont.h
inikin/MinikinFontFreeType.h
|
9cc9bbe1461f359f0b27c5e7645c17dda001ab1d |
24-Apr-2013 |
Raph Levien <raph@google.com> |
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
inikin/AnalyzeStyle.h
inikin/CmapCoverage.h
inikin/CssParse.h
inikin/FontCollection.h
inikin/FontFamily.h
inikin/Layout.h
inikin/SparseBitSet.h
|