зеркало из https://github.com/mozilla/gecko-dev.git
00f87f386d
Currently items are painted with a context that has a transform of -mLayerBounds.TopLeft(). This means that if TopLeft() changes the commands will be in the wrong place because the -TopLeft() offset is baked into the recording. I don't think we've ever needed to support painting without this transformed baked in so there were some infrastructure changes that needed to be made to make this possible. Most of the problems come from the use of gfxContext::GetClipExtents which expose the bounds of the underlying surface. The biggest of these was fixed by the CreateClippedDrawTarget rewrite. The rest should be handled by ensuring that the DrawTarget has bounds that are at least as big as the union of the individual item bounds. i.e. GetClipExtents should never intersect with bounds of the item. This change has a couple of parts: 1. Store mLayerBounds.TopLeft() in the recording so that it will be subtracted during replay 2. Use mLayerBounds as the Rect of the RecordingDrawTarget 3. Don't include mLayerBounds.TopLeft() in the transform during recording. 4. Adjust the dirty rect by recordingOrigin before we use it as a clip so that it stays in the right place. 5. In PaintContainerItem the bounds parameter of PushLayer is in device space so we need to account for the shift in the location of device space in the DrawTargetRecording. Differential Revision: https://phabricator.services.mozilla.com/D37513 --HG-- extra : moz-landing-system : lando |
||
---|---|---|
.. | ||
2d | ||
angle | ||
cairo | ||
config | ||
docs | ||
gl | ||
graphite2 | ||
harfbuzz | ||
ipc | ||
layers | ||
ots | ||
qcms | ||
sfntly | ||
skia | ||
src | ||
tests | ||
thebes | ||
vr | ||
webrender_bindings | ||
wr | ||
ycbcr | ||
moz.build |