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

Unified 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: Some modifications were not saved to README.md in the previous patch 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/layout/line/InlineBox.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/paint/README.md
diff --git a/third_party/WebKit/Source/core/paint/README.md b/third_party/WebKit/Source/core/paint/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..db051811f2d85f7b39293ee2160a9159e9ec1ede
--- /dev/null
+++ b/third_party/WebKit/Source/core/paint/README.md
@@ -0,0 +1,63 @@
+# `Source/core/paint`
+
+This directory contains implementation of painters of layout objects.
+
+## Painters
+
+## Paint invalidation
+
+Paint invalidation marks anything that need to be painted differently from the original
+cached painting.
+
+### Slimming paint v1
+
+Though described in this document, most of the actual paint invalidation code is under
+`Source/core/layout`.
+
+Paint invalidation is a document cycle stage after compositing update and before paint.
+During the previous stages, objects are marked for needing paint invalidation checking
+if needed by style change, layout change, compositing change, etc. In paint invalidation stage,
+we traverse the layout tree for marked subtrees and objects and send the following information
+to `GraphicsLayer`s and `PaintController`s:
+
+* paint invalidation rects: must cover all areas that will generete different pixels.
+* invalidated display item clients: must invalidate all display item clients that will
+ generate different display items.
+
+### Paint invalidation of texts
+
+Texts are painted by `InlineTextBoxPainter` using `InlineTextBox` as display item client.
+Text backgrounds and masks are painted by `InlineTextFlowPainter` using `InlineFlowBox`
+as display item client. We should invalidate these display item clients when their painting
+will change.
+
+`LayoutInline`s and `LayoutText`s are marked for full paint invalidation if needed when
+new style is set on them. During paint invalidation, we invalidate the `InlineFlowBox`s
+directly contained by the `LayoutInline` in `LayoutInline::invalidateDisplayItemClients()` and
+`InlineTextBox`s contained by the `LayoutText` in `LayoutText::invalidateDisplayItemClients()`.
+We don't need to traverse into the subtree of `InlineFlowBox`s in `LayoutInline::invalidateDisplayItemClients()`
+because the descendant `InlineFlowBox`s and `InlineTextBox`s will be handled by their
+owning `LayoutInline`s and `LayoutText`s, respectively, when changed style is propagated.
+
+### Specialty of `::first-line`
+
+`::first-line` pseudo style dynamically applies to all `InlineBox`'s in the first line in the
+block having `::first-line` style. The actual applied style is computed from the `::first-line`
+style and other applicable styles.
+
+If the first line contains any `LayoutInline`, we compute the style from the `::first-line` style
+and the style of the `LayoutInline` and apply the computed style to the first line part of the
+`LayoutInline`. In blink's style implementation, the combined first line style of `LayoutInline`
+is identified with `FIRST_LINE_INHERITED` pseudo ID.
+
+The normal paint invalidation of texts doesn't work for first line because
+* `ComputedStyle::visualInvalidationDiff()` can't detect first line style changes;
+* The normal paint invalidation is based on whole LayoutObject's, not aware of the first line.
+
+We have a special path for first line style change: the style system informs the layout system
+when the computed first-line style changes through `LayoutObject::firstLineStyleDidChange()`.
+When this happens, we invalidate all `InlineBox`es in the first line.
+
+### Slimming paint v2
+
+TODO(wangxianzhu): add details
« no previous file with comments | « third_party/WebKit/Source/core/layout/line/InlineBox.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698