Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 5d58ef776121e63743ef363b09b6158adb97dbf0
      
https://github.com/WebKit/WebKit/commit/5d58ef776121e63743ef363b09b6158adb97dbf0
  Author: Said Abou-Hallawa <[email protected]>
  Date:   2024-06-17 (Mon, 17 Jun 2024)

  Changed paths:
    M LayoutTests/fast/canvas/canvas-filter-bounding-rect.html
    M LayoutTests/platform/glib/TestExpectations
    M Source/WebCore/html/canvas/CanvasFilterTargetSwitcher.cpp
    M Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
    M Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp
    M Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h
    M Source/WebCore/html/canvas/PaintRenderingContext2D.h

  Log Message:
  -----------
  [WPE][GTK] REGRESSION(279912@main): 
fast/canvas/canvas-filter-repaint-rect.html fails
https://bugs.webkit.org/show_bug.cgi?id=275353
rdar://129719858

Reviewed by Kimmo Kinnunen.

Before 279912@main, existingDrawingContext() was returning the destination 
context
of the canvas if it exists.

After 279912@main, existingDrawingContext() returns drawingContext() which may
return the FilterTargetSwitcher context. This causes a problem when this 
function
is called from RenderHTMLCanvas::requiresLayer() via isAccelerated().

Usually the canvas is backed by an accelerated ImageBuffer. But the filter 
target
switcher is backed by un-accelerated ImageBuffer. So returning the RenderingMode
of the target switcher will give the wrong answer to requiresLayer().

The fix is to restore the old behavior of drawingContext() back by returning the
canvas destination context and creating it if it does not exist. Also add
effectiveDrawingContext() which returns the FilterTargetSwitcher if it is 
active.
Otherwise it returns drawingContext().

* LayoutTests/fast/canvas/canvas-filter-bounding-rect.html:
* LayoutTests/platform/glib/TestExpectations:
* Source/WebCore/html/canvas/CanvasFilterTargetSwitcher.cpp:
(WebCore::CanvasFilterTargetSwitcher::create):
(WebCore::CanvasFilterTargetSwitcher::~CanvasFilterTargetSwitcher):
* Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp:
(WebCore::CanvasRenderingContext2D::createFilter const):
(WebCore::CanvasRenderingContext2D::drawFocusIfNeededInternal):
* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:
(WebCore::CanvasRenderingContext2DBase::setStrokeStyle):
(WebCore::CanvasRenderingContext2DBase::setFillStyle):
(WebCore::CanvasRenderingContext2DBase::setLineWidth):
(WebCore::CanvasRenderingContext2DBase::setLineCap):
(WebCore::CanvasRenderingContext2DBase::setLineJoin):
(WebCore::CanvasRenderingContext2DBase::setMiterLimit):
(WebCore::CanvasRenderingContext2DBase::applyLineDash const):
(WebCore::CanvasRenderingContext2DBase::setGlobalAlpha):
(WebCore::CanvasRenderingContext2DBase::setGlobalCompositeOperation):
(WebCore::CanvasRenderingContext2DBase::scale):
(WebCore::CanvasRenderingContext2DBase::rotate):
(WebCore::CanvasRenderingContext2DBase::translate):
(WebCore::CanvasRenderingContext2DBase::transform):
(WebCore::CanvasRenderingContext2DBase::setTransform):
(WebCore::CanvasRenderingContext2DBase::resetTransform):
(WebCore::CanvasRenderingContext2DBase::fillInternal):
(WebCore::CanvasRenderingContext2DBase::strokeInternal):
(WebCore::CanvasRenderingContext2DBase::clipInternal):
(WebCore::CanvasRenderingContext2DBase::beginCompositeLayer):
(WebCore::CanvasRenderingContext2DBase::endCompositeLayer):
(WebCore::CanvasRenderingContext2DBase::isPointInPathInternal):
(WebCore::CanvasRenderingContext2DBase::isPointInStrokeInternal):
(WebCore::CanvasRenderingContext2DBase::clearRect):
(WebCore::CanvasRenderingContext2DBase::fillRect):
(WebCore::CanvasRenderingContext2DBase::strokeRect):
(WebCore::CanvasRenderingContext2DBase::applyShadow):
(WebCore::CanvasRenderingContext2DBase::drawImage):
(WebCore::CanvasRenderingContext2DBase::clearCanvas):
(WebCore::CanvasRenderingContext2DBase::compositeBuffer):
(WebCore::CanvasRenderingContext2DBase::fullCanvasCompositedDrawImage):
(WebCore::CanvasRenderingContext2DBase::didDraw):
(WebCore::CanvasRenderingContext2DBase::drawingContext const):
(WebCore::CanvasRenderingContext2DBase::effectiveDrawingContext const):
(WebCore::CanvasRenderingContext2DBase::setImageSmoothingQuality):
(WebCore::CanvasRenderingContext2DBase::setImageSmoothingEnabled):
(WebCore::CanvasRenderingContext2DBase::canDrawText):
(WebCore::CanvasRenderingContext2DBase::drawTextUnchecked):
* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.h:
* Source/WebCore/html/canvas/PaintRenderingContext2D.h:

Canonical link: https://commits.webkit.org/280091@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to