Changeset 65729 in webkit
- Timestamp:
- Aug 20, 2010 2:13:49 AM (14 years ago)
- Location:
- trunk
- Files:
-
- 4 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r65725 r65729 1 2010-08-20 Nikolas Zimmermann <nzimmermann@rim.com> 2 3 Reviewed by Dirk Schulze. 4 5 Clippers are rasterized, when applied to scaled target object 6 https://bugs.webkit.org/show_bug.cgi?id=44325 7 8 * platform/mac/svg/clip-path/clip-path-pixelation-expected.checksum: Added. 9 * platform/mac/svg/clip-path/clip-path-pixelation-expected.png: Added. 10 * platform/mac/svg/clip-path/clip-path-pixelation-expected.txt: Added. 11 * svg/clip-path/clip-path-pixelation.svg: Added. 12 1 13 2010-08-19 Kent Tamura <tkent@chromium.org> 2 14 -
trunk/WebCore/ChangeLog
r65728 r65729 1 2010-08-20 Nikolas Zimmermann <nzimmermann@rim.com> 2 3 Reviewed by Dirk Schulze. 4 5 Clippers are rasterized, when applied to scaled target object 6 https://bugs.webkit.org/show_bug.cgi?id=44325 7 8 Use SVGImageBufferTools logic for RenderSVGResourceClipper, just like RenderSVGResourceMasker/Gradient, 9 to avoid pixelation, when the clipper is applied to a scaled target object, or when the document is scaled. 10 11 Test: svg/clip-path/clip-path-pixelation.svg 12 13 * rendering/RenderSVGResourceClipper.cpp: 14 (WebCore::RenderSVGResourceClipper::applyClippingToContext): 15 (WebCore::RenderSVGResourceClipper::createClipData): 16 * rendering/RenderSVGResourceClipper.h: 17 1 18 2010-08-20 Andreas Kling <andreas.kling@nokia.com> 2 19 -
trunk/WebCore/rendering/RenderSVGResourceClipper.cpp
r65449 r65729 38 38 #include "SVGClipPathElement.h" 39 39 #include "SVGElement.h" 40 #include "SVGImageBufferTools.h" 40 41 #include "SVGRenderSupport.h" 41 42 #include "SVGResources.h" … … 164 165 m_clipper.set(object, new ClipperData); 165 166 167 bool shouldCreateClipData = false; 166 168 ClipperData* clipperData = m_clipper.get(object); 167 169 if (!clipperData->clipMaskImage) { 168 170 if (pathOnlyClipping(context, objectBoundingBox)) 169 171 return true; 170 createClipData(clipperData, objectBoundingBox, repaintRect); 171 } 172 shouldCreateClipData = true; 173 } 174 175 AffineTransform absoluteTransform = SVGImageBufferTools::transformationToOutermostSVGCoordinateSystem(object); 176 FloatRect clampedAbsoluteTargetRect = SVGImageBufferTools::clampedAbsoluteTargetRectForRenderer(object, absoluteTransform, repaintRect); 177 178 if (shouldCreateClipData) 179 createClipData(clipperData, objectBoundingBox, repaintRect, clampedAbsoluteTargetRect, absoluteTransform); 172 180 173 181 if (!clipperData->clipMaskImage) 174 182 return false; 175 183 176 context->clipToImageBuffer(clipperData->clipMaskImage.get(), repaintRect);184 SVGImageBufferTools::clipToImageBuffer(context, absoluteTransform, clampedAbsoluteTargetRect, clipperData->clipMaskImage.get()); 177 185 return true; 178 186 } 179 187 180 bool RenderSVGResourceClipper::createClipData(ClipperData* clipperData, const FloatRect& objectBoundingBox, const FloatRect& repaintRect) 181 { 182 IntRect clipMaskRect = enclosingIntRect(repaintRect); 183 clipperData->clipMaskImage = ImageBuffer::create(clipMaskRect.size()); 184 if (!clipperData->clipMaskImage) 188 bool RenderSVGResourceClipper::createClipData(ClipperData* clipperData, 189 const FloatRect& objectBoundingBox, 190 const FloatRect& repaintRect, 191 const FloatRect& clampedAbsoluteTargetRect, 192 const AffineTransform& absoluteTransform) 193 { 194 if (!SVGImageBufferTools::createImageBuffer(clampedAbsoluteTargetRect, clipperData->clipMaskImage, DeviceRGB)) 185 195 return false; 186 196 … … 189 199 190 200 maskContext->save(); 191 maskContext->translate(-repaintRect.x(), -repaintRect.y()); 201 maskContext->translate(-clampedAbsoluteTargetRect.x(), -clampedAbsoluteTargetRect.y()); 202 maskContext->concatCTM(absoluteTransform); 192 203 193 204 // clipPath can also be clipped by another clipPath. -
trunk/WebCore/rendering/RenderSVGResourceClipper.h
r65310 r65729 66 66 bool applyClippingToContext(RenderObject*, const FloatRect&, const FloatRect&, GraphicsContext*); 67 67 bool pathOnlyClipping(GraphicsContext*, const FloatRect&); 68 bool createClipData(ClipperData*, const FloatRect&, const FloatRect&); 68 bool createClipData(ClipperData*, const FloatRect& objectBoundingBox, const FloatRect& repaintRect, const FloatRect& clampedAbsoluteTargetRect, const AffineTransform& absoluteTransform); 69 69 70 void calculateClipContentRepaintRect(); 70 71
Note: See TracChangeset
for help on using the changeset viewer.