Changeset 52403 in webkit
- Timestamp:
- Dec 19, 2009 11:48:45 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r52402 r52403 1 2009-12-19 Eric Seidel <eric@webkit.org> 2 3 No review, rolling out r52395. 4 http://trac.webkit.org/changeset/52395 5 6 * svg/SVGMaskElement.cpp: 7 (WebCore::SVGMaskElement::drawMaskerContent): 8 * svg/SVGMaskElement.h: 9 * svg/graphics/SVGResourceMasker.cpp: 10 (WebCore::SVGResourceMasker::applyMask): 11 * svg/graphics/SVGResourceMasker.h: 12 1 13 2009-12-19 Adam Barth <abarth@webkit.org> 2 14 -
trunk/WebCore/svg/SVGMaskElement.cpp
r52395 r52403 127 127 } 128 128 129 PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& targetRect, FloatRect& maskDestRect , IntRect& paintRect) const129 PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& targetRect, FloatRect& maskDestRect) const 130 130 { 131 131 // Determine specified mask size … … 170 170 ASSERT(maskImageContext); 171 171 172 TransformationMatrix contextTransform;173 contextTransform.translate(-maskContextLocation.x(), -maskContextLocation.y());174 if (maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)175 contextTransform.scaleNonUniform(targetRect.width(), targetRect.height());176 177 172 maskImageContext->save(); 178 maskImageContext->concatCTM(contextTransform); 179 180 FloatRect repaintRect; 173 maskImageContext->translate(-maskContextLocation.x(), -maskContextLocation.y()); 174 175 if (maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) { 176 maskImageContext->save(); 177 maskImageContext->scale(FloatSize(targetRect.width(), targetRect.height())); 178 } 179 181 180 // Render subtree into ImageBuffer 182 181 for (Node* n = firstChild(); n; n = n->nextSibling()) { … … 193 192 194 193 renderSubtreeToImage(maskImage.get(), item); 195 repaintRect.unite(item->repaintRectInLocalCoordinates()); 196 } 197 198 if (contextTransform.isInvertible()) { 199 contextTransform.inverse(); 200 repaintRect = contextTransform.mapRect(repaintRect); 201 repaintRect.intersect(FloatRect(FloatPoint(), maskDestRect.size())); 202 paintRect = enclosingIntRect(repaintRect); 203 } else 204 paintRect = enclosingIntRect(FloatRect(FloatPoint(), maskDestRect.size())); 194 } 195 196 if (maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) 197 maskImageContext->restore(); 205 198 206 199 maskImageContext->restore(); -
trunk/WebCore/svg/SVGMaskElement.h
r52395 r52403 51 51 virtual SVGResource* canvasResource(); 52 52 53 PassOwnPtr<ImageBuffer> drawMaskerContent(const FloatRect& targetRect, FloatRect& maskRect , IntRect& paintRect) const;53 PassOwnPtr<ImageBuffer> drawMaskerContent(const FloatRect& targetRect, FloatRect& maskRect) const; 54 54 55 55 private: -
trunk/WebCore/svg/graphics/SVGResourceMasker.cpp
r52395 r52403 1 1 /* 2 2 * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org> 3 * 2009 Dirk Schulze <krit@webkit.org>4 3 * 5 4 * Redistribution and use in source and binary forms, with or without … … 40 39 #include "TextStream.h" 41 40 41 #include <wtf/ByteArray.h> 42 42 43 using namespace std; 43 44 … … 63 64 { 64 65 if (!m_mask) 65 m_mask = m_ownerElement->drawMaskerContent(boundingBox, m_maskRect , m_paintRect);66 m_mask = m_ownerElement->drawMaskerContent(boundingBox, m_maskRect); 66 67 67 68 if (!m_mask) 68 69 return; 69 70 70 RefPtr<ImageData> imageData(m_mask->getUnmultipliedImageData(m_paintRect));71 CanvasPixelArray* srcPixelArray(imageData->data());71 IntSize imageSize(m_mask->size()); 72 IntRect intImageRect(0, 0, imageSize.width(), imageSize.height()); 72 73 73 for (unsigned pixelOffset = 0; pixelOffset < srcPixelArray->length(); pixelOffset += 4) { 74 unsigned char a = srcPixelArray->get(pixelOffset + 3); 75 if (!a) 76 continue; 77 unsigned char r = srcPixelArray->get(pixelOffset); 78 unsigned char g = srcPixelArray->get(pixelOffset + 1); 79 unsigned char b = srcPixelArray->get(pixelOffset + 2); 74 // Create new ImageBuffer to apply luminance 75 OwnPtr<ImageBuffer> luminancedImage = ImageBuffer::create(imageSize); 76 if (!luminancedImage) 77 return; 78 79 PassRefPtr<CanvasPixelArray> srcPixelArray(m_mask->getUnmultipliedImageData(intImageRect)->data()); 80 PassRefPtr<ImageData> destImageData(luminancedImage->getUnmultipliedImageData(intImageRect)); 81 82 for (unsigned pixelOffset = 0; pixelOffset < srcPixelArray->length(); pixelOffset++) { 83 unsigned pixelByteOffset = pixelOffset * 4; 84 85 unsigned char r = 0, g = 0, b = 0, a = 0; 86 srcPixelArray->get(pixelByteOffset, r); 87 srcPixelArray->get(pixelByteOffset + 1, g); 88 srcPixelArray->get(pixelByteOffset + 2, b); 89 srcPixelArray->get(pixelByteOffset + 3, a); 80 90 81 91 double luma = (r * 0.2125 + g * 0.7154 + b * 0.0721) * ((double)a / 255.0); 82 srcPixelArray->set(pixelOffset + 3, luma); 92 93 destImageData->data()->set(pixelByteOffset + 3, luma); 83 94 } 84 95 85 m_mask->putUnmultipliedImageData(imageData.get(), IntRect(IntPoint(), m_paintRect.size()), m_paintRect.location()); 86 context->clipToImageBuffer(m_maskRect, m_mask.get()); 96 luminancedImage->putUnmultipliedImageData(destImageData.get(), intImageRect, IntPoint(0, 0)); 97 98 context->clipToImageBuffer(m_maskRect, luminancedImage.get()); 87 99 } 88 100 -
trunk/WebCore/svg/graphics/SVGResourceMasker.h
r52395 r52403 63 63 OwnPtr<ImageBuffer> m_mask; 64 64 FloatRect m_maskRect; 65 IntRect m_paintRect;66 65 }; 67 66
Note: See TracChangeset
for help on using the changeset viewer.