blob: 16886d4806adc9fc55176de6eae93bb0d80f8e85 [file] [log] [blame]
reed@android.comf76bacf2009-05-13 14:00:33 +00001#include "SkRectShape.h"
2#include "SkCanvas.h"
3
4SkPaintShape::SkPaintShape() {
5 fPaint.setAntiAlias(true);
6}
7
8SkRectShape::SkRectShape() {
9 fBounds.setEmpty();
10 fRadii.set(0, 0);
11}
12
13void SkRectShape::setRect(const SkRect& bounds) {
14 fBounds = bounds;
15 fRadii.set(0, 0);
16}
17
18void SkRectShape::setOval(const SkRect& bounds) {
19 fBounds = bounds;
20 fRadii.set(-SK_Scalar1, -SK_Scalar1);
21}
22
23void SkRectShape::setCircle(SkScalar cx, SkScalar cy, SkScalar radius) {
24 fBounds.set(cx - radius, cy - radius, cx + radius, cy + radius);
25 fRadii.set(-SK_Scalar1, -SK_Scalar1);
26}
27
28void SkRectShape::setRRect(const SkRect& bounds, SkScalar rx, SkScalar ry) {
29 if (rx < 0) {
30 rx = 0;
31 }
32 if (ry < 0) {
33 ry = 0;
34 }
35
36 fBounds = bounds;
37 fRadii.set(rx, ry);
38}
39
40///////////////////////////////////////////////////////////////////////////////
41
42void SkRectShape::onDraw(SkCanvas* canvas) {
43 const SkPaint& paint = this->paint();
44
45 if (fRadii.fWidth < 0) {
46 canvas->drawOval(fBounds, paint);
47 } else if (fRadii.isZero()) {
48 canvas->drawRect(fBounds, paint);
49 } else {
50 canvas->drawRoundRect(fBounds, fRadii.fWidth, fRadii.fHeight, paint);
51 }
52}
53
54SkFlattenable::Factory SkRectShape::getFactory() {
55 return CreateProc;
56}
57
58void SkRectShape::flatten(SkFlattenableWriteBuffer& buffer) {
59 this->INHERITED::flatten(buffer);
60
61 buffer.writeRect(fBounds);
62 *(SkSize*)buffer.reserve(sizeof(SkSize)) = fRadii;
63}
64
65SkRectShape::SkRectShape(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {
66 buffer.read(&fBounds, sizeof(fBounds));
67 buffer.read(&fRadii, sizeof(fRadii));
68}
69
70SkFlattenable* SkRectShape::CreateProc(SkFlattenableReadBuffer& buffer) {
71 return SkNEW_ARGS(SkRectShape, (buffer));
72}
73
74///////////////////////////////////////////////////////////////////////////////
75
76void SkPaintShape::flatten(SkFlattenableWriteBuffer& buffer) {
77 this->INHERITED::flatten(buffer);
78
79 fPaint.flatten(buffer);
80}
81
82SkPaintShape::SkPaintShape(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {
83 fPaint.unflatten(buffer);
84}
85