1 2 /* 3 * Copyright 2011 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #include "SkRectShape.h" 11 #include "SkCanvas.h" 12 13 SkPaintShape::SkPaintShape() { 14 fPaint.setAntiAlias(true); 15 } 16 17 SkRectShape::SkRectShape() { 18 fBounds.setEmpty(); 19 fRadii.set(0, 0); 20 } 21 22 void SkRectShape::setRect(const SkRect& bounds) { 23 fBounds = bounds; 24 fRadii.set(0, 0); 25 } 26 27 void SkRectShape::setOval(const SkRect& bounds) { 28 fBounds = bounds; 29 fRadii.set(-SK_Scalar1, -SK_Scalar1); 30 } 31 32 void SkRectShape::setCircle(SkScalar cx, SkScalar cy, SkScalar radius) { 33 fBounds.set(cx - radius, cy - radius, cx + radius, cy + radius); 34 fRadii.set(-SK_Scalar1, -SK_Scalar1); 35 } 36 37 void SkRectShape::setRRect(const SkRect& bounds, SkScalar rx, SkScalar ry) { 38 if (rx < 0) { 39 rx = 0; 40 } 41 if (ry < 0) { 42 ry = 0; 43 } 44 45 fBounds = bounds; 46 fRadii.set(rx, ry); 47 } 48 49 /////////////////////////////////////////////////////////////////////////////// 50 51 void SkRectShape::onDraw(SkCanvas* canvas) { 52 const SkPaint& paint = this->paint(); 53 54 if (fRadii.fWidth < 0) { 55 canvas->drawOval(fBounds, paint); 56 } else if (fRadii.isZero()) { 57 canvas->drawRect(fBounds, paint); 58 } else { 59 canvas->drawRoundRect(fBounds, fRadii.fWidth, fRadii.fHeight, paint); 60 } 61 } 62 63 SkFlattenable::Factory SkRectShape::getFactory() { 64 return CreateProc; 65 } 66 67 void SkRectShape::flatten(SkFlattenableWriteBuffer& buffer) { 68 this->INHERITED::flatten(buffer); 69 70 buffer.writeRect(fBounds); 71 *(SkSize*)buffer.reserve(sizeof(SkSize)) = fRadii; 72 } 73 74 SkRectShape::SkRectShape(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 75 buffer.read(&fBounds, sizeof(fBounds)); 76 buffer.read(&fRadii, sizeof(fRadii)); 77 } 78 79 SkFlattenable* SkRectShape::CreateProc(SkFlattenableReadBuffer& buffer) { 80 return SkNEW_ARGS(SkRectShape, (buffer)); 81 } 82 83 /////////////////////////////////////////////////////////////////////////////// 84 85 void SkPaintShape::flatten(SkFlattenableWriteBuffer& buffer) { 86 this->INHERITED::flatten(buffer); 87 88 fPaint.flatten(buffer); 89 } 90 91 SkPaintShape::SkPaintShape(SkFlattenableReadBuffer& buffer) : INHERITED(buffer) { 92 fPaint.unflatten(buffer); 93 } 94 95 SK_DEFINE_FLATTENABLE_REGISTRAR(SkRectShape) 96 97