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