[webkit-changes] [WebKit/WebKit] 4d774b: REGRESSION (283135 at main): Headings using `backgrou...

Simon Fraser noreply at github.com
Fri Jan 10 21:17:14 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 4d774bdad1260cf75c4b21611a52d14f2d5a3219
      https://github.com/WebKit/WebKit/commit/4d774bdad1260cf75c4b21611a52d14f2d5a3219
  Author: Simon Fraser <simon.fraser at apple.com>
  Date:   2025-01-10 (Fri, 10 Jan 2025)

  Changed paths:
    M LayoutTests/platform/gtk/TestExpectations
    M LayoutTests/platform/wpe/TestExpectations
    A LayoutTests/printing/background-clip-text-expected.html
    A LayoutTests/printing/background-clip-text.html
    M Source/WebCore/rendering/BackgroundPainter.cpp
    M Source/WebCore/rendering/StyledMarkedText.cpp
    M Source/WebCore/rendering/TextPaintStyle.cpp
    M Source/WebCore/rendering/TextPaintStyle.h
    M Source/WebCore/rendering/style/RenderStyle.cpp
    M Source/WebCore/rendering/style/RenderStyle.h
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/DrawingToPDF.mm

  Log Message:
  -----------
  REGRESSION (283135 at main): Headings using `background-clip: text` become rectangles when exported as PDF
https://bugs.webkit.org/show_bug.cgi?id=285760
rdar://142698412

Reviewed by Tim Horton.

There were a couple of issues with `background-clip: text` that affect printing. First, when printing
skips backgrounds (because of `print-color-adjust: economy` and the user unchecking the Print Backgrounds
checkbox in the print dialog), `background-clip: text` did not show at all because it's painted as a background.
Fix this by changing the `layerClip` from `FillBox::Text` to `FillBox::BorderBox` in `BackgroundPainter::paintFillLayer()`,
and making the text black in `computeTextPaintStyle()`; the spec[1] allows us to make these adjustments for `economy`.
This is tested by a layout test.

Second, when printing or generating a PDF when including backgrounds, i.e. for `print-color-adjust: exact` or with
the Print Backgrounds checkbox checked, the SourceIn blend mode is not supported, which resulted in a solid background
and missing text. Fix this by falling back to clipping to an image buffer for PDF contexts, in `BackgroundPainter::paintFillLayer()`.
This is tested by a new API test.

[1] https://drafts.csswg.org/css-color-adjust/#propdef-print-color-adjust

* LayoutTests/platform/gtk/TestExpectations:
* LayoutTests/platform/wpe/TestExpectations:
* LayoutTests/printing/background-clip-text-expected.html: Added.
* LayoutTests/printing/background-clip-text.html: Added.
* Source/WebCore/rendering/BackgroundPainter.cpp:
(WebCore::BackgroundPainter::paintFillLayer const):
* Source/WebCore/rendering/StyledMarkedText.cpp:
(WebCore::StyledMarkedText::computeStyleForUnmarkedMarkedText):
* Source/WebCore/rendering/TextPaintStyle.cpp:
(WebCore::computeTextPaintStyle):
* Source/WebCore/rendering/TextPaintStyle.h:
* Source/WebCore/rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::hasEntirelyFixedBackground const):
(WebCore::RenderStyle::hasAnyBackgroundClipText const):
(WebCore::allLayersAreFixed): Deleted.
* Source/WebCore/rendering/style/RenderStyle.h:
* Tools/TestWebKitAPI/Tests/WebKitCocoa/DrawingToPDF.mm:
(TestWebKitAPI::TEST(DrawingToPDF, BackgroundClipText)):

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



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list