Changeset 290679 in webkit
- Timestamp:
- Mar 1, 2022, 3:16:43 PM (5 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 32 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/fast/hidpi/hidpi-form-controls-drawing-size-expected.html (added)
-
LayoutTests/fast/hidpi/hidpi-form-controls-drawing-size.html (added)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/html/CustomPaintCanvas.cpp (modified) (1 diff)
-
Source/WebCore/html/CustomPaintImage.cpp (modified) (1 diff)
-
Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp (modified) (2 diffs)
-
Source/WebCore/platform/cocoa/ThemeCocoa.mm (modified) (1 diff)
-
Source/WebCore/platform/graphics/BitmapImage.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/GradientImage.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/GraphicsContext.cpp (modified) (5 diffs)
-
Source/WebCore/platform/graphics/GraphicsContext.h (modified) (2 diffs)
-
Source/WebCore/platform/graphics/ImageBuffer.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/NamedImageGeneratedImage.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/RenderingMode.h (modified) (1 diff)
-
Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp (modified) (2 diffs)
-
Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp (modified) (1 diff)
-
Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h (modified) (1 diff)
-
Source/WebCore/platform/mac/ThemeMac.mm (modified) (1 diff)
-
Source/WebCore/rendering/RenderBoxModelObject.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayerBacking.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderLayerFilters.cpp (modified) (1 diff)
-
Source/WebCore/rendering/RenderThemeCocoa.mm (modified) (1 diff)
-
Source/WebCore/rendering/RenderThemeMac.mm (modified) (3 diffs)
-
Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp (modified) (1 diff)
-
Source/WebCore/rendering/svg/SVGRenderingContext.cpp (modified) (1 diff)
-
Source/WebKit/ChangeLog (modified) (1 diff)
-
Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp (modified) (2 diffs)
-
Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r290678 r290679 1 2022-03-01 Said Abou-Hallawa <said@apple.com> 2 3 [macOS][REGRESSION] (rr289518): Form controls are scaled twice on Retina display 4 https://bugs.webkit.org/show_bug.cgi?id=237128 5 rdar://89064642 6 7 Reviewed by Darin Adler. 8 9 * fast/hidpi/hidpi-form-controls-drawing-size-expected.html: Added. 10 * fast/hidpi/hidpi-form-controls-drawing-size.html: Added. 11 1 12 2022-03-01 Robert Jenner <Jenner@apple.com> 2 13 -
trunk/Source/WebCore/ChangeLog
r290676 r290679 1 2022-03-01 Said Abou-Hallawa <said@apple.com> 2 3 [macOS][REGRESSION] (r289518): Form controls are scaled twice on Retina display 4 https://bugs.webkit.org/show_bug.cgi?id=237128 5 rdar://89064642 6 7 Reviewed by Darin Adler. 8 9 Using the name GraphicsContext::createImageBuffer() for different behaviors 10 was a mistake in r289518. To clean this up, the createImageBuffer() version 11 which scales the GraphicsContext of the ImageBuffer will be renamed 12 createScaledImageBuffer(). and the existing createCompatibleImageBuffer() 13 will be renamed createAlignedImageBuffer(). So we will have these three 14 methods in GraphicsContext: 15 16 1) createImageBuffer(): The default behavior of this method is to create 17 an ImageBuffer similar to the underlying ImageBuffer of GraphicsContext. 18 But it gives ability to change the renderingMode and the renderingMethod. 19 It can be forced to create a non-accelerated local ImageBuffer for example. 20 21 The caller of this method usually uses a framework to draw some custom 22 drawing and it just needs a scratch buffer to be drawn in the place of 23 a render object. The caller does not require any transformation to be 24 applied to the GraphicsContext of the ImageBuffer before starting its 25 custom drawing. Drawing the form controls using AppKit is an example 26 of such case. 27 28 2) createScaledImageBuffer(): This is similar to createImageBuffer() but 29 it always creates the ImageBuffer with resolutionScale = 1 so it has 30 to scale the size by the scaleFactor before calling createImageBuffer(). 31 It also scales the GraphicsContext of the created ImageBuffer with the 32 scaleFactor and it translates its coordinates origin for the FloatRect 33 version. It also handles the clamping if needed. 34 35 This method is suitable for cases when the overall scaleFatcor 36 (device ScaleFactor + clamping ScaleFactor) has be known to the caller 37 in advance. No clamping will be required in this case. SVG filter, 38 masker, clipper and gradient are the callers to this function. 39 40 3) createAlignedImageBuffer(): This is similar to createScaledImageBuffer() 41 but it does not take a scaling factor argument. It inherits it from 42 the GraphicsContext. 43 44 Usually the purpose of this method is to transfer the drawing from a 45 layer to a scratch ImageBuffer temporarily then draw the scratch 46 ImageBuffer in the place of the original drawing. Drawing a PDFDocument 47 image, for example, requires using this method. 48 49 To fix this bug: 50 51 Form controls have to use the first version of createImageBuffer() which 52 still has the same name instead of using the second version which will 53 be renamed createScaledImageBuffer(). 54 55 Another cleaning is to pass RenderingMethod as an std::optional argument 56 the three methods. This means we do not need the value "Default" since 57 passing std::nullopt will have the same meaning. 58 59 Test: fast/hidpi/hidpi-form-controls-drawing-size.html 60 61 * html/CustomPaintCanvas.cpp: 62 (WebCore::CustomPaintCanvas::replayDisplayList const): 63 * html/CustomPaintImage.cpp: 64 (WebCore::CustomPaintImage::drawPattern): 65 * html/canvas/CanvasRenderingContext2DBase.cpp: 66 (WebCore::CanvasRenderingContext2DBase::drawImage): 67 (WebCore::CanvasRenderingContext2DBase::drawTextUnchecked): 68 * platform/cocoa/ThemeCocoa.mm: 69 (WebCore::drawApplePayButton): 70 * platform/graphics/BitmapImage.cpp: 71 (WebCore::BitmapImage::drawPattern): 72 * platform/graphics/GradientImage.cpp: 73 (WebCore::GradientImage::drawPattern): 74 * platform/graphics/GraphicsContext.cpp: 75 (WebCore::GraphicsContext::createImageBuffer const): 76 (WebCore::GraphicsContext::createScaledImageBuffer const): 77 (WebCore::GraphicsContext::createAlignedImageBuffer const): 78 (WebCore::GraphicsContext::createCompatibleImageBuffer const): Deleted. 79 * platform/graphics/GraphicsContext.h: 80 (WebCore::GraphicsContext::createScaledImageBuffer): 81 (WebCore::GraphicsContext::createImageBuffer): Deleted. 82 * platform/graphics/ImageBuffer.cpp: 83 (WebCore::ImageBuffer::clone const): 84 * platform/graphics/NamedImageGeneratedImage.cpp: 85 (WebCore::NamedImageGeneratedImage::drawPattern): 86 * platform/graphics/cg/PDFDocumentImage.cpp: 87 (WebCore::PDFDocumentImage::updateCachedImageIfNeeded): 88 (WebCore::PDFDocumentImage::draw): 89 * platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp: 90 (WebCore::DrawGlyphsRecorder::drawOTSVGRun): 91 * platform/graphics/displaylists/DisplayListRecorder.cpp: 92 (WebCore::DisplayList::Recorder::createImageBuffer const): 93 * platform/graphics/displaylists/DisplayListRecorder.h: 94 * platform/mac/ThemeMac.mm: 95 (WebCore::ThemeMac::drawCellOrFocusRingWithViewIntoContext): 96 * rendering/RenderBoxModelObject.cpp: 97 (WebCore::RenderBoxModelObject::paintFillLayerExtended): 98 * rendering/RenderLayerBacking.cpp: 99 (WebCore::patternForDescription): 100 * rendering/RenderLayerFilters.cpp: 101 (WebCore::RenderLayerFilters::allocateBackingStoreIfNeeded): 102 * rendering/RenderThemeCocoa.mm: 103 (WebCore::RenderThemeCocoa::paintApplePayButton): 104 * rendering/RenderThemeMac.mm: 105 (WebCore::RenderThemeMac::paintListButtonForInput): 106 (WebCore::RenderThemeMac::paintProgressBar): 107 * rendering/svg/RenderSVGResourceClipper.cpp: 108 (WebCore::RenderSVGResourceClipper::applyClippingToContext): 109 * rendering/svg/RenderSVGResourceFilter.cpp: 110 (WebCore::RenderSVGResourceFilter::applyResource): 111 * rendering/svg/RenderSVGResourceGradient.cpp: 112 (WebCore::createMaskAndSwapContextForTextGradient): 113 * rendering/svg/RenderSVGResourceMasker.cpp: 114 (WebCore::RenderSVGResourceMasker::applyResource): 115 * rendering/svg/RenderSVGResourcePattern.cpp: 116 (WebCore::RenderSVGResourcePattern::createTileImage const): 117 * rendering/svg/SVGRenderingContext.cpp: 118 (WebCore::SVGRenderingContext::bufferForeground): 119 1 120 2022-03-01 Eric Carlson <eric.carlson@apple.com> 2 121 -
trunk/Source/WebCore/html/CustomPaintCanvas.cpp
r289518 r290679 74 74 auto clipBounds = ctx->clipBounds(); 75 75 76 auto image = ctx->create CompatibleImageBuffer(clipBounds.size());76 auto image = ctx->createAlignedImageBuffer(clipBounds.size()); 77 77 if (!image) 78 78 return; -
trunk/Source/WebCore/html/CustomPaintImage.cpp
r289976 r290679 200 200 adjustedSrcRect.scale(xScale, yScale); 201 201 202 auto buffer = destContext.create CompatibleImageBuffer(adjustedSize);202 auto buffer = destContext.createAlignedImageBuffer(adjustedSize); 203 203 if (!buffer) 204 204 return; -
trunk/Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp
r289981 r290679 1612 1612 } else if (state().globalComposite == CompositeOperator::Copy) { 1613 1613 if (&sourceCanvas == &canvasBase()) { 1614 if (auto copy = c->create CompatibleImageBuffer(srcRect.size(), colorSpace())) {1614 if (auto copy = c->createAlignedImageBuffer(srcRect.size(), colorSpace())) { 1615 1615 copy->context().drawImageBuffer(*buffer, -srcRect.location()); 1616 1616 clearCanvas(); … … 2460 2460 } 2461 2461 2462 auto maskImage = c->create CompatibleImageBuffer(maskRect.size());2462 auto maskImage = c->createAlignedImageBuffer(maskRect.size()); 2463 2463 if (!maskImage) 2464 2464 return; -
trunk/Source/WebCore/platform/cocoa/ThemeCocoa.mm
r289518 r290679 112 112 { 113 113 // Create a local ImageBuffer because decoding the PDF images has to happen in WebProcess. 114 auto imageBuffer = context.create CompatibleImageBuffer(size, DestinationColorSpace::SRGB(), RenderingMethod::Local);114 auto imageBuffer = context.createAlignedImageBuffer(size, DestinationColorSpace::SRGB(), RenderingMethod::Local); 115 115 if (!imageBuffer) 116 116 return; -
trunk/Source/WebCore/platform/graphics/BitmapImage.cpp
r289981 r290679 349 349 350 350 if (!m_cachedImage) { 351 auto buffer = ctxt.create CompatibleImageBuffer(expandedIntSize(tileRect.size()));351 auto buffer = ctxt.createAlignedImageBuffer(expandedIntSize(tileRect.size())); 352 352 if (!buffer) 353 353 return; -
trunk/Source/WebCore/platform/graphics/GradientImage.cpp
r289518 r290679 73 73 74 74 if (!m_cachedImage || m_cachedGeneratorHash != generatorHash || m_cachedAdjustedSize != adjustedSize || !areEssentiallyEqual(destContext.scaleFactor(), m_cachedScaleFactor)) { 75 auto imageBuffer = destContext.create CompatibleImageBuffer(adjustedSize);75 auto imageBuffer = destContext.createAlignedImageBuffer(adjustedSize); 76 76 if (!imageBuffer) 77 77 return; -
trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp
r289981 r290679 578 578 } 579 579 580 RefPtr<ImageBuffer> GraphicsContext::createImageBuffer(const FloatSize& size, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, RenderingMethodrenderingMethod) const581 { 582 if ( renderingMethod == RenderingMethod::DisplayList)583 return ImageBuffer::create(size, renderingMode , ShouldUseDisplayList::Yes, RenderingPurpose::Unspecified, 1, colorSpace, PixelFormat::BGRA8);584 585 return ImageBuffer::create(size, renderingMode , 1, colorSpace, PixelFormat::BGRA8);586 } 587 588 RefPtr<ImageBuffer> GraphicsContext::create ImageBuffer(const FloatSize& size, const FloatSize& scale, const DestinationColorSpace& colorSpace, std::optional<RenderingMode> renderingMode, RenderingMethodrenderingMethod) const580 RefPtr<ImageBuffer> GraphicsContext::createImageBuffer(const FloatSize& size, float resolutionScale, const DestinationColorSpace& colorSpace, std::optional<RenderingMode> renderingMode, std::optional<RenderingMethod> renderingMethod) const 581 { 582 if (!renderingMethod || *renderingMethod == RenderingMethod::Local) 583 return ImageBuffer::create(size, renderingMode.value_or(this->renderingMode()), resolutionScale, colorSpace, PixelFormat::BGRA8); 584 585 return ImageBuffer::create(size, renderingMode.value_or(this->renderingMode()), ShouldUseDisplayList::Yes, RenderingPurpose::Unspecified, resolutionScale, colorSpace, PixelFormat::BGRA8); 586 } 587 588 RefPtr<ImageBuffer> GraphicsContext::createScaledImageBuffer(const FloatSize& size, const FloatSize& scale, const DestinationColorSpace& colorSpace, std::optional<RenderingMode> renderingMode, std::optional<RenderingMethod> renderingMethod) const 589 589 { 590 590 auto expandedScaledSize = scaledImageBufferSize(size, scale); … … 594 594 auto clampingScale = clampingScaleForImageBufferSize(expandedScaledSize); 595 595 596 auto imageBuffer = createImageBuffer(expandedScaledSize * clampingScale, colorSpace, renderingMode.value_or(this->renderingMode()), renderingMethod);596 auto imageBuffer = createImageBuffer(expandedScaledSize * clampingScale, 1, colorSpace, renderingMode, renderingMethod); 597 597 if (!imageBuffer) 598 598 return nullptr; … … 606 606 } 607 607 608 RefPtr<ImageBuffer> GraphicsContext::create ImageBuffer(const FloatRect& rect, const FloatSize& scale, const DestinationColorSpace& colorSpace, std::optional<RenderingMode> renderingMode, RenderingMethodrenderingMethod) const608 RefPtr<ImageBuffer> GraphicsContext::createScaledImageBuffer(const FloatRect& rect, const FloatSize& scale, const DestinationColorSpace& colorSpace, std::optional<RenderingMode> renderingMode, std::optional<RenderingMethod> renderingMethod) const 609 609 { 610 610 auto expandedScaledRect = scaledImageBufferRect(rect, scale); … … 614 614 auto clampingScale = clampingScaleForImageBufferSize(expandedScaledRect.size()); 615 615 616 auto imageBuffer = createImageBuffer(expandedScaledRect.size() * clampingScale, colorSpace, renderingMode.value_or(this->renderingMode()), renderingMethod);616 auto imageBuffer = createImageBuffer(expandedScaledRect.size() * clampingScale, 1, colorSpace, renderingMode, renderingMethod); 617 617 if (!imageBuffer) 618 618 return nullptr; … … 629 629 } 630 630 631 RefPtr<ImageBuffer> GraphicsContext::create CompatibleImageBuffer(const FloatSize& size, const DestinationColorSpace& colorSpace, RenderingMethodrenderingMethod) const632 { 633 return create ImageBuffer(size, scaleFactor(), colorSpace, renderingMode(), renderingMethod);634 } 635 636 RefPtr<ImageBuffer> GraphicsContext::create CompatibleImageBuffer(const FloatRect& rect, const DestinationColorSpace& colorSpace, RenderingMethodrenderingMethod) const637 { 638 return create ImageBuffer(rect, scaleFactor(), colorSpace, renderingMode(), renderingMethod);631 RefPtr<ImageBuffer> GraphicsContext::createAlignedImageBuffer(const FloatSize& size, const DestinationColorSpace& colorSpace, std::optional<RenderingMethod> renderingMethod) const 632 { 633 return createScaledImageBuffer(size, scaleFactor(), colorSpace, renderingMode(), renderingMethod); 634 } 635 636 RefPtr<ImageBuffer> GraphicsContext::createAlignedImageBuffer(const FloatRect& rect, const DestinationColorSpace& colorSpace, std::optional<RenderingMethod> renderingMethod) const 637 { 638 return createScaledImageBuffer(rect, scaleFactor(), colorSpace, renderingMode(), renderingMethod); 639 639 } 640 640 -
trunk/Source/WebCore/platform/graphics/GraphicsContext.h
r289981 r290679 419 419 IntSize compatibleImageBufferSize(const FloatSize&) const; 420 420 421 WEBCORE_EXPORT RefPtr<ImageBuffer> createImageBuffer(const FloatSize&, const FloatSize& scale = { 1, 1 }, const DestinationColorSpace& = DestinationColorSpace::SRGB(), std::optional<RenderingMode> = std::nullopt, RenderingMethod = RenderingMethod::Default) const; 422 WEBCORE_EXPORT RefPtr<ImageBuffer> createImageBuffer(const FloatRect&, const FloatSize& scale = { 1, 1 }, const DestinationColorSpace& = DestinationColorSpace::SRGB(), std::optional<RenderingMode> = std::nullopt, RenderingMethod = RenderingMethod::Default) const; 423 424 WEBCORE_EXPORT virtual RefPtr<ImageBuffer> createCompatibleImageBuffer(const FloatSize&, const DestinationColorSpace& = DestinationColorSpace::SRGB(), RenderingMethod = RenderingMethod::Default) const; 425 WEBCORE_EXPORT virtual RefPtr<ImageBuffer> createCompatibleImageBuffer(const FloatRect&, const DestinationColorSpace& = DestinationColorSpace::SRGB(), RenderingMethod = RenderingMethod::Default) const; 421 WEBCORE_EXPORT virtual RefPtr<ImageBuffer> createImageBuffer(const FloatSize&, float resolutionScale = 1, const DestinationColorSpace& = DestinationColorSpace::SRGB(), std::optional<RenderingMode> = std::nullopt, std::optional<RenderingMethod> = std::nullopt) const; 422 423 WEBCORE_EXPORT RefPtr<ImageBuffer> createScaledImageBuffer(const FloatSize&, const FloatSize& scale = { 1, 1 }, const DestinationColorSpace& = DestinationColorSpace::SRGB(), std::optional<RenderingMode> = std::nullopt, std::optional<RenderingMethod> = std::nullopt) const; 424 WEBCORE_EXPORT RefPtr<ImageBuffer> createScaledImageBuffer(const FloatRect&, const FloatSize& scale = { 1, 1 }, const DestinationColorSpace& = DestinationColorSpace::SRGB(), std::optional<RenderingMode> = std::nullopt, std::optional<RenderingMethod> = std::nullopt) const; 425 426 WEBCORE_EXPORT virtual RefPtr<ImageBuffer> createAlignedImageBuffer(const FloatSize&, const DestinationColorSpace& = DestinationColorSpace::SRGB(), std::optional<RenderingMethod> = std::nullopt) const; 427 WEBCORE_EXPORT virtual RefPtr<ImageBuffer> createAlignedImageBuffer(const FloatRect&, const DestinationColorSpace& = DestinationColorSpace::SRGB(), std::optional<RenderingMethod> = std::nullopt) const; 426 428 427 429 virtual void drawNativeImage(NativeImage&, const FloatSize& selfSize, const FloatRect& destRect, const FloatRect& srcRect, const ImagePaintingOptions& = { }) = 0; … … 549 551 void fillEllipseAsPath(const FloatRect&); 550 552 void strokeEllipseAsPath(const FloatRect&); 551 552 WEBCORE_EXPORT virtual RefPtr<ImageBuffer> createImageBuffer(const FloatSize&, const DestinationColorSpace&, RenderingMode, RenderingMethod) const;553 553 554 554 FloatRect computeLineBoundsAndAntialiasingModeForText(const FloatRect&, bool printing, Color&); -
trunk/Source/WebCore/platform/graphics/ImageBuffer.cpp
r289518 r290679 75 75 RefPtr<ImageBuffer> ImageBuffer::clone() const 76 76 { 77 auto clone = context().create CompatibleImageBuffer(logicalSize(), colorSpace());77 auto clone = context().createAlignedImageBuffer(logicalSize(), colorSpace()); 78 78 if (!clone) 79 79 return nullptr; -
trunk/Source/WebCore/platform/graphics/NamedImageGeneratedImage.cpp
r289976 r290679 66 66 { 67 67 #if USE(NEW_THEME) 68 auto imageBuffer = context.create CompatibleImageBuffer(size());68 auto imageBuffer = context.createAlignedImageBuffer(size()); 69 69 if (!imageBuffer) 70 70 return; -
trunk/Source/WebCore/platform/graphics/RenderingMode.h
r289518 r290679 37 37 enum class ShouldUseDisplayList : bool { No, Yes }; 38 38 enum class RenderingMode : bool { Unaccelerated, Accelerated }; 39 40 enum class RenderingMethod : uint8_t { 41 Default, 42 Local, 43 DisplayList 44 }; 39 enum class RenderingMethod : bool { Local, DisplayList }; 45 40 46 41 } // namespace WebCore -
trunk/Source/WebCore/platform/graphics/cg/PDFDocumentImage.cpp
r289518 r290679 241 241 242 242 // Create a local ImageBuffer because decoding the PDF images has to happen in WebProcess. 243 m_cachedImageBuffer = context.create CompatibleImageBuffer(cachedImageSize, DestinationColorSpace::SRGB(), RenderingMethod::Local);243 m_cachedImageBuffer = context.createAlignedImageBuffer(cachedImageSize, DestinationColorSpace::SRGB(), RenderingMethod::Local); 244 244 if (!m_cachedImageBuffer) { 245 245 destroyDecodedData(); … … 294 294 auto scalar = std::min(1.f, std::sqrt(static_cast<float>(s_maxCachedImageArea) / (dstRect.width() * dstRect.height()))); 295 295 FloatRect localDestinationRect(FloatPoint(), dstRect.size() * scalar); 296 if (auto imageBuffer = context.create CompatibleImageBuffer(localDestinationRect.size(), DestinationColorSpace::SRGB(), RenderingMethod::Local)) {296 if (auto imageBuffer = context.createAlignedImageBuffer(localDestinationRect.size(), DestinationColorSpace::SRGB(), RenderingMethod::Local)) { 297 297 auto& bufferContext = imageBuffer->context(); 298 298 transformContextForPainting(bufferContext, localDestinationRect, srcRect); -
trunk/Source/WebCore/platform/graphics/coretext/DrawGlyphsRecorderCoreText.cpp
r289518 r290679 380 380 381 381 // Create a local ImageBuffer because decoding the SVG fonts has to happen in WebProcess. 382 if (auto imageBuffer = m_owner.create CompatibleImageBuffer(bounds, DestinationColorSpace::SRGB(), RenderingMethod::Local)) {382 if (auto imageBuffer = m_owner.createAlignedImageBuffer(bounds, DestinationColorSpace::SRGB(), RenderingMethod::Local)) { 383 383 FontCascade::drawGlyphs(imageBuffer->context(), font, glyphs + i, advances + i, 1, FloatPoint(), smoothingMode); 384 384 -
trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.cpp
r290581 r290679 493 493 } 494 494 495 RefPtr<ImageBuffer> Recorder::createImageBuffer(const FloatSize& size, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, RenderingMethod renderingMethod) const 496 { 497 if (renderingMethod == RenderingMethod::Default) 498 renderingMethod = RenderingMethod::DisplayList; 499 500 return GraphicsContext::createImageBuffer(size, colorSpace, renderingMode, renderingMethod); 495 RefPtr<ImageBuffer> Recorder::createImageBuffer(const FloatSize& size, float resolutionScale, const DestinationColorSpace& colorSpace, std::optional<RenderingMode> renderingMode, std::optional<RenderingMethod> renderingMethod) const 496 { 497 return GraphicsContext::createImageBuffer(size, resolutionScale, colorSpace, renderingMode, renderingMethod.value_or(RenderingMethod::DisplayList)); 501 498 } 502 499 -
trunk/Source/WebCore/platform/graphics/displaylists/DisplayListRecorder.h
r290581 r290679 173 173 ContextState& currentState(); 174 174 175 WEBCORE_EXPORT RefPtr<ImageBuffer> createImageBuffer(const FloatSize&, const DestinationColorSpace&, RenderingMode, RenderingMethod) const override;175 WEBCORE_EXPORT RefPtr<ImageBuffer> createImageBuffer(const FloatSize&, float resolutionScale, const DestinationColorSpace&, std::optional<RenderingMode>, std::optional<RenderingMethod>) const override; 176 176 177 177 private: -
trunk/Source/WebCore/platform/mac/ThemeMac.mm
r289518 r290679 735 735 if (useImageBuffer) { 736 736 NSRect imageBufferDrawRect = NSRect(FloatRect(buttonFocusRectOutlineWidth, buttonFocusRectOutlineWidth, rect.width(), rect.height())); 737 auto imageBuffer = context.createImageBuffer(rect.size() + 2 * FloatSize(buttonFocusRectOutlineWidth, buttonFocusRectOutlineWidth), { deviceScaleFactor, deviceScaleFactor });737 auto imageBuffer = context.createImageBuffer(rect.size() + 2 * FloatSize(buttonFocusRectOutlineWidth, buttonFocusRectOutlineWidth), deviceScaleFactor); 738 738 if (!imageBuffer) 739 739 return needsRepaint; -
trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp
r290649 r290679 895 895 896 896 // Now create the mask. 897 maskImage = context.create CompatibleImageBuffer(maskRect.size());897 maskImage = context.createAlignedImageBuffer(maskRect.size()); 898 898 if (!maskImage) 899 899 return; -
trunk/Source/WebCore/rendering/RenderLayerBacking.cpp
r290545 r290679 3325 3325 const FloatSize tileSize { 32, 18 }; 3326 3326 3327 auto imageBuffer = destContext.create CompatibleImageBuffer(tileSize);3327 auto imageBuffer = destContext.createAlignedImageBuffer(tileSize); 3328 3328 if (!imageBuffer) 3329 3329 return nullptr; -
trunk/Source/WebCore/rendering/RenderLayerFilters.cpp
r289518 r290679 136 136 137 137 if (!m_sourceImage || m_sourceImage->logicalSize() != logicalSize) 138 m_sourceImage = context.create ImageBuffer(m_filterRegion.size(), filter.filterScale(), DestinationColorSpace::SRGB(), filter.renderingMode());138 m_sourceImage = context.createScaledImageBuffer(m_filterRegion.size(), filter.filterScale(), DestinationColorSpace::SRGB(), filter.renderingMode()); 139 139 } 140 140 -
trunk/Source/WebCore/rendering/RenderThemeCocoa.mm
r290456 r290679 155 155 auto& destinationContext = paintInfo.context(); 156 156 157 auto imageBuffer = destinationContext.create CompatibleImageBuffer(paintRect.size());157 auto imageBuffer = destinationContext.createAlignedImageBuffer(paintRect.size()); 158 158 if (!imageBuffer) 159 159 return false; -
trunk/Source/WebCore/rendering/RenderThemeMac.mm
r290329 r290679 995 995 float deviceScaleFactor = o.document().deviceScaleFactor(); 996 996 997 auto comboBoxImageBuffer = context.createImageBuffer(comboBoxSize, { deviceScaleFactor, deviceScaleFactor });997 auto comboBoxImageBuffer = context.createImageBuffer(comboBoxSize, deviceScaleFactor); 998 998 if (!comboBoxImageBuffer) 999 999 return; … … 1019 1019 }]; 1020 1020 1021 auto comboBoxButtonImageBuffer = context.createImageBuffer(desiredComboBoxButtonSize, { deviceScaleFactor, deviceScaleFactor });1021 auto comboBoxButtonImageBuffer = context.createImageBuffer(desiredComboBoxButtonSize, deviceScaleFactor); 1022 1022 if (!comboBoxButtonImageBuffer) 1023 1023 return; … … 1403 1403 float deviceScaleFactor = renderObject.document().deviceScaleFactor(); 1404 1404 bool isIndeterminate = renderProgress.position() < 0; 1405 auto imageBuffer = paintInfo.context().createImageBuffer(inflatedRect.size(), { deviceScaleFactor, deviceScaleFactor });1405 auto imageBuffer = paintInfo.context().createImageBuffer(inflatedRect.size(), deviceScaleFactor); 1406 1406 if (!imageBuffer) 1407 1407 return true; -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
r289518 r290679 163 163 if (!clipperData.isValidForGeometry(objectBoundingBox, clippedContentBounds, absoluteTransform)) { 164 164 // FIXME (149469): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks nested clipping, though. 165 auto maskImage = context.create ImageBuffer(clippedContentBounds, scale, DestinationColorSpace::SRGB(), RenderingMode::Unaccelerated);165 auto maskImage = context.createScaledImageBuffer(clippedContentBounds, scale, DestinationColorSpace::SRGB(), RenderingMode::Unaccelerated); 166 166 if (!maskImage) 167 167 return false; -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
r289518 r290679 154 154 #endif 155 155 156 auto sourceGraphic = context->create ImageBuffer(filterData->drawingRegion, filterScale, colorSpace, filterData->filter->renderingMode());156 auto sourceGraphic = context->createScaledImageBuffer(filterData->drawingRegion, filterScale, colorSpace, filterData->filter->renderingMode()); 157 157 if (!sourceGraphic) { 158 158 ASSERT(m_rendererFilterDataMap.contains(&renderer)); -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
r289518 r290679 68 68 ImageBuffer::sizeNeedsClamping(repaintRect.size(), scale); 69 69 70 auto maskImage = context->create ImageBuffer(repaintRect, scale);70 auto maskImage = context->createScaledImageBuffer(repaintRect, scale); 71 71 if (!maskImage) 72 72 return false; -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
r289518 r290679 91 91 #endif 92 92 // FIXME (149470): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks alpha masking, though. 93 maskerData->maskImage = context->create ImageBuffer(repaintRect, scale, maskColorSpace, RenderingMode::Unaccelerated);93 maskerData->maskImage = context->createScaledImageBuffer(repaintRect, scale, maskColorSpace, RenderingMode::Unaccelerated); 94 94 if (!maskerData->maskImage) 95 95 return false; -
trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
r289518 r290679 244 244 245 245 // FIXME: Use createImageBuffer(rect, scale), delete the above calculations and fix 'tileImageTransform' 246 auto tileImage = context.create ImageBuffer(tileSize, scale);246 auto tileImage = context.createScaledImageBuffer(tileSize, scale); 247 247 if (!tileImage) 248 248 return nullptr; -
trunk/Source/WebCore/rendering/svg/SVGRenderingContext.cpp
r289518 r290679 283 283 // Create a new buffer and paint the foreground into it. 284 284 if (!imageBuffer) { 285 imageBuffer = m_paintInfo->context().create CompatibleImageBuffer(expandedIntSize(boundingBox.size()));285 imageBuffer = m_paintInfo->context().createAlignedImageBuffer(expandedIntSize(boundingBox.size())); 286 286 if (!imageBuffer) 287 287 return false; -
trunk/Source/WebKit/ChangeLog
r290676 r290679 1 2022-03-01 Said Abou-Hallawa <said@apple.com> 2 3 [macOS][REGRESSION] (rr289518): Form controls are scaled twice on Retina display 4 https://bugs.webkit.org/show_bug.cgi?id=237128 5 rdar://89064642 6 7 Reviewed by Darin Adler. 8 9 * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp: 10 (WebKit::RemoteDisplayListRecorderProxy::createImageBuffer const): 11 (WebKit::RemoteDisplayListRecorderProxy::createAlignedImageBuffer const): 12 (WebKit::RemoteDisplayListRecorderProxy::createCompatibleImageBuffer const): Deleted. 13 * WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h: 14 1 15 2022-03-01 Eric Carlson <eric.carlson@apple.com> 2 16 -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.cpp
r290581 r290679 435 435 } 436 436 437 RefPtr<ImageBuffer> RemoteDisplayListRecorderProxy::createImageBuffer(const FloatSize& size, const DestinationColorSpace& colorSpace, RenderingMode renderingMode, RenderingMethodrenderingMethod) const437 RefPtr<ImageBuffer> RemoteDisplayListRecorderProxy::createImageBuffer(const FloatSize& size, float resolutionScale, const DestinationColorSpace& colorSpace, std::optional<RenderingMode> renderingMode, std::optional<RenderingMethod> renderingMethod) const 438 438 { 439 439 if (UNLIKELY(!m_renderingBackend)) { … … 442 442 } 443 443 444 if (renderingMethod != RenderingMethod::Default)445 return Recorder::createImageBuffer(size, colorSpace, renderingMode, renderingMethod);446 447 return m_renderingBackend->createImageBuffer(size, renderingMode , 1, colorSpace, PixelFormat::BGRA8);448 } 449 450 RefPtr<ImageBuffer> RemoteDisplayListRecorderProxy::create CompatibleImageBuffer(const FloatSize& size, const DestinationColorSpace& colorSpace, RenderingMethodrenderingMethod) const451 { 452 auto renderingMode = renderingMethod == RenderingMethod::Default? this->renderingMode() : RenderingMode::Unaccelerated;453 return GraphicsContext::create ImageBuffer(size, scaleFactor(), colorSpace, renderingMode, renderingMethod);454 } 455 456 RefPtr<ImageBuffer> RemoteDisplayListRecorderProxy::create CompatibleImageBuffer(const FloatRect& rect, const DestinationColorSpace& colorSpace, RenderingMethodrenderingMethod) const457 { 458 auto renderingMode = renderingMethod == RenderingMethod::Default? this->renderingMode() : RenderingMode::Unaccelerated;459 return GraphicsContext::create ImageBuffer(rect, scaleFactor(), colorSpace, renderingMode, renderingMethod);444 if (renderingMethod) 445 return Recorder::createImageBuffer(size, resolutionScale, colorSpace, renderingMode, renderingMethod); 446 447 return m_renderingBackend->createImageBuffer(size, renderingMode.value_or(this->renderingMode()), resolutionScale, colorSpace, PixelFormat::BGRA8); 448 } 449 450 RefPtr<ImageBuffer> RemoteDisplayListRecorderProxy::createAlignedImageBuffer(const FloatSize& size, const DestinationColorSpace& colorSpace, std::optional<RenderingMethod> renderingMethod) const 451 { 452 auto renderingMode = !renderingMethod ? this->renderingMode() : RenderingMode::Unaccelerated; 453 return GraphicsContext::createScaledImageBuffer(size, scaleFactor(), colorSpace, renderingMode, renderingMethod); 454 } 455 456 RefPtr<ImageBuffer> RemoteDisplayListRecorderProxy::createAlignedImageBuffer(const FloatRect& rect, const DestinationColorSpace& colorSpace, std::optional<RenderingMethod> renderingMethod) const 457 { 458 auto renderingMode = !renderingMethod ? this->renderingMode() : RenderingMode::Unaccelerated; 459 return GraphicsContext::createScaledImageBuffer(rect, scaleFactor(), colorSpace, renderingMode, renderingMethod); 460 460 } 461 461 -
trunk/Source/WebKit/WebProcess/GPU/graphics/RemoteDisplayListRecorderProxy.h
r290581 r290679 137 137 bool recordResourceUse(WebCore::Font&) final; 138 138 139 RefPtr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, const WebCore::DestinationColorSpace&, WebCore::RenderingMode, WebCore::RenderingMethod) const final;140 RefPtr<WebCore::ImageBuffer> create CompatibleImageBuffer(const WebCore::FloatSize&, const WebCore::DestinationColorSpace& = WebCore::DestinationColorSpace::SRGB(), WebCore::RenderingMethod = WebCore::RenderingMethod::Default) const final;141 RefPtr<WebCore::ImageBuffer> create CompatibleImageBuffer(const WebCore::FloatRect&, const WebCore::DestinationColorSpace& = WebCore::DestinationColorSpace::SRGB(), WebCore::RenderingMethod = WebCore::RenderingMethod::Default) const final;139 RefPtr<WebCore::ImageBuffer> createImageBuffer(const WebCore::FloatSize&, float resolutionScale, const WebCore::DestinationColorSpace&, std::optional<WebCore::RenderingMode>, std::optional<WebCore::RenderingMethod>) const final; 140 RefPtr<WebCore::ImageBuffer> createAlignedImageBuffer(const WebCore::FloatSize&, const WebCore::DestinationColorSpace&, std::optional<WebCore::RenderingMethod>) const final; 141 RefPtr<WebCore::ImageBuffer> createAlignedImageBuffer(const WebCore::FloatRect&, const WebCore::DestinationColorSpace&, std::optional<WebCore::RenderingMethod>) const final; 142 142 143 143 WebCore::RenderingResourceIdentifier m_destinationBufferIdentifier;
Note:
See TracChangeset
for help on using the changeset viewer.