Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / svg / graphics / filters / SVGFEImage.cpp
index f4995da..180964e 100644 (file)
 #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)
     , m_image(image)
-    , m_document(0)
+    , m_treeScope(0)
     , m_preserveAspectRatio(preserveAspectRatio)
 {
 }
 
-FEImage::FEImage(Filter* filter, Document& document, const String& href, PassRefPtr<SVGPreserveAspectRatio> preserveAspectRatio)
+FEImage::FEImage(Filter* filter, TreeScope& treeScope, const String& href, PassRefPtr<SVGPreserveAspectRatio> preserveAspectRatio)
     : FilterEffect(filter)
-    , m_document(&document)
+    , m_treeScope(&treeScope)
     , m_href(href)
     , m_preserveAspectRatio(preserveAspectRatio)
 {
@@ -61,15 +61,23 @@ PassRefPtr<FEImage> FEImage::createWithImage(Filter* filter, PassRefPtr<Image> i
     return adoptRef(new FEImage(filter, image, preserveAspectRatio));
 }
 
-PassRefPtr<FEImage> FEImage::createWithIRIReference(Filter* filter, Document& document, const String& href, PassRefPtr<SVGPreserveAspectRatio> preserveAspectRatio)
+PassRefPtr<FEImage> FEImage::createWithIRIReference(Filter* filter, TreeScope& treeScope, const String& href, PassRefPtr<SVGPreserveAspectRatio> preserveAspectRatio)
 {
-    return adoptRef(new FEImage(filter, document, href, preserveAspectRatio));
+    return adoptRef(new FEImage(filter, treeScope, href, preserveAspectRatio));
 }
 
 static FloatRect getRendererRepaintRect(RenderObject* renderer)
 {
     return renderer->localToParentTransform().mapRect(
-        renderer->repaintRectInLocalCoordinates());
+        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)
@@ -112,9 +120,9 @@ FloatRect FEImage::determineAbsolutePaintRect(const FloatRect& originalRequested
 
 RenderObject* FEImage::referencedRenderer() const
 {
-    if (!m_document)
+    if (!m_treeScope)
         return 0;
-    Element* hrefElement = SVGURIReference::targetElementFromIRIString(m_href, *m_document);
+    Element* hrefElement = SVGURIReference::targetElementFromIRIString(m_href, *m_treeScope);
     if (!hrefElement || !hrefElement->isSVGElement())
         return 0;
     return hrefElement->renderer();
@@ -201,15 +209,16 @@ PassRefPtr<SkImageFilter> FEImage::createImageFilterForRenderer(RenderObject* re
 
     GraphicsContext* context = builder->context();
     if (!context)
-        return adoptRef(new SkBitmapSource(SkBitmap()));
+        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);
     RefPtr<DisplayList> displayList = context->endRecording();
     context->restore();
-    RefPtr<SkImageFilter> result = adoptRef(new SkPictureImageFilter(displayList->picture(), dstRect));
+    RefPtr<SkImageFilter> result = adoptRef(SkPictureImageFilter::Create(displayList->picture(), dstRect));
     return result.release();
 }
 
@@ -217,7 +226,7 @@ PassRefPtr<SkImageFilter> FEImage::createImageFilter(SkiaImageFilterBuilder* bui
 {
     RenderObject* renderer = referencedRenderer();
     if (!m_image && !renderer)
-        return adoptRef(new SkBitmapSource(SkBitmap()));
+        return adoptRef(SkBitmapSource::Create(SkBitmap()));
 
     setOperatingColorSpace(ColorSpaceDeviceRGB);
 
@@ -235,10 +244,10 @@ PassRefPtr<SkImageFilter> FEImage::createImageFilter(SkiaImageFilterBuilder* bui
     m_preserveAspectRatio->transformRect(dstRect, srcRect);
 
     if (!m_image->nativeImageForCurrentFrame())
-        return adoptRef(new SkBitmapSource(SkBitmap()));
+        return adoptRef(SkBitmapSource::Create(SkBitmap()));
 
-    RefPtr<SkImageFilter> result = adoptRef(new SkBitmapSource(m_image->nativeImageForCurrentFrame()->bitmap(), srcRect, dstRect));
+    RefPtr<SkImageFilter> result = adoptRef(SkBitmapSource::Create(m_image->nativeImageForCurrentFrame()->bitmap(), srcRect, dstRect));
     return result.release();
 }
 
-} // namespace WebCore
+} // namespace blink