| reed@android.com | f76bacf | 2009-05-13 14:00:33 +0000 | [diff] [blame] | 1 | #include "SkRectShape.h" | 
 | 2 | #include "SkCanvas.h" | 
 | 3 |  | 
 | 4 | SkPaintShape::SkPaintShape() { | 
 | 5 |     fPaint.setAntiAlias(true); | 
 | 6 | } | 
 | 7 |  | 
 | 8 | SkRectShape::SkRectShape() { | 
 | 9 |     fBounds.setEmpty(); | 
 | 10 |     fRadii.set(0, 0); | 
 | 11 | } | 
 | 12 |  | 
 | 13 | void SkRectShape::setRect(const SkRect& bounds) { | 
 | 14 |     fBounds = bounds; | 
 | 15 |     fRadii.set(0, 0); | 
 | 16 | } | 
 | 17 |  | 
 | 18 | void SkRectShape::setOval(const SkRect& bounds) { | 
 | 19 |     fBounds = bounds; | 
 | 20 |     fRadii.set(-SK_Scalar1, -SK_Scalar1); | 
 | 21 | } | 
 | 22 |  | 
 | 23 | void 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 |  | 
 | 28 | void 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 |  | 
 | 42 | void 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 |  | 
 | 54 | SkFlattenable::Factory SkRectShape::getFactory() { | 
 | 55 |     return CreateProc; | 
 | 56 | } | 
 | 57 |  | 
 | 58 | void SkRectShape::flatten(SkFlattenableWriteBuffer& buffer) { | 
 | 59 |     this->INHERITED::flatten(buffer); | 
 | 60 |  | 
 | 61 |     buffer.writeRect(fBounds); | 
 | 62 |     *(SkSize*)buffer.reserve(sizeof(SkSize)) = fRadii; | 
 | 63 | } | 
 | 64 |  | 
 | 65 | SkRectShape::SkRectShape(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) {     | 
 | 66 |     buffer.read(&fBounds, sizeof(fBounds)); | 
 | 67 |     buffer.read(&fRadii, sizeof(fRadii)); | 
 | 68 | } | 
 | 69 |  | 
 | 70 | SkFlattenable* SkRectShape::CreateProc(SkFlattenableReadBuffer& buffer) { | 
 | 71 |     return SkNEW_ARGS(SkRectShape, (buffer)); | 
 | 72 | } | 
 | 73 |  | 
 | 74 | /////////////////////////////////////////////////////////////////////////////// | 
 | 75 |  | 
 | 76 | void SkPaintShape::flatten(SkFlattenableWriteBuffer& buffer) { | 
 | 77 |     this->INHERITED::flatten(buffer); | 
 | 78 |      | 
 | 79 |     fPaint.flatten(buffer); | 
 | 80 | } | 
 | 81 |  | 
 | 82 | SkPaintShape::SkPaintShape(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { | 
 | 83 |     fPaint.unflatten(buffer); | 
 | 84 | } | 
 | 85 |  | 
| reed@android.com | 0ad336f | 2009-06-29 16:02:20 +0000 | [diff] [blame^] | 86 | static SkFlattenable::Registrar gReg("SkRectShape", SkRectShape::CreateProc); | 
 | 87 |  |