| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
This patch logs instances of fonts with invalid cmap tables.
Bug: 25645298
Bug: 26413177
Change-Id: I183985e9784a97a2b4307a22e036382b1fc90e5e
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
A corrupt or malicious font may have a negative size in its cmap
range, which in turn could lead to memory corruption. This patch
detects the case and rejects the font, and also includes an assertion
in the sparse bit set implementation if we missed any such case.
External issue:
https://code.google.com/p/android/issues/detail?id=192618
Bug: 26413177
Change-Id: Icc0c80e4ef389abba0964495b89aa0fae3e9f4b2
|
|
|
|
|
|
|
|
|
|
|
| |
A malformed TTF can cause size calculations to overflow. This patch
checks the maximum reasonable value so that the total size fits in 32
bits. It also adds some explicit casting to avoid possible technical
undefined behavior when parsing sized unsigned values.
Bug: 25645298
Change-Id: Id4716132041a6f4f1fbb73ec4e445391cf7d9616
(cherry picked from commit 183c9ec2800baa2ce099ee260c6cbc6121cf1274)
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
Some fonts contain a cmap segment for char 0xffff that contains an
invalid rangeOffset. This was rejected by the existing code, which
means the font is considered to have empty Unicode coverage. This patch
just discards the invalid segment (consistent with OpenType Sanitizer),
making the custom font display.
Bug: 18106256
Change-Id: Icc8616a3030f80e62db906332be64d434ae72ea2
|
|
|
|
|
|
|
|
|
|
| |
The old logic for fake bolding results in no fake bolding for a bold
span on a light weight (300) because the target weight (600 in this
case) didn't meet the condition. This patch fine-tunes the threshold
to enable fake bolding for this.
Bug: 17587185
Change-Id: I04abd00a74240cbed79c417f81486aa2158b2806
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
This patch finds an appropriate fallback font in the case where no font
directly maps the requested character, but a font does exist for the
character's canonical decomposition. This yields correct rendering of
compatibility characters such as U+FA70.
Bug: 15816880
Bug: 16856221
Change-Id: Idff8ed6b942fec992a0815a32028b95af091d0ee
|
|
|
|
|
|
|
|
| |
This reduces another allocation (last one?) we were doing when
fulfilling shaping requests from the cache.
Bug: 17111260
Change-Id: Ieb8ae1ccfcaacedb257e1e9263777f10623aaf98
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
Avoid copying the string for cache lookup.
Bug: 17111260
Change-Id: Ic220bfc991fc6b3dada197304aabdf72a8941bd7
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The U+20E3 COMBINING KEYCAP is used in our fonts to generate an emoji
rendering of ASCII numbers and letters through GSUB. For that to work
we need to choose the same (Emoji) font for the character coming
*before* the COMBINING KEYCAP character.
This is a special-case of a broader need to choose fonts per grapheme
cluster as opposed to per character, but for now, special-case U+20E3.
Bug: 7557244
Change-Id: I958e5a01068df8495bbb9bc3b9ed871cea1838b6
|
|
|
|
|
| |
Bug: 15246510
Change-Id: I544915d29b2be4fb9f82f1989188a3a918c50fbc
|
|
|
|
|
|
|
| |
All usage is ported to the new doLayout() API now.
Bug: 16651112
Change-Id: I2c959138a69853b5e30098889d771fe5f4cfaa66
|
|
|
|
|
|
|
| |
New API removes CSS string and directly takes needed objects.
Bug: 16651112
Change-Id: Ie5f7c2ab05be6cbd77cae0a5fd6bb453771ada59
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| | |
Replaces invalid unicode with replacement character U+FFFD and always
makes forward progress.
Bug: 15849380
Change-Id: Ic59ef6c64b0f5c4450bcae61597adcc269d6e7c5
|
|/
|
|
|
|
|
| |
Extract language from FontStyle during shaping. Don't attach CSS
to LayoutContext.
Change-Id: Ie621d3415410178d0d15fa7b810eb8e412342ab6
|
|
|
|
|
|
| |
It has been unused outside minikin.
Change-Id: Iaa2237767d81c77f90d0264e633375e601dd72f1
|
|
|
|
|
| |
Bug: 15594400
Change-Id: Ied94d7674be4097b0f44c9b0770d3294dc6433c1
|
|
|
|
|
| |
Bug: 15849380
Change-Id: Ib5285e57c5806bd399600fadd56e8bc809da323f
|
|\ |
|
| |
| |
| |
| | |
Change-Id: I50a112739847fa826088854f6d172a188ff4cfb3
|
| |
| |
| |
| | |
Change-Id: I29a59edfe6102257c9f308aac1b4348ef7a18db7
|
|/
|
|
|
|
|
|
|
|
|
|
| |
When a run has no cmap coverage in any font, use the base font. Most of
the time, this will cause rendering of the .notdef glyph, which is
preferable to displaying nothing. In some cases, Harfbuzz may be able to
decompose the characters (not in the cmap) to ones that are, in which
case we'll render those, as long as they're in the base font.
Bug: 6629748
Bug: 15816880
Change-Id: Ibb1b9242c83626e0c7db363ad65ce44a967a005e
|
|
|
|
|
|
|
|
| |
Proper Japanese layout requires sophisticated rules for spacing
punctuation, not just turning on the "palt" (proportional alternate)
feature. Until we can support the whole set, roll back palt.
Change-Id: If2359c529b70b1dd45dddc00e5f4aa1c91f8b0e9
|
|
|
|
|
|
|
| |
Expose a method to purge caches used for TextLayout, useful for low
memory conditions.
Change-Id: I92f41afe987b7be4af5ca0a0c50fb51be35a2758
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes b/15734816 In the text "Wi-Fi", "-Fi" appears bolder than "Wi"
The problem was caused by "stickiness" in choosing fonts, where layout
would prefer using a font used for preceding characters as long as it
mapped the following characters in a run, in favor of the "best match"
rules. This patch adds a whitelist for making the stickiness more
conservative, only applying it for characters necessary for correct
shaping (ZWJ and ZWNJ in particular) and basic punctuation, where it is
desirable to match the style of the preceding text.
Change-Id: I1cf116879f074a5a71c351846707bfdd07b0d320
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Fix for bug 15570313 "Missing text on nonexistent font file"
This patch makes sure that the lastChar and mInstances arrays are in
sync with each other even when a FontFamily being added has no valid
fonts in it. Previously, when they got out of sync, unicode coverage
calculation would be wrong, resulting in missing text.
Change-Id: I69c727ef69e2c61e2b2d6b81d5a28c806327f865
|
|/
|
|
|
|
|
|
|
|
|
| |
The simple predicate for fake bold (2 or more grades darker than
requested) was applying it to thin (100 weight) when normal was
requested. This patch tightens the predicate to also require that
the requested weight be in the bold range.
Fix for bug 15588352 "sans-serif-thin doesn't work on lockscreen"
Change-Id: Id9988bd149a9c8a7c943e3b221f7fb4b37fb6ddb
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
We want to test configurations where the Noto Japanese font will have
its "palt" feature (to select tighter spacing in kana) will be enabled
for framework but not WebView or Chrome rendering of Japanese text. This
patch simply hardcodes this feature on.
This is also a first step towards more general setting of OpenType
features. The hardcoded feature list will grow into one set by
parameters which will eventually be plumbed up to Java.
Change-Id: Ie284e0487a1434155c8ac1cb68ddc4fc4b3c018a
|
|/
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
Missed a slightly mismatched type (int vs int32_t) from a previous code
review.
Change-Id: Ib56775a3a1a6ec3763da7f7432186954251cc048
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
The context start offset wasn't being taken into account for
accumulating the advance values, leading in some cases to array index
overflow.
This is a fix for bug 15327918 "SIGSEGV in
android::MinikinFontSkia::GetSkTypeface()"
Change-Id: I9b646785724c9b72d862b822cd84661c106fbe52
|
|
|
|
|
|
|
|
|
|
| |
This is a fix for bug 15252902 "Crash observed on keep launch or
existing youtube app after playing video". It was doing the test for a
null font after trying to resolve the font in a cache, which caused a
crash when there was no font for the run. This patch just tests before
cache lookup.
Change-Id: Iee41f7ce6b69cb09438462b6aaa916f242da7b77
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|\ |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
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)
|
|/
|
|
|
|
|
|
|
|
|
| |
This is a fix for bug 15171911 Timely crashes (native crash in
libminikin) when I go to add a new alarm
This patch fixes an off-by-one error that caused typefaces with only one
page of Unicode coverage (ASCII or Latin-1) to have nPages = 0 instead
of the correct value of 1 in the corresponding FontCollection.
Change-Id: Id8be0c9e5713b8af22d863992921ee6382416a34
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|