1 /*
2 * Copyright (c) 2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15 #include "bugfix7792.h"
16
17 #include <native_drawing/drawing_brush.h>
18 #include <native_drawing/drawing_color.h>
19 #include <native_drawing/drawing_matrix.h>
20 #include <native_drawing/drawing_path.h>
21 #include <native_drawing/drawing_pen.h>
22 #include <native_drawing/drawing_point.h>
23 #include <native_drawing/drawing_round_rect.h>
24 #include <native_drawing/drawing_shader_effect.h>
25
26 #include "test_common.h"
27
28 #include "common/log_common.h"
29
BugFix7792()30 BugFix7792::BugFix7792()
31 {
32 bitmapWidth_ = 800; // 800宽度
33 bitmapHeight_ = 800; // 800高度
34 fileName_ = "bug7792"; // 对标 pathfill.cpp
35 }
36
OnTestFunction(OH_Drawing_Canvas * canvas)37 void BugFix7792::OnTestFunction(OH_Drawing_Canvas* canvas)
38 {
39 // 用例名: bug7792 测试 OH_Drawing_PathReset
40 OH_Drawing_Path* path = OH_Drawing_PathCreate();
41 // 创建一个brush对象
42 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
43 OH_Drawing_CanvasAttachBrush(canvas, brush);
44 CanvasDrawPath1(canvas, path);
45 CanvasDrawPath2(canvas, path);
46 CanvasDrawPath3(canvas, path);
47 CanvasDrawPath4(canvas, path);
48 CanvasDrawPath5(canvas, path);
49 // 释放内存
50 OH_Drawing_PathDestroy(path);
51 OH_Drawing_CanvasDetachBrush(canvas);
52 OH_Drawing_BrushDestroy(brush);
53 }
54
CanvasDrawPath1(OH_Drawing_Canvas * canvas,OH_Drawing_Path * path)55 void BugFix7792::CanvasDrawPath1(OH_Drawing_Canvas* canvas, OH_Drawing_Path* path)
56 {
57 // 第一个图型坐标点:(0.0)
58 OH_Drawing_PathMoveTo(path, 10, 10); // path, 10, 10坐标
59 OH_Drawing_PathMoveTo(path, 75, 75); // path, 75, 75坐标
60 OH_Drawing_PathLineTo(path, 150, 75); // path, 150, 75坐标
61 OH_Drawing_PathLineTo(path, 150, 150); // path, 150, 150坐标
62 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
63 OH_Drawing_CanvasDrawPath(canvas, path);
64 // 第二个图型坐标点:(0.1)
65 OH_Drawing_CanvasTranslate(canvas, 200, 0); // 200, 0坐标
66 OH_Drawing_PathReset(path);
67 OH_Drawing_PathMoveTo(path, 75, 50); // 75, 50坐标
68 OH_Drawing_PathMoveTo(path, 100, 75); // 100, 75坐标
69 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
70 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
71 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
72 OH_Drawing_PathLineTo(path, 75, 50); // 75, 50坐标
73 OH_Drawing_PathClose(path);
74 OH_Drawing_CanvasDrawPath(canvas, path);
75 // 第三个图型坐标点:(0.2)
76 OH_Drawing_CanvasTranslate(canvas, 200, 0); // 200, 0坐标
77 OH_Drawing_PathReset(path);
78 OH_Drawing_PathMoveTo(path, 10, 10); // 10, 10坐标
79 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
80 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
81 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
82 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
83 OH_Drawing_PathClose(path);
84 OH_Drawing_CanvasDrawPath(canvas, path);
85 // 第四个图型坐标点:(0.4)
86 OH_Drawing_CanvasTranslate(canvas, -200 * 2, 200); // -200 * 2, 200坐标
87 OH_Drawing_PathReset(path);
88 OH_Drawing_PathMoveTo(path, 75, 150); // 75, 150坐标
89 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
90 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
91 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
92 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
93 OH_Drawing_PathMoveTo(path, 75, 150); // 75, 150坐标
94 OH_Drawing_CanvasDrawPath(canvas, path);
95 }
96
CanvasDrawPath2(OH_Drawing_Canvas * canvas,OH_Drawing_Path * path)97 void BugFix7792::CanvasDrawPath2(OH_Drawing_Canvas* canvas, OH_Drawing_Path* path)
98 {
99 // 第五个图型坐标点:(1.1)
100 OH_Drawing_CanvasTranslate(canvas, 200, 0); // 200, 0坐标
101 OH_Drawing_PathReset(path);
102 OH_Drawing_PathMoveTo(path, 250, 75); // 250, 75坐标
103 OH_Drawing_PathMoveTo(path, 250, 75); // 250, 75坐标
104 OH_Drawing_PathMoveTo(path, 250, 75); // 250, 75坐标
105 OH_Drawing_PathMoveTo(path, 100, 75); // 100, 75坐标
106 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
107 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
108 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
109 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
110 OH_Drawing_PathClose(path);
111 OH_Drawing_PathLineTo(path, 0, 0);
112 OH_Drawing_PathClose(path);
113 OH_Drawing_CanvasDrawPath(canvas, path);
114 // 第六个图型坐标点:(1.2)
115 OH_Drawing_CanvasTranslate(canvas, 200, 0); // 200, 0坐标
116 OH_Drawing_PathReset(path);
117 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
118 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
119 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
120 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
121 OH_Drawing_PathMoveTo(path, 250, 75); // 250, 75坐标
122 OH_Drawing_CanvasDrawPath(canvas, path);
123 // 第七个图型坐标点:(1.3)
124 OH_Drawing_CanvasTranslate(canvas, -200 * 2, 200); // -200 * 2, 200坐标
125 OH_Drawing_PathReset(path);
126 OH_Drawing_PathMoveTo(path, 75, 10); // 75, 10坐标
127 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
128 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
129 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
130 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
131 OH_Drawing_PathLineTo(path, 75, 10); // 75, 10坐标
132 OH_Drawing_PathClose(path);
133 OH_Drawing_CanvasDrawPath(canvas, path);
134 }
135
CanvasDrawPath3(OH_Drawing_Canvas * canvas,OH_Drawing_Path * path)136 void BugFix7792::CanvasDrawPath3(OH_Drawing_Canvas* canvas, OH_Drawing_Path* path)
137 {
138 // 第八个图型坐标点:(1.4)
139 OH_Drawing_CanvasTranslate(canvas, 200, 0); // 200, 0坐标
140 OH_Drawing_PathReset(path);
141 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
142 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
143 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
144 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
145 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
146 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
147 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
148 OH_Drawing_PathClose(path);
149 OH_Drawing_PathMoveTo(path, 10, 10); // 10, 10坐标
150 OH_Drawing_PathLineTo(path, 30, 10); // 30, 10坐标
151 OH_Drawing_PathLineTo(path, 10, 30); // 10, 30坐标
152 OH_Drawing_CanvasDrawPath(canvas, path);
153 // 第九个图型坐标点:(2.2)
154 OH_Drawing_CanvasTranslate(canvas, 200, 0); // 200, 0坐标
155 OH_Drawing_PathReset(path);
156 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
157 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
158 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
159 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
160 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
161 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
162 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
163 OH_Drawing_PathClose(path);
164 OH_Drawing_CanvasDrawPath(canvas, path);
165 // 第十个图型坐标点:(2.3)
166 OH_Drawing_CanvasTranslate(canvas, -200 * 2, 200); // -200 * 2, 200坐标
167 OH_Drawing_PathReset(path);
168 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
169 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
170 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
171 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
172 OH_Drawing_PathLineTo(path, 75, 250); // 75, 250坐标
173 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
174 OH_Drawing_PathClose(path);
175 OH_Drawing_CanvasDrawPath(canvas, path);
176 }
177
CanvasDrawPath4(OH_Drawing_Canvas * canvas,OH_Drawing_Path * path)178 void BugFix7792::CanvasDrawPath4(OH_Drawing_Canvas* canvas, OH_Drawing_Path* path)
179 {
180 // 第十一个图型坐标点:(2.4)
181 OH_Drawing_CanvasTranslate(canvas, 200, 0); // 200, 0坐标
182 OH_Drawing_PathReset(path);
183 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
184 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
185 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
186 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
187 OH_Drawing_PathLineTo(path, 75, 10); // 75, 10坐标
188 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
189 OH_Drawing_PathClose(path);
190 OH_Drawing_CanvasDrawPath(canvas, path);
191 // 第十二个图型坐标点:(2.5)
192 OH_Drawing_CanvasTranslate(canvas, 200, 0); // 200, 0坐标
193 OH_Drawing_PathReset(path);
194 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
195 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
196 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
197 OH_Drawing_PathLineTo(path, 10, 150); // 10, 150坐标
198 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
199 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
200 OH_Drawing_CanvasDrawPath(canvas, path);
201 // 第十三个图型坐标点:(3.3)
202 OH_Drawing_CanvasTranslate(canvas, 200, -200 * 3); // 200, -200 * 3坐标
203 OH_Drawing_PathReset(path);
204 OH_Drawing_PathMoveTo(path, 150, 75); // 150, 75坐标
205 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
206 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
207 OH_Drawing_PathLineTo(path, 75, 100); // 75, 100坐标
208 OH_Drawing_CanvasDrawPath(canvas, path);
209 // 第十四个图型坐标点:(3.4)
210 OH_Drawing_CanvasTranslate(canvas, 0, 200); // 0, 200坐标
211 OH_Drawing_PathReset(path);
212 OH_Drawing_PathMoveTo(path, 150, 100); // 150, 100坐标
213 OH_Drawing_PathLineTo(path, 150, 100); // 150, 100坐标
214 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
215 OH_Drawing_PathLineTo(path, 75, 150); // 75, 150坐标
216 OH_Drawing_PathLineTo(path, 75, 100); // 75, 100坐标
217 OH_Drawing_PathLineTo(path, 75, 75); // 75, 75坐标
218 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
219 OH_Drawing_PathClose(path);
220 OH_Drawing_CanvasDrawPath(canvas, path);
221 }
222
CanvasDrawPath5(OH_Drawing_Canvas * canvas,OH_Drawing_Path * path)223 void BugFix7792::CanvasDrawPath5(OH_Drawing_Canvas* canvas, OH_Drawing_Path* path)
224 {
225 // 第十五个图型坐标点:(3.5)
226 OH_Drawing_CanvasTranslate(canvas, 0, 200); // 0, 200坐标
227 OH_Drawing_PathReset(path);
228 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
229 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
230 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
231 OH_Drawing_PathLineTo(path, 140, 150); // 140, 150坐标
232 OH_Drawing_PathLineTo(path, 140, 75); // 140, 75坐标
233 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
234 OH_Drawing_PathClose(path);
235 OH_Drawing_CanvasDrawPath(canvas, path);
236 // 第十六个图型坐标点:(3.6)
237 OH_Drawing_CanvasTranslate(canvas, 0, 200); // 0, 200坐标
238 OH_Drawing_PathReset(path);
239 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
240 OH_Drawing_PathLineTo(path, 150, 75); // 150, 75坐标
241 OH_Drawing_PathLineTo(path, 150, 150); // 150, 150坐标
242 OH_Drawing_PathLineTo(path, 140, 150); // 140, 150坐标
243 OH_Drawing_PathLineTo(path, 140, 75); // 140, 75坐标
244 OH_Drawing_PathMoveTo(path, 75, 75); // 75, 75坐标
245 OH_Drawing_PathClose(path);
246 OH_Drawing_CanvasDrawPath(canvas, path);
247 }