15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2006 Eric Seidel <eric@webkit.org> 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Apple Inc. All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2402772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef SVGImage_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define SVGImage_h 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/graphics/Image.h" 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class FrameView; 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class ImageBuffer; 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Page; 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderBox; 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SVGImageChromeClient; 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class SVGImageForContainer; 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SVGImage : public Image { 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static PassRefPtr<SVGImage> create(ImageObserver* observer) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adoptRef(new SVGImage(observer)); 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBox* embeddedContentBox() const; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FrameView* frameView() const; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual bool isSVGImage() const OVERRIDE { return true; } 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual IntSize size() const OVERRIDE { return m_intrinsicSize; } 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 545267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual bool hasRelativeWidth() const OVERRIDE; 555267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual bool hasRelativeHeight() const OVERRIDE; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void startAnimation(bool /*catchUpIfNecessary*/ = true) OVERRIDE; 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void stopAnimation() OVERRIDE; 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void resetAnimation() OVERRIDE; 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 61591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch virtual PassRefPtr<NativeImageSkia> nativeImageForCurrentFrame() OVERRIDE; 6253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class SVGImageChromeClient; 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) friend class SVGImageForContainer; 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~SVGImage(); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual String filenameExtension() const OVERRIDE; 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 715267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual void setContainerSize(const IntSize&) OVERRIDE; 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IntSize containerSize() const; 735267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual bool usesContainerSize() const OVERRIDE { return true; } 745267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual void computeIntrinsicDimensions(Length& intrinsicWidth, Length& intrinsicHeight, FloatSize& intrinsicRatio) OVERRIDE; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 765267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual bool dataChanged(bool allDataReceived) OVERRIDE; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: SVGImages are underreporting decoded sizes and will be unable 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to prune because these functions are not implemented yet. 8049bab615b8da6265d736fdeeaa328a3ce5c7e155Torne (Richard Coles) virtual void destroyDecodedData(bool) OVERRIDE { } 815267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual unsigned decodedSize() const OVERRIDE { return 0; } 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // FIXME: Implement this to be less conservative. 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool currentFrameKnownToBeOpaque() OVERRIDE { return false; } 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) SVGImage(ImageObserver*); 875267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual void draw(GraphicsContext*, const FloatRect& fromRect, const FloatRect& toRect, CompositeOperator, BlendMode) OVERRIDE; 885267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) void drawForContainer(GraphicsContext*, const FloatSize, float, const FloatRect&, const FloatRect&, CompositeOperator, BlendMode); 89521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) void drawPatternForContainer(GraphicsContext*, const FloatSize, float, const FloatRect&, const FloatSize&, const FloatPoint&, 90e6d4491e48613634a83c1957c72759da80987961Ben Murdoch CompositeOperator, const FloatRect&, BlendMode); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<SVGImageChromeClient> m_chromeClient; 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) OwnPtr<Page> m_page; 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IntSize m_intrinsicSize; 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // SVGImage_h 99