https://bugs.webkit.org/show_bug.cgi?id=130643
Reviewed by Simon Fraser.
This is in preparation to support subpixel positioned/sized background images. While 1x bitmap images can't take
subpixel sizing on hidpi resolutions, both generated and hidpi images can.
This patch does not change Image behavior in general as both position and size are still snapped to integral values.
No change in behavior.
Source/WebCore:
* WebCore.exp.in:
* css/CSSCrossfadeValue.cpp:
(WebCore::CSSCrossfadeValue::fixedSize):
* css/CSSFilterImageValue.cpp:
(WebCore::CSSFilterImageValue::fixedSize):
* html/canvas/WebGLRenderingContext.cpp:
(WebCore::WebGLRenderingContext::drawImageIntoBuffer):
* loader/cache/CachedImage.cpp:
(WebCore::CachedImage::imageSizeForRenderer):
* page/EventHandler.cpp:
(WebCore::EventHandler::selectCursor):
* platform/Cursor.cpp:
(WebCore::determineHotSpot):
* platform/graphics/BitmapImage.cpp:
(WebCore::BitmapImage::size):
(WebCore::BitmapImage::currentFrameSize):
* platform/graphics/BitmapImage.h:
* platform/graphics/CrossfadeGeneratedImage.cpp:
(WebCore::CrossfadeGeneratedImage::CrossfadeGeneratedImage):
(WebCore::drawCrossfadeSubimage):
(WebCore::CrossfadeGeneratedImage::drawCrossfade):
* platform/graphics/CrossfadeGeneratedImage.h:
* platform/graphics/GeneratedImage.h:
* platform/graphics/Gradient.cpp:
(WebCore::Gradient::adjustParametersForTiledDrawing):
* platform/graphics/Gradient.h:
* platform/graphics/GradientImage.cpp:
(WebCore::GradientImage::drawPattern):
* platform/graphics/GradientImage.h:
* platform/graphics/GraphicsContext.cpp:
(WebCore::GraphicsContext::createCompatibleBuffer):
* platform/graphics/GraphicsContext.h:
* platform/graphics/Image.cpp:
(WebCore::Image::adjustSourceRectForDownSampling):
* platform/graphics/Image.h:
(WebCore::Image::setContainerSize):
(WebCore::Image::rect):
(WebCore::Image::width):
(WebCore::Image::height):
* platform/graphics/ImageBuffer.cpp:
(WebCore::ImageBuffer::createCompatibleBuffer):
* platform/graphics/ImageBuffer.h:
(WebCore::ImageBuffer::create):
* platform/graphics/IntPoint.cpp:
(WebCore::IntPoint::IntPoint):
* platform/graphics/IntPoint.h:
* platform/graphics/IntSize.cpp:
(WebCore::IntSize::IntSize):
* platform/graphics/IntSize.h:
* platform/graphics/cairo/ImageBufferCairo.cpp:
(WebCore::ImageBuffer::ImageBuffer):
* platform/graphics/cairo/ImageCairo.cpp:
(WebCore::Image::drawPattern):
* platform/graphics/cg/ImageBufferCG.cpp:
(WebCore::ImageBuffer::ImageBuffer):
* platform/graphics/cg/ImageBufferDataCG.cpp:
* platform/graphics/cg/PDFDocumentImage.cpp:
(WebCore::PDFDocumentImage::size):
(WebCore::PDFDocumentImage::updateCachedImageIfNeeded):
(WebCore::applyRotationForPainting):
* platform/graphics/cg/PDFDocumentImage.h:
* platform/graphics/cg/PatternCG.cpp:
(WebCore::Pattern::createPlatformPattern):
* platform/graphics/mac/GraphicsContextMac.mm:
* platform/graphics/mac/IconMac.mm:
* platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
(WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
* platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
(WebCore::CoordinatedImageBacking::update):
* platform/graphics/win/ImageCGWin.cpp:
(WebCore::BitmapImage::getHBITMAPOfSize):
(WebCore::BitmapImage::drawFrameMatchingSourceSize):
* platform/graphics/win/ImageCairoWin.cpp:
(WebCore::BitmapImage::getHBITMAPOfSize):
(WebCore::BitmapImage::drawFrameMatchingSourceSize):
* platform/mac/DragImageMac.mm:
(WebCore::createDragImageFromImage):
* platform/win/DragImageCGWin.cpp:
(WebCore::createDragImageFromImage):
* platform/win/PasteboardWin.cpp:
(WebCore::Pasteboard::writeImage):
* rendering/RenderImage.cpp:
(WebCore::RenderImage::imageSizeForError):
(WebCore::RenderImage::paintReplaced):
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::drawPlatformResizerImage):
* svg/graphics/SVGImage.cpp:
(WebCore::SVGImage::setContainerSize):
* svg/graphics/SVGImage.h:
* svg/graphics/SVGImageCache.cpp:
(WebCore::SVGImageCache::imageSizeForRenderer):
* svg/graphics/SVGImageCache.h:
* svg/graphics/SVGImageForContainer.cpp:
(WebCore::SVGImageForContainer::size):
* svg/graphics/SVGImageForContainer.h:
* svg/graphics/filters/SVGFEImage.cpp:
(WebCore::FEImage::externalRepresentation):
* testing/Internals.cpp:
(WebCore::Internals::getCurrentCursorInfo):
Source/WebKit:
* WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in:
Source/WebKit2:
* Shared/WebCoreArgumentCoders.cpp:
(IPC::encodeImage):
* UIProcess/API/efl/EwkView.cpp:
(EwkView::updateCursor):
LayoutTests:
* platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.txt:
* platform/mac/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.txt:
* platform/mac/svg/W3C-SVG-1.1/filters-composite-02-b-expected.txt:
* platform/mac/svg/W3C-SVG-1.1/filters-displace-01-f-expected.txt:
* platform/mac/svg/W3C-SVG-1.1/filters-image-01-b-expected.txt:
* svg/custom/feDisplacementMap-01-expected.txt:
* svg/filters/feImage-change-target-id-expected.txt:
* svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-objectBoundingBox-expected.txt:
* svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-userSpaceOnUse-expected.txt:
* svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-objectBoundingBox-expected.txt:
* svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-userSpaceOnUse-expected.txt:
* svg/filters/feImage-late-indirect-update-expected.txt:
* svg/filters/feImage-multiple-targets-id-change-expected.txt:
* svg/filters/feImage-position-expected.txt:
* svg/filters/feImage-preserveAspectRatio-all-expected.txt:
* svg/filters/feImage-preserveAspectratio-expected.txt:
* svg/filters/feImage-reference-invalidation-expected.txt:
* svg/filters/feImage-reference-svg-primitive-expected.txt:
* svg/filters/feImage-remove-target-expected.txt:
* svg/filters/feImage-subregions-expected.txt:
* svg/filters/feImage-subregions-preseveAspectRatio-none-expected.txt:
* svg/filters/feImage-subregions-preseveAspectRatio-none-with-viewBox-expected.txt:
* svg/filters/feImage-target-add-to-document-expected.txt:
* svg/filters/feImage-target-attribute-change-expected.txt:
* svg/filters/feImage-target-attribute-change-with-use-indirection-2-expected.txt:
* svg/filters/feImage-target-attribute-change-with-use-indirection-expected.txt:
* svg/filters/feImage-target-changes-id-expected.txt:
* svg/filters/feImage-target-id-change-expected.txt:
* svg/filters/feImage-target-inline-style-change-expected.txt:
* svg/filters/feImage-target-property-change-expected.txt:
* svg/filters/feImage-target-reappend-to-document-expected.txt:
* svg/filters/feImage-target-remove-from-document-expected.txt:
* svg/filters/feImage-target-style-change-expected.txt:
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@166582
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2014-04-01 Zalan Bujtas <zalan@apple.com>
+
+ Subpixel rendering: Transition class Image (and its dependencies) from int to float to enable subpixel positioned/sized images.
+ https://bugs.webkit.org/show_bug.cgi?id=130643
+
+ Reviewed by Simon Fraser.
+
+ This is in preparation to support subpixel positioned/sized background images. While 1x bitmap images can't take
+ subpixel sizing on hidpi resolutions, both generated and hidpi images can.
+ This patch does not change Image behavior in general as both position and size are still snapped to integral values.
+
+ No change in behavior.
+
+ * platform/mac/svg/W3C-SVG-1.1-SE/filters-image-03-f-expected.txt:
+ * platform/mac/svg/W3C-SVG-1.1-SE/filters-image-05-f-expected.txt:
+ * platform/mac/svg/W3C-SVG-1.1/filters-composite-02-b-expected.txt:
+ * platform/mac/svg/W3C-SVG-1.1/filters-displace-01-f-expected.txt:
+ * platform/mac/svg/W3C-SVG-1.1/filters-image-01-b-expected.txt:
+ * svg/custom/feDisplacementMap-01-expected.txt:
+ * svg/filters/feImage-change-target-id-expected.txt:
+ * svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-objectBoundingBox-expected.txt:
+ * svg/filters/feImage-filterUnits-objectBoundingBox-primitiveUnits-userSpaceOnUse-expected.txt:
+ * svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-objectBoundingBox-expected.txt:
+ * svg/filters/feImage-filterUnits-userSpaceOnUse-primitiveUnits-userSpaceOnUse-expected.txt:
+ * svg/filters/feImage-late-indirect-update-expected.txt:
+ * svg/filters/feImage-multiple-targets-id-change-expected.txt:
+ * svg/filters/feImage-position-expected.txt:
+ * svg/filters/feImage-preserveAspectRatio-all-expected.txt:
+ * svg/filters/feImage-preserveAspectratio-expected.txt:
+ * svg/filters/feImage-reference-invalidation-expected.txt:
+ * svg/filters/feImage-reference-svg-primitive-expected.txt:
+ * svg/filters/feImage-remove-target-expected.txt:
+ * svg/filters/feImage-subregions-expected.txt:
+ * svg/filters/feImage-subregions-preseveAspectRatio-none-expected.txt:
+ * svg/filters/feImage-subregions-preseveAspectRatio-none-with-viewBox-expected.txt:
+ * svg/filters/feImage-target-add-to-document-expected.txt:
+ * svg/filters/feImage-target-attribute-change-expected.txt:
+ * svg/filters/feImage-target-attribute-change-with-use-indirection-2-expected.txt:
+ * svg/filters/feImage-target-attribute-change-with-use-indirection-expected.txt:
+ * svg/filters/feImage-target-changes-id-expected.txt:
+ * svg/filters/feImage-target-id-change-expected.txt:
+ * svg/filters/feImage-target-inline-style-change-expected.txt:
+ * svg/filters/feImage-target-property-change-expected.txt:
+ * svg/filters/feImage-target-reappend-to-document-expected.txt:
+ * svg/filters/feImage-target-remove-from-document-expected.txt:
+ * svg/filters/feImage-target-style-change-expected.txt:
+
2014-03-31 Alexey Proskuryakov <ap@apple.com>
Crashes in PageConsole::addMessage
RenderSVGContainer {g} at (59,99) size 352x152
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="default"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="all_specified_relative"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="all_specified_absolute"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="x_specified"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="y_specified"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="width_specified"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="height_specified"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="width_height_specified"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="x_y_specified"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGContainer {g} at (59,99) size 352x152 [transform={m=((1.00,0.00)(0.00,1.00)) t=(60.00,100.00)}]
RenderSVGRect {rect} at (60,100) size 50x50 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=50.00] [height=50.00]
[filter="default"] RenderSVGResourceFilter {filter} at (0,0) size 50x50
RenderSVGContainer {g} at (10,15) size 420x280
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="default"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMinYMinMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMidYMinMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMaxYMinMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMinYMidMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMidYMidMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMaxYMidMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMinYMaxMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMidYMaxMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMaxYMaxMeet"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMinYMinSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMidYMinSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMaxYMinSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMinYMidSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMidYMidSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMaxYMidSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMinYMaxSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMidYMaxSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="xMaxYMaxSlice"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGContainer {g} at (10,15) size 420x280 [transform={m=((1.00,0.00)(0.00,1.00)) t=(0.00,30.00)}]
RenderSVGText {text} at (63,-15) size 354x19 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 354x18
RenderSVGPath {path} at (15,0) size 150x90 [fill={[type=SOLID] [color=#FF00FF] [opacity=0.50]}] [data="M 0 0 L 0 150 L 150 0 Z"]
RenderSVGResourceFilter {filter} [id="over"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="OVER"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="over50"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="OVER"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="in"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="IN"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="in50"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="IN"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="out"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="OUT"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="out50"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="OUT"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="atop"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="ATOP"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="atop50"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="ATOP"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="xor"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="XOR"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="xor50"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="XOR"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="arithmetic"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="ARITHMETIC" k1="0.50" k2="0.50" k3="0.50" k4="0.50"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGResourceFilter {filter} [id="arithmetic50"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feComposite operation="ARITHMETIC" k1="0.50" k2="0.50" k3="0.50" k4="0.50"]
- [feImage image-size="150x150"]
- [feImage image-size="150x150"]
+ [feImage image-size="150.00x150.00"]
+ [feImage image-size="150.00x150.00"]
RenderSVGContainer {g} at (19,9) size 442x292 [transform={m=((0.40,0.00)(0.00,0.40)) t=(5.00,70.00)}]
RenderSVGRect {rect} at (19,9) size 442x292 [stroke={[type=SOLID] [color=#0000FF]}] [x=1.00] [y=1.00] [width=1098.00] [height=723.00]
RenderSVGText {text} at (100,14) size 765x74 contains 1 chunk(s)
RenderSVGContainer {g} at (15,15) size 415x333
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="DispMapChecker"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="256x256"]
+ [feImage image-size="256.00x256.00"]
RenderSVGResourceFilter {filter} [id="RotateMap"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="128x128"]
+ [feImage image-size="128.00x128.00"]
RenderSVGResourceFilter {filter} [id="SphereMap"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="128x128"]
+ [feImage image-size="128.00x128.00"]
RenderSVGResourceFilter {filter} [id="RotateMapTest"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feDisplacementMap scale="64.00" xChannelSelector="RED" yChannelSelector="GREEN"]
- [feImage image-size="256x256"]
- [feImage image-size="128x128"]
+ [feImage image-size="256.00x256.00"]
+ [feImage image-size="128.00x128.00"]
RenderSVGResourceFilter {filter} [id="SphereMapTest"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feDisplacementMap scale="64.00" xChannelSelector="RED" yChannelSelector="GREEN"]
- [feImage image-size="256x256"]
- [feImage image-size="128x128"]
+ [feImage image-size="256.00x256.00"]
+ [feImage image-size="128.00x128.00"]
RenderSVGContainer {g} at (15,15) size 415x333
RenderSVGRect {rect} at (15,15) size 128x128 [fill={[type=SOLID] [color=#000000]}] [x=15.00] [y=15.00] [width=128.00] [height=128.00]
[filter="DispMapChecker"] RenderSVGResourceFilter {filter} at (15,15) size 128x128
RenderSVGContainer {g} at (0,0) size 480x360
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="image"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="503x503"]
+ [feImage image-size="503.00x503.00"]
RenderSVGText {text} at (147,9) size 186x14 contains 1 chunk(s)
RenderSVGInlineText {#text} at (0,0) size 185x14
chunk 1 (middle anchor) text run 1 at (147.50,20.00) startOffset 0 endOffset 37 width 185.00: "Basic test of feImage filter support."
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="ResultImage"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feDisplacementMap scale="100.00" xChannelSelector="RED" yChannelSelector="GREEN"]
- [feImage image-size="100x100"]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="ResultImage"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGRect {rect} at (0,0) size 101x101 [stroke={[type=SOLID] [color=#0000FF]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="0x0"]
+ [feImage image-size="0.00x0.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGEllipse {circle} at (200,200) size 400x400 [fill={[type=SOLID] [color=#008000]}] [cx=400.00] [cy=400.00] [r=200.00]
RenderSVGResourceFilter {filter} [id="filter1a-rel"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter1b-rel"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter2a-rel"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter2b-rel"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGContainer {g} at (0,0) size 350x200
RenderSVGRect {rect} at (49,49) size 102x102 [stroke={[type=SOLID] [color=#FF0000]}] [x=50.00] [y=50.00] [width=100.00] [height=100.00]
RenderSVGRect {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
RenderSVGEllipse {circle} at (200,200) size 400x400 [fill={[type=SOLID] [color=#008000]}] [cx=400.00] [cy=400.00] [r=200.00]
RenderSVGEllipse {circle} at (50,50) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=100.00] [cy=100.00] [r=50.00]
RenderSVGResourceFilter {filter} [id="filter1a-rel"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter1b-rel"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter2a-rel"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter2b-rel"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter1a-abs"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter1b-abs"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter2a-abs"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter2b-abs"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGContainer {g} at (0,0) size 650x200
RenderSVGRect {rect} at (49,49) size 102x102 [stroke={[type=SOLID] [color=#FF0000]}] [x=50.00] [y=50.00] [width=100.00] [height=100.00]
RenderSVGRect {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGEllipse {circle} at (200,200) size 400x400 [fill={[type=SOLID] [color=#008000]}] [cx=400.00] [cy=400.00] [r=200.00]
RenderSVGResourceFilter {filter} [id="filter1a-rel"] [filterUnits=userSpaceOnUse] [primitiveUnits=objectBoundingBox]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter1b-rel"] [filterUnits=userSpaceOnUse] [primitiveUnits=objectBoundingBox]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter2a-rel"] [filterUnits=userSpaceOnUse] [primitiveUnits=objectBoundingBox]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter2b-rel"] [filterUnits=userSpaceOnUse] [primitiveUnits=objectBoundingBox]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGContainer {g} at (0,0) size 350x200
RenderSVGRect {rect} at (49,49) size 102x102 [stroke={[type=SOLID] [color=#FF0000]}] [x=50.00] [y=50.00] [width=100.00] [height=100.00]
RenderSVGRect {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
RenderSVGEllipse {circle} at (200,200) size 400x400 [fill={[type=SOLID] [color=#008000]}] [cx=400.00] [cy=400.00] [r=200.00]
RenderSVGEllipse {circle} at (50,50) size 100x100 [fill={[type=SOLID] [color=#008000]}] [cx=100.00] [cy=100.00] [r=50.00]
RenderSVGResourceFilter {filter} [id="filter1a-rel"] [filterUnits=userSpaceOnUse] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter1b-rel"] [filterUnits=userSpaceOnUse] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter2a-rel"] [filterUnits=userSpaceOnUse] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter2b-rel"] [filterUnits=userSpaceOnUse] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x400"]
+ [feImage image-size="400.00x400.00"]
RenderSVGResourceFilter {filter} [id="filter1a-abs"] [filterUnits=userSpaceOnUse] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter1b-abs"] [filterUnits=userSpaceOnUse] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter2a-abs"] [filterUnits=userSpaceOnUse] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter2b-abs"] [filterUnits=userSpaceOnUse] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGContainer {g} at (0,0) size 650x200
RenderSVGRect {rect} at (49,49) size 102x102 [stroke={[type=SOLID] [color=#FF0000]}] [x=50.00] [y=50.00] [width=100.00] [height=100.00]
RenderSVGRect {rect} at (0,0) size 200x200 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=200.00] [height=200.00]
RenderSVGResourceLinearGradient {linearGradient} [id="gradient"] [gradientUnits=objectBoundingBox] [start=(0,0)] [end=(1,1)]
RenderSVGGradientStop {stop} [offset=0.00] [color=#008000]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="400x300"]
+ [feImage image-size="400.00x300.00"]
RenderSVGEllipse {ellipse} at (200,150) size 400x300 [fill={[type=LINEAR-GRADIENT] [id="gradient"]}] [cx=400.00] [cy=300.00] [rx=200.00] [ry=150.00]
RenderSVGRect {rect} at (0,0) size 800x600 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=800.00] [height=600.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-80,-60) size 960x720
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="image1"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="image2"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 56x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=50.00] [height=100.00]
[filter="image1"] RenderSVGResourceFilter {filter} at (-5,-10) size 60x120
RenderSVGRect {rect} at (45,0) size 60x111 [fill={[type=SOLID] [color=#000000]}] [x=50.00] [y=0.00] [width=50.00] [height=100.00]
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 441x221 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=400.00] [height=200.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-40,-20) size 480x240
RenderSVGRoot {svg} at (0,0) size 800x333
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="none"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="slice_mid"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="slice_max"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="slice_min"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="meet_mid"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="meet_max"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="meet_min"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 800x333 [stroke={[type=SOLID] [color=#0000FF]}] [x=1.00] [y=1.00] [width=1198.00] [height=498.00]
RenderSVGContainer {g} at (20,3) size 760x311
RenderSVGRect {rect} at (26,3) size 81x161 [fill={[type=SOLID] [color=#000000]}] [x=50.00] [y=25.00] [width=100.00] [height=200.00]
RenderSVGRoot {svg} at (0,0) size 600x250
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="Default"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="Fitted"] [filterUnits=objectBoundingBox] [primitiveUnits=objectBoundingBox]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="Shifted"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 600x250 [stroke={[type=SOLID] [color=#0000FF]}] [x=1.00] [y=1.00] [width=598.00] [height=248.00]
RenderSVGContainer {g} at (40,5) size 520x241
RenderSVGRect {rect} at (40,5) size 120x241 [fill={[type=SOLID] [color=#000000]}] [x=50.00] [y=25.00] [width=100.00] [height=200.00]
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="image"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="image"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGRoot {svg} at (85,0) size 330x315
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="image"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="200x200"]
+ [feImage image-size="200.00x200.00"]
RenderSVGResourceFilter {filter} [id="flood"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
[feFlood flood-color="#008000" flood-opacity="1.00"]
RenderSVGEllipse {circle} at (0,0) size 250x150 [fill={[type=SOLID] [color=#0000FF]}] [cx=0.00] [cy=0.00] [r=100.00]
RenderSVGRoot {svg} at (0,0) size 111x111
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="0x0"]
+ [feImage image-size="0.00x0.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter1"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter2"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter3"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter4"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGContainer {g} at (10,0) size 481x480 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,10.00)}]
RenderSVGRect {rect} at (10,0) size 481x231 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=400.00] [height=200.00]
[filter="filter1"] RenderSVGResourceFilter {filter} at (-40,-20) size 480x240
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter1"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter2"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter3"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter4"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGContainer {g} at (10,0) size 481x480 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,10.00)}]
RenderSVGRect {rect} at (10,0) size 481x231 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=400.00] [height=200.00]
[filter="filter1"] RenderSVGResourceFilter {filter} at (-40,-20) size 480x240
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,100) size 50x50 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter1"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter2"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter3"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGResourceFilter {filter} [id="filter4"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGContainer {g} at (5,95) size 241x245 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,10.00)}]
RenderSVGRect {rect} at (5,95) size 241x120 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=400.00] [height=200.00]
[filter="filter1"] RenderSVGResourceFilter {filter} at (-40,-20) size 480x240
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGContainer {use} at (0,0) size 100x100 [transform={m=((1.00,0.00)(0.00,1.00)) t=(50.00,0.00)}]
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=-50.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGContainer {use} at (0,0) size 100x100
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#FF0000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
RenderSVGHiddenContainer {defs} at (0,0) size 0x0
RenderSVGRect {rect} at (0,0) size 100x100 [fill={[type=SOLID] [color=#008000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
RenderSVGResourceFilter {filter} [id="filter"] [filterUnits=objectBoundingBox] [primitiveUnits=userSpaceOnUse]
- [feImage image-size="100x100"]
+ [feImage image-size="100.00x100.00"]
RenderSVGRect {rect} at (0,0) size 111x111 [fill={[type=SOLID] [color=#000000]}] [x=0.00] [y=0.00] [width=100.00] [height=100.00]
[filter="filter"] RenderSVGResourceFilter {filter} at (-10,-10) size 120x120
+2014-04-01 Zalan Bujtas <zalan@apple.com>
+
+ Subpixel rendering: Transition class Image (and its dependencies) from int to float to enable subpixel positioned/sized images.
+ https://bugs.webkit.org/show_bug.cgi?id=130643
+
+ Reviewed by Simon Fraser.
+
+ This is in preparation to support subpixel positioned/sized background images. While 1x bitmap images can't take
+ subpixel sizing on hidpi resolutions, both generated and hidpi images can.
+ This patch does not change Image behavior in general as both position and size are still snapped to integral values.
+
+ No change in behavior.
+
+ * WebCore.exp.in:
+ * css/CSSCrossfadeValue.cpp:
+ (WebCore::CSSCrossfadeValue::fixedSize):
+ * css/CSSFilterImageValue.cpp:
+ (WebCore::CSSFilterImageValue::fixedSize):
+ * html/canvas/WebGLRenderingContext.cpp:
+ (WebCore::WebGLRenderingContext::drawImageIntoBuffer):
+ * loader/cache/CachedImage.cpp:
+ (WebCore::CachedImage::imageSizeForRenderer):
+ * page/EventHandler.cpp:
+ (WebCore::EventHandler::selectCursor):
+ * platform/Cursor.cpp:
+ (WebCore::determineHotSpot):
+ * platform/graphics/BitmapImage.cpp:
+ (WebCore::BitmapImage::size):
+ (WebCore::BitmapImage::currentFrameSize):
+ * platform/graphics/BitmapImage.h:
+ * platform/graphics/CrossfadeGeneratedImage.cpp:
+ (WebCore::CrossfadeGeneratedImage::CrossfadeGeneratedImage):
+ (WebCore::drawCrossfadeSubimage):
+ (WebCore::CrossfadeGeneratedImage::drawCrossfade):
+ * platform/graphics/CrossfadeGeneratedImage.h:
+ * platform/graphics/GeneratedImage.h:
+ * platform/graphics/Gradient.cpp:
+ (WebCore::Gradient::adjustParametersForTiledDrawing):
+ * platform/graphics/Gradient.h:
+ * platform/graphics/GradientImage.cpp:
+ (WebCore::GradientImage::drawPattern):
+ * platform/graphics/GradientImage.h:
+ * platform/graphics/GraphicsContext.cpp:
+ (WebCore::GraphicsContext::createCompatibleBuffer):
+ * platform/graphics/GraphicsContext.h:
+ * platform/graphics/Image.cpp:
+ (WebCore::Image::adjustSourceRectForDownSampling):
+ * platform/graphics/Image.h:
+ (WebCore::Image::setContainerSize):
+ (WebCore::Image::rect):
+ (WebCore::Image::width):
+ (WebCore::Image::height):
+ * platform/graphics/ImageBuffer.cpp:
+ (WebCore::ImageBuffer::createCompatibleBuffer):
+ * platform/graphics/ImageBuffer.h:
+ (WebCore::ImageBuffer::create):
+ * platform/graphics/IntPoint.cpp:
+ (WebCore::IntPoint::IntPoint):
+ * platform/graphics/IntPoint.h:
+ * platform/graphics/IntSize.cpp:
+ (WebCore::IntSize::IntSize):
+ * platform/graphics/IntSize.h:
+ * platform/graphics/cairo/ImageBufferCairo.cpp:
+ (WebCore::ImageBuffer::ImageBuffer):
+ * platform/graphics/cairo/ImageCairo.cpp:
+ (WebCore::Image::drawPattern):
+ * platform/graphics/cg/ImageBufferCG.cpp:
+ (WebCore::ImageBuffer::ImageBuffer):
+ * platform/graphics/cg/ImageBufferDataCG.cpp:
+ * platform/graphics/cg/PDFDocumentImage.cpp:
+ (WebCore::PDFDocumentImage::size):
+ (WebCore::PDFDocumentImage::updateCachedImageIfNeeded):
+ (WebCore::applyRotationForPainting):
+ * platform/graphics/cg/PDFDocumentImage.h:
+ * platform/graphics/cg/PatternCG.cpp:
+ (WebCore::Pattern::createPlatformPattern):
+ * platform/graphics/mac/GraphicsContextMac.mm:
+ * platform/graphics/mac/IconMac.mm:
+ * platform/graphics/texmap/TextureMapperTiledBackingStore.cpp:
+ (WebCore::TextureMapperTiledBackingStore::updateContentsFromImageIfNeeded):
+ * platform/graphics/texmap/coordinated/CoordinatedImageBacking.cpp:
+ (WebCore::CoordinatedImageBacking::update):
+ * platform/graphics/win/ImageCGWin.cpp:
+ (WebCore::BitmapImage::getHBITMAPOfSize):
+ (WebCore::BitmapImage::drawFrameMatchingSourceSize):
+ * platform/graphics/win/ImageCairoWin.cpp:
+ (WebCore::BitmapImage::getHBITMAPOfSize):
+ (WebCore::BitmapImage::drawFrameMatchingSourceSize):
+ * platform/mac/DragImageMac.mm:
+ (WebCore::createDragImageFromImage):
+ * platform/win/DragImageCGWin.cpp:
+ (WebCore::createDragImageFromImage):
+ * platform/win/PasteboardWin.cpp:
+ (WebCore::Pasteboard::writeImage):
+ * rendering/RenderImage.cpp:
+ (WebCore::RenderImage::imageSizeForError):
+ (WebCore::RenderImage::paintReplaced):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::drawPlatformResizerImage):
+ * svg/graphics/SVGImage.cpp:
+ (WebCore::SVGImage::setContainerSize):
+ * svg/graphics/SVGImage.h:
+ * svg/graphics/SVGImageCache.cpp:
+ (WebCore::SVGImageCache::imageSizeForRenderer):
+ * svg/graphics/SVGImageCache.h:
+ * svg/graphics/SVGImageForContainer.cpp:
+ (WebCore::SVGImageForContainer::size):
+ * svg/graphics/SVGImageForContainer.h:
+ * svg/graphics/filters/SVGFEImage.cpp:
+ (WebCore::FEImage::externalRepresentation):
+ * testing/Internals.cpp:
+ (WebCore::Internals::getCurrentCursorInfo):
+
2014-04-01 Ryuan Choi <ryuan.choi@samsung.com>
Unreviewed build fix when disabled ACCESSIBILITY
__ZN7WebCore9FloatRect9intersectERKS0_
__ZN7WebCore9FloatRectC1ERK6CGRect
__ZN7WebCore9FloatRectC1ERKNS_7IntRectE
+__ZNK7WebCore9FloatRect8containsERKNS_10FloatPointENS0_12ContainsModeE
__ZN7WebCore9FloatSizeC1ERK6CGSize
__ZN7WebCore9FloatSizeC1ERKNS_7IntSizeE
+__ZN7WebCore7IntSizeC1ERKNS_9FloatSizeE
__ZN7WebCore9FontCache10invalidateEv
__ZN7WebCore9FontCache13fontDataCountEv
__ZN7WebCore9FontCache21inactiveFontDataCountEv
if (!cachedFromImage || !cachedToImage)
return IntSize();
- IntSize fromImageSize = cachedFromImage->imageForRenderer(renderer)->size();
- IntSize toImageSize = cachedToImage->imageForRenderer(renderer)->size();
+ FloatSize fromImageSize = cachedFromImage->imageForRenderer(renderer)->size();
+ FloatSize toImageSize = cachedToImage->imageForRenderer(renderer)->size();
// Rounding issues can cause transitions between images of equal size to return
// a different fixed size; avoid performing the interpolation if the images are the same size.
if (fromImageSize == toImageSize)
- return fromImageSize;
+ return IntSize(fromImageSize);
return IntSize(fromImageSize.width() * inversePercentage + toImageSize.width() * percentage,
fromImageSize.height() * inversePercentage + toImageSize.height() * percentage);
if (!cachedImage)
return IntSize();
- return cachedImage->imageForRenderer(renderer)->size();
+ return IntSize(cachedImage->imageForRenderer(renderer)->size());
}
bool CSSFilterImageValue::isPending() const
return nullptr;
}
- IntRect srcRect(IntPoint(), image->size());
- IntRect destRect(IntPoint(), size);
+ FloatRect srcRect(FloatPoint(), image->size());
+ FloatRect destRect(FloatPoint(), size);
buf->context()->drawImage(image, ColorSpaceDeviceRGB, destRect, srcRect);
return buf->copyImage(ImageBuffer::fastCopyImageMode());
}
ASSERT(!isPurgeable());
if (!m_image)
- return IntSize();
+ return LayoutSize();
LayoutSize imageSize(m_image->size());
if (renderer && m_image->isBitmapImage()) {
ImageOrientationDescription orientationDescription(renderer->shouldRespectImageOrientation(), renderer->style().imageOrientation());
if (orientationDescription.respectImageOrientation() == RespectImageOrientation)
- imageSize = toBitmapImage(m_image.get())->sizeRespectingOrientation(orientationDescription);
+ imageSize = LayoutSize(toBitmapImage(m_image.get())->sizeRespectingOrientation(orientationDescription));
}
#else
if (m_image->isBitmapImage() && (renderer && renderer->shouldRespectImageOrientation() == RespectImageOrientation))
#if !PLATFORM(IOS)
- imageSize = toBitmapImage(m_image.get())->sizeRespectingOrientation();
+ imageSize = LayoutSize(toBitmapImage(m_image.get())->sizeRespectingOrientation());
#else
{
// On iOS, the image may have been subsampled to accommodate our size restrictions. However
// we should tell the renderer what the original size was.
- imageSize = toBitmapImage(m_image.get())->originalSizeRespectingOrientation();
+ imageSize = LayoutSize(toBitmapImage(m_image.get())->originalSizeRespectingOrientation());
} else if (m_image->isBitmapImage())
- imageSize = toBitmapImage(m_image.get())->originalSize();
+ imageSize = LayoutSize(toBitmapImage(m_image.get())->originalSize());
#endif // !PLATFORM(IOS)
#endif // ENABLE(CSS_IMAGE_ORIENTATION)
else if (m_image->isSVGImage() && sizeType == UsedSize) {
- imageSize = m_svgImageCache->imageSizeForRenderer(renderer);
+ imageSize = LayoutSize(m_svgImageCache->imageSizeForRenderer(renderer));
}
if (multiplier == 1.0f)
// Get hotspot and convert from logical pixels to physical pixels.
IntPoint hotSpot = (*cursors)[i].hotSpot();
hotSpot.scale(scale, scale);
- IntSize size = cachedImage->imageForRenderer(renderer)->size();
+ FloatSize size = cachedImage->imageForRenderer(renderer)->size();
if (cachedImage->errorOccurred())
continue;
// Limit the size of cursors (in UI pixels) so that they cannot be
#include "Cursor.h"
#include "Image.h"
+#include "IntRect.h"
#include <wtf/Assertions.h>
namespace WebCore {
return IntPoint();
// Hot spot must be inside cursor rectangle.
- IntRect imageRect = image->rect();
+ IntRect imageRect = IntRect(image->rect());
if (imageRect.contains(specifiedHotSpot))
return specifiedHotSpot;
didDecodeProperties();
}
-IntSize BitmapImage::size() const
+FloatSize BitmapImage::size() const
{
updateSize();
return m_size;
IntSize BitmapImage::currentFrameSize() const
{
if (!m_currentFrame || m_hasUniformFrameSize)
- return size();
+ return IntSize(size());
IntSize frameSize = m_source.frameSizeAtIndex(m_currentFrame);
didDecodeProperties();
return frameSize;
virtual bool hasSingleSecurityOrigin() const override;
- virtual IntSize size() const override;
+ // FloatSize due to override.
+ virtual FloatSize size() const override;
IntSize sizeRespectingOrientation(ImageOrientationDescription = ImageOrientationDescription()) const;
#if PLATFORM(IOS)
virtual IntSize originalSize() const;
namespace WebCore {
-CrossfadeGeneratedImage::CrossfadeGeneratedImage(Image* fromImage, Image* toImage, float percentage, IntSize crossfadeSize, const IntSize& size)
+CrossfadeGeneratedImage::CrossfadeGeneratedImage(Image* fromImage, Image* toImage, float percentage, const FloatSize& crossfadeSize, const FloatSize& size)
: m_fromImage(fromImage)
, m_toImage(toImage)
, m_percentage(percentage)
setContainerSize(size);
}
-static void drawCrossfadeSubimage(GraphicsContext* context, Image* image, CompositeOperator operation, float opacity, IntSize targetSize)
+static void drawCrossfadeSubimage(GraphicsContext* context, Image* image, CompositeOperator operation, float opacity, const FloatSize& targetSize)
{
- IntSize imageSize = image->size();
+ FloatSize imageSize = image->size();
// SVGImage resets the opacity when painting, so we have to use transparency layers to accurately paint one at a given opacity.
bool useTransparencyLayer = image->isSVGImage();
context->setAlpha(opacity);
if (targetSize != imageSize)
- context->scale(FloatSize(static_cast<float>(targetSize.width()) / imageSize.width(),
- static_cast<float>(targetSize.height()) / imageSize.height()));
+ context->scale(FloatSize(targetSize.width() / imageSize.width(), targetSize.height() / imageSize.height()));
context->drawImage(image, ColorSpaceDeviceRGB, IntPoint());
if (useTransparencyLayer)
GraphicsContextStateSaver stateSaver(*context);
- context->clip(IntRect(IntPoint(), m_crossfadeSize));
+ context->clip(FloatRect(FloatPoint(), m_crossfadeSize));
context->beginTransparencyLayer(1);
drawCrossfadeSubimage(context, m_fromImage, CompositeSourceOver, 1 - m_percentage, m_crossfadeSize);
#ifndef CrossfadeGeneratedImage_h
#define CrossfadeGeneratedImage_h
+#include "FloatSize.h"
#include "GeneratedImage.h"
#include "Image.h"
#include "ImageObserver.h"
-#include "IntSize.h"
#include <wtf/RefPtr.h>
namespace WebCore {
class CrossfadeGeneratedImage final : public GeneratedImage {
public:
- static PassRefPtr<CrossfadeGeneratedImage> create(Image* fromImage, Image* toImage, float percentage, IntSize crossfadeSize, const IntSize& size)
+ static PassRefPtr<CrossfadeGeneratedImage> create(Image* fromImage, Image* toImage, float percentage, const FloatSize& crossfadeSize, const FloatSize& size)
{
return adoptRef(new CrossfadeGeneratedImage(fromImage, toImage, percentage, crossfadeSize, size));
}
- virtual void setContainerSize(const IntSize&) override { }
+ virtual void setContainerSize(const FloatSize&) override { }
virtual bool usesContainerSize() const override { return false; }
virtual bool hasRelativeWidth() const override { return false; }
virtual bool hasRelativeHeight() const override { return false; }
- virtual IntSize size() const override { return m_crossfadeSize; }
+ virtual FloatSize size() const override { return m_crossfadeSize; }
protected:
virtual void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator, BlendMode, ImageOrientationDescription) override;
virtual void drawPattern(GraphicsContext*, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect& dstRect, BlendMode) override;
- CrossfadeGeneratedImage(Image* fromImage, Image* toImage, float percentage, IntSize crossfadeSize, const IntSize&);
+ CrossfadeGeneratedImage(Image* fromImage, Image* toImage, float percentage, const FloatSize& crossfadeSize, const FloatSize&);
private:
void drawCrossfade(GraphicsContext*);
Image* m_toImage;
float m_percentage;
- IntSize m_crossfadeSize;
+ FloatSize m_crossfadeSize;
};
}
#ifndef GeneratedImage_h
#define GeneratedImage_h
+#include "FloatSize.h"
#include "Image.h"
-#include "IntSize.h"
#include <wtf/RefPtr.h>
namespace WebCore {
public:
virtual bool hasSingleSecurityOrigin() const override { return true; }
- virtual void setContainerSize(const IntSize& size) override { m_size = size; }
+ virtual void setContainerSize(const FloatSize& size) override { m_size = size; }
virtual bool usesContainerSize() const override { return true; }
virtual bool hasRelativeWidth() const override { return true; }
virtual bool hasRelativeHeight() const override { return true; }
virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) override;
- virtual IntSize size() const override { return m_size; }
+ virtual FloatSize size() const override { return m_size; }
// Assume that generated content has no decoded data we need to worry about
virtual void destroyDecodedData(bool /*destroyAll*/ = true) override { }
GeneratedImage() { }
private:
- IntSize m_size;
+ FloatSize m_size;
};
}
platformDestroy();
}
-void Gradient::adjustParametersForTiledDrawing(IntSize& size, FloatRect& srcRect)
+void Gradient::adjustParametersForTiledDrawing(FloatSize& size, FloatRect& srcRect)
{
if (m_radial)
return;
AffineTransform gradientSpaceTransform() { return m_gradientSpaceTransformation; }
void fill(GraphicsContext*, const FloatRect&);
- void adjustParametersForTiledDrawing(IntSize&, FloatRect&);
+ void adjustParametersForTiledDrawing(FloatSize&, FloatRect&);
void setPlatformGradientSpaceTransform(const AffineTransform& gradientSpaceTransformation);
const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator compositeOp, const FloatRect& destRect, BlendMode blendMode)
{
// Allow the generator to provide visually-equivalent tiling parameters for better performance.
- IntSize adjustedSize = size();
+ FloatSize adjustedSize = size();
FloatRect adjustedSrcRect = srcRect;
m_gradient->adjustParametersForTiledDrawing(adjustedSize, adjustedSrcRect);
#ifndef GradientImage_h
#define GradientImage_h
+#include "FloatSize.h"
#include "GeneratedImage.h"
#include "Gradient.h"
#include "Image.h"
#include "ImageBuffer.h"
-#include "IntSize.h"
#include <wtf/RefPtr.h>
namespace WebCore {
class GradientImage final : public GeneratedImage {
public:
- static PassRefPtr<GradientImage> create(PassRefPtr<Gradient> generator, const IntSize& size)
+ static PassRefPtr<GradientImage> create(PassRefPtr<Gradient> generator, const FloatSize& size)
{
return adoptRef(new GradientImage(generator, size));
}
virtual void drawPattern(GraphicsContext*, const FloatRect& srcRect, const AffineTransform& patternTransform,
const FloatPoint& phase, ColorSpace styleColorSpace, CompositeOperator, const FloatRect& destRect, BlendMode) override;
- GradientImage(PassRefPtr<Gradient> generator, const IntSize& size)
+ GradientImage(PassRefPtr<Gradient> generator, const FloatSize& size)
: m_gradient(generator)
{
setContainerSize(size);
private:
RefPtr<Gradient> m_gradient;
std::unique_ptr<ImageBuffer> m_cachedImageBuffer;
- IntSize m_cachedAdjustedSize;
+ FloatSize m_cachedAdjustedSize;
unsigned m_cachedGeneratorHash;
};
return a.xScale() == b.xScale() && a.yScale() == b.yScale();
}
-std::unique_ptr<ImageBuffer> GraphicsContext::createCompatibleBuffer(const IntSize& size, bool hasAlpha) const
+std::unique_ptr<ImageBuffer> GraphicsContext::createCompatibleBuffer(const FloatSize& size, bool hasAlpha) const
{
// Make the buffer larger if the context's transform is scaling it so we need a higher
// resolution than one pixel per unit. Also set up a corresponding scale factor on the
// graphics context.
AffineTransform transform = getCTM(DefinitelyIncludeDeviceScale);
- IntSize scaledSize(static_cast<int>(ceil(size.width() * transform.xScale())), static_cast<int>(ceil(size.height() * transform.yScale())));
+ FloatSize scaledSize(static_cast<int>(ceil(size.width() * transform.xScale())), static_cast<int>(ceil(size.height() * transform.yScale())));
std::unique_ptr<ImageBuffer> buffer = ImageBuffer::createCompatibleBuffer(scaledSize, 1, ColorSpaceDeviceRGB, this, hasAlpha);
if (!buffer)
return nullptr;
- buffer->context()->scale(FloatSize(static_cast<float>(scaledSize.width()) / size.width(),
- static_cast<float>(scaledSize.height()) / size.height()));
+ buffer->context()->scale(FloatSize(scaledSize.width() / size.width(), scaledSize.height() / size.height()));
return buffer;
}
#endif
// Create an image buffer compatible with this context, with suitable resolution
// for drawing into the buffer and then into this context.
- std::unique_ptr<ImageBuffer> createCompatibleBuffer(const IntSize&, bool hasAlpha = true) const;
+ std::unique_ptr<ImageBuffer> createCompatibleBuffer(const FloatSize&, bool hasAlpha = true) const;
bool isCompatibleWithBuffer(ImageBuffer*) const;
// This function applies the device scale factor to the context, making the context capable of
#include "BitmapImage.h"
#include "GraphicsContext.h"
#include "ImageObserver.h"
-#include "IntRect.h"
#include "Length.h"
#include "MIMETypeRegistry.h"
#include "SharedBuffer.h"
#if ENABLE(IMAGE_DECODER_DOWN_SAMPLING)
FloatRect Image::adjustSourceRectForDownSampling(const FloatRect& srcRect, const IntSize& scaledSize) const
{
- const IntSize unscaledSize = size();
+ const FloatSize unscaledSize = size();
if (unscaledSize == scaledSize)
return srcRect;
#include "Color.h"
#include "ColorSpace.h"
+#include "FloatRect.h"
#include "FloatSize.h"
#include "GraphicsTypes.h"
#include "ImageOrientation.h"
class AffineTransform;
class FloatPoint;
-class FloatRect;
class FloatSize;
class GraphicsContext;
class SharedBuffer;
static Image* nullImage();
bool isNull() const { return size().isEmpty(); }
- virtual void setContainerSize(const IntSize&) { }
+ virtual void setContainerSize(const FloatSize&) { }
virtual bool usesContainerSize() const { return false; }
virtual bool hasRelativeWidth() const { return false; }
virtual bool hasRelativeHeight() const { return false; }
virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio);
- virtual IntSize size() const = 0;
- IntRect rect() const { return IntRect(IntPoint(), size()); }
- int width() const { return size().width(); }
- int height() const { return size().height(); }
+ virtual FloatSize size() const = 0;
+ FloatRect rect() const { return FloatRect(FloatPoint(), size()); }
+ float width() const { return size().width(); }
+ float height() const { return size().height(); }
virtual bool getHotSpot(IntPoint&) const { return false; }
bool setData(PassRefPtr<SharedBuffer> data, bool allDataReceived);
return false;
}
-std::unique_ptr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const IntSize& size, float resolutionScale, ColorSpace colorSpace, const GraphicsContext* context, bool)
+std::unique_ptr<ImageBuffer> ImageBuffer::createCompatibleBuffer(const FloatSize& size, float resolutionScale, ColorSpace colorSpace, const GraphicsContext* context, bool)
{
return create(size, resolutionScale, colorSpace, context->isAcceleratedContext() ? Accelerated : Unaccelerated);
}
WTF_MAKE_NONCOPYABLE(ImageBuffer); WTF_MAKE_FAST_ALLOCATED;
public:
// Will return a null pointer on allocation failure.
- static std::unique_ptr<ImageBuffer> create(const IntSize& size, float resolutionScale = 1, ColorSpace colorSpace = ColorSpaceDeviceRGB, RenderingMode renderingMode = Unaccelerated)
+ static std::unique_ptr<ImageBuffer> create(const FloatSize& size, float resolutionScale = 1, ColorSpace colorSpace = ColorSpaceDeviceRGB, RenderingMode renderingMode = Unaccelerated)
{
bool success = false;
std::unique_ptr<ImageBuffer> buffer(new ImageBuffer(size, resolutionScale, colorSpace, renderingMode, success));
return buffer;
}
- static std::unique_ptr<ImageBuffer> createCompatibleBuffer(const IntSize&, float resolutionScale, ColorSpace, const GraphicsContext*, bool hasAlpha);
+ static std::unique_ptr<ImageBuffer> createCompatibleBuffer(const FloatSize&, float resolutionScale, ColorSpace, const GraphicsContext*, bool hasAlpha);
~ImageBuffer();
// This constructor will place its success into the given out-variable
// so that create() knows when it should return failure.
- ImageBuffer(const IntSize&, float resolutionScale, ColorSpace, RenderingMode, bool& success);
+ ImageBuffer(const FloatSize&, float resolutionScale, ColorSpace, RenderingMode, bool& success);
};
#if USE(CG)
#include "config.h"
#include "IntPoint.h"
+#include "FloatPoint.h"
#include <wtf/PrintStream.h>
namespace WebCore {
out.printf("(%d, %d)", x(), y());
}
+IntPoint::IntPoint(const FloatPoint& p)
+ : m_x(clampToInteger(p.x()))
+ , m_y(clampToInteger(p.y()))
+{
+}
+
}
namespace WebCore {
+class FloatPoint;
+
class IntPoint {
public:
IntPoint() : m_x(0), m_y(0) { }
IntPoint(int x, int y) : m_x(x), m_y(y) { }
explicit IntPoint(const IntSize& size) : m_x(size.width()), m_y(size.height()) { }
+ explicit IntPoint(const FloatPoint&); // don't do this implicitly since it's lossy
static IntPoint zero() { return IntPoint(); }
#include "config.h"
#include "IntSize.h"
+#include "FloatSize.h"
#include <wtf/PrintStream.h>
namespace WebCore {
out.printf("(%d x %d)", width(), height());
}
+IntSize::IntSize(const FloatSize& s)
+ : m_width(clampToInteger(s.width()))
+ , m_height(clampToInteger(s.height()))
+{
+}
+
}
namespace WebCore {
+class FloatSize;
+
class IntSize {
public:
IntSize() : m_width(0), m_height(0) { }
IntSize(int width, int height) : m_width(width), m_height(height) { }
+ explicit IntSize(const FloatSize&); // don't do this implicitly since it's lossy
int width() const { return m_width; }
int height() const { return m_height; }
}
#endif
-ImageBuffer::ImageBuffer(const IntSize& size, float /* resolutionScale */, ColorSpace, RenderingMode renderingMode, bool& success)
- : m_data(size)
+ImageBuffer::ImageBuffer(const FloatSize& size, float /* resolutionScale */, ColorSpace, RenderingMode renderingMode, bool& success)
+ : m_data(IntSize(size))
, m_size(size)
, m_logicalSize(size)
{
return;
cairo_t* cr = context->platformContext()->cr();
- drawPatternToCairoContext(cr, surface.get(), size(), tileRect, patternTransform, phase, toCairoOperator(op), destRect);
+ drawPatternToCairoContext(cr, surface.get(), IntSize(size()), tileRect, patternTransform, phase, toCairoOperator(op), destRect);
if (imageObserver())
imageObserver()->didDraw(this);
#include "GraphicsContext.h"
#include "GraphicsContextCG.h"
#include "ImageData.h"
+#include "IntRect.h"
#include "MIMETypeRegistry.h"
#include <math.h>
#include <CoreGraphics/CoreGraphics.h>
#include <wtf/RetainPtr.h>
#include <wtf/text/Base64.h>
#include <wtf/text/WTFString.h>
-
#if PLATFORM(COCOA)
#include "WebCoreSystemInterface.h"
#endif
return FloatSize(logicalSize.width() * xMagnification, logicalSize.height() * yMagnification);
}
-ImageBuffer::ImageBuffer(const IntSize& size, float resolutionScale, ColorSpace imageColorSpace, RenderingMode renderingMode, bool& success)
- : m_data(size) // NOTE: The input here isn't important as ImageBufferDataCG's constructor just ignores it.
+ImageBuffer::ImageBuffer(const FloatSize& size, float resolutionScale, ColorSpace imageColorSpace, RenderingMode renderingMode, bool& success)
+ : m_data(IntSize(size)) // NOTE: The input here isn't important as ImageBufferDataCG's constructor just ignores it.
, m_logicalSize(size)
, m_resolutionScale(resolutionScale)
{
#include "config.h"
#include "ImageBufferData.h"
+#include "IntRect.h"
#include <CoreGraphics/CoreGraphics.h>
#include <wtf/Assertions.h>
#include "GraphicsContext.h"
#include "ImageBuffer.h"
#include "ImageObserver.h"
+#include "IntRect.h"
#include "Length.h"
#include "SharedBuffer.h"
#include <CoreGraphics/CGContext.h>
return "pdf";
}
-IntSize PDFDocumentImage::size() const
+FloatSize PDFDocumentImage::size() const
{
- IntSize expandedCropBoxSize = expandedIntSize(m_cropBox.size());
+ FloatSize expandedCropBoxSize = FloatSize(expandedIntSize(m_cropBox.size()));
if (m_rotationDegrees == 90 || m_rotationDegrees == 270)
return expandedCropBoxSize.transposedSize();
bool useLowQualityInterpolation = interpolationQuality == InterpolationNone || interpolationQuality == InterpolationLow;
if (!m_cachedImageBuffer || (!cacheParametersMatch(context, dstRect, srcRect) && !useLowQualityInterpolation)) {
- m_cachedImageBuffer = context->createCompatibleBuffer(enclosingIntRect(dstRect).size());
+ m_cachedImageBuffer = context->createCompatibleBuffer(FloatRect(enclosingIntRect(dstRect)).size());
if (!m_cachedImageBuffer)
return;
GraphicsContext* bufferContext = m_cachedImageBuffer->context();
return CGPDFDocumentGetNumberOfPages(m_document.get());
}
-static void applyRotationForPainting(GraphicsContext* context, IntSize size, int rotationDegrees)
+static void applyRotationForPainting(GraphicsContext* context, FloatSize size, int rotationDegrees)
{
if (rotationDegrees == 90)
context->translate(0, size.height());
virtual void destroyDecodedData(bool /*destroyAll*/ = true) override;
virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) override;
- virtual IntSize size() const override;
+ virtual FloatSize size() const override;
virtual void draw(GraphicsContext*, const FloatRect& dstRect, const FloatRect& srcRect, ColorSpace styleColorSpace, CompositeOperator, BlendMode, ImageOrientationDescription) override;
CGPatternRef Pattern::createPlatformPattern(const AffineTransform& userSpaceTransformation) const
{
- IntRect tileRect = tileImage()->rect();
+ FloatRect tileRect = tileImage()->rect();
AffineTransform patternTransform = userSpaceTransformation * m_patternSpaceTransformation;
patternTransform.scaleNonUniform(1, -1);
#import "GraphicsContextCG.h"
#import "GraphicsContextPlatformPrivateCG.h"
+#import "IntRect.h"
#if USE(APPKIT)
#import <AppKit/AppKit.h>
#endif
#import "Icon.h"
#import "GraphicsContext.h"
+#import "IntRect.h"
#import "LocalCurrentGraphicsContext.h"
#import <wtf/PassRefPtr.h>
#include <wtf/text/WTFString.h>
if (!m_image)
return;
- updateContents(textureMapper, m_image.get(), m_image->size(), m_image->rect(), BitmapTexture::UpdateCannotModifyOriginalImageData);
+ updateContents(textureMapper, m_image.get(), m_image->size(), enclosingIntRect(m_image->rect()), BitmapTexture::UpdateCannotModifyOriginalImageData);
m_image.clear();
}
}
}
- m_surface = CoordinatedSurface::create(m_image->size(), !m_image->currentFrameKnownToBeOpaque() ? CoordinatedSurface::SupportsAlpha : CoordinatedSurface::NoFlags);
+ m_surface = CoordinatedSurface::create(IntSize(m_image->size()), !m_image->currentFrameKnownToBeOpaque() ? CoordinatedSurface::SupportsAlpha : CoordinatedSurface::NoFlags);
if (!m_surface) {
m_isDirty = false;
return;
}
- IntRect rect(IntPoint::zero(), m_image->size());
+ IntRect rect(IntPoint::zero(), IntSize(m_image->size()));
ImageBackingSurfaceClient surfaceClient(m_image.get(), rect);
m_surface->paintToSurface(rect, &surfaceClient);
GraphicsContext gc(cgContext);
- IntSize imageSize = BitmapImage::size();
+ FloatSize imageSize = BitmapImage::size();
if (size)
drawFrameMatchingSourceSize(&gc, FloatRect(0.0f, 0.0f, bmpInfo.bmWidth, bmpInfo.bmHeight), *size, ColorSpaceDeviceRGB, CompositeCopy);
else
}
// No image of the correct size was found, fallback to drawing the current frame
- IntSize imageSize = BitmapImage::size();
+ FloatSize imageSize = BitmapImage::size();
draw(ctxt, dstRect, FloatRect(0.0f, 0.0f, imageSize.width(), imageSize.height()), styleColorSpace, compositeOp, BlendModeNormal, ImageOrientationDescription());
}
GraphicsContext gc(targetRef);
- IntSize imageSize = BitmapImage::size();
+ FloatSize imageSize = BitmapImage::size();
if (size)
drawFrameMatchingSourceSize(&gc, FloatRect(0.0f, 0.0f, bmpInfo.bmWidth, bmpInfo.bmHeight), *size, ColorSpaceDeviceRGB, CompositeCopy);
else
}
// No image of the correct size was found, fallback to drawing the current frame
- IntSize imageSize = BitmapImage::size();
+ FloatSize imageSize = BitmapImage::size();
draw(ctxt, dstRect, FloatRect(0.0f, 0.0f, imageSize.width(), imageSize.height()), ColorSpaceDeviceRGB, compositeOp, BlendModeNormal, ImageOrientationDescription());
}
RetainPtr<NSImage> createDragImageFromImage(Image* image, ImageOrientationDescription description)
{
- IntSize size = image->size();
+ FloatSize size = image->size();
if (image->isBitmapImage()) {
ImageOrientation orientation;
return 0;
CGContextRef drawContext = 0;
- auto hbmp = allocImage(workingDC.get(), img->size(), &drawContext);
+ auto hbmp = allocImage(workingDC.get(), IntSize(img->size()), &drawContext);
if (!hbmp || !drawContext)
return 0;
CGImageRef srcImage = img->getCGImageRef();
CGRect rect;
- rect.size = img->size();
+ rect.size = IntSize(img->size());
rect.origin.x = 0;
rect.origin.y = -rect.size.height;
static const CGFloat white [] = {1.0, 1.0, 1.0, 1.0};
auto resultBitmap = adoptGDIObject(::CreateCompatibleBitmap(dc, image->width(), image->height()));
HGDIOBJ oldBitmap = ::SelectObject(compatibleDC.get(), resultBitmap.get());
- BitmapInfo bmInfo = BitmapInfo::create(image->size());
+ BitmapInfo bmInfo = BitmapInfo::create(IntSize(image->size()));
auto coreBitmap = adoptGDIObject(::CreateDIBSection(dc, &bmInfo, DIB_RGB_COLORS, 0, 0, 0));
HGDIOBJ oldSource = ::SelectObject(sourceDC.get(), coreBitmap.get());
ASSERT_ARG(newImage, newImage);
ASSERT_ARG(newImage, newImage->imageForRenderer(this));
- IntSize imageSize;
+ FloatSize imageSize;
if (newImage->willPaintBrokenImage()) {
std::pair<Image*, float> brokenImageAndImageScaleFactor = newImage->brokenImage(document().deviceScaleFactor());
imageSize = brokenImageAndImageScaleFactor.first->size();
// Call brokenImage() explicitly to ensure we get the broken image icon at the appropriate resolution.
std::pair<Image*, float> brokenImageAndImageScaleFactor = imageResource().cachedImage()->brokenImage(document().deviceScaleFactor());
image = brokenImageAndImageScaleFactor.first;
- IntSize imageSize = image->size();
+ FloatSize imageSize = image->size();
imageSize.scale(1 / brokenImageAndImageScaleFactor.second);
// Center the error image, accounting for border and padding.
LayoutUnit centerX = (usableWidth - imageSize.width()) / 2;
void RenderLayer::drawPlatformResizerImage(GraphicsContext* context, const LayoutRect& resizerCornerRect)
{
RefPtr<Image> resizeCornerImage;
- IntSize cornerResizerSize;
+ FloatSize cornerResizerSize;
if (renderer().document().deviceScaleFactor() >= 2) {
DEPRECATED_DEFINE_STATIC_LOCAL(Image*, resizeCornerImageHiRes, (Image::loadPlatformResource("textAreaResizeCorner@2x").leakRef()));
resizeCornerImage = resizeCornerImageHiRes;
return true;
}
-void SVGImage::setContainerSize(const IntSize& size)
+void SVGImage::setContainerSize(const FloatSize& size)
{
if (!m_page || !usesContainerSize())
return;
FrameView* view = frameView();
view->resize(this->containerSize());
- renderer->setContainerSize(size);
+ renderer->setContainerSize(IntSize(size));
}
IntSize SVGImage::containerSize() const
FrameView* frameView() const;
virtual bool isSVGImage() const override { return true; }
- virtual IntSize size() const override { return m_intrinsicSize; }
+ virtual FloatSize size() const override { return m_intrinsicSize; }
void setURL(const URL& url) { m_url = url; }
virtual String filenameExtension() const override;
- virtual void setContainerSize(const IntSize&) override;
+ virtual void setContainerSize(const FloatSize&) override;
IntSize containerSize() const;
virtual bool usesContainerSize() const override { return true; }
virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) override;
std::unique_ptr<SVGImageChromeClient> m_chromeClient;
std::unique_ptr<Page> m_page;
- IntSize m_intrinsicSize;
+ FloatSize m_intrinsicSize;
URL m_url;
};
m_imageForContainerMap.set(client, SVGImageForContainer::create(m_svgImage, containerSizeWithoutZoom, containerZoom));
}
-IntSize SVGImageCache::imageSizeForRenderer(const RenderObject* renderer) const
+FloatSize SVGImageCache::imageSizeForRenderer(const RenderObject* renderer) const
{
- IntSize imageSize = m_svgImage->size();
+ FloatSize imageSize = m_svgImage->size();
if (!renderer)
return imageSize;
void removeClientFromCache(const CachedImageClient*);
void setContainerSizeForRenderer(const CachedImageClient*, const IntSize&, float);
- IntSize imageSizeForRenderer(const RenderObject*) const;
+ FloatSize imageSizeForRenderer(const RenderObject*) const;
Image* imageForRenderer(const RenderObject*);
namespace WebCore {
-IntSize SVGImageForContainer::size() const
+FloatSize SVGImageForContainer::size() const
{
FloatSize scaledContainerSize(m_containerSize);
scaledContainerSize.scale(m_zoom);
- return roundedIntSize(scaledContainerSize);
+ return FloatSize(roundedIntSize(scaledContainerSize));
}
void SVGImageForContainer::draw(GraphicsContext* context, const FloatRect& dstRect,
virtual bool isSVGImage() const override { return true; }
- virtual IntSize size() const override;
+ virtual FloatSize size() const override;
void setURL(const URL& url) { m_image->setURL(url); }
TextStream& FEImage::externalRepresentation(TextStream& ts, int indent) const
{
- IntSize imageSize;
+ FloatSize imageSize;
if (m_image)
imageSize = m_image->size();
else if (RenderObject* renderer = referencedRenderer())
result.append(",");
result.appendNumber(cursor.hotSpot().y());
if (cursor.image()) {
- IntSize size = cursor.image()->size();
+ FloatSize size = cursor.image()->size();
result.append(" image=");
result.appendNumber(size.width());
result.append("x");
+2014-04-01 Zalan Bujtas <zalan@apple.com>
+
+ Subpixel rendering: Transition class Image (and its dependencies) from int to float to enable subpixel positioned/sized images.
+ https://bugs.webkit.org/show_bug.cgi?id=130643
+
+ Reviewed by Simon Fraser.
+
+ This is in preparation to support subpixel positioned/sized background images. While 1x bitmap images can't take
+ subpixel sizing on hidpi resolutions, both generated and hidpi images can.
+ This patch does not change Image behavior in general as both position and size are still snapped to integral values.
+
+ No change in behavior.
+
+ * WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in:
+
2014-03-31 Andreas Kling <akling@apple.com>
Blind Windows build fix. Check my mangle-fu.
symbolWithPointer(?currentFrameKnownToBeOpaque@BitmapImage@WebCore@@UAE_NXZ, ?currentFrameKnownToBeOpaque@BitmapImage@WebCore@@UEAA_NXZ)
symbolWithPointer(?hasSingleSecurityOrigin@BitmapImage@WebCore@@UBE_NXZ, ?hasSingleSecurityOrigin@BitmapImage@WebCore@@UEBA_NXZ)
symbolWithPointer(?computeIntrinsicDimensions@Image@WebCore@@UAEXAAULength@2@0AAVFloatSize@2@@Z, ?computeIntrinsicDimensions@Image@WebCore@@UEAAXAEAULength@2@0AEAVFloatSize@2@@Z)
- symbolWithPointer(?size@BitmapImage@WebCore@@UBE?AVIntSize@2@XZ, ?size@BitmapImage@WebCore@@UEBA?AVIntSize@2@XZ)
+ symbolWithPointer(?size@BitmapImage@WebCore@@UBE?AVFloatSize@2@XZ, ?size@BitmapImage@WebCore@@UEBA?AVFloatSize@2@XZ)
symbolWithPointer(?getHotSpot@BitmapImage@WebCore@@UBE_NAAVIntPoint@2@@Z, ?getHotSpot@BitmapImage@WebCore@@UEBA_NAEAVIntPoint@2@@Z)
symbolWithPointer(?dataChanged@BitmapImage@WebCore@@UAE_N_N@Z, ?dataChanged@BitmapImage@WebCore@@UEAA_N_N@Z)
symbolWithPointer(?filenameExtension@BitmapImage@WebCore@@UBE?AVString@WTF@@XZ, ?filenameExtension@BitmapImage@WebCore@@UEBA?AVString@WTF@@XZ)
+2014-04-01 Zalan Bujtas <zalan@apple.com>
+
+ Subpixel rendering: Transition class Image (and its dependencies) from int to float to enable subpixel positioned/sized images.
+ https://bugs.webkit.org/show_bug.cgi?id=130643
+
+ Reviewed by Simon Fraser.
+
+ This is in preparation to support subpixel positioned/sized background images. While 1x bitmap images can't take
+ subpixel sizing on hidpi resolutions, both generated and hidpi images can.
+ This patch does not change Image behavior in general as both position and size are still snapped to integral values.
+
+ No change in behavior.
+
+ * Shared/WebCoreArgumentCoders.cpp:
+ (IPC::encodeImage):
+ * UIProcess/API/efl/EwkView.cpp:
+ (EwkView::updateCursor):
+
2014-04-01 Joonghun Park <jh718.park@samsung.com>
[EFL][WK2] Fix and update the existing test case for ewk_database_manager_origins_async_get API
static void encodeImage(ArgumentEncoder& encoder, Image* image)
{
- RefPtr<ShareableBitmap> bitmap = ShareableBitmap::createShareable(image->size(), ShareableBitmap::SupportsAlpha);
+ RefPtr<ShareableBitmap> bitmap = ShareableBitmap::createShareable(IntSize(image->size()), ShareableBitmap::SupportsAlpha);
bitmap->createGraphicsContext()->drawImage(image, ColorSpaceDeviceRGB, IntPoint());
ShareableBitmap::Handle handle;
if (!cursorObject)
return;
- IntSize cursorSize = cursorImage->size();
+ IntSize cursorSize = IntSize(cursorImage->size());
// Resize cursor.
evas_object_resize(cursorObject.get(), cursorSize.width(), cursorSize.height());