[webkit-changes] [WebKit/WebKit] e10f14: [Repaint] Cleanup RenderElement::repaintAfterLayou...
Alan Baradlay
noreply at github.com
Tue May 9 19:32:43 PDT 2023
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: e10f145ce64951e5b0333135fbb6b6b55aea0cee
https://github.com/WebKit/WebKit/commit/e10f145ce64951e5b0333135fbb6b6b55aea0cee
Author: Alan Baradlay <zalan at apple.com>
Date: 2023-05-09 (Tue, 09 May 2023)
Changed paths:
M Source/WebCore/rendering/RenderElement.cpp
Log Message:
-----------
[Repaint] Cleanup RenderElement::repaintAfterLayoutIfNeeded
https://bugs.webkit.org/show_bug.cgi?id=256537
Reviewed by Simon Fraser.
1. Rename incoming parameters to indicate
- whether they are clipped or unclipped
- what they actually include (outline vs. outline and box shadow)
2. Remove redundant/misleading comment(s) (e.g. 16814 at main changed the "We didn't move, but we did change size." part where now size changing gets handles both before and after the comment).
3. Introduce helper functions for each CSS property that may expand the damaged area (they make this additional repaint logic easier to reason about).
Let's look at a very simple example (box shrinks vertically).
before:
70px
_________
| |
| | 100px
| |
| |
|_________|
after:
70px
_________
| |
| | 60px
|_________|
With no decoration (assume these box lines are not borders/outlines etc like <div style="width: 70px; height: 100px; background-color: green"></div>) on this box,
the "delta" logic (above the cleanup part) completely takes care the damaged area by issuing a repaint at [0px, 60px, 70px, 40px].
The subsequent paint will put some new pixels in there removing all the old content (background color).
70px
_________
| |
| | 60px
|_________|
***********
***********
(where '*' means damaged pixel)
However with some decorations (and let's just go with the simplest case here; a border), without damaging additional canvas space
the bottom decoration (border) would not be visible at all after the subsequent paint.
70px
_________
| |
| | 60px
| |
^^ we issue repaint on the pixels where the border used to be, but not where it is now.
So instead we need to extend the repaint rect by finding out what else we have in that box that need additional paint (e.g. border, negative outline, inset box shadow etc).
(and that's what this change is about).
70px
_________
| |
| | 60px
***********
***********
***********
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::repaintAfterLayoutIfNeeded):
Canonical link: https://commits.webkit.org/263890@main
More information about the webkit-changes
mailing list