#ifndef RenderImage_h
#define RenderImage_h
#include "RenderImageResource.h"
#include "RenderReplaced.h"
namespace WebCore {
class HTMLAreaElement;
class HTMLMapElement;
class RenderImage : public RenderReplaced {
public:
RenderImage(Node*);
virtual ~RenderImage();
void setImageResource(PassOwnPtr<RenderImageResource>);
RenderImageResource* imageResource() { return m_imageResource.get(); }
const RenderImageResource* imageResource() const { return m_imageResource.get(); }
CachedImage* cachedImage() const { return m_imageResource ? m_imageResource->cachedImage() : 0; }
bool setImageSizeForAltText(CachedImage* newImage = 0);
void updateAltText();
HTMLMapElement* imageMap() const;
void areaElementFocusChanged(HTMLAreaElement*);
void highQualityRepaintTimerFired(Timer<RenderImage>*);
virtual void collectSelectionRects(Vector<SelectionRect>&, unsigned, unsigned) OVERRIDE;
void setIsGeneratedContent(bool generated = true) { m_isGeneratedContent = generated; }
bool isGeneratedContent() const { return m_isGeneratedContent; }
protected:
virtual bool needsPreferredWidthsRecalculation() const;
virtual RenderBox* embeddedContentBox() const;
virtual void computeIntrinsicRatioInformation(FloatSize& intrinsicSize, double& intrinsicRatio, bool& isPercentageIntrinsicSize) const;
virtual void styleDidChange(StyleDifference, const RenderStyle*);
virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);
virtual void paintIntoRect(GraphicsContext*, const LayoutRect&);
virtual void paint(PaintInfo&, const LayoutPoint&);
virtual void layout();
virtual void intrinsicSizeChanged()
{
if (m_imageResource)
imageChanged(m_imageResource->imagePtr());
}
private:
virtual const char* renderName() const { return "RenderImage"; }
virtual bool isImage() const { return true; }
virtual bool isRenderImage() const { return true; }
virtual void paintReplaced(PaintInfo&, const LayoutPoint&);
virtual bool backgroundIsObscured() const;
virtual int minimumReplacedHeight() const;
virtual void notifyFinished(CachedResource*);
virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const LayoutPoint& pointInContainer, const LayoutPoint& accumulatedOffset, HitTestAction);
IntSize imageSizeForError(CachedImage*) const;
void imageDimensionsChanged(bool imageSizeChanged, const IntRect* = 0);
bool updateIntrinsicSizeIfNeeded(const IntSize&, bool imageSizeChanged);
void paintAreaElementFocusRing(PaintInfo&);
String m_altText;
OwnPtr<RenderImageResource> m_imageResource;
bool m_needsToSetSizeForAltText;
bool m_didIncrementVisuallyNonEmptyPixelCount;
bool m_isGeneratedContent;
friend class RenderImageScaleObserver;
};
inline RenderImage* toRenderImage(RenderObject* object)
{
ASSERT(!object || object->isRenderImage());
return static_cast<RenderImage*>(object);
}
inline const RenderImage* toRenderImage(const RenderObject* object)
{
ASSERT(!object || object->isRenderImage());
return static_cast<const RenderImage*>(object);
}
void toRenderImage(const RenderImage*);
}
#endif // RenderImage_h