Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: third_party/WebKit/Source/core/paint/README.md

Issue 1473363003: Invalidate first line display item clients when first line style changes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Source/core/paint/README.md Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 # `Source/core/paint`
2
3 This directory contains implementation of painters of layout objects.
4
5 ## Painters
6
7 ## Paint invalidation
8
9 Paint invalidation marks anything that need to be painted differently from the o riginal
10 cached painting.
11
12 ### Slimming paint v1
13
14 Though described in this document, most of the actual paint invalidation code is under
15 `Source/core/layout`.
16
17 Paint invalidation is a document cycle stage after compositing update and before paint.
18 During the previous stages, objects are marked for needing paint invalidation ch ecking
19 if needed by style change, layout change, compositing change, etc. In paint inva lidation stage,
20 we traverse the layout tree for marked subtrees and objects and send the followi ng information
21 to `GraphicsLayer`s and `PaintController`s:
22
23 * paint invalidation rects: must cover all areas that will generete different pixels.
24 * invalidated display item clients: must invalidate all display item clients t hat will
25 generate different display items.
26
27 ### Paint invalidation of texts
28
29 Texts are painted by `InlineTextBoxPainter` using `InlineTextBox` as display ite m client.
30 Text backgrounds and masks are painted by `InlineTextFlowPainter` using `InlineF lowBox`
31 as display item client. We should invalidate these display item clients when the ir painting
32 will change.
33
34 `LayoutInline`s and `LayoutText`s are marked for full paint invalidation if need ed when
35 the style is set on them. During paint invalidation, we invalidate the `InlineFl owBox`s
36 directly contained by the `LayoutInline` in `LayoutInline::invalidateDisplayItem Clients()` and
37 `InlineTextBox`s contained by the `LayoutText` in `LayoutText::invalidateDisplay ItemClients()`.
38 We don't need to traverse into the subtree of `InlineFlowBox`s in `LayoutInline: :invalidateDisplayItemClients()`
39 because the descendant `InlineFlowBox`s and `InlineTextBox`s will be handled by their
40 owing `LayoutInline`s and `LayoutText`s, respectively.
chrishtr 2015/12/07 18:06:04 Nit: "owning"
Xianzhu 2015/12/07 20:42:48 Done.
41
42 ### Specialty of `::first-line`
43
44 `::first-line` pseudo style dynamically applies to all `InlineBox`'s in the firs t line in the
45 block having `::first-line` style. The actual applied style is computed from the `::first-line`
46 style and other applicable styles.
47
48 If the first line contains any `LayoutInline`, we compute the style from the `:: first-line` style
49 and the style of the `LayoutInline` and apply the computed style to the first li ne part of the
50 `LayoutInline`. In blink's style implementation, the combined first line style o f `LayoutInline`
51 is identified with `FIRST_LINE_INHERITED` pseudo ID.
52
53 The normal paint invalidation of texts doesn't work for first line because
54 * `ComputedStyle::visualInvalidationDiff()` can't detect first line style chan ges;
55 * The normal paint invalidation is based on whole LayoutObject's, not aware of the first line.
56
57 We have a special path for first line style change: the style system informs the layout system
58 when the computed first-line style changes through `LayoutObject::firstLineStyle DidChange()`.
59 When this happens, we invalidate all `InlineBox`es in the first line.
60
61 ### Slimming paint v2
62
63 TODO(wangxianzhu): add details
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698