OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 "gm.h" | 8 #include "gm.h" |
9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
10 #include "SkPath.h" | 10 #include "SkPath.h" |
11 #include "SkTypeface.h" | 11 #include "SkTypeface.h" |
12 | 12 |
| 13 /* The hiragino_maru_goth_pro_e path was generated with Mac-specific code: |
| 14 * |
| 15 * paint.setTextSize(SkIntToScalar(100)); |
| 16 * paint.setTypeface(SkTypeface::CreateFromName("Hiragino Maru Gothic Pro")); |
| 17 * paint.getTextPath("e", 1, 50, 50, &path); |
| 18 * |
| 19 * The path data is duplicated here to allow the test to |
| 20 * run on all platforms and to remove the bug dependency |
| 21 * should future Macs edit or delete the font. |
| 22 */ |
| 23 static SkPath hiragino_maru_goth_pro_e() { |
| 24 SkPath path; |
| 25 path.moveTo(98.6f, 24.7f); |
| 26 path.cubicTo(101.7f, 24.7f, 103.6f, 22.8f, 103.6f, 19.2f); |
| 27 path.cubicTo(103.6f, 18.9f, 103.6f, 18.7f, 103.6f, 18.4f); |
| 28 path.cubicTo(102.6f, 5.3f, 94.4f, -6.1f, 79.8f, -6.1f); |
| 29 path.cubicTo(63.5f, -6.1f, 54.5f, 6, 54.5f, 23.3f); |
| 30 path.cubicTo(54.5f, 40.6f, 64, 52.2f, 80.4f, 52.2f); |
| 31 path.cubicTo(93.4f, 52.2f, 99.2f, 45.6f, 102.4f, 39); |
| 32 path.cubicTo(102.8f, 38.4f, 102.9f, 37.8f, 102.9f, 37.2f); |
| 33 path.cubicTo(102.9f, 35.4f, 101.5f, 34.2f, 99.8f, 33.7f); |
| 34 path.cubicTo(99.1f, 33.5f, 98.4f, 33.3f, 97.7f, 33.3f); |
| 35 path.cubicTo(96.3f, 33.3f, 95, 34, 94.1f, 35.8f); |
| 36 path.cubicTo(91.7f, 41.1f, 87.7f, 44.7f, 80.5f, 44.7f); |
| 37 path.cubicTo(69.7f, 44.7f, 63.6f, 37, 63.4f, 24.7f); |
| 38 path.lineTo(98.6f, 24.7f); |
| 39 path.close(); |
| 40 path.moveTo(63.7f, 17.4f); |
| 41 path.cubicTo(65, 7.6f, 70.2f, 1.2f, 79.8f, 1.2f); |
| 42 path.cubicTo(89, 1.2f, 93.3f, 8.5f, 94.5f, 15.6f); |
| 43 path.cubicTo(94.5f, 15.8f, 94.5f, 16, 94.5f, 16.1f); |
| 44 path.cubicTo(94.5f, 17, 94.1f, 17.4f, 93, 17.4f); |
| 45 path.lineTo(63.7f, 17.4f); |
| 46 path.close(); |
| 47 return path; |
| 48 } |
| 49 |
13 static void test_path(SkCanvas* canvas, const SkPath& path) { | 50 static void test_path(SkCanvas* canvas, const SkPath& path) { |
14 SkPaint paint; | 51 SkPaint paint; |
15 paint.setAntiAlias(true); | 52 paint.setAntiAlias(true); |
16 canvas->drawPath(path, paint); | 53 canvas->drawPath(path, paint); |
17 | 54 |
18 paint.setStyle(SkPaint::kStroke_Style); | 55 paint.setStyle(SkPaint::kStroke_Style); |
19 paint.setColor(SK_ColorRED); | 56 paint.setColor(SK_ColorRED); |
20 canvas->drawPath(path, paint); | 57 canvas->drawPath(path, paint); |
21 } | 58 } |
22 | 59 |
23 static void test_rev(SkCanvas* canvas, const SkPath& path) { | 60 static void test_rev(SkCanvas* canvas, const SkPath& path) { |
24 test_path(canvas, path); | 61 test_path(canvas, path); |
25 | 62 |
26 SkPath rev; | 63 SkPath rev; |
27 rev.reverseAddPath(path); | 64 rev.reverseAddPath(path); |
28 canvas->save(); | 65 canvas->save(); |
29 canvas->translate(150, 0); | 66 canvas->translate(150, 0); |
30 test_path(canvas, rev); | 67 test_path(canvas, rev); |
31 canvas->restore(); | 68 canvas->restore(); |
32 } | 69 } |
33 | 70 |
34 static void test_rev(SkCanvas* canvas) { | |
35 SkRect r = { 10, 10, 100, 60 }; | |
36 | |
37 SkPath path; | |
38 | |
39 path.addRect(r); test_rev(canvas, path); | |
40 | |
41 canvas->translate(0, 100); | |
42 path.offset(20, 20); | |
43 path.addRect(r); test_rev(canvas, path); | |
44 | |
45 canvas->translate(0, 100); | |
46 path.reset(); | |
47 path.moveTo(10, 10); path.lineTo(30, 30); | |
48 path.addOval(r); | |
49 r.offset(50, 20); | |
50 path.addOval(r); | |
51 test_rev(canvas, path); | |
52 | |
53 SkPaint paint; | |
54 paint.setTextSize(SkIntToScalar(100)); | |
55 sk_tool_utils::set_portable_typeface(&paint, "Hiragino Maru Gothic Pro"); | |
56 path.reset(); | |
57 paint.getTextPath("e", 1, 50, 50, &path); | |
58 canvas->translate(0, 100); | |
59 test_rev(canvas, path); | |
60 } | |
61 | |
62 namespace skiagm { | 71 namespace skiagm { |
63 | 72 |
64 class PathReverseGM : public GM { | 73 class PathReverseGM : public GM { |
65 public: | 74 public: |
66 PathReverseGM() { | 75 PathReverseGM() { |
67 | 76 |
68 } | 77 } |
69 | 78 |
70 protected: | 79 protected: |
71 | 80 |
72 SkString onShortName() override { | 81 SkString onShortName() override { |
73 return SkString("path-reverse"); | 82 return SkString("path-reverse"); |
74 } | 83 } |
75 | 84 |
76 SkISize onISize() override { | 85 SkISize onISize() override { |
77 return SkISize::Make(640, 480); | 86 return SkISize::Make(640, 480); |
78 } | 87 } |
79 | 88 |
80 void onDraw(SkCanvas* canvas) override { | 89 void onDraw(SkCanvas* canvas) override { |
81 if (false) test_rev(canvas); // avoid bit rot, suppress warning | |
82 SkRect r = { 10, 10, 100, 60 }; | 90 SkRect r = { 10, 10, 100, 60 }; |
83 | 91 |
84 SkPath path; | 92 SkPath path; |
85 | 93 |
86 path.addRect(r); test_rev(canvas, path); | 94 path.addRect(r); test_rev(canvas, path); |
87 | 95 |
88 canvas->translate(0, 100); | 96 canvas->translate(0, 100); |
89 path.offset(20, 20); | 97 path.offset(20, 20); |
90 path.addRect(r); test_rev(canvas, path); | 98 path.addRect(r); test_rev(canvas, path); |
91 | 99 |
92 canvas->translate(0, 100); | 100 canvas->translate(0, 100); |
93 path.reset(); | 101 path.reset(); |
94 path.moveTo(10, 10); path.lineTo(30, 30); | 102 path.moveTo(10, 10); path.lineTo(30, 30); |
95 path.addOval(r); | 103 path.addOval(r); |
96 r.offset(50, 20); | 104 r.offset(50, 20); |
97 path.addOval(r); | 105 path.addOval(r); |
98 test_rev(canvas, path); | 106 test_rev(canvas, path); |
99 | 107 |
100 SkPaint paint; | 108 path = hiragino_maru_goth_pro_e(); |
101 paint.setTextSize(SkIntToScalar(100)); | |
102 sk_tool_utils::set_portable_typeface(&paint, "Hiragino Maru Gothic Pro")
; | |
103 path.reset(); | |
104 paint.getTextPath("e", 1, 50, 50, &path); | |
105 canvas->translate(0, 100); | 109 canvas->translate(0, 100); |
106 test_rev(canvas, path); | 110 test_rev(canvas, path); |
107 } | 111 } |
108 | 112 |
109 private: | 113 private: |
110 typedef GM INHERITED; | 114 typedef GM INHERITED; |
111 }; | 115 }; |
112 | 116 |
113 ////////////////////////////////////////////////////////////////////////////// | 117 ////////////////////////////////////////////////////////////////////////////// |
114 | 118 |
115 static GM* MyFactory(void*) { return new PathReverseGM; } | 119 static GM* MyFactory(void*) { return new PathReverseGM; } |
116 static GMRegistry reg(MyFactory); | 120 static GMRegistry reg(MyFactory); |
117 | 121 |
118 } | 122 } |
OLD | NEW |