15ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen/*
25ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Copyright (C) 1999 Lars Knoll <knoll@kde.org>
35ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Copyright (C) 1999 Antti Koivisto <koivisto@kde.org>
45ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Copyright (C) 2006 Allan Sandfeld Jensen <kde@carewolf.com>
55ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Copyright (C) 2006 Samuel Weinig <sam.weinig@gmail.com>
65ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Apple Inc. All rights reserved.
75ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Copyright (C) 2010 Patrick Gansterer <paroga@paroga.com>
85ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *
95ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * This library is free software; you can redistribute it and/or
105ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * modify it under the terms of the GNU Library General Public
115ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * License as published by the Free Software Foundation; either
125ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * version 2 of the License, or (at your option) any later version.
135ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *
145ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * This library is distributed in the hope that it will be useful,
155ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * but WITHOUT ANY WARRANTY; without even the implied warranty of
165ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
175ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Library General Public License for more details.
185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *
195ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * You should have received a copy of the GNU Library General Public License
205ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * along with this library; see the file COPYING.LIB.  If not, write to
215ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
225ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen * Boston, MA 02110-1301, USA.
235ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen *
245ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen */
255ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
265ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#ifndef RenderImageResource_h
275ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#define RenderImageResource_h
285ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
295ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "CachedImage.h"
305ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "CachedResourceHandle.h"
312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "Image.h"
325ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#include "StyleImage.h"
335ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsennamespace WebCore {
355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenclass RenderObject;
375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
38ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass RenderImageResource {
39ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch    WTF_MAKE_NONCOPYABLE(RenderImageResource); WTF_MAKE_FAST_ALLOCATED;
405ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenpublic:
415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual ~RenderImageResource();
425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    static PassOwnPtr<RenderImageResource> create()
445ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    {
455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        return adoptPtr(new RenderImageResource);
465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    }
475ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
485ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual void initialize(RenderObject*);
495ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual void shutdown();
505ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
515ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    void setCachedImage(CachedImage*);
525ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    CachedImage* cachedImage() const { return m_cachedImage.get(); }
535ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual bool hasImage() const { return m_cachedImage; }
545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    void resetAnimation();
565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    virtual PassRefPtr<Image> image(int /* width */ = 0, int /* height */ = 0) const { return m_cachedImage ? m_cachedImage->image() : nullImage(); }
585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual bool errorOccurred() const { return m_cachedImage && m_cachedImage->errorOccurred(); }
595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual void setImageContainerSize(const IntSize& size) const;
615ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual bool usesImageContainerSize() const { return m_cachedImage ? m_cachedImage->usesImageContainerSize() : false; }
625ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual bool imageHasRelativeWidth() const { return m_cachedImage ? m_cachedImage->imageHasRelativeWidth() : false; }
635ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual bool imageHasRelativeHeight() const { return m_cachedImage ? m_cachedImage->imageHasRelativeHeight() : false; }
645ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
655ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual IntSize imageSize(float multiplier) const { return m_cachedImage ? m_cachedImage->imageSize(multiplier) : IntSize(); }
665ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
675ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    virtual WrappedImagePtr imagePtr() const { return m_cachedImage.get(); }
685ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
695ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenprotected:
705ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    RenderImageResource();
715ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    RenderObject* m_renderer;
725ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    CachedResourceHandle<CachedImage> m_cachedImage;
735ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
745ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsenprivate:
755ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    static Image* nullImage();
765ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen};
775ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
785ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen} // namespace WebCore
795ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
805ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen#endif // RenderImage_h
81