| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkRRect.h" | 8 #include "SkRRect.h" |
| 9 #include "SkMatrix.h" | 9 #include "SkMatrix.h" |
| 10 | 10 |
| (...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 // rrect.rect() != path.getBounds() | 199 // rrect.rect() != path.getBounds() |
| 200 fRadii[0].fX = clamp_radius_add(fRadii[0].fX, rect.fLeft, rect.fRight); | 200 fRadii[0].fX = clamp_radius_add(fRadii[0].fX, rect.fLeft, rect.fRight); |
| 201 fRadii[0].fY = clamp_radius_add(fRadii[0].fY, rect.fTop, rect.fBottom); | 201 fRadii[0].fY = clamp_radius_add(fRadii[0].fY, rect.fTop, rect.fBottom); |
| 202 fRadii[1].fX = clamp_radius_sub(fRadii[1].fX, rect.fLeft, rect.fRight); | 202 fRadii[1].fX = clamp_radius_sub(fRadii[1].fX, rect.fLeft, rect.fRight); |
| 203 fRadii[1].fY = clamp_radius_add(fRadii[1].fY, rect.fTop, rect.fBottom); | 203 fRadii[1].fY = clamp_radius_add(fRadii[1].fY, rect.fTop, rect.fBottom); |
| 204 fRadii[2].fX = clamp_radius_sub(fRadii[2].fX, rect.fLeft, rect.fRight); | 204 fRadii[2].fX = clamp_radius_sub(fRadii[2].fX, rect.fLeft, rect.fRight); |
| 205 fRadii[2].fY = clamp_radius_sub(fRadii[2].fY, rect.fTop, rect.fBottom); | 205 fRadii[2].fY = clamp_radius_sub(fRadii[2].fY, rect.fTop, rect.fBottom); |
| 206 fRadii[3].fX = clamp_radius_add(fRadii[3].fX, rect.fLeft, rect.fRight); | 206 fRadii[3].fX = clamp_radius_add(fRadii[3].fX, rect.fLeft, rect.fRight); |
| 207 fRadii[3].fY = clamp_radius_sub(fRadii[3].fY, rect.fTop, rect.fBottom); | 207 fRadii[3].fY = clamp_radius_sub(fRadii[3].fY, rect.fTop, rect.fBottom); |
| 208 | 208 |
| 209 // At this point we're either oval, simple, or complex (not empty or rect) | 209 // At this point we're either oval, simple, or complex (not empty or rect). |
| 210 // but we lazily resolve the type to avoid the work if the information | 210 this->computeType(); |
| 211 // isn't required. | |
| 212 fType = (SkRRect::Type) kUnknown_Type; | |
| 213 | 211 |
| 214 SkDEBUGCODE(this->validate();) | 212 SkDEBUGCODE(this->validate();) |
| 215 } | 213 } |
| 216 | 214 |
| 217 // This method determines if a point known to be inside the RRect's bounds is | 215 // This method determines if a point known to be inside the RRect's bounds is |
| 218 // inside all the corners. | 216 // inside all the corners. |
| 219 bool SkRRect::checkCornerContainment(SkScalar x, SkScalar y) const { | 217 bool SkRRect::checkCornerContainment(SkScalar x, SkScalar y) const { |
| 220 SkPoint canonicalPt; // (x,y) translated to one of the quadrants | 218 SkPoint canonicalPt; // (x,y) translated to one of the quadrants |
| 221 int index; | 219 int index; |
| 222 | 220 |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 298 } | 296 } |
| 299 | 297 |
| 300 static bool radii_are_nine_patch(const SkVector radii[4]) { | 298 static bool radii_are_nine_patch(const SkVector radii[4]) { |
| 301 return radii[SkRRect::kUpperLeft_Corner].fX == radii[SkRRect::kLowerLeft_Cor
ner].fX && | 299 return radii[SkRRect::kUpperLeft_Corner].fX == radii[SkRRect::kLowerLeft_Cor
ner].fX && |
| 302 radii[SkRRect::kUpperLeft_Corner].fY == radii[SkRRect::kUpperRight_Co
rner].fY && | 300 radii[SkRRect::kUpperLeft_Corner].fY == radii[SkRRect::kUpperRight_Co
rner].fY && |
| 303 radii[SkRRect::kUpperRight_Corner].fX == radii[SkRRect::kLowerRight_C
orner].fX && | 301 radii[SkRRect::kUpperRight_Corner].fX == radii[SkRRect::kLowerRight_C
orner].fX && |
| 304 radii[SkRRect::kLowerLeft_Corner].fY == radii[SkRRect::kLowerRight_Co
rner].fY; | 302 radii[SkRRect::kLowerLeft_Corner].fY == radii[SkRRect::kLowerRight_Co
rner].fY; |
| 305 } | 303 } |
| 306 | 304 |
| 307 // There is a simplified version of this method in setRectXY | 305 // There is a simplified version of this method in setRectXY |
| 308 void SkRRect::computeType() const { | 306 void SkRRect::computeType() { |
| 309 SkDEBUGCODE(this->validate();) | 307 struct Validator { |
| 308 Validator(const SkRRect* r) : fR(r) {} |
| 309 ~Validator() { SkDEBUGCODE(fR->validate();) } |
| 310 const SkRRect* fR; |
| 311 } autoValidate(this); |
| 310 | 312 |
| 311 if (fRect.isEmpty()) { | 313 if (fRect.isEmpty()) { |
| 312 fType = kEmpty_Type; | 314 fType = kEmpty_Type; |
| 313 return; | 315 return; |
| 314 } | 316 } |
| 315 | 317 |
| 316 bool allRadiiEqual = true; // are all x radii equal and all y radii? | 318 bool allRadiiEqual = true; // are all x radii equal and all y radii? |
| 317 bool allCornersSquare = 0 == fRadii[0].fX || 0 == fRadii[0].fY; | 319 bool allCornersSquare = 0 == fRadii[0].fX || 0 == fRadii[0].fY; |
| 318 | 320 |
| 319 for (int i = 1; i < 4; ++i) { | 321 for (int i = 1; i < 4; ++i) { |
| (...skipping 237 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 557 case kNinePatch_Type: | 559 case kNinePatch_Type: |
| 558 SkASSERT(!fRect.isEmpty()); | 560 SkASSERT(!fRect.isEmpty()); |
| 559 SkASSERT(!allRadiiZero && !allRadiiSame && !allCornersSquare); | 561 SkASSERT(!allRadiiZero && !allRadiiSame && !allCornersSquare); |
| 560 SkASSERT(patchesOfNine); | 562 SkASSERT(patchesOfNine); |
| 561 break; | 563 break; |
| 562 case kComplex_Type: | 564 case kComplex_Type: |
| 563 SkASSERT(!fRect.isEmpty()); | 565 SkASSERT(!fRect.isEmpty()); |
| 564 SkASSERT(!allRadiiZero && !allRadiiSame && !allCornersSquare); | 566 SkASSERT(!allRadiiZero && !allRadiiSame && !allCornersSquare); |
| 565 SkASSERT(!patchesOfNine); | 567 SkASSERT(!patchesOfNine); |
| 566 break; | 568 break; |
| 567 case kUnknown_Type: | |
| 568 // no limits on this | |
| 569 break; | |
| 570 } | 569 } |
| 571 } | 570 } |
| 572 #endif // SK_DEBUG | 571 #endif // SK_DEBUG |
| 573 | 572 |
| 574 /////////////////////////////////////////////////////////////////////////////// | 573 /////////////////////////////////////////////////////////////////////////////// |
| OLD | NEW |