| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
| |
Bug: 15246510
Change-Id: I544915d29b2be4fb9f82f1989188a3a918c50fbc
|
|\ |
|
| |
| |
| |
| |
| |
| |
| | |
All usage is ported to the new doLayout() API now.
Bug: 16651112
Change-Id: I2c959138a69853b5e30098889d771fe5f4cfaa66
|
|/
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
New API removes CSS string and directly takes needed objects.
Bug: 16651112
Change-Id: Ie5f7c2ab05be6cbd77cae0a5fd6bb453771ada59
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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)
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
| |
This updates the Skia sample implementation to implement GetBounds,
but the FreeType implementation is NYI (to be fixed in future commit).
Change-Id: I24eda14d5fb11c2a1e81394ad8c779de3292dd79
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
| |
Change-Id: I00953971034a7d00ca165accdab528d2b8ff27a7
|
|
|
|
|
|
|
|
|
| |
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
|
|
|
|
|
|
|
|
|
|
|
| |
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
|
|
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
|