Commit Graph

15 Commits

Author SHA1 Message Date
Alexis Beingessner
53161391fe Bug 1407213 - Update bindings for changes in WR PR 1853. r=jrmuizel
MozReview-Commit-ID: KjSQkZXXIaX
2017-10-13 12:58:32 -04:00
Alexis Beingessner
f365063fa9 Bug 1406510 - rewrite TextDrawTarget to push directly into display list. r=jrmuizel
MozReview-Commit-ID: 7rPGlYmmgeg
2017-10-12 17:17:41 -04:00
Alexis Beingessner
41c8b961e6 Bug 1405927 - Change PushGlyphs to take webrender formats. r=jrmuizel
Also cleans up a bunch of TextDrawTarget code as fallout.

This is a significant perf win for textFrames.

MozReview-Commit-ID: J1BDkXZdvnc
2017-10-04 13:49:51 -04:00
Kartikaya Gupta
d42b152e67 Bug 1405399 - Update due to API change in WR cset 75216e5. r=Gankro
MozReview-Commit-ID: GM8qA0MKaHv
2017-10-04 14:54:37 -04:00
Alexis Beingessner
dd08a82562 Bug 1404370 - TextDrawTarget: add fallbacks for remaining cases, remove some hacks. r=jrmuizel
This adds fallbacks for:
* synthetic bold
* synthetic italics
* text-writing-modes

This also removes an old hack to make synthetic italics less broken.

This also prevents special opacity handling for color fonts so that webrender
gets that information.

MozReview-Commit-ID: DKiTUBR6hzy
2017-09-29 12:05:34 -04:00
Alexis Beingessner
9dad9aeebf Bug 1400411 - stop mocking most of DrawTarget. r=jrmuizel
Also fixes a bad debug assertion

MozReview-Commit-ID: 5OV5KkvbRwZ
2017-09-16 10:42:11 -04:00
Alexis Beingessner
1c44d3356f Bug 1400411 - text-layers: fallback if SVG fonts or tofu is found. r=jrmuizel
MozReview-Commit-ID: 9vUK5r5sKWB
2017-09-22 10:57:30 -04:00
Alexis Beingessner
986029558c Bug 1400382 - Factor out text WebRenderCommand code to TextDrawTarget. r=mstange
MozReview-Commit-ID: EQtFvLQCT2U
2017-09-21 15:15:58 -04:00
Alexis Beingessner
4c657ebe03 Bug 1400382 - Replace explicit TextDrawTarget passing with cast-based system. r=mstange
MozReview-Commit-ID: EQtFvLQCT2U
2017-09-21 15:15:58 -04:00
Ryan VanderMeulen
12a4460fd8 Backed out changeset 8a0b8dfa2d7d (bug 1400411) for causing various font-related crashes. 2017-09-18 14:15:03 -04:00
Alexis Beingessner
0d0f103bd1 Bug 1400411 - stop mocking most of DrawTarget. r=jrmuizel
Also fixes a bad debug assertion

MozReview-Commit-ID: 5OV5KkvbRwZ
2017-09-16 10:42:11 -04:00
Alexis Beingessner
98c96c6809 Bug 1395748 - Fix text selection shadow interaction. r=jrmuizel
Selections in gecko are used to hack in style changes to subsets of text frames.
Mostly this works fine because decorations don't care where they are, and
textRunFragments already exist to do style changes midFrame. However we mishandled
shadows because we were assuming they applied to the entire run, which isn't
the case when shadows are involved.

Applying shadows to everything was desirable because the way nsTextFrame is written,
it's difficult for us to associate the glyphs and decorations with a "range".
However the selections iterator provides a natural grouping, so we use that.

The result is that TextDrawTarget effectively becomes an array of what TextDrawTarget
used to be (now called SelectedTextRunFragment). Everything else is just fallout
of this change.

MozReview-Commit-ID: 5GWPruo6daW
2017-09-12 16:50:44 -04:00
Alexis Beingessner
99847b1eab Bug 1397361 - Apply skew transform to glyphs to undo inverse transform in font code. r=jrmuizel
MozReview-Commit-ID: GBpDmWp1Hnm
2017-09-06 13:08:09 -04:00
Alexis Beingessner
47e4c924b5 Bug 1395729 - Disable frame merging for nsTextFrame. r=mattwoodrow
MozReview-Commit-ID: C0kq5IYgUMG
2017-09-06 13:49:31 -04:00
Alexis Beingessner
17c2751eec Bug 1357545 - handle text-shadows/decorations with webrender (layers-free) r=jrmuizel
This replaces our DrawTargetCapture hack with a similar but more powerful TextDrawTarget
hack. The old design had several limitations:

* It couldn't handle shadows
* It couldn't handle selections
* It couldn't handle font/color changes in a single text-run
* It couldn't handle decorations (underline, overline, line-through)

Mostly this was a consequence of the fact that it only modified the start and end
of the rendering algorithm, and therefore couldn't distinguish draw calls for different
parts of the text.

This new design is based on a similar principle as DrawTargetCapture, but also passes
down the TextDrawTarget in the drawing arguments, so that the drawing algorithm can
notify us of changes in phase (e.g. "now we're doing underlines"). This also lets us
directly pass data to TextDrawTarget when possible (as is done for shadows and selections).

In doing this, I also improved the logic copied from ContainsOnlyColoredGlyphs to handle
changes in font/color mid-text-run (which can happen because of font fallback).

The end result is:

* We handle all shadows natively
* We handle all selections natively
* We handle all decorations natively
* We handle font/color changes in a single text-run
    * Although we still hackily intercept draw calls
    * But we don't need to buffer commands, reducing total memcopies

In addition, this change integrates webrender's PushTextShadow and PushLine APIs,
which were designed for this use case. This is only done in the layerless path;
WebrenderTextLayer continues to be semantically limited, as we aren't actively
maintaining non-layers-free webrender anymore.

This also doesn't modify TextLayers, to minimize churn. In theory they can be
augmented to support the richer semantics that TextDrawTarget has, but there's
little motivation since the API is largely unused with this change.

MozReview-Commit-ID: 4IjTsSW335h
2017-06-19 10:58:28 -04:00