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