Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / svg / graphics / filters / SVGFEImage.cpp
index a0a3a03..1e5733a 100644 (file)
@@ -38,7 +38,7 @@
 #include "platform/text/TextStream.h"
 #include "platform/transforms/AffineTransform.h"
 
-namespace WebCore {
+namespace blink {
 
 FEImage::FEImage(Filter* filter, PassRefPtr<Image> image, PassRefPtr<SVGPreserveAspectRatio> preserveAspectRatio)
     : FilterEffect(filter)
@@ -72,6 +72,14 @@ static FloatRect getRendererRepaintRect(RenderObject* renderer)
         renderer->paintInvalidationRectInLocalCoordinates());
 }
 
+AffineTransform makeMapBetweenRects(const FloatRect& source, const FloatRect& dest)
+{
+    AffineTransform transform;
+    transform.translate(dest.x() - source.x(), dest.y() - source.y());
+    transform.scale(dest.width() / source.width(), dest.height() / source.height());
+    return transform;
+}
+
 FloatRect FEImage::determineAbsolutePaintRect(const FloatRect& originalRequestedRect)
 {
     RenderObject* renderer = referencedRenderer();
@@ -120,51 +128,6 @@ RenderObject* FEImage::referencedRenderer() const
     return hrefElement->renderer();
 }
 
-void FEImage::applySoftware()
-{
-    RenderObject* renderer = referencedRenderer();
-    if (!m_image && !renderer)
-        return;
-
-    ImageBuffer* resultImage = createImageBufferResult();
-    if (!resultImage)
-        return;
-    IntPoint paintLocation = absolutePaintRect().location();
-    resultImage->context()->translate(-paintLocation.x(), -paintLocation.y());
-
-    // FEImage results are always in ColorSpaceDeviceRGB
-    setResultColorSpace(ColorSpaceDeviceRGB);
-
-    FloatRect destRect = filter()->mapLocalRectToAbsoluteRect(filterPrimitiveSubregion());
-    FloatRect srcRect;
-
-    if (!renderer) {
-        srcRect = FloatRect(FloatPoint(), m_image->size());
-        m_preserveAspectRatio->transformRect(destRect, srcRect);
-
-        resultImage->context()->drawImage(m_image.get(), destRect, srcRect);
-        return;
-    }
-
-    SVGElement* contextNode = toSVGElement(renderer->node());
-    if (contextNode->hasRelativeLengths()) {
-        // FIXME: This fixes relative lengths but breaks non-relative ones (see crbug/260709).
-        SVGLengthContext lengthContext(contextNode);
-        FloatSize viewportSize;
-
-        // If we're referencing an element with percentage units, eg. <rect with="30%"> those values were resolved against the viewport.
-        // Build up a transformation that maps from the viewport space to the filter primitive subregion.
-        if (lengthContext.determineViewport(viewportSize))
-            resultImage->context()->concatCTM(makeMapBetweenRects(FloatRect(FloatPoint(), viewportSize), destRect));
-    } else {
-        resultImage->context()->translate(destRect.x(), destRect.y());
-        resultImage->context()->concatCTM(filter()->absoluteTransform());
-    }
-
-    AffineTransform contentTransformation;
-    SVGRenderingContext::renderSubtree(resultImage->context(), renderer, contentTransformation);
-}
-
 TextStream& FEImage::externalRepresentation(TextStream& ts, int indent) const
 {
     IntSize imageSize;
@@ -202,14 +165,14 @@ PassRefPtr<SkImageFilter> FEImage::createImageFilterForRenderer(RenderObject* re
     GraphicsContext* context = builder->context();
     if (!context)
         return adoptRef(SkBitmapSource::Create(SkBitmap()));
-    AffineTransform contentTransformation;
+    FloatRect bounds(FloatPoint(), dstRect.size());
     context->save();
-    context->beginRecording(FloatRect(FloatPoint(), dstRect.size()));
+    context->beginRecording(bounds);
     context->concatCTM(transform);
-    SVGRenderingContext::renderSubtree(context, renderer, contentTransformation);
+    SVGRenderingContext::renderSubtree(context, renderer);
     RefPtr<DisplayList> displayList = context->endRecording();
     context->restore();
-    RefPtr<SkImageFilter> result = adoptRef(SkPictureImageFilter::Create(displayList->picture(), dstRect));
+    RefPtr<SkImageFilter> result = adoptRef(SkPictureImageFilter::Create(displayList->picture().get(), dstRect));
     return result.release();
 }
 
@@ -241,4 +204,4 @@ PassRefPtr<SkImageFilter> FEImage::createImageFilter(SkiaImageFilterBuilder* bui
     return result.release();
 }
 
-} // namespace WebCore
+} // namespace blink