Changeset 192138 in webkit
- Timestamp:
- Nov 7, 2015, 10:31:50 PM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 24 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r192133 r192138 1 2015-11-07 Simon Fraser <simon.fraser@apple.com> 2 3 Use ColorSpaceSRGB for image buffers everywhere 4 https://bugs.webkit.org/show_bug.cgi?id=150990 5 6 Reviewed by Zalan Bujtas. 7 8 ColorSpaceSRGB and ColorSpaceDeviceRGB are equivalent now, so convert 9 code that creates image buffers tagged with ColorSpaceDeviceRGB to use ColorSpaceSRGB. 10 11 * platform/graphics/GraphicsContext.cpp: 12 (WebCore::GraphicsContext::createCompatibleBuffer): 13 * platform/graphics/ImageBuffer.h: 14 (WebCore::ImageBuffer::create): 15 * platform/graphics/cg/BitmapImageCG.cpp: 16 (WebCore::BitmapImage::checkForSolidColor): 17 * platform/graphics/cg/ColorCG.cpp: 18 (WebCore::Color::Color): 19 * platform/graphics/cg/GraphicsContextCG.cpp: 20 (WebCore::sRGBColorSpaceRef): Deleted. 21 * platform/graphics/cg/ImageBufferCG.cpp: 22 (WebCore::ImageBuffer::putByteArray): 23 * platform/graphics/cocoa/IOSurface.mm: 24 (IOSurface::createFromImage): 25 * platform/graphics/filters/FEFlood.h: 26 * platform/graphics/filters/FETile.cpp: 27 (WebCore::FETile::platformApplySoftware): 28 * platform/graphics/filters/FilterEffect.cpp: 29 (WebCore::FilterEffect::FilterEffect): 30 * platform/graphics/filters/SourceGraphic.h: 31 (WebCore::SourceGraphic::SourceGraphic): 32 * rendering/FilterEffectRenderer.cpp: 33 (WebCore::FilterEffectRenderer::build): 34 (WebCore::FilterEffectRenderer::apply): 35 * rendering/RenderThemeMac.mm: 36 (WebCore::RenderThemeMac::paintProgressBar): 37 * rendering/svg/RenderSVGResourceClipper.cpp: 38 (WebCore::RenderSVGResourceClipper::applyClippingToContext): 39 * rendering/svg/RenderSVGResourceFilter.cpp: 40 (WebCore::RenderSVGResourceFilter::buildPrimitives): 41 * rendering/svg/RenderSVGResourceGradient.cpp: 42 (WebCore::createMaskAndSwapContextForTextGradient): 43 * rendering/svg/RenderSVGResourceMasker.cpp: 44 (WebCore::RenderSVGResourceMasker::applyResource): 45 * rendering/svg/RenderSVGResourcePattern.cpp: 46 (WebCore::RenderSVGResourcePattern::createTileImage): 47 * svg/graphics/SVGImage.cpp: 48 (WebCore::SVGImage::drawPatternForContainer): 49 * svg/graphics/filters/SVGFEImage.cpp: 50 (WebCore::FEImage::platformApplySoftware): 51 1 52 2015-11-07 Zalan Bujtas <zalan@apple.com> 2 53 -
trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp
r191617 r192138 641 641 FloatSize scaledSize(static_cast<int>(ceil(size.width() * transform.xScale())), static_cast<int>(ceil(size.height() * transform.yScale()))); 642 642 643 std::unique_ptr<ImageBuffer> buffer = ImageBuffer::createCompatibleBuffer(scaledSize, 1, ColorSpace DeviceRGB, *this, hasAlpha);643 std::unique_ptr<ImageBuffer> buffer = ImageBuffer::createCompatibleBuffer(scaledSize, 1, ColorSpaceSRGB, *this, hasAlpha); 644 644 if (!buffer) 645 645 return nullptr; -
trunk/Source/WebCore/platform/graphics/ImageBuffer.h
r190910 r192138 70 70 public: 71 71 // Will return a null pointer on allocation failure. 72 static std::unique_ptr<ImageBuffer> create(const FloatSize& size, RenderingMode renderingMode, float resolutionScale = 1, ColorSpace colorSpace = ColorSpace DeviceRGB)72 static std::unique_ptr<ImageBuffer> create(const FloatSize& size, RenderingMode renderingMode, float resolutionScale = 1, ColorSpace colorSpace = ColorSpaceSRGB) 73 73 { 74 74 bool success = false; -
trunk/Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp
r189144 r192138 156 156 if (CGImageGetWidth(image) == 1 && CGImageGetHeight(image) == 1) { 157 157 unsigned char pixel[4]; // RGBA 158 RetainPtr<CGContextRef> bitmapContext = adoptCF(CGBitmapContextCreate(pixel, 1, 1, 8, sizeof(pixel), deviceRGBColorSpaceRef(),158 RetainPtr<CGContextRef> bitmapContext = adoptCF(CGBitmapContextCreate(pixel, 1, 1, 8, sizeof(pixel), sRGBColorSpaceRef(), 159 159 kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big)); 160 160 if (!bitmapContext) -
trunk/Source/WebCore/platform/graphics/cg/ColorCG.cpp
r176140 r192138 68 68 const CGFloat* components = CGColorGetComponents(color); 69 69 #else 70 // FIXME: can we remove this? 70 71 RetainPtr<CGColorRef> correctedColor = adoptCF(createCGColorWithDeviceRGBA(color)); 71 72 if (!correctedColor) -
trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp
r191617 r192138 82 82 CGColorSpaceRef sRGBColorSpaceRef() 83 83 { 84 #if PLATFORM(IOS)85 return deviceRGBColorSpaceRef();86 #else87 84 static CGColorSpaceRef sRGBSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB); 88 85 #if PLATFORM(WIN) … … 94 91 #endif // PLATFORM(WIN) 95 92 return sRGBSpace; 96 #endif // PLATFORM(IOS)97 93 } 98 94 -
trunk/Source/WebCore/platform/graphics/cg/ImageBufferCG.cpp
r191466 r192138 313 313 IntSize sourceCopySize(sourceRect.width(), sourceRect.height()); 314 314 // FIXME (149431): Should this ImageBuffer be unconditionally unaccelerated? Making it match the context seems to break putData(). 315 std::unique_ptr<ImageBuffer> sourceCopy = ImageBuffer::create(sourceCopySize, Unaccelerated, 1, ColorSpace DeviceRGB);315 std::unique_ptr<ImageBuffer> sourceCopy = ImageBuffer::create(sourceCopySize, Unaccelerated, 1, ColorSpaceSRGB); 316 316 if (!sourceCopy) 317 317 return; -
trunk/Source/WebCore/platform/graphics/cocoa/IOSurface.mm
r190587 r192138 89 89 size_t height = CGImageGetHeight(image); 90 90 91 auto surface = IOSurface::create(IntSize(width, height), ColorSpace DeviceRGB);91 auto surface = IOSurface::create(IntSize(width, height), ColorSpaceSRGB); 92 92 auto surfaceContext = surface->ensurePlatformContext(); 93 93 CGContextDrawImage(surfaceContext, CGRectMake(0, 0, width, height), image); -
trunk/Source/WebCore/platform/graphics/filters/FEFlood.h
r191867 r192138 42 42 // feFlood does not perform color interpolation of any kind, so the result is always in the current 43 43 // color space regardless of the value of color-interpolation-filters. 44 void setOperatingColorSpace(ColorSpace) override { FilterEffect::setResultColorSpace(ColorSpace DeviceRGB); }45 void setResultColorSpace(ColorSpace) override { FilterEffect::setResultColorSpace(ColorSpace DeviceRGB); }44 void setOperatingColorSpace(ColorSpace) override { FilterEffect::setResultColorSpace(ColorSpaceSRGB); } 45 void setResultColorSpace(ColorSpace) override { FilterEffect::setResultColorSpace(ColorSpaceSRGB); } 46 46 #endif 47 47 -
trunk/Source/WebCore/platform/graphics/filters/FETile.cpp
r191049 r192138 65 65 } 66 66 67 auto tileImage = SVGRenderingContext::createImageBuffer(tileRect, tileRect, ColorSpace DeviceRGB, filter().renderingMode());67 auto tileImage = SVGRenderingContext::createImageBuffer(tileRect, tileRect, ColorSpaceSRGB, filter().renderingMode()); 68 68 if (!tileImage) 69 69 return; -
trunk/Source/WebCore/platform/graphics/filters/FilterEffect.cpp
r191867 r192138 47 47 , m_clipsToBounds(true) 48 48 , m_operatingColorSpace(ColorSpaceLinearRGB) 49 , m_resultColorSpace(ColorSpace DeviceRGB)49 , m_resultColorSpace(ColorSpaceSRGB) 50 50 { 51 51 } -
trunk/Source/WebCore/platform/graphics/filters/SourceGraphic.h
r191867 r192138 46 46 : FilterEffect(filter) 47 47 { 48 setOperatingColorSpace(ColorSpace DeviceRGB);48 setOperatingColorSpace(ColorSpaceSRGB); 49 49 } 50 50 }; -
trunk/Source/WebCore/rendering/FilterEffectRenderer.cpp
r191049 r192138 285 285 // property applied here should not clip to their primitive subregions. 286 286 effect->setClipsToBounds(consumer == FilterFunction); 287 effect->setOperatingColorSpace(ColorSpace DeviceRGB);287 effect->setOperatingColorSpace(ColorSpaceSRGB); 288 288 289 289 if (filterOperation.type() != FilterOperation::REFERENCE) { … … 340 340 RefPtr<FilterEffect> effect = lastEffect(); 341 341 effect->apply(); 342 effect->transformResultColorSpace(ColorSpace DeviceRGB);342 effect->transformResultColorSpace(ColorSpaceSRGB); 343 343 } 344 344 -
trunk/Source/WebCore/rendering/RenderThemeMac.mm
r191991 r192138 1142 1142 trackInfo.filler1 = 0; 1143 1143 1144 std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::createCompatibleBuffer(inflatedRect.size(), deviceScaleFactor, ColorSpace DeviceRGB, paintInfo.context(), true);1144 std::unique_ptr<ImageBuffer> imageBuffer = ImageBuffer::createCompatibleBuffer(inflatedRect.size(), deviceScaleFactor, ColorSpaceSRGB, paintInfo.context(), true); 1145 1145 if (!imageBuffer) 1146 1146 return true; -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceClipper.cpp
r190124 r192138 142 142 if (shouldCreateClipperMaskImage && !repaintRect.isEmpty()) { 143 143 // FIXME (149469): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks nested clipping, though. 144 clipperMaskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, ColorSpace DeviceRGB, Unaccelerated);144 clipperMaskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, ColorSpaceSRGB, Unaccelerated); 145 145 if (!clipperMaskImage) 146 146 return false; -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceFilter.cpp
r191403 r192138 92 92 effect->setEffectBoundaries(SVGLengthContext::resolveRectangle<SVGFilterPrimitiveStandardAttributes>(&element, filterElement().primitiveUnits(), targetBoundingBox)); 93 93 if (element.renderer()) 94 effect->setOperatingColorSpace(element.renderer()->style().svgStyle().colorInterpolationFilters() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpace DeviceRGB);94 effect->setOperatingColorSpace(element.renderer()->style().svgStyle().colorInterpolationFilters() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceSRGB); 95 95 builder->add(element.result(), WTF::move(effect)); 96 96 } -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
r190124 r192138 62 62 FloatRect repaintRect = textRootBlock->repaintRectInLocalCoordinates(); 63 63 64 auto maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, ColorSpace DeviceRGB, context->renderingMode());64 auto maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, ColorSpaceSRGB, context->renderingMode()); 65 65 if (!maskImage) 66 66 return false; -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceMasker.cpp
r190124 r192138 69 69 if (!maskerData->maskImage && !repaintRect.isEmpty()) { 70 70 const SVGRenderStyle& svgStyle = style().svgStyle(); 71 ColorSpace colorSpace = svgStyle.colorInterpolation() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpace DeviceRGB;71 ColorSpace colorSpace = svgStyle.colorInterpolation() == CI_LINEARRGB ? ColorSpaceLinearRGB : ColorSpaceSRGB; 72 72 // FIXME (149470): This image buffer should not be unconditionally unaccelerated. Making it match the context breaks alpha masking, though. 73 73 maskerData->maskImage = SVGRenderingContext::createImageBuffer(repaintRect, absoluteTransform, colorSpace, Unaccelerated); -
trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
r191748 r192138 249 249 { 250 250 clampedAbsoluteTileBoundaries = ImageBuffer::clampedRect(absoluteTileBoundaries); 251 auto tileImage = SVGRenderingContext::createImageBuffer(absoluteTileBoundaries, clampedAbsoluteTileBoundaries, ColorSpace DeviceRGB, renderingMode);251 auto tileImage = SVGRenderingContext::createImageBuffer(absoluteTileBoundaries, clampedAbsoluteTileBoundaries, ColorSpaceSRGB, renderingMode); 252 252 if (!tileImage) 253 253 return nullptr; -
trunk/Source/WebCore/svg/graphics/SVGImage.cpp
r191352 r192138 202 202 imageBufferSize.scale(imageBufferScale.width(), imageBufferScale.height()); 203 203 204 std::unique_ptr<ImageBuffer> buffer = ImageBuffer::createCompatibleBuffer(expandedIntSize(imageBufferSize.size()), 1, ColorSpace DeviceRGB, context, true);204 std::unique_ptr<ImageBuffer> buffer = ImageBuffer::createCompatibleBuffer(expandedIntSize(imageBufferSize.size()), 1, ColorSpaceSRGB, context, true); 205 205 if (!buffer) // Failed to allocate buffer. 206 206 return; -
trunk/Source/WebCore/svg/graphics/filters/SVGFEImage.cpp
r191049 r192138 113 113 destRect.move(-paintLocation.x(), -paintLocation.y()); 114 114 115 // FEImage results are always in ColorSpace DeviceRGB116 setResultColorSpace(ColorSpace DeviceRGB);115 // FEImage results are always in ColorSpaceSRGB 116 setResultColorSpace(ColorSpaceSRGB); 117 117 118 118 if (renderer) { -
trunk/Source/WebKit2/ChangeLog
r192123 r192138 1 2015-11-07 Simon Fraser <simon.fraser@apple.com> 2 3 Use ColorSpaceSRGB for image buffers everywhere 4 https://bugs.webkit.org/show_bug.cgi?id=150990 5 6 Reviewed by Zalan Bujtas. 7 8 ColorSpaceSRGB and ColorSpaceDeviceRGB are equivalent now, so convert 9 code that creates image buffers tagged with ColorSpaceDeviceRGB to use ColorSpaceSRGB. 10 11 * Shared/mac/RemoteLayerBackingStore.mm: 12 (WebKit::RemoteLayerBackingStore::decode): 13 (WebKit::RemoteLayerBackingStore::swapToValidFrontBuffer): 14 * UIProcess/API/Cocoa/WKWebView.mm: 15 (-[WKWebView _takeViewSnapshot]): 16 (-[WKWebView _snapshotRect:intoImageOfWidth:completionHandler:]): 17 1 18 2015-11-06 Brady Eidson <beidson@apple.com> 2 19 -
trunk/Source/WebKit2/Shared/mac/RemoteLayerBackingStore.mm
r183242 r192138 140 140 if (!decoder.decode(sendRight)) 141 141 return false; 142 result.m_frontBuffer.surface = IOSurface::createFromSendRight(sendRight, ColorSpace DeviceRGB);142 result.m_frontBuffer.surface = IOSurface::createFromSendRight(sendRight, ColorSpaceSRGB); 143 143 return true; 144 144 } … … 187 187 188 188 if (!m_frontBuffer.surface) 189 m_frontBuffer.surface = IOSurface::create(expandedScaledSize, ColorSpace DeviceRGB);189 m_frontBuffer.surface = IOSurface::create(expandedScaledSize, ColorSpaceSRGB); 190 190 191 191 setBufferVolatility(BufferType::Front, false); -
trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm
r192113 r192138 1154 1154 1155 1155 #if USE(IOSURFACE) 1156 auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(snapshotSize), WebCore::ColorSpace DeviceRGB);1156 auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(snapshotSize), WebCore::ColorSpaceSRGB); 1157 1157 CARenderServerRenderLayerWithTransform(MACH_PORT_NULL, self.layer.context.contextId, reinterpret_cast<uint64_t>(self.layer), surface->surface(), 0, 0, &transform); 1158 1158 … … 3826 3826 // If we are parented and thus won't incur a significant penalty from paging in tiles, snapshot the view hierarchy directly. 3827 3827 if (CADisplay *display = self.window.screen._display) { 3828 auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(WebCore::FloatSize(imageSize)), WebCore::ColorSpace DeviceRGB);3828 auto surface = WebCore::IOSurface::create(WebCore::expandedIntSize(WebCore::FloatSize(imageSize)), WebCore::ColorSpaceSRGB); 3829 3829 CGFloat imageScaleInViewCoordinates = imageWidth / rectInViewCoordinates.size.width; 3830 3830 CATransform3D transform = CATransform3DMakeScale(imageScaleInViewCoordinates, imageScaleInViewCoordinates, 1);
Note:
See TracChangeset
for help on using the changeset viewer.