1926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/* 2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * modification, are permitted provided that the following conditions 6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * are met: 7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * documentation and/or other materials provided with the distribution. 12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2302772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 25926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#ifndef SVGImageForContainer_h 27926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#define SVGImageForContainer_h 28926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/svg/graphics/SVGImage.h" 301e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatRect.h" 311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatSize.h" 32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/graphics/Image.h" 33323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)#include "platform/weborigin/KURL.h" 34926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)namespace WebCore { 36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class SVGImageForContainer FINAL : public Image { 38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)public: 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) static PassRefPtr<SVGImageForContainer> create(SVGImage* image, const FloatSize& containerSize, float zoom) 40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 41926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return adoptRef(new SVGImageForContainer(image, containerSize, zoom)); 42926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 43926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool isSVGImage() const OVERRIDE { return true; } 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual IntSize size() const OVERRIDE; 47323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) void setURL(const KURL& url) { m_image->setURL(url); } 48926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool usesContainerSize() const OVERRIDE { return m_image->usesContainerSize(); } 50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool hasRelativeWidth() const OVERRIDE { return m_image->hasRelativeWidth(); } 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool hasRelativeHeight() const OVERRIDE { return m_image->hasRelativeHeight(); } 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) OVERRIDE 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_image->computeIntrinsicDimensions(intrinsicWidth, intrinsicHeight, intrinsicRatio); 55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 57a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) virtual void draw(GraphicsContext*, const FloatRect&, const FloatRect&, CompositeOperator, blink::WebBlendMode) OVERRIDE; 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 59a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) virtual void drawPattern(GraphicsContext*, const FloatRect&, const FloatSize&, const FloatPoint&, CompositeOperator, const FloatRect&, blink::WebBlendMode, const IntSize& repeatSpacing) OVERRIDE; 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // FIXME: Implement this to be less conservative. 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool currentFrameKnownToBeOpaque() OVERRIDE { return false; } 63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 64591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch virtual PassRefPtr<NativeImageSkia> nativeImageForCurrentFrame() OVERRIDE; 6553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)private: 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) SVGImageForContainer(SVGImage* image, const FloatSize& containerSize, float zoom) 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) : m_image(image) 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_containerSize(containerSize) 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_zoom(zoom) 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 74c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) virtual void destroyDecodedData(bool) OVERRIDE { } 75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) SVGImage* m_image; 77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const FloatSize m_containerSize; 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const float m_zoom; 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)}; 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif // SVGImageForContainer_h 83