1. 09 4月, 2016 1 次提交
  2. 08 4月, 2016 2 次提交
    • R
      Avoid copying of font table data · aaa4e347
      Raph Levien 提交于
      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
      aaa4e347
    • R
      Purge hb font on Minikin font destruction · 9afcc6e2
      Raph Levien 提交于
      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
      9afcc6e2
  3. 04 4月, 2016 1 次提交
    • S
      Support multiple locales for font language settings. · f3afe92d
      Seigo Nonaka 提交于
      Some fonts support multiple scripts, for example, some fonts for
      Korean supports not only "Kore" but also "Jamo".
      
      To select fonts based on their multiple languages, this CL introduces
      the following changes:
      - Compares all languages of the font family and use the maximum score
        for font selection.
      - Even if each language of the font family doesn't support the requested
        language, the font get score of 2 if the requested font is covered by
        all of the languages of the font family. For example, the font for
        "ko-Hang,ko-Hani" gets score of 2 for the requested language "ko-Kore".
      
      Bug: 26687969
      
      Change-Id: I7f13b51464c9b01982bb573251d77052b9ddbd70
      f3afe92d
  4. 31 3月, 2016 1 次提交
    • R
      Try putting combining marks in the same font run · 16ed4ef0
      Roozbeh Pournader 提交于
      Indic combining marks, when combined with a common character such as
      a hyphen or a dotted circle, used to get rendered in a different font
      due to the greedy algorithm used in determining runs, which resulted
      in the base character and the combining mark getting rendered in
      separate font runs, resulting in a dotted circle appearing in phrases
      such as "100-ാം" (0031 0030 0030 002D 0D3E 0D02).
      
      This change makes combining marks change the font run of the base
      character if the base character is supported in the same font as the
      combining mark, similar to the support for emoji modifiers and the
      combining keycap.
      
      Bug: 25036888
      Bug: 24535344
      Change-Id: I8e2798e8ecb8efaf723a0fd02c05c6fbdef8b365
      16ed4ef0
  5. 17 3月, 2016 1 次提交
  6. 04 3月, 2016 1 次提交
  7. 03 3月, 2016 1 次提交
  8. 27 2月, 2016 2 次提交
    • R
      Fix wrong conditions in isEmojiBase · 1934c2c3
      Raph Levien 提交于
      I computed ranges using low <= c || c <= high, should be &&.
      
      Bug: 26829153
      Change-Id: Ic1002d90b6a408a0b415f2d117d0e57adcbc2fa9
      1934c2c3
    • R
      Suppress line breaks in emoji + modifier · 56840e80
      Raph Levien 提交于
      An emoji base with an emoji modifier renders as a single glyph and
      thus should not be a line break. Current (Unicode 8) logic does
      indicate a line break, so we override the results of the ICU line
      break iterator. The code references a proposal to improve Unicode
      behavior; when that is adopted and we upgrade ICU accordingly, the
      special-case code should be deleted, but the tests can remain.
      
      Bug: 27343378
      Change-Id: I5de9c53e9a34c503816f9131e3d894e6f7a57d13
      56840e80
  9. 26 2月, 2016 1 次提交
    • S
      Use color font if skin tone is specified. · 0036da16
      Seigo Nonaka 提交于
      If skin tone is specified, the base emoji should be emoji style even
      if it is text presentation default emoji.
      
      This patch also removes wrong test case which expects default emoji
      presentation but it is controlled by family order in /etc/fonts.xml
      and there is no special logic for default presentation in minikin.
      Thus the default presentation unit test should not be in minikin.
      
      Bug: 27342346
      
      Change-Id: I74a2b2feab4d559535049e368cfd833063cce81c
      0036da16
  10. 25 2月, 2016 2 次提交
  11. 23 2月, 2016 1 次提交
  12. 20 2月, 2016 1 次提交
  13. 19 2月, 2016 3 次提交
    • R
      Suppress linebreaks in emoji ZWJ sequences · d3f45892
      Raph Levien 提交于
      Due to the way emoji ZWJ sequences are defined, the ICU line breaking
      algorithm determines that there are valid line breaks inside the
      sequence. This patch suppresses these line breaks.
      
      This is an adaptation of I225ebebc0f4186e4b8f48fee399c4a62b3f0218a
      into the nyc-dev branch.
      
      Bug: 25433289
      Change-Id: I84b50b1e6ef13d436965eab389659d02a30d100f
      d3f45892
    • K
      Optimize: Use measureText instead of doLayout. · ea408fc1
      Keisuke Kuroyanagi 提交于
      With this CL, measureText is used for getRunAdvance,
      getOffsetForAdvance and line breaking.
      
      Bug: 24505153
      Change-Id: Ib699f6b1391b46537736fc274cdb41686586b550
      ea408fc1
    • R
      Disable hyphenation when word overlaps style boundary · aa736d00
      Raph Levien 提交于
      In cases when a word (as defined by the ICU break iterator) overlaps a
      style boundary, the returned wordStart can be extend before the range
      currently being measured for layout. When we try to hyphenate the
      resulting substrings, we get a negative range, which crashes. This
      patch disables hyphenation in this case.
      
      Bug: 27237112
      Change-Id: I76d04b39dd3b4d6d267aaaf4bebc9ab361891646
      aa736d00
  14. 18 2月, 2016 15 次提交
  15. 17 2月, 2016 2 次提交
    • S
      Improve Paint.measureText and Paint.hasGlyph for variation sequences. · 6b1c227d
      Seigo Nonaka 提交于
      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
      6b1c227d
    • R
      Refine hyphenation around punctuation · 57b6dae9
      Raph Levien 提交于
      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
      57b6dae9
  16. 13 2月, 2016 2 次提交
  17. 12 2月, 2016 1 次提交
  18. 08 2月, 2016 1 次提交
  19. 04 2月, 2016 1 次提交
    • S
      Improve Paint.hasGlyph performance by caching hb_font_t · 89e80237
      Seigo Nonaka 提交于
      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
      89e80237