Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 01d5ae3487dffe63a132aedeca5c53e8e6e3be76
https://github.com/WebKit/WebKit/commit/01d5ae3487dffe63a132aedeca5c53e8e6e3be76
Author: Said Abou-Hallawa <[email protected]>
Date: 2026-09-23 (Wed, 23 Sep 2026)
Changed paths:
M Source/WebCore/html/HTMLCanvasElement.cpp
M Source/WebCore/html/HTMLCanvasElement.h
M Source/WebCore/html/canvas/CanvasElementImage.cpp
M Source/WebCore/html/canvas/CanvasElementImage.h
M Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp
M Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h
M Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h
M Source/WebCore/rendering/RenderHTMLCanvas.cpp
M Source/WebCore/rendering/RenderHTMLCanvas.h
M Source/WebCore/rendering/RenderReplaced.cpp
Log Message:
-----------
[HTML-in-Canvas] Allow drawing the canvas children to DisplayLists when
layoutsubtree present
https://bugs.webkit.org/show_bug.cgi?id=316245
rdar://188055314
Reviewed by Taher Ali.
If layoutsubtree attribute is present, RenderHTMLCanvas needs its children to
participate in painting — but those children record their drawing into
DisplayLists
rather than painting directly. RenderHTMLCanvas stores these DisplayLists in a
HashMap, keyed by the corresponding canvas child element.
To draw one of these DisplayLists, the client calls drawElementImage(), which
paints an immediate child of the canvas into its context. Because each child
records its drawing as if positioned at the origin, drawElementImage()
translates
the display origin to the target destination and clips the drawing to the source
and destination rectangles.
* Source/WebCore/html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::captureElementImage):
(WebCore::HTMLCanvasElement::drawableElementSnapshot const):
* Source/WebCore/html/HTMLCanvasElement.h:
* Source/WebCore/html/canvas/CanvasElementImage.cpp:
(WebCore::CanvasElementImage::create):
(WebCore::CanvasElementImage::CanvasElementImage):
(WebCore::CanvasElementImage::width const): Deleted.
(WebCore::CanvasElementImage::height const): Deleted.
* Source/WebCore/html/canvas/CanvasElementImage.h:
(WebCore::CanvasElementImage::width const):
(WebCore::CanvasElementImage::height const):
(WebCore::CanvasElementImage::displayList const):
(WebCore::CanvasElementImage::size const):
(WebCore::CanvasElementImage::snapshot const):
* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:
(WebCore::size):
(WebCore::CanvasRenderingContext2DBase::drawElementImage):
(WebCore::CanvasRenderingContext2DBase::drawDisplayList):
(WebCore::CanvasRenderingContext2DBase::drawSnapshot):
* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h:
* Source/WebCore/rendering/RenderHTMLCanvas.cpp:
(WebCore::RenderHTMLCanvas::layout):
(WebCore::RenderHTMLCanvas::paintReplaced):
(WebCore::RenderHTMLCanvas::drawableRendererSnapshot const):
* Source/WebCore/rendering/RenderHTMLCanvas.h:
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::paint):
* Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h:
Canonical link: https://commits.webkit.org/321741@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications