| /* | 
 |  * Copyright 2012 Google Inc. | 
 |  * | 
 |  * Use of this source code is governed by a BSD-style license that can be | 
 |  * found in the LICENSE file. | 
 |  */ | 
 |  | 
 | #include "SkPaint.h" | 
 | #include "SkPath.h" | 
 | #include "SkRect.h" | 
 | #include "SkStroke.h" | 
 | #include "Test.h" | 
 |  | 
 | static bool equal(const SkRect& a, const SkRect& b) { | 
 |     return  SkScalarNearlyEqual(a.left(), b.left()) && | 
 |             SkScalarNearlyEqual(a.top(), b.top()) && | 
 |             SkScalarNearlyEqual(a.right(), b.right()) && | 
 |             SkScalarNearlyEqual(a.bottom(), b.bottom()); | 
 | } | 
 |  | 
 | static void test_strokerect(skiatest::Reporter* reporter) { | 
 |     const SkScalar width = SkIntToScalar(10); | 
 |     SkPaint paint; | 
 |  | 
 |     paint.setStyle(SkPaint::kStroke_Style); | 
 |     paint.setStrokeWidth(width); | 
 |  | 
 |     SkRect r = { 0, 0, SkIntToScalar(200), SkIntToScalar(100) }; | 
 |  | 
 |     SkRect outer(r); | 
 |     outer.outset(width/2, width/2); | 
 |  | 
 |     static const SkPaint::Join joins[] = { | 
 |         SkPaint::kMiter_Join, SkPaint::kRound_Join, SkPaint::kBevel_Join | 
 |     }; | 
 |  | 
 |     for (size_t i = 0; i < SK_ARRAY_COUNT(joins); ++i) { | 
 |         paint.setStrokeJoin(joins[i]); | 
 |  | 
 |         SkPath path, fillPath; | 
 |         path.addRect(r); | 
 |         paint.getFillPath(path, &fillPath); | 
 |  | 
 |         REPORTER_ASSERT(reporter, equal(outer, fillPath.getBounds())); | 
 |  | 
 |         bool isMiter = SkPaint::kMiter_Join == joins[i]; | 
 |         SkRect nested[2]; | 
 |         REPORTER_ASSERT(reporter, fillPath.isNestedRects(nested) == isMiter); | 
 |         if (isMiter) { | 
 |             SkRect inner(r); | 
 |             inner.inset(width/2, width/2); | 
 |             REPORTER_ASSERT(reporter, equal(nested[0], outer)); | 
 |             REPORTER_ASSERT(reporter, equal(nested[1], inner)); | 
 |         } | 
 |     } | 
 | } | 
 |  | 
 | DEF_TEST(Stroke, reporter) { | 
 |     test_strokerect(reporter); | 
 | } |