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

Reply via email to