Source/WebCore/ChangeLog

112011-11-08 Andreas Kling <kling@webkit.org>
22
 3 CSSImageGeneratorValue: Devirtualize image(), isFixedSize() and fixedSize().
 4 <http://webkit.org/b/71824>
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Redirect the calls to the appropriate subclass in CSSImageGeneratorValue.cpp.
 9
 10 * css/CSSCanvasValue.h:
 11 (WebCore::CSSCanvasValue::isFixedSize):
 12 * css/CSSCrossfadeValue.h:
 13 (WebCore::CSSCrossfadeValue::isFixedSize):
 14 * css/CSSGradientValue.h:
 15 (WebCore::CSSGradientValue::isFixedSize):
 16 (WebCore::CSSGradientValue::fixedSize):
 17 * css/CSSImageGeneratorValue.cpp:
 18 (WebCore::CSSImageGeneratorValue::image):
 19 (WebCore::CSSImageGeneratorValue::isFixedSize):
 20 (WebCore::CSSImageGeneratorValue::fixedSize):
 21 * css/CSSImageGeneratorValue.h:
 22
 232011-11-08 Andreas Kling <kling@webkit.org>
 24
325 CSSImageValue: Devirtualize cachedImage(CachedResourceLoader*).
426 <http://webkit.org/b/71814>
527

Source/WebCore/css/CSSCanvasValue.h

@@public:
4040
4141 String customCssText() const;
4242
43  virtual PassRefPtr<Image> image(RenderObject*, const IntSize&);
44  virtual bool isFixedSize() const { return true; }
45  virtual IntSize fixedSize(const RenderObject*);
 43 PassRefPtr<Image> image(RenderObject*, const IntSize&);
 44 bool isFixedSize() const { return true; }
 45 IntSize fixedSize(const RenderObject*);
4646
4747 void setName(const String& name) { m_name = name; }
4848

Source/WebCore/css/CSSCrossfadeValue.h

@@public:
4242
4343 String customCssText() const;
4444
45  virtual PassRefPtr<Image> image(RenderObject*, const IntSize&) OVERRIDE;
46  virtual bool isFixedSize() const OVERRIDE { return false; }
47  virtual IntSize fixedSize(const RenderObject*) OVERRIDE;
 45 PassRefPtr<Image> image(RenderObject*, const IntSize&);
 46 bool isFixedSize() const { return false; }
 47 IntSize fixedSize(const RenderObject*);
4848
4949 void setPercentage(PassRefPtr<CSSPrimitiveValue> percentage) { m_percentage = percentage; }
5050

Source/WebCore/css/CSSGradientValue.h

@@struct CSSGradientColorStop {
4646
4747class CSSGradientValue : public CSSImageGeneratorValue {
4848public:
49  virtual PassRefPtr<Image> image(RenderObject*, const IntSize&);
 49 PassRefPtr<Image> image(RenderObject*, const IntSize&);
5050
5151 void setFirstX(PassRefPtr<CSSPrimitiveValue> val) { m_firstX = val; }
5252 void setFirstY(PassRefPtr<CSSPrimitiveValue> val) { m_firstY = val; }

@@public:
6666
6767 bool deprecatedType() const { return m_deprecatedType; } // came from -webkit-gradient
6868
 69 bool isFixedSize() const { return false; }
 70 IntSize fixedSize(const RenderObject*) const { return IntSize(); }
 71
6972protected:
7073 CSSGradientValue(ClassType classType, CSSGradientRepeat repeat, bool deprecatedType = false)
7174 : CSSImageGeneratorValue(classType)

Source/WebCore/css/CSSImageGeneratorValue.cpp

2626#include "config.h"
2727#include "CSSImageGeneratorValue.h"
2828
 29#include "CSSCanvasValue.h"
 30#include "CSSCrossfadeValue.h"
 31#include "CSSGradientValue.h"
2932#include "Image.h"
3033#include "RenderObject.h"
3134#include "StyleGeneratedImage.h"

@@StyleGeneratedImage* CSSImageGeneratorValue::generatedImage()
116119 return m_image.get();
117120}
118121
 122PassRefPtr<Image> CSSImageGeneratorValue::image(RenderObject* renderer, const IntSize& size)
 123{
 124 switch (classType()) {
 125 case CanvasClass:
 126 return static_cast<CSSCanvasValue*>(this)->image(renderer, size);
 127 case CrossfadeClass:
 128 return static_cast<CSSCrossfadeValue*>(this)->image(renderer, size);
 129 case LinearGradientClass:
 130 return static_cast<CSSLinearGradientValue*>(this)->image(renderer, size);
 131 case RadialGradientClass:
 132 return static_cast<CSSRadialGradientValue*>(this)->image(renderer, size);
 133 default:
 134 ASSERT_NOT_REACHED();
 135 }
 136 return 0;
 137}
 138
 139bool CSSImageGeneratorValue::isFixedSize() const
 140{
 141 switch (classType()) {
 142 case CanvasClass:
 143 return static_cast<const CSSCanvasValue*>(this)->isFixedSize();
 144 case CrossfadeClass:
 145 return static_cast<const CSSCrossfadeValue*>(this)->isFixedSize();
 146 case LinearGradientClass:
 147 return static_cast<const CSSLinearGradientValue*>(this)->isFixedSize();
 148 case RadialGradientClass:
 149 return static_cast<const CSSRadialGradientValue*>(this)->isFixedSize();
 150 default:
 151 ASSERT_NOT_REACHED();
 152 }
 153 return false;
 154}
 155
 156IntSize CSSImageGeneratorValue::fixedSize(const RenderObject* renderer)
 157{
 158 switch (classType()) {
 159 case CanvasClass:
 160 return static_cast<CSSCanvasValue*>(this)->fixedSize(renderer);
 161 case CrossfadeClass:
 162 return static_cast<CSSCrossfadeValue*>(this)->fixedSize(renderer);
 163 case LinearGradientClass:
 164 return static_cast<CSSLinearGradientValue*>(this)->fixedSize(renderer);
 165 case RadialGradientClass:
 166 return static_cast<CSSRadialGradientValue*>(this)->fixedSize(renderer);
 167 default:
 168 ASSERT_NOT_REACHED();
 169 }
 170 return IntSize();
 171}
 172
119173} // namespace WebCore

Source/WebCore/css/CSSImageGeneratorValue.h

@@public:
5656
5757 void addClient(RenderObject*, const IntSize&);
5858 void removeClient(RenderObject*);
59  virtual PassRefPtr<Image> image(RenderObject*, const IntSize&) = 0;
 59 PassRefPtr<Image> image(RenderObject*, const IntSize&);
6060
6161 StyleGeneratedImage* generatedImage();
6262
63  virtual bool isFixedSize() const { return false; }
64  virtual IntSize fixedSize(const RenderObject*) { return IntSize(); }
 63 bool isFixedSize() const;
 64 IntSize fixedSize(const RenderObject*);
6565
6666protected:
6767 CSSImageGeneratorValue(ClassType);