18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2006 Eric Seidel <eric@webkit.org>
35f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian * Copyright (C) 2009 Apple Inc. All rights reserved.
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    notice, this list of conditions and the following disclaimer in the
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef SVGImage_h
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define SVGImage_h
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG)
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Image.h"
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian
36cad810f21b803229eb11403f9209855525a25d57Steve Blockclass Page;
37cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SVGImageChromeClient;
38cad810f21b803229eb11403f9209855525a25d57Steve Block
39cad810f21b803229eb11403f9209855525a25d57Steve Blockclass SVGImage : public Image {
40cad810f21b803229eb11403f9209855525a25d57Steve Blockpublic:
41cad810f21b803229eb11403f9209855525a25d57Steve Block    static PassRefPtr<SVGImage> create(ImageObserver* observer)
42cad810f21b803229eb11403f9209855525a25d57Steve Block    {
43cad810f21b803229eb11403f9209855525a25d57Steve Block        return adoptRef(new SVGImage(observer));
44cad810f21b803229eb11403f9209855525a25d57Steve Block    }
45cad810f21b803229eb11403f9209855525a25d57Steve Block
46cad810f21b803229eb11403f9209855525a25d57Steve Blockprivate:
47cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual ~SVGImage();
48cad810f21b803229eb11403f9209855525a25d57Steve Block
49cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual String filenameExtension() const;
50cad810f21b803229eb11403f9209855525a25d57Steve Block
51cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void setContainerSize(const IntSize&);
52cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool usesContainerSize() const;
53cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool hasRelativeWidth() const;
54cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool hasRelativeHeight() const;
55cad810f21b803229eb11403f9209855525a25d57Steve Block
56cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual IntSize size() const;
57cad810f21b803229eb11403f9209855525a25d57Steve Block
58cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual bool dataChanged(bool allDataReceived);
59cad810f21b803229eb11403f9209855525a25d57Steve Block
60cad810f21b803229eb11403f9209855525a25d57Steve Block    // FIXME: SVGImages are underreporting decoded sizes and will be unable
61cad810f21b803229eb11403f9209855525a25d57Steve Block    // to prune because these functions are not implemented yet.
62cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void destroyDecodedData(bool) { }
63cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual unsigned decodedSize() const { return 0; }
64cad810f21b803229eb11403f9209855525a25d57Steve Block
65cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual NativeImagePtr frameAtIndex(size_t) { return 0; }
66cad810f21b803229eb11403f9209855525a25d57Steve Block
67cad810f21b803229eb11403f9209855525a25d57Steve Block    SVGImage(ImageObserver*);
68cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual void draw(GraphicsContext*, const FloatRect& fromRect, const FloatRect& toRect, ColorSpace styleColorSpace, CompositeOperator);
69cad810f21b803229eb11403f9209855525a25d57Steve Block
70cad810f21b803229eb11403f9209855525a25d57Steve Block    virtual NativeImagePtr nativeImageForCurrentFrame();
71cad810f21b803229eb11403f9209855525a25d57Steve Block
72cad810f21b803229eb11403f9209855525a25d57Steve Block    OwnPtr<SVGImageChromeClient> m_chromeClient;
73cad810f21b803229eb11403f9209855525a25d57Steve Block    OwnPtr<Page> m_page;
74cad810f21b803229eb11403f9209855525a25d57Steve Block    RefPtr<Image> m_frameCache;
75cad810f21b803229eb11403f9209855525a25d57Steve Block};
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // ENABLE(SVG)
79cad810f21b803229eb11403f9209855525a25d57Steve Block#endif // SVGImage_h
80