[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.17-1283-gcf603cf
eric at webkit.org
eric at webkit.org
Tue Jan 5 23:56:06 UTC 2010
The following commit has been merged in the webkit-1.1 branch:
commit 533fc938678a364cb5345f2113c50e6afa606147
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date: Sun Dec 20 07:48:45 2009 +0000
2009-12-19 Eric Seidel <eric at 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:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@52403 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 7408b25..940eb3e 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,15 @@
+2009-12-19 Eric Seidel <eric at 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:
+
2009-12-19 Adam Barth <abarth at webkit.org>
No review, rolling out r52399.
diff --git a/WebCore/svg/SVGMaskElement.cpp b/WebCore/svg/SVGMaskElement.cpp
index 5d68ab1..e131d34 100644
--- a/WebCore/svg/SVGMaskElement.cpp
+++ b/WebCore/svg/SVGMaskElement.cpp
@@ -126,7 +126,7 @@ void SVGMaskElement::childrenChanged(bool changedByParser, Node* beforeChange, N
m_masker->invalidate();
}
-PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& targetRect, FloatRect& maskDestRect, IntRect& paintRect) const
+PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& targetRect, FloatRect& maskDestRect) const
{
// Determine specified mask size
if (maskUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
@@ -169,15 +169,14 @@ PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& targe
GraphicsContext* maskImageContext = maskImage->context();
ASSERT(maskImageContext);
- TransformationMatrix contextTransform;
- contextTransform.translate(-maskContextLocation.x(), -maskContextLocation.y());
- if (maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
- contextTransform.scaleNonUniform(targetRect.width(), targetRect.height());
-
maskImageContext->save();
- maskImageContext->concatCTM(contextTransform);
+ maskImageContext->translate(-maskContextLocation.x(), -maskContextLocation.y());
+
+ if (maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX) {
+ maskImageContext->save();
+ maskImageContext->scale(FloatSize(targetRect.width(), targetRect.height()));
+ }
- FloatRect repaintRect;
// Render subtree into ImageBuffer
for (Node* n = firstChild(); n; n = n->nextSibling()) {
SVGElement* elem = 0;
@@ -192,16 +191,10 @@ PassOwnPtr<ImageBuffer> SVGMaskElement::drawMaskerContent(const FloatRect& targe
continue;
renderSubtreeToImage(maskImage.get(), item);
- repaintRect.unite(item->repaintRectInLocalCoordinates());
}
- if (contextTransform.isInvertible()) {
- contextTransform.inverse();
- repaintRect = contextTransform.mapRect(repaintRect);
- repaintRect.intersect(FloatRect(FloatPoint(), maskDestRect.size()));
- paintRect = enclosingIntRect(repaintRect);
- } else
- paintRect = enclosingIntRect(FloatRect(FloatPoint(), maskDestRect.size()));
+ if (maskContentUnits() == SVGUnitTypes::SVG_UNIT_TYPE_OBJECTBOUNDINGBOX)
+ maskImageContext->restore();
maskImageContext->restore();
return maskImage.release();
diff --git a/WebCore/svg/SVGMaskElement.h b/WebCore/svg/SVGMaskElement.h
index c64649b..362c730 100644
--- a/WebCore/svg/SVGMaskElement.h
+++ b/WebCore/svg/SVGMaskElement.h
@@ -50,7 +50,7 @@ namespace WebCore {
virtual RenderObject* createRenderer(RenderArena*, RenderStyle*);
virtual SVGResource* canvasResource();
- PassOwnPtr<ImageBuffer> drawMaskerContent(const FloatRect& targetRect, FloatRect& maskRect, IntRect& paintRect) const;
+ PassOwnPtr<ImageBuffer> drawMaskerContent(const FloatRect& targetRect, FloatRect& maskRect) const;
private:
ANIMATED_PROPERTY_DECLARATIONS(SVGMaskElement, SVGNames::maskTagString, SVGNames::maskUnitsAttrString, int, MaskUnits, maskUnits)
diff --git a/WebCore/svg/graphics/SVGResourceMasker.cpp b/WebCore/svg/graphics/SVGResourceMasker.cpp
index 097efa2..97467c1 100644
--- a/WebCore/svg/graphics/SVGResourceMasker.cpp
+++ b/WebCore/svg/graphics/SVGResourceMasker.cpp
@@ -1,6 +1,5 @@
/*
* Copyright (C) 2006 Nikolas Zimmermann <zimmermann at kde.org>
- * 2009 Dirk Schulze <krit at webkit.org>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -39,6 +38,8 @@
#include "SVGRenderStyle.h"
#include "TextStream.h"
+#include <wtf/ByteArray.h>
+
using namespace std;
namespace WebCore {
@@ -62,28 +63,39 @@ void SVGResourceMasker::invalidate()
void SVGResourceMasker::applyMask(GraphicsContext* context, const FloatRect& boundingBox)
{
if (!m_mask)
- m_mask = m_ownerElement->drawMaskerContent(boundingBox, m_maskRect, m_paintRect);
+ m_mask = m_ownerElement->drawMaskerContent(boundingBox, m_maskRect);
if (!m_mask)
return;
- RefPtr<ImageData> imageData(m_mask->getUnmultipliedImageData(m_paintRect));
- CanvasPixelArray* srcPixelArray(imageData->data());
+ IntSize imageSize(m_mask->size());
+ IntRect intImageRect(0, 0, imageSize.width(), imageSize.height());
+
+ // Create new ImageBuffer to apply luminance
+ OwnPtr<ImageBuffer> luminancedImage = ImageBuffer::create(imageSize);
+ if (!luminancedImage)
+ return;
+
+ PassRefPtr<CanvasPixelArray> srcPixelArray(m_mask->getUnmultipliedImageData(intImageRect)->data());
+ PassRefPtr<ImageData> destImageData(luminancedImage->getUnmultipliedImageData(intImageRect));
- for (unsigned pixelOffset = 0; pixelOffset < srcPixelArray->length(); pixelOffset += 4) {
- unsigned char a = srcPixelArray->get(pixelOffset + 3);
- if (!a)
- continue;
- unsigned char r = srcPixelArray->get(pixelOffset);
- unsigned char g = srcPixelArray->get(pixelOffset + 1);
- unsigned char b = srcPixelArray->get(pixelOffset + 2);
+ for (unsigned pixelOffset = 0; pixelOffset < srcPixelArray->length(); pixelOffset++) {
+ unsigned pixelByteOffset = pixelOffset * 4;
+
+ unsigned char r = 0, g = 0, b = 0, a = 0;
+ srcPixelArray->get(pixelByteOffset, r);
+ srcPixelArray->get(pixelByteOffset + 1, g);
+ srcPixelArray->get(pixelByteOffset + 2, b);
+ srcPixelArray->get(pixelByteOffset + 3, a);
double luma = (r * 0.2125 + g * 0.7154 + b * 0.0721) * ((double)a / 255.0);
- srcPixelArray->set(pixelOffset + 3, luma);
+
+ destImageData->data()->set(pixelByteOffset + 3, luma);
}
- m_mask->putUnmultipliedImageData(imageData.get(), IntRect(IntPoint(), m_paintRect.size()), m_paintRect.location());
- context->clipToImageBuffer(m_maskRect, m_mask.get());
+ luminancedImage->putUnmultipliedImageData(destImageData.get(), intImageRect, IntPoint(0, 0));
+
+ context->clipToImageBuffer(m_maskRect, luminancedImage.get());
}
TextStream& SVGResourceMasker::externalRepresentation(TextStream& ts) const
diff --git a/WebCore/svg/graphics/SVGResourceMasker.h b/WebCore/svg/graphics/SVGResourceMasker.h
index b925511..f945f56 100644
--- a/WebCore/svg/graphics/SVGResourceMasker.h
+++ b/WebCore/svg/graphics/SVGResourceMasker.h
@@ -62,7 +62,6 @@ namespace WebCore {
OwnPtr<ImageBuffer> m_mask;
FloatRect m_maskRect;
- IntRect m_paintRect;
};
SVGResourceMasker* getMaskerById(Document*, const AtomicString&);
--
WebKit Debian packaging
More information about the Pkg-webkit-commits
mailing list