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 }