Changeset 52403 in webkit


Ignore:
Timestamp:
Dec 19, 2009 11:48:45 PM (14 years ago)
Author:
eric@webkit.org
Message:

2009-12-19 Eric Seidel <eric@webkit.org>

No review, rolling out r52395.
http://trac.webkit.org/changeset/52395

  • svg/SVGMaskElement.cpp: (WebCore::SVGMaskElement::drawMaskerContent):
  • svg/SVGMaskElement.h:
  • svg/graphics/SVGResourceMasker.cpp: (WebCore::SVGResourceMasker::applyMask):
  • svg/graphics/SVGResourceMasker.h:
Location:
trunk/WebCore
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r52402 r52403  
     12009-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
    1132009-12-19  Adam Barth  <abarth@webkit.org>
    214
  • trunk/WebCore/svg/SVGMaskElement.cpp

    r52395 r52403  
    127127}
    128128
    129 PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& targetRect, FloatRect& maskDestRect, IntRect& paintRect) const
     129PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& targetRect, FloatRect& maskDestRect) const
    130130{   
    131131    // Determine specified mask size
     
    170170    ASSERT(maskImageContext);
    171171
    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 
    177172    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
    181180    // Render subtree into ImageBuffer
    182181    for (Node* n = firstChild(); n; n = n->nextSibling()) {
     
    193192
    194193        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();
    205198
    206199    maskImageContext->restore();
  • trunk/WebCore/svg/SVGMaskElement.h

    r52395 r52403  
    5151        virtual SVGResource* canvasResource();
    5252
    53         PassOwnPtr<ImageBuffer> drawMaskerContent(const FloatRect& targetRect, FloatRect& maskRect, IntRect& paintRect) const;
     53        PassOwnPtr<ImageBuffer> drawMaskerContent(const FloatRect& targetRect, FloatRect& maskRect) const;
    5454
    5555    private:
  • trunk/WebCore/svg/graphics/SVGResourceMasker.cpp

    r52395 r52403  
    11/*
    22 * Copyright (C) 2006 Nikolas Zimmermann <zimmermann@kde.org>
    3  *               2009 Dirk Schulze <krit@webkit.org>
    43 *
    54 * Redistribution and use in source and binary forms, with or without
     
    4039#include "TextStream.h"
    4140
     41#include <wtf/ByteArray.h>
     42
    4243using namespace std;
    4344
     
    6364{
    6465    if (!m_mask)
    65         m_mask = m_ownerElement->drawMaskerContent(boundingBox, m_maskRect, m_paintRect);
     66        m_mask = m_ownerElement->drawMaskerContent(boundingBox, m_maskRect);
    6667
    6768    if (!m_mask)
    6869        return;
    6970
    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());
    7273
    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);
    8090
    8191        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);
    8394    }
    8495
    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());
    8799}
    88100
  • trunk/WebCore/svg/graphics/SVGResourceMasker.h

    r52395 r52403  
    6363        OwnPtr<ImageBuffer> m_mask;
    6464        FloatRect m_maskRect;
    65         IntRect m_paintRect;
    6665    };
    6766
Note: See TracChangeset for help on using the changeset viewer.