OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. | 2 * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above | 8 * 1. Redistributions of source code must retain the above |
9 * copyright notice, this list of conditions and the following | 9 * copyright notice, this list of conditions and the following |
10 * disclaimer. | 10 * disclaimer. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 | 42 |
43 class FloatRect; | 43 class FloatRect; |
44 class FloatSize; | 44 class FloatSize; |
45 class Path; | 45 class Path; |
46 | 46 |
47 class BasicShape : public RefCounted<BasicShape> { | 47 class BasicShape : public RefCounted<BasicShape> { |
48 public: | 48 public: |
49 virtual ~BasicShape() { } | 49 virtual ~BasicShape() { } |
50 | 50 |
51 enum Type { | 51 enum Type { |
52 BasicShapeRectangleType, | |
53 DeprecatedBasicShapeCircleType, | |
54 DeprecatedBasicShapeEllipseType, | |
55 BasicShapeEllipseType, | 52 BasicShapeEllipseType, |
56 BasicShapePolygonType, | 53 BasicShapePolygonType, |
57 BasicShapeInsetRectangleType, | |
58 BasicShapeCircleType, | 54 BasicShapeCircleType, |
59 BasicShapeInsetType | 55 BasicShapeInsetType |
60 }; | 56 }; |
61 | 57 |
62 bool canBlend(const BasicShape*) const; | 58 bool canBlend(const BasicShape*) const; |
63 bool isSameType(const BasicShape& other) const { return type() == other.type
(); } | 59 bool isSameType(const BasicShape& other) const { return type() == other.type
(); } |
64 | 60 |
65 virtual void path(Path&, const FloatRect&) = 0; | 61 virtual void path(Path&, const FloatRect&) = 0; |
66 virtual WindRule windRule() const { return RULE_NONZERO; } | 62 virtual WindRule windRule() const { return RULE_NONZERO; } |
67 virtual PassRefPtr<BasicShape> blend(const BasicShape*, double) const = 0; | 63 virtual PassRefPtr<BasicShape> blend(const BasicShape*, double) const = 0; |
68 virtual bool operator==(const BasicShape&) const = 0; | 64 virtual bool operator==(const BasicShape&) const = 0; |
69 | 65 |
70 virtual Type type() const = 0; | 66 virtual Type type() const = 0; |
71 | 67 |
72 protected: | 68 protected: |
73 BasicShape() | 69 BasicShape() |
74 { | 70 { |
75 } | 71 } |
76 | 72 |
77 }; | 73 }; |
78 | 74 |
79 #define DEFINE_BASICSHAPE_TYPE_CASTS(thisType) \ | 75 #define DEFINE_BASICSHAPE_TYPE_CASTS(thisType) \ |
80 DEFINE_TYPE_CASTS(thisType, BasicShape, value, value->type() == BasicShape::
thisType##Type, value.type() == BasicShape::thisType##Type) | 76 DEFINE_TYPE_CASTS(thisType, BasicShape, value, value->type() == BasicShape::
thisType##Type, value.type() == BasicShape::thisType##Type) |
81 | 77 |
82 class BasicShapeRectangle FINAL : public BasicShape { | |
83 public: | |
84 static PassRefPtr<BasicShapeRectangle> create() { return adoptRef(new BasicS
hapeRectangle); } | |
85 | |
86 Length x() const { return m_x; } | |
87 Length y() const { return m_y; } | |
88 Length width() const { return m_width; } | |
89 Length height() const { return m_height; } | |
90 Length cornerRadiusX() const { return m_cornerRadiusX; } | |
91 Length cornerRadiusY() const { return m_cornerRadiusY; } | |
92 | |
93 void setX(Length x) { m_x = x; } | |
94 void setY(Length y) { m_y = y; } | |
95 void setWidth(Length width) { m_width = width; } | |
96 void setHeight(Length height) { m_height = height; } | |
97 void setCornerRadiusX(Length radiusX) | |
98 { | |
99 m_cornerRadiusX = radiusX; | |
100 } | |
101 void setCornerRadiusY(Length radiusY) | |
102 { | |
103 m_cornerRadiusY = radiusY; | |
104 } | |
105 | |
106 virtual void path(Path&, const FloatRect&) OVERRIDE; | |
107 virtual PassRefPtr<BasicShape> blend(const BasicShape*, double) const OVERRI
DE; | |
108 virtual bool operator==(const BasicShape&) const OVERRIDE; | |
109 | |
110 virtual Type type() const OVERRIDE { return BasicShapeRectangleType; } | |
111 private: | |
112 BasicShapeRectangle() { } | |
113 | |
114 Length m_y; | |
115 Length m_x; | |
116 Length m_width; | |
117 Length m_height; | |
118 Length m_cornerRadiusX; | |
119 Length m_cornerRadiusY; | |
120 }; | |
121 | |
122 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapeRectangle); | |
123 | |
124 class BasicShapeCenterCoordinate { | 78 class BasicShapeCenterCoordinate { |
125 public: | 79 public: |
126 enum Direction { | 80 enum Direction { |
127 TopLeft, | 81 TopLeft, |
128 BottomRight | 82 BottomRight |
129 }; | 83 }; |
130 BasicShapeCenterCoordinate() | 84 BasicShapeCenterCoordinate() |
131 : m_direction(TopLeft) | 85 : m_direction(TopLeft) |
132 , m_length(Undefined) | 86 , m_length(Undefined) |
133 { | 87 { |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
187 { | 141 { |
188 // FIXME determine how to interpolate between keywords. See issue 330248
. | 142 // FIXME determine how to interpolate between keywords. See issue 330248
. |
189 return m_type == Value && other.type() == Value; | 143 return m_type == Value && other.type() == Value; |
190 } | 144 } |
191 | 145 |
192 BasicShapeRadius blend(const BasicShapeRadius& other, double progress) const | 146 BasicShapeRadius blend(const BasicShapeRadius& other, double progress) const |
193 { | 147 { |
194 if (m_type != Value || other.type() != Value) | 148 if (m_type != Value || other.type() != Value) |
195 return BasicShapeRadius(other); | 149 return BasicShapeRadius(other); |
196 | 150 |
197 return BasicShapeRadius(m_value.blend(other.value(), progress, ValueRang
eAll)); | 151 return BasicShapeRadius(m_value.blend(other.value(), progress, ValueRang
eNonNegative)); |
198 } | 152 } |
199 | 153 |
200 private: | 154 private: |
201 Length m_value; | 155 Length m_value; |
202 Type m_type; | 156 Type m_type; |
203 | 157 |
204 }; | 158 }; |
205 | 159 |
206 class BasicShapeCircle FINAL : public BasicShape { | 160 class BasicShapeCircle FINAL : public BasicShape { |
207 public: | 161 public: |
(...skipping 16 matching lines...) Expand all Loading... |
224 private: | 178 private: |
225 BasicShapeCircle() { } | 179 BasicShapeCircle() { } |
226 | 180 |
227 BasicShapeCenterCoordinate m_centerX; | 181 BasicShapeCenterCoordinate m_centerX; |
228 BasicShapeCenterCoordinate m_centerY; | 182 BasicShapeCenterCoordinate m_centerY; |
229 BasicShapeRadius m_radius; | 183 BasicShapeRadius m_radius; |
230 }; | 184 }; |
231 | 185 |
232 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapeCircle); | 186 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapeCircle); |
233 | 187 |
234 class DeprecatedBasicShapeCircle FINAL : public BasicShape { | |
235 public: | |
236 static PassRefPtr<DeprecatedBasicShapeCircle> create() { return adoptRef(new
DeprecatedBasicShapeCircle); } | |
237 | |
238 Length centerX() const { return m_centerX; } | |
239 Length centerY() const { return m_centerY; } | |
240 Length radius() const { return m_radius; } | |
241 | |
242 void setCenterX(Length centerX) { m_centerX = centerX; } | |
243 void setCenterY(Length centerY) { m_centerY = centerY; } | |
244 void setRadius(Length radius) { m_radius = radius; } | |
245 | |
246 virtual void path(Path&, const FloatRect&) OVERRIDE; | |
247 virtual PassRefPtr<BasicShape> blend(const BasicShape*, double) const OVERRI
DE; | |
248 virtual bool operator==(const BasicShape&) const OVERRIDE; | |
249 | |
250 virtual Type type() const OVERRIDE { return DeprecatedBasicShapeCircleType;
} | |
251 private: | |
252 DeprecatedBasicShapeCircle() { } | |
253 | |
254 Length m_centerX; | |
255 Length m_centerY; | |
256 Length m_radius; | |
257 }; | |
258 | |
259 DEFINE_BASICSHAPE_TYPE_CASTS(DeprecatedBasicShapeCircle); | |
260 | |
261 class BasicShapeEllipse FINAL : public BasicShape { | 188 class BasicShapeEllipse FINAL : public BasicShape { |
262 public: | 189 public: |
263 static PassRefPtr<BasicShapeEllipse> create() { return adoptRef(new BasicSha
peEllipse); } | 190 static PassRefPtr<BasicShapeEllipse> create() { return adoptRef(new BasicSha
peEllipse); } |
264 | 191 |
265 const BasicShapeCenterCoordinate& centerX() const { return m_centerX; } | 192 const BasicShapeCenterCoordinate& centerX() const { return m_centerX; } |
266 const BasicShapeCenterCoordinate& centerY() const { return m_centerY; } | 193 const BasicShapeCenterCoordinate& centerY() const { return m_centerY; } |
267 const BasicShapeRadius& radiusX() const { return m_radiusX; } | 194 const BasicShapeRadius& radiusX() const { return m_radiusX; } |
268 const BasicShapeRadius& radiusY() const { return m_radiusY; } | 195 const BasicShapeRadius& radiusY() const { return m_radiusY; } |
269 float floatValueForRadiusInBox(const BasicShapeRadius&, float center, float
boxWidthOrHeight) const; | 196 float floatValueForRadiusInBox(const BasicShapeRadius&, float center, float
boxWidthOrHeight) const; |
270 | 197 |
(...skipping 11 matching lines...) Expand all Loading... |
282 BasicShapeEllipse() { } | 209 BasicShapeEllipse() { } |
283 | 210 |
284 BasicShapeCenterCoordinate m_centerX; | 211 BasicShapeCenterCoordinate m_centerX; |
285 BasicShapeCenterCoordinate m_centerY; | 212 BasicShapeCenterCoordinate m_centerY; |
286 BasicShapeRadius m_radiusX; | 213 BasicShapeRadius m_radiusX; |
287 BasicShapeRadius m_radiusY; | 214 BasicShapeRadius m_radiusY; |
288 }; | 215 }; |
289 | 216 |
290 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapeEllipse); | 217 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapeEllipse); |
291 | 218 |
292 class DeprecatedBasicShapeEllipse FINAL : public BasicShape { | |
293 public: | |
294 static PassRefPtr<DeprecatedBasicShapeEllipse> create() { return adoptRef(ne
w DeprecatedBasicShapeEllipse); } | |
295 | |
296 Length centerX() const { return m_centerX; } | |
297 Length centerY() const { return m_centerY; } | |
298 Length radiusX() const { return m_radiusX; } | |
299 Length radiusY() const { return m_radiusY; } | |
300 | |
301 void setCenterX(Length centerX) { m_centerX = centerX; } | |
302 void setCenterY(Length centerY) { m_centerY = centerY; } | |
303 void setRadiusX(Length radiusX) { m_radiusX = radiusX; } | |
304 void setRadiusY(Length radiusY) { m_radiusY = radiusY; } | |
305 | |
306 virtual void path(Path&, const FloatRect&) OVERRIDE; | |
307 virtual PassRefPtr<BasicShape> blend(const BasicShape*, double) const OVERRI
DE; | |
308 virtual bool operator==(const BasicShape&) const OVERRIDE; | |
309 | |
310 virtual Type type() const OVERRIDE { return DeprecatedBasicShapeEllipseType;
} | |
311 private: | |
312 DeprecatedBasicShapeEllipse() { } | |
313 | |
314 Length m_centerX; | |
315 Length m_centerY; | |
316 Length m_radiusX; | |
317 Length m_radiusY; | |
318 }; | |
319 | |
320 DEFINE_BASICSHAPE_TYPE_CASTS(DeprecatedBasicShapeEllipse); | |
321 | |
322 class BasicShapePolygon FINAL : public BasicShape { | 219 class BasicShapePolygon FINAL : public BasicShape { |
323 public: | 220 public: |
324 static PassRefPtr<BasicShapePolygon> create() { return adoptRef(new BasicSha
pePolygon); } | 221 static PassRefPtr<BasicShapePolygon> create() { return adoptRef(new BasicSha
pePolygon); } |
325 | 222 |
326 const Vector<Length>& values() const { return m_values; } | 223 const Vector<Length>& values() const { return m_values; } |
327 Length getXAt(unsigned i) const { return m_values.at(2 * i); } | 224 Length getXAt(unsigned i) const { return m_values.at(2 * i); } |
328 Length getYAt(unsigned i) const { return m_values.at(2 * i + 1); } | 225 Length getYAt(unsigned i) const { return m_values.at(2 * i + 1); } |
329 | 226 |
330 void setWindRule(WindRule windRule) { m_windRule = windRule; } | 227 void setWindRule(WindRule windRule) { m_windRule = windRule; } |
331 void appendPoint(Length x, Length y) { m_values.append(x); m_values.append(y
); } | 228 void appendPoint(Length x, Length y) { m_values.append(x); m_values.append(y
); } |
332 | 229 |
333 virtual void path(Path&, const FloatRect&) OVERRIDE; | 230 virtual void path(Path&, const FloatRect&) OVERRIDE; |
334 virtual PassRefPtr<BasicShape> blend(const BasicShape*, double) const OVERRI
DE; | 231 virtual PassRefPtr<BasicShape> blend(const BasicShape*, double) const OVERRI
DE; |
335 virtual bool operator==(const BasicShape&) const OVERRIDE; | 232 virtual bool operator==(const BasicShape&) const OVERRIDE; |
336 | 233 |
337 virtual WindRule windRule() const OVERRIDE { return m_windRule; } | 234 virtual WindRule windRule() const OVERRIDE { return m_windRule; } |
338 | 235 |
339 virtual Type type() const OVERRIDE { return BasicShapePolygonType; } | 236 virtual Type type() const OVERRIDE { return BasicShapePolygonType; } |
340 private: | 237 private: |
341 BasicShapePolygon() | 238 BasicShapePolygon() |
342 : m_windRule(RULE_NONZERO) | 239 : m_windRule(RULE_NONZERO) |
343 { } | 240 { } |
344 | 241 |
345 WindRule m_windRule; | 242 WindRule m_windRule; |
346 Vector<Length> m_values; | 243 Vector<Length> m_values; |
347 }; | 244 }; |
348 | 245 |
349 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapePolygon); | 246 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapePolygon); |
350 | 247 |
351 class BasicShapeInsetRectangle FINAL : public BasicShape { | |
352 public: | |
353 static PassRefPtr<BasicShapeInsetRectangle> create() { return adoptRef(new B
asicShapeInsetRectangle); } | |
354 | |
355 Length top() const { return m_top; } | |
356 Length right() const { return m_right; } | |
357 Length bottom() const { return m_bottom; } | |
358 Length left() const { return m_left; } | |
359 Length cornerRadiusX() const { return m_cornerRadiusX; } | |
360 Length cornerRadiusY() const { return m_cornerRadiusY; } | |
361 | |
362 void setTop(Length top) { m_top = top; } | |
363 void setRight(Length right) { m_right = right; } | |
364 void setBottom(Length bottom) { m_bottom = bottom; } | |
365 void setLeft(Length left) { m_left = left; } | |
366 void setCornerRadiusX(Length radiusX) | |
367 { | |
368 m_cornerRadiusX = radiusX; | |
369 } | |
370 void setCornerRadiusY(Length radiusY) | |
371 { | |
372 m_cornerRadiusY = radiusY; | |
373 } | |
374 | |
375 virtual void path(Path&, const FloatRect&) OVERRIDE; | |
376 virtual PassRefPtr<BasicShape> blend(const BasicShape*, double) const OVERRI
DE; | |
377 virtual bool operator==(const BasicShape&) const OVERRIDE; | |
378 | |
379 virtual Type type() const OVERRIDE { return BasicShapeInsetRectangleType; } | |
380 private: | |
381 BasicShapeInsetRectangle() { } | |
382 | |
383 Length m_right; | |
384 Length m_top; | |
385 Length m_bottom; | |
386 Length m_left; | |
387 Length m_cornerRadiusX; | |
388 Length m_cornerRadiusY; | |
389 }; | |
390 | |
391 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapeInsetRectangle); | |
392 | |
393 class BasicShapeInset : public BasicShape { | 248 class BasicShapeInset : public BasicShape { |
394 public: | 249 public: |
395 static PassRefPtr<BasicShapeInset> create() { return adoptRef(new BasicShape
Inset); } | 250 static PassRefPtr<BasicShapeInset> create() { return adoptRef(new BasicShape
Inset); } |
396 | 251 |
397 const Length& top() const { return m_top; } | 252 const Length& top() const { return m_top; } |
398 const Length& right() const { return m_right; } | 253 const Length& right() const { return m_right; } |
399 const Length& bottom() const { return m_bottom; } | 254 const Length& bottom() const { return m_bottom; } |
400 const Length& left() const { return m_left; } | 255 const Length& left() const { return m_left; } |
401 | 256 |
402 const LengthSize& topLeftRadius() const { return m_topLeftRadius; } | 257 const LengthSize& topLeftRadius() const { return m_topLeftRadius; } |
(...skipping 27 matching lines...) Expand all Loading... |
430 LengthSize m_topLeftRadius; | 285 LengthSize m_topLeftRadius; |
431 LengthSize m_topRightRadius; | 286 LengthSize m_topRightRadius; |
432 LengthSize m_bottomRightRadius; | 287 LengthSize m_bottomRightRadius; |
433 LengthSize m_bottomLeftRadius; | 288 LengthSize m_bottomLeftRadius; |
434 }; | 289 }; |
435 | 290 |
436 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapeInset); | 291 DEFINE_BASICSHAPE_TYPE_CASTS(BasicShapeInset); |
437 | 292 |
438 } | 293 } |
439 #endif | 294 #endif |
OLD | NEW |