• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020-2022 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 
16 #include "ui_test_canvas.h"
17 
18 #include "common/screen.h"
19 #include "components/ui_label.h"
20 #include "test_resource_config.h"
21 namespace OHOS {
SetUp()22 void UITestCanvas::SetUp()
23 {
24     if (container_ == nullptr) {
25         container_ = new UIScrollView();
26         container_->Resize(Screen::GetInstance().GetWidth(),
27                            Screen::GetInstance().GetHeight() - BACK_BUTTON_HEIGHT);
28         container_->SetHorizontalScrollState(false);
29         container_->SetThrowDrag(true);
30     }
31     positionY_ = 0;
32 }
33 
TearDown()34 void UITestCanvas::TearDown()
35 {
36     DeleteChildren(container_);
37     container_ = nullptr;
38 }
39 
GetTestView()40 const UIView* UITestCanvas::GetTestView()
41 {
42     UIKitCanvasTestDrawImage002();
43 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
44     RM008UIKitCanvasTest001();
45     RM008UIKitCanvasTest002();
46 #endif
47     RM008UIKitCanvasTest003();
48 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
49     RM008UIKitCanvasTest004();
50     RM008UIKitCanvasTest005();
51     RM008UIKitCanvasTest006();
52     RM008UIKitCanvasTest007();
53     RM008UIKitCanvasShadowTest008();
54 #endif
55     RM009LineCapDrawPath();
56     RM009LineJoinDrawPath();
57     RM009LineDashDrawPath();
58 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
59     RM009StrokeAndClearRectDrawPath();
60 #endif
61     RM011StrokeText001();
62     RM011CanvasScale001();
63     RM011CanvasRotate001();
64 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
65     RM012globalAlpha001();
66     RM012SaveOrRestore002();
67     RM012GlobalCompositeOperationSourceOver();
68     RM012GlobalCompositeOperationSourceAtop();
69     RM012GlobalCompositeOperationSourceIn();
70     RM012GlobalCompositeOperationSourceOut();
71     RM012GlobalCompositeOperationDestinationOver();
72     RM012GlobalCompositeOperationDestinationAtop();
73     RM012GlobalCompositeOperationDestinationIn();
74     RM012GlobalCompositeOperationDestinationOut();
75     RM012GlobalCompositeOperationLIGHTER();
76     RM012GlobalCompositeOperationCopy();
77     RM012GlobalCompositeOperationXOR();
78 #endif
79     UIKitCanvasTestDrawLine001();
80     UIKitCanvasTestDrawLine002();
81     UIKitCanvasTestDrawCurve001();
82     UIKitCanvasTestDrawCurve002();
83     UIKitCanvasTestDrawRect001();
84     UIKitCanvasTestDrawRect002();
85     UIKitCanvasTestDrawRect003();
86     UIKitCanvasTestDrawCircle001();
87     UIKitCanvasTestDrawCircle002();
88     UIKitCanvasTestDrawCircle003();
89     UIKitCanvasTestDrawArc001();
90     UIKitCanvasTestDrawImage001();
91     UIKitCanvasTestDrawLabel001();
92     UIKitCanvasTestDrawSector001();
93     UIKitCanvasTestClear001();
94     UIKitCanvasTestDrawPath001();
95     UIKitCanvasTestDrawPath002();
96     UIKitCanvasTestDrawPath003();
97     UIKitCanvasTestDrawPath004();
98     UIKitCanvasTestDrawPath005();
99     UIKitCanvasTestDrawPath006();
100     UIKitCanvasTestDrawPath007();
101     UIKitCanvasTestDrawPath008();
102     UIKitCanvasTestDrawPath009();
103     UIKitCanvasTestDrawPath010();
104     UIKitCanvasTestDrawPath011();
105     UIKitCanvasTestDrawPath012();
106     UIKitCanvasTestDrawPath013();
107     UIKitCanvasTestDrawPath014();
108     UIKitCanvasTestDrawPath015();
109     UIKitCanvasTestDrawPath016();
110     UIKitCanvasTestDrawPath017();
111     UIKitCanvasTestDrawPath018();
112     UIKitCanvasTestDrawPath019();
113     UIKitCanvasTestDrawPath020();
114     UIKitCanvasTestDrawPath021();
115     UIKitCanvasTestDrawPath022();
116     UIKitCanvasTestDrawPath023();
117     UIKitCanvasTestDrawPath024();
118     UIKitCanvasTestDrawPath025();
119     UIKitCanvasTestDrawPath026();
120     UIKitCanvasTestDrawPath027();
121     UIKitCanvasTestDrawPath028();
122     UIKitCanvasTestDrawPath029();
123     UIKitCanvasTestDrawPath030();
124     UIKitCanvasTestDrawPath031();
125     UIKitCanvasTestDrawPath032();
126     UIKitCanvasTestDrawPath033();
127     UIKitCanvasTestDrawPath034();
128     return container_;
129 }
130 
CreateTitleLabel(const char * title)131 void UITestCanvas::CreateTitleLabel(const char* title)
132 {
133     UILabel* titleLabel = new UILabel();
134     titleLabel->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, positionY_, Screen::GetInstance().GetWidth(), TITLE_HEIGHT);
135     titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
136     titleLabel->SetText(title);
137     container_->Add(titleLabel);
138     positionY_ += TITLE_HEIGHT + HEIGHT_GAP; // 8: gap
139 }
140 
CreateCanvas()141 UICanvas* UITestCanvas::CreateCanvas()
142 {
143     UICanvas* canvas = new UICanvas();
144     canvas->SetHeight(CANVAS_HEIGHT);
145     canvas->SetWidth(CANVAS_WIDTH);
146     canvas->SetPosition(VIEW_DISTANCE_TO_LEFT_SIDE, positionY_);
147     canvas->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full);
148     container_->Add(canvas);
149     positionY_ += CANVAS_HEIGHT + GAP;
150     return canvas;
151 }
152 
UIKitCanvasTestDrawLine001()153 void UITestCanvas::UIKitCanvasTestDrawLine001()
154 {
155     if (container_ == nullptr) {
156         return;
157     }
158     CreateTitleLabel("绘制直线");
159     UICanvas* canvas = CreateCanvas();
160     Paint paint;
161     // {0, 10}: Start point coordinates x, y; {50, 10}: end point coordinates x, y
162     canvas->DrawLine({0, START1_X}, {LINE4_X, START1_X}, paint);
163 }
164 
UIKitCanvasTestDrawLine002()165 void UITestCanvas::UIKitCanvasTestDrawLine002()
166 {
167     if (container_ == nullptr) {
168         return;
169     }
170     CreateTitleLabel("绘制直线");
171     UICanvas* canvas = CreateCanvas();
172 
173     Paint paint;
174 
175     paint.SetStrokeWidth(LINE_WIDTH5);            // 5: line width
176     canvas->SetStartPosition({START_X, START_Y}); // {50, 10}: Start point coordinates x, y;
177     canvas->DrawLine({LINE2_X, RECT_Y}, paint);   // {100, 50}: end point coordinates x, y
178 }
179 
UIKitCanvasTestDrawCurve001()180 void UITestCanvas::UIKitCanvasTestDrawCurve001()
181 {
182     if (container_ == nullptr) {
183         return;
184     }
185     CreateTitleLabel("绘制曲线");
186     UICanvas* canvas = CreateCanvas();
187 
188     Paint paint;
189     paint.SetStrokeColor(Color::Red());
190     canvas->DrawCurve({LINE2_X, RECT_Y}, {LINE12_X, RECT_Y}, {LINE12_X, RECT_Y},
191                       {LINE12_X, LINE1_Y}, paint);
192 }
193 
UIKitCanvasTestDrawCurve002()194 void UITestCanvas::UIKitCanvasTestDrawCurve002()
195 {
196     if (container_ == nullptr) {
197         return;
198     }
199     CreateTitleLabel("绘制曲线");
200     UICanvas* canvas = CreateCanvas();
201 
202     Paint paint;
203     paint.SetStrokeColor(Color::Red());
204     canvas->DrawCurve({LINE2_X, LINE_CURVE_Y}, {LINE12_X, LINE_CURVE_Y},
205                       {LINE12_X, LINE1_Y}, paint);
206 }
207 
UIKitCanvasTestDrawRect001()208 void UITestCanvas::UIKitCanvasTestDrawRect001()
209 {
210     if (container_ == nullptr) {
211         return;
212     }
213     CreateTitleLabel("矩形填充");
214     UICanvas* canvas = CreateCanvas();
215 
216     Paint paint;
217     paint.SetStyle(Paint::PaintStyle::FILL_STYLE);
218     paint.SetFillColor(Color::Yellow());
219     paint.SetStrokeWidth(LINE_WIDTH30); // 30: line width
220     // {100, 10}: left corner coordinates point, 50: width, 50: rectangle style
221     canvas->DrawRect({LINE1_Y, START1_Y}, LINE4_X, TRANSLATE_Y, paint);
222 }
223 
UIKitCanvasTestDrawRect002()224 void UITestCanvas::UIKitCanvasTestDrawRect002()
225 {
226     if (container_ == nullptr) {
227         return;
228     }
229     CreateTitleLabel("矩形描边");
230     UICanvas* canvas = CreateCanvas();
231 
232     Paint paint;
233     paint.SetStyle(Paint::PaintStyle::STROKE_STYLE);
234     paint.SetStrokeColor(Color::Blue());
235     // {200, 10}: left corner coordinates point, 50: width, 50: rectangle style
236     canvas->DrawRect({LINE28_X, START2_Y}, LINE4_X, LINE_RECT_Y50, paint);
237 }
238 
UIKitCanvasTestDrawRect003()239 void UITestCanvas::UIKitCanvasTestDrawRect003()
240 {
241     if (container_ == nullptr) {
242         return;
243     }
244     CreateTitleLabel("矩形填充 + 描边");
245     UICanvas* canvas = CreateCanvas();
246 
247     Paint paint;
248     paint.SetStyle(Paint::PaintStyle::STROKE_FILL_STYLE);
249     paint.SetFillColor(Color::Yellow());
250     paint.SetStrokeColor(Color::Blue());
251     // {300, 10}: left corner coordinates point, 50: width, 50: rectangle style
252     canvas->DrawRect({LINE_RECT_X300, LINE_RECT_Y10}, LINE_RECT_WIDTH50, LINE_RECT_HEIGHT50, paint);
253 }
254 
UIKitCanvasTestDrawCircle001()255 void UITestCanvas::UIKitCanvasTestDrawCircle001()
256 {
257     if (container_ == nullptr) {
258         return;
259     }
260     CreateTitleLabel("圆形填充");
261     UICanvas* canvas = CreateCanvas();
262 
263     Paint paint;
264     paint.SetStyle(Paint::PaintStyle::FILL_STYLE);
265     paint.SetStrokeColor(Color::Yellow());
266     paint.SetFillColor(Color::Yellow());
267     paint.SetStrokeWidth(LINE_WIDTH10); // 10: line width
268     paint.SetOpacity(OPARCITY_127);     // 127: opacity
269     // {100, 100}: circle center coordinates, 30: circle radius
270     canvas->DrawCircle({LINE_CURVE_X100, LINE_CURVE_Y100}, LINE_CURVE_R30, paint);
271 }
272 
UIKitCanvasTestDrawCircle002()273 void UITestCanvas::UIKitCanvasTestDrawCircle002()
274 {
275     if (container_ == nullptr) {
276         return;
277     }
278     CreateTitleLabel("圆形描边");
279     UICanvas* canvas = CreateCanvas();
280 
281     Paint paint;
282     paint.SetStyle(Paint::PaintStyle::STROKE_STYLE);
283     paint.SetStrokeColor(Color::Blue());
284     paint.SetStrokeWidth(LINE_WIDTH10); // 10: line width
285     paint.SetOpacity(OPARCITY_127);     // 127: opacity
286     // {200, 100}: circle center coordinates, 30: circle radius
287     canvas->DrawCircle({LINE_CURVE_X200, LINE_CURVE_Y100}, LINE_CURVE_R30, paint);
288 }
289 
UIKitCanvasTestDrawCircle003()290 void UITestCanvas::UIKitCanvasTestDrawCircle003()
291 {
292     if (container_ == nullptr) {
293         return;
294     }
295     CreateTitleLabel("圆形填充 + 描边");
296     UICanvas* canvas = CreateCanvas();
297 
298     Paint paint;
299     paint.SetStyle(Paint::PaintStyle::STROKE_FILL_STYLE);
300     paint.SetFillColor(Color::Yellow());
301     paint.SetStrokeColor(Color::Blue());
302     paint.SetStrokeWidth(LINE_WIDTH10); // 10: line width
303     paint.SetOpacity(OPARCITY_127);     // 127: opacity
304     // {300, 100}: circle center coordinates, 30: circle radius
305     canvas->DrawCircle({LINE_CURVE_X300, LINE_CURVE_Y100}, LINE_CURVE_R30, paint);
306 }
307 
UIKitCanvasTestDrawArc001()308 void UITestCanvas::UIKitCanvasTestDrawArc001()
309 {
310     if (container_ == nullptr) {
311         return;
312     }
313     CreateTitleLabel("绘制弧线");
314     UICanvas* canvas = CreateCanvas();
315 
316     Paint paint;
317     paint.SetStyle(Paint::PaintStyle::STROKE_STYLE);
318     paint.SetStrokeColor(Color::Red());
319     paint.SetStrokeWidth(LINE_WIDTH10); // 10: line width
320     canvas->BeginPath();
321 
322     canvas->MoveTo({LINE11_X, LINE13_Y});
323     // {100, 150}: arc's center coordinates, 50: arc radius, 135: start angle, 270: end angle
324     canvas->DrawArc({ARC_X100, ARC_Y150}, ARC_R50, ARC_ANGLE135, ARC_ANGLE270, paint);
325 }
326 
UIKitCanvasTestDrawImage001()327 void UITestCanvas::UIKitCanvasTestDrawImage001()
328 {
329     if (container_ == nullptr) {
330         return;
331     }
332     CreateTitleLabel("绘制图片");
333     // {200, 50}: start point coordinates
334 #if defined(GRAPHIC_ENABLE_DRAW_IMAGE_FLAG) && GRAPHIC_ENABLE_DRAW_IMAGE_FLAG
335     UICanvas* canvas = CreateCanvas();
336 
337     Paint paint;
338     paint.SetOpacity(OPARCITY_127); // 127: opacity
339 
340     canvas->DrawImage({0, IMAGE_START60}, RED_IMAGE_PATH, paint);
341     paint.SetOpacity(OPA_OPAQUE);
342     paint.Rotate(ROTATE_20);
343     canvas->DrawImage({IMAGE_START100, IMAGE_START20}, JPEG_IMAGE_PATH, paint);
344     canvas->DrawImage({0, 0}, JPEG_IMAGE_PATH, paint, IMAGE_WIDTH100, IMAGE_HEIGHT100);
345 #endif
346 }
UIKitCanvasTestDrawImage002()347 void UITestCanvas::UIKitCanvasTestDrawImage002()
348 {
349     if (container_ == nullptr) {
350         return;
351     }
352     CreateTitleLabel("绘制图片");
353     // {200, 50}: start point coordinates
354 #if defined(GRAPHIC_ENABLE_DRAW_IMAGE_FLAG) && GRAPHIC_ENABLE_DRAW_IMAGE_FLAG
355     UICanvas* canvas = CreateCanvas();
356     const float scale = 1.5f;
357     const int16_t trx = 50;
358     Paint paint;
359     paint.Rotate(ROTATE20);
360     paint.Scale(scale, scale);
361     paint.Translate(trx, 0);
362     paint.SetOpacity(OPARCITY_127); // 127: opacity
363     canvas->DrawImage({ 200, 50 }, GREEN_IMAGE_PATH, paint);
364 #if defined(GRAPHIC_ENABLE_DRAW_TEXT_FLAG) && GRAPHIC_ENABLE_DRAW_TEXT_FLAG
365     UICanvas::FontStyle fontStyle;
366     fontStyle.align = TEXT_ALIGNMENT_CENTER;
367     fontStyle.direct = TEXT_DIRECT_LTR;
368     fontStyle.fontName = DEFAULT_VECTOR_FONT_FILENAME;
369     fontStyle.fontSize = FONT_SIZE15;
370     fontStyle.letterSpace = FONT_LETTERSPACE2;
371     paint.SetFillColor(Color::Green());
372     canvas->StrokeText("CANVAS绘制图片", {0, 0}, fontStyle, paint);
373 #endif
374     paint.Translate(trx, 0);
375     canvas->DrawImage({0, 0}, GIF_IMAGE_PATH, paint);
376     canvas->DrawImage({0, 0}, GIF_IMAGE_PATH, paint, DRAWIMAGE_WIDTH, DRAWIMAGE_HEIGHT);
377 #endif
378 }
379 
UIKitCanvasTestDrawLabel001()380 void UITestCanvas::UIKitCanvasTestDrawLabel001()
381 {
382     if (container_ == nullptr) {
383         return;
384     }
385     CreateTitleLabel("绘制文字");
386     UICanvas* canvas = CreateCanvas();
387 
388     Paint paint;
389     paint.SetFillColor(Color::Blue());
390     UICanvas::FontStyle fontStyle;
391     fontStyle.align = TEXT_ALIGNMENT_RIGHT;
392     fontStyle.direct = TEXT_DIRECT_LTR;
393     fontStyle.fontName = DEFAULT_VECTOR_FONT_FILENAME;
394     fontStyle.fontSize = FONT_SIZE30;         // 30: font size
395     fontStyle.letterSpace = FONT_LETTERSPACE; // 10 letter space
396     // {50, 50}: start point coordinates, 100: max width
397     canvas->DrawLabel({LABEL_START50, LABEL_START50}, "canvas绘制字体", LABEL_WIDTH100, fontStyle, paint);
398 }
399 
UIKitCanvasTestDrawSector001()400 void UITestCanvas::UIKitCanvasTestDrawSector001()
401 {
402     if (container_ == nullptr) {
403         return;
404     }
405     CreateTitleLabel("扇形填充");
406     UICanvas* canvas = CreateCanvas();
407 
408     Paint paint;
409     paint.SetStyle(Paint::PaintStyle::FILL_STYLE);
410     paint.SetFillColor(Color::Yellow());
411     // {350, 150}: sector's center coordinates, 100: sector radius, 0: start angle, 30: end angle
412     canvas->DrawSector({START_X350, START_Y150}, ARC_R100, 0, END_ANGLE30, paint);
413 }
414 
UIKitCanvasTestClear001()415 void UITestCanvas::UIKitCanvasTestClear001()
416 {
417     if (container_ == nullptr) {
418         return;
419     }
420     CreateTitleLabel("清空画布,无显示");
421     UICanvas* canvas = CreateCanvas();
422 
423     Paint paint;
424     // {0, 10}: Start point coordinates x, y; {50, 10}: end point coordinates x, y
425     canvas->DrawLine({0, START_Y}, {TRANSLATE_X, START_Y}, paint);
426     canvas->Clear();
427 }
428 
UIKitCanvasTestDrawPath001()429 void UITestCanvas::UIKitCanvasTestDrawPath001()
430 {
431     if (container_ == nullptr) {
432         return;
433     }
434     CreateTitleLabel("moveTo,无显示");
435     UICanvas* canvas = CreateCanvas();
436 
437     Paint paint;
438     canvas->BeginPath();
439     canvas->MoveTo({START1_X, START1_Y});
440     canvas->ClosePath();
441     canvas->DrawPath(paint);
442 }
443 
UIKitCanvasTestDrawPath002()444 void UITestCanvas::UIKitCanvasTestDrawPath002()
445 {
446     if (container_ == nullptr) {
447         return;
448     }
449     CreateTitleLabel("lineTo,无显示");
450     UICanvas* canvas = CreateCanvas();
451 
452     Paint paint;
453     canvas->BeginPath();
454     canvas->LineTo({LINE1_X, LINE1_Y});
455     canvas->DrawPath(paint);
456 }
457 
UIKitCanvasTestDrawPath003()458 void UITestCanvas::UIKitCanvasTestDrawPath003()
459 {
460     if (container_ == nullptr) {
461         return;
462     }
463     CreateTitleLabel("arc");
464     UICanvas* canvas = CreateCanvas();
465 
466     Paint paint;
467     canvas->BeginPath();
468     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
469     canvas->DrawPath(paint);
470 }
471 
UIKitCanvasTestDrawPath004()472 void UITestCanvas::UIKitCanvasTestDrawPath004()
473 {
474     if (container_ == nullptr) {
475         return;
476     }
477     CreateTitleLabel("rect");
478     UICanvas* canvas = CreateCanvas();
479 
480     Paint paint;
481     canvas->BeginPath();
482     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
483     canvas->DrawPath(paint);
484 }
485 
UIKitCanvasTestDrawPath005()486 void UITestCanvas::UIKitCanvasTestDrawPath005()
487 {
488     if (container_ == nullptr) {
489         return;
490     }
491     CreateTitleLabel("closePath,无显示");
492     UICanvas* canvas = CreateCanvas();
493 
494     Paint paint;
495     canvas->BeginPath();
496     canvas->ClosePath();
497     canvas->DrawPath(paint);
498 }
499 
UIKitCanvasTestDrawPath006()500 void UITestCanvas::UIKitCanvasTestDrawPath006()
501 {
502     if (container_ == nullptr) {
503         return;
504     }
505     CreateTitleLabel("moveTo + lineTo");
506     UICanvas* canvas = CreateCanvas();
507 
508     Paint paint;
509     canvas->BeginPath();
510     canvas->MoveTo({START1_X, START1_Y});
511     canvas->LineTo({LINE1_X, LINE1_Y});
512     canvas->DrawPath(paint);
513 }
514 
UIKitCanvasTestDrawPath007()515 void UITestCanvas::UIKitCanvasTestDrawPath007()
516 {
517     if (container_ == nullptr) {
518         return;
519     }
520     CreateTitleLabel("moveTo + arc");
521     UICanvas* canvas = CreateCanvas();
522 
523     Paint paint;
524     canvas->BeginPath();
525     canvas->MoveTo({START1_X, START1_Y});
526     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
527     canvas->DrawPath(paint);
528 }
529 
UIKitCanvasTestDrawPath008()530 void UITestCanvas::UIKitCanvasTestDrawPath008()
531 {
532     if (container_ == nullptr) {
533         return;
534     }
535     CreateTitleLabel("moveTo + rect");
536     UICanvas* canvas = CreateCanvas();
537 
538     Paint paint;
539     canvas->BeginPath();
540     canvas->MoveTo({START1_X, START1_Y});
541     canvas->AddRect({RECT_X, RECT_Y}, RECT_WIDTH, RECT_HEIGHT);
542     canvas->DrawPath(paint);
543 }
544 
UIKitCanvasTestDrawPath009()545 void UITestCanvas::UIKitCanvasTestDrawPath009()
546 {
547     if (container_ == nullptr) {
548         return;
549     }
550     CreateTitleLabel("moveTo + closePath");
551     UICanvas* canvas = CreateCanvas();
552 
553     Paint paint;
554     canvas->BeginPath();
555     canvas->MoveTo({START1_X, START1_Y});
556     canvas->LineTo({LINE1_X, LINE1_Y});
557     canvas->LineTo({LINE2_X, LINE2_Y});
558     canvas->ClosePath();
559     canvas->DrawPath(paint);
560 }
561 
UIKitCanvasTestDrawPath010()562 void UITestCanvas::UIKitCanvasTestDrawPath010()
563 {
564     if (container_ == nullptr) {
565         return;
566     }
567     CreateTitleLabel("闭合路径调用closePath");
568     UICanvas* canvas = CreateCanvas();
569 
570     Paint paint;
571     canvas->BeginPath();
572     canvas->MoveTo({START1_X, START1_Y});
573     canvas->LineTo({LINE1_X, LINE1_Y});
574     canvas->LineTo({LINE2_X, LINE2_Y});
575     canvas->LineTo({START1_X, START1_Y});
576     canvas->ClosePath();
577     canvas->DrawPath(paint);
578 }
579 
UIKitCanvasTestDrawPath011()580 void UITestCanvas::UIKitCanvasTestDrawPath011()
581 {
582     if (container_ == nullptr) {
583         return;
584     }
585     CreateTitleLabel("moveTo + lineTo + moveTo + lineTo");
586     UICanvas* canvas = CreateCanvas();
587 
588     Paint paint;
589     canvas->BeginPath();
590     canvas->MoveTo({START1_X, START1_Y});
591     canvas->LineTo({LINE1_X, LINE1_Y});
592     canvas->MoveTo({START2_X, START2_Y});
593     canvas->LineTo({LINE2_X, LINE2_Y});
594     canvas->DrawPath(paint);
595 }
596 
UIKitCanvasTestDrawPath012()597 void UITestCanvas::UIKitCanvasTestDrawPath012()
598 {
599     if (container_ == nullptr) {
600         return;
601     }
602     CreateTitleLabel("moveTo + lineTo + arc");
603     UICanvas* canvas = CreateCanvas();
604 
605     Paint paint;
606     canvas->BeginPath();
607     canvas->MoveTo({START1_X, START1_Y});
608     canvas->LineTo({LINE1_X, LINE1_Y});
609     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
610     canvas->DrawPath(paint);
611 }
612 
UIKitCanvasTestDrawPath013()613 void UITestCanvas::UIKitCanvasTestDrawPath013()
614 {
615     if (container_ == nullptr) {
616         return;
617     }
618     CreateTitleLabel("moveTo + lineTo + arc + closePath");
619     UICanvas* canvas = CreateCanvas();
620 
621     Paint paint;
622     canvas->BeginPath();
623     canvas->MoveTo({START1_X, START1_Y});
624     canvas->LineTo({LINE1_X, LINE1_Y});
625     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
626     canvas->ClosePath();
627     canvas->DrawPath(paint);
628 }
629 
UIKitCanvasTestDrawPath014()630 void UITestCanvas::UIKitCanvasTestDrawPath014()
631 {
632     if (container_ == nullptr) {
633         return;
634     }
635     CreateTitleLabel("moveTo + lineTo + rect");
636     UICanvas* canvas = CreateCanvas();
637 
638     Paint paint;
639     canvas->BeginPath();
640     canvas->MoveTo({START1_X, START1_Y});
641     canvas->LineTo({LINE1_X, LINE1_Y});
642     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
643     canvas->DrawPath(paint);
644 }
645 
UIKitCanvasTestDrawPath015()646 void UITestCanvas::UIKitCanvasTestDrawPath015()
647 {
648     if (container_ == nullptr) {
649         return;
650     }
651     CreateTitleLabel("moveTo + lineTo + rect + closePath");
652     UICanvas* canvas = CreateCanvas();
653 
654     Paint paint;
655     canvas->BeginPath();
656     canvas->MoveTo({START1_X, START1_Y});
657     canvas->LineTo({LINE1_X, LINE1_Y});
658     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
659     canvas->ClosePath();
660     canvas->DrawPath(paint);
661 }
662 
UIKitCanvasTestDrawPath016()663 void UITestCanvas::UIKitCanvasTestDrawPath016()
664 {
665     if (container_ == nullptr) {
666         return;
667     }
668     CreateTitleLabel("rect + lineTo");
669     UICanvas* canvas = CreateCanvas();
670 
671     Paint paint;
672     canvas->BeginPath();
673     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
674     canvas->LineTo({LINE1_X, LINE1_Y});
675     canvas->DrawPath(paint);
676 }
677 
UIKitCanvasTestDrawPath017()678 void UITestCanvas::UIKitCanvasTestDrawPath017()
679 {
680     if (container_ == nullptr) {
681         return;
682     }
683     CreateTitleLabel("rect + moveTo + lineTo");
684     UICanvas* canvas = CreateCanvas();
685 
686     Paint paint;
687     canvas->BeginPath();
688     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
689     canvas->MoveTo({START1_X, START1_Y});
690     canvas->LineTo({LINE1_X, LINE1_Y});
691     canvas->DrawPath(paint);
692 }
693 
UIKitCanvasTestDrawPath018()694 void UITestCanvas::UIKitCanvasTestDrawPath018()
695 {
696     if (container_ == nullptr) {
697         return;
698     }
699     CreateTitleLabel("rect + arc");
700     UICanvas* canvas = CreateCanvas();
701 
702     Paint paint;
703     canvas->BeginPath();
704     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
705     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
706     canvas->DrawPath(paint);
707 }
708 
UIKitCanvasTestDrawPath019()709 void UITestCanvas::UIKitCanvasTestDrawPath019()
710 {
711     if (container_ == nullptr) {
712         return;
713     }
714     CreateTitleLabel("arc + rect");
715     UICanvas* canvas = CreateCanvas();
716 
717     Paint paint;
718     canvas->BeginPath();
719     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
720     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
721     canvas->DrawPath(paint);
722 }
723 
UIKitCanvasTestDrawPath020()724 void UITestCanvas::UIKitCanvasTestDrawPath020()
725 {
726     if (container_ == nullptr) {
727         return;
728     }
729     CreateTitleLabel("moveTo + arc + closePath + lineTo");
730     UICanvas* canvas = CreateCanvas();
731 
732     Paint paint;
733     canvas->BeginPath();
734     canvas->MoveTo({START1_X, START1_Y});
735     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
736     canvas->ClosePath();
737     canvas->LineTo({LINE1_X, LINE1_Y});
738     canvas->DrawPath(paint);
739 }
740 
UIKitCanvasTestDrawPath021()741 void UITestCanvas::UIKitCanvasTestDrawPath021()
742 {
743     if (container_ == nullptr) {
744         return;
745     }
746     CreateTitleLabel("不调用beginPath,无显示");
747     UICanvas* canvas = CreateCanvas();
748 
749     Paint paint;
750     canvas->MoveTo({START1_X, START1_Y});
751     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
752     canvas->ClosePath();
753     canvas->LineTo({LINE1_X, LINE1_Y});
754     canvas->DrawPath(paint);
755 }
756 
UIKitCanvasTestDrawPath022()757 void UITestCanvas::UIKitCanvasTestDrawPath022()
758 {
759     if (container_ == nullptr) {
760         return;
761     }
762     CreateTitleLabel("不调用drawPath,无显示");
763     UICanvas* canvas = CreateCanvas();
764 
765     Paint paint;
766     canvas->BeginPath();
767     canvas->MoveTo({START1_X, START1_Y});
768     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
769     canvas->ClosePath();
770     canvas->LineTo({LINE1_X, LINE1_Y});
771 }
772 
UIKitCanvasTestDrawPath023()773 void UITestCanvas::UIKitCanvasTestDrawPath023()
774 {
775     if (container_ == nullptr) {
776         return;
777     }
778     CreateTitleLabel("moveTo + lineTo + closePath");
779     UICanvas* canvas = CreateCanvas();
780 
781     Paint paint;
782     canvas->BeginPath();
783     canvas->MoveTo({START1_X, START1_Y});
784     canvas->LineTo({LINE1_X, LINE1_Y});
785     canvas->ClosePath();
786     canvas->DrawPath(paint);
787 }
788 
UIKitCanvasTestDrawPath024()789 void UITestCanvas::UIKitCanvasTestDrawPath024()
790 {
791     if (container_ == nullptr) {
792         return;
793     }
794     CreateTitleLabel("moveTo + closePath,无显示");
795     UICanvas* canvas = CreateCanvas();
796 
797     Paint paint;
798     canvas->BeginPath();
799     canvas->MoveTo({START1_X, START1_Y});
800     canvas->ClosePath();
801     canvas->DrawPath(paint);
802 }
803 
UIKitCanvasTestDrawPath025()804 void UITestCanvas::UIKitCanvasTestDrawPath025()
805 {
806     if (container_ == nullptr) {
807         return;
808     }
809     CreateTitleLabel("多次drawPath");
810     UICanvas* canvas = CreateCanvas();
811 
812     Paint paint;
813     canvas->BeginPath();
814     canvas->MoveTo({START1_X, START1_Y});
815     canvas->LineTo({LINE1_X, LINE1_Y});
816     canvas->DrawPath(paint);
817     paint.SetStrokeColor(Color::Blue());
818     paint.SetStrokeWidth(1);
819     canvas->LineTo({LINE2_X, LINE2_Y});
820     canvas->DrawPath(paint);
821 }
822 
UIKitCanvasTestDrawPath026()823 void UITestCanvas::UIKitCanvasTestDrawPath026()
824 {
825     if (container_ == nullptr) {
826         return;
827     }
828     CreateTitleLabel("arc起止角度互换");
829     UICanvas* canvas = CreateCanvas();
830 
831     Paint paint;
832     canvas->BeginPath();
833     canvas->MoveTo({START1_X, START1_Y});
834     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, END_ANGLE);
835 
836     canvas->MoveTo({START2_X, START2_Y});
837     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, END_ANGLE, START_ANGLE);
838 
839     canvas->DrawPath(paint);
840 }
841 
UIKitCanvasTestDrawPath027()842 void UITestCanvas::UIKitCanvasTestDrawPath027()
843 {
844     if (container_ == nullptr) {
845         return;
846     }
847     CreateTitleLabel("arc扫描范围超过360度 ");
848     UICanvas* canvas = CreateCanvas();
849 
850     Paint paint;
851     canvas->BeginPath();
852     canvas->MoveTo({START1_X, START1_Y});
853     canvas->ArcTo({CENTER_X, CENTER_Y},
854                   RADIUS, START_ANGLE, START_ANGLE + CIRCLE_IN_DEGREE + QUARTER_IN_DEGREE);
855     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, END_ANGLE,
856                   START_ANGLE + CIRCLE_IN_DEGREE);
857 
858     canvas->DrawPath(paint);
859 }
860 
UIKitCanvasTestDrawPath028()861 void UITestCanvas::UIKitCanvasTestDrawPath028()
862 {
863     if (container_ == nullptr) {
864         return;
865     }
866     CreateTitleLabel("创建两条路径,只绘制后一条 ");
867     UICanvas* canvas = CreateCanvas();
868 
869     Paint paint;
870     canvas->BeginPath();
871     canvas->MoveTo({START1_X, START1_Y});
872     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, START_ANGLE + CIRCLE_IN_DEGREE);
873 
874     canvas->BeginPath();
875     canvas->MoveTo({START2_X, START2_Y});
876     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, END_ANGLE,
877                   START_ANGLE + CIRCLE_IN_DEGREE);
878 
879     canvas->DrawPath(paint);
880 }
881 
UIKitCanvasTestDrawPath029()882 void UITestCanvas::UIKitCanvasTestDrawPath029()
883 {
884     if (container_ == nullptr) {
885         return;
886     }
887     CreateTitleLabel("绘制两条不同样式的路径 ");
888     UICanvas* canvas = CreateCanvas();
889 
890     Paint paint;
891     canvas->BeginPath();
892     canvas->MoveTo({START1_X, START1_Y});
893     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, START_ANGLE + CIRCLE_IN_DEGREE);
894     canvas->DrawPath(paint);
895 
896     canvas->BeginPath();
897     canvas->MoveTo({START2_X, START2_Y});
898     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, END_ANGLE,
899                   START_ANGLE + CIRCLE_IN_DEGREE);
900     paint.SetStrokeColor(Color::Blue());
901     canvas->DrawPath(paint);
902 }
903 
UIKitCanvasTestDrawPath030()904 void UITestCanvas::UIKitCanvasTestDrawPath030()
905 {
906     if (container_ == nullptr) {
907         return;
908     }
909     CreateTitleLabel("同一条路径绘制100遍 ");
910     UICanvas* canvas = CreateCanvas();
911 
912     Paint paint;
913     canvas->BeginPath();
914     canvas->MoveTo({START1_X, START1_Y});
915     canvas->LineTo({LINE1_X, LINE1_Y});
916     canvas->ArcTo({CENTER_X, CENTER_Y}, RADIUS, START_ANGLE, START_ANGLE + CIRCLE_IN_DEGREE);
917     canvas->AddRect({RECT_X, RECT_Y}, RECT_HEIGHT, RECT_WIDTH);
918     for (uint8_t i = 0; i < 100; i++) { // 100: number of times for drawing loops
919         canvas->DrawPath(paint);
920     }
921 }
922 
UIKitCanvasTestDrawPath031()923 void UITestCanvas::UIKitCanvasTestDrawPath031()
924 {
925     if (container_ == nullptr) {
926         return;
927     }
928     CreateTitleLabel("绘制直线超出canvas范围");
929     UICanvas* canvas = CreateCanvas();
930 
931     Paint paint;
932     canvas->BeginPath();
933     canvas->MoveTo({START1_X, START1_Y});
934     canvas->LineTo({int16_t(LINE1_X + HORIZONTAL_RESOLUTION), LINE1_Y});
935     canvas->LineTo({LINE2_X, LINE2_Y});
936     canvas->DrawPath(paint);
937 }
938 
UIKitCanvasTestDrawPath032()939 void UITestCanvas::UIKitCanvasTestDrawPath032()
940 {
941     if (container_ == nullptr) {
942         return;
943     }
944     CreateTitleLabel("绘制直线传入临界值 ");
945     UICanvas* canvas = CreateCanvas();
946 
947     Paint paint;
948     canvas->BeginPath();
949     canvas->MoveTo({INT16_MAX, INT16_MAX});
950     canvas->LineTo({0, 0});
951 
952     canvas->MoveTo({0, 0});
953     canvas->LineTo({INT16_MAX, INT16_MAX});
954 
955     canvas->MoveTo({INT16_MIN, INT16_MIN});
956     canvas->LineTo({0, 0});
957 
958     canvas->MoveTo({0, 0});
959     canvas->LineTo({INT16_MIN, INT16_MIN});
960     canvas->DrawPath(paint);
961 }
962 
UIKitCanvasTestDrawPath033()963 void UITestCanvas::UIKitCanvasTestDrawPath033()
964 {
965     if (container_ == nullptr) {
966         return;
967     }
968 
969     CreateTitleLabel("绘制arc传入临界值 ");
970     UICanvas* canvas = CreateCanvas();
971 
972     Paint paint;
973     canvas->BeginPath();
974     canvas->ArcTo({INT16_MAX, INT16_MAX}, RADIUS, START_ANGLE, END_ANGLE);
975     canvas->DrawPath(paint);
976 
977     canvas->BeginPath();
978     canvas->ArcTo({INT16_MIN, INT16_MIN}, RADIUS, START_ANGLE, END_ANGLE);
979     paint.SetStrokeColor(Color::Red());
980     canvas->DrawPath(paint);
981 
982     canvas->BeginPath();
983     canvas->ArcTo({CENTER_X, CENTER_Y}, UINT16_MAX, START_ANGLE, END_ANGLE);
984     paint.SetStrokeColor(Color::Yellow());
985     canvas->DrawPath(paint);
986 
987     canvas->BeginPath();
988     canvas->ArcTo({int16_t(CENTER_X + CENTER_X), CENTER_Y}, RADIUS, INT16_MIN, INT16_MAX);
989     paint.SetStrokeColor(Color::Blue());
990     canvas->DrawPath(paint);
991 }
992 
UIKitCanvasTestDrawPath034()993 void UITestCanvas::UIKitCanvasTestDrawPath034()
994 {
995     if (container_ == nullptr) {
996         return;
997     }
998 
999     CreateTitleLabel("绘制rect传入临界值 ");
1000     UICanvas* canvas = CreateCanvas();
1001 
1002     Paint paint;
1003     canvas->BeginPath();
1004     canvas->AddRect({INT16_MAX, INT16_MAX}, RECT_HEIGHT, RECT_WIDTH);
1005     canvas->DrawPath(paint);
1006 
1007     canvas->BeginPath();
1008     canvas->AddRect({RECT_X, RECT_Y}, INT16_MAX, INT16_MAX);
1009     paint.SetStrokeColor(Color::Red());
1010     canvas->DrawPath(paint);
1011 }
1012 
RM009LineCapDrawPath()1013 void UITestCanvas::RM009LineCapDrawPath()
1014 {
1015     if (container_ == nullptr) {
1016         return;
1017     }
1018 
1019     CreateTitleLabel("RM009LineCap_平直的边缘_正方形_圆形线帽");
1020     UICanvas* canvas = CreateCanvas();
1021     Paint paint;
1022     paint.SetStrokeWidth(STROKE_WIDTH12);
1023     paint.SetStrokeColor(Color::Green());
1024 #if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG
1025     paint.SetLineCap(LineCap::BUTT_CAP);
1026 #endif
1027     canvas->BeginPath();
1028     canvas->MoveTo({LINE11_X, LINE13_Y}); /* 竖线 */
1029     canvas->LineTo({LINE11_X, LINE11_Y});
1030     canvas->DrawPath(paint);
1031     canvas->BeginPath();
1032     canvas->MoveTo({LINE11_X, LINE1_Y}); /* 横线 */
1033     canvas->LineTo({LINE17_X, LINE1_Y});
1034     canvas->DrawPath(paint);
1035     canvas->BeginPath();
1036     canvas->MoveTo({LINE26_Y, LINE25_Y}); /* 斜线 */
1037     canvas->LineTo({LINE18_X, LINE1_Y});
1038     canvas->DrawPath(paint);
1039     paint.SetStrokeColor(Color::Red());
1040 #if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG
1041     paint.SetLineCap(LineCap::SQUARE_CAP);
1042 #endif
1043     canvas->BeginPath();
1044     canvas->MoveTo({LINE1_X, LINE13_Y}); /* 竖线 */
1045     canvas->LineTo({LINE19_X, LINE11_Y});
1046     canvas->DrawPath(paint);
1047     canvas->BeginPath();
1048     canvas->MoveTo({LINE11_X, LINE26_X}); /* 横线 */
1049     canvas->LineTo({LINE17_X, LINE2_Y});
1050     canvas->DrawPath(paint);
1051     canvas->BeginPath();
1052     canvas->MoveTo({LINE28_X, LINE25_Y}); /* 斜线 */
1053     canvas->LineTo({LINE21_X, LINE1_Y});
1054     canvas->DrawPath(paint);
1055     paint.SetStrokeColor(Color::Blue());
1056 #if defined(GRAPHIC_ENABLE_LINECAP_FLAG) && GRAPHIC_ENABLE_LINECAP_FLAG
1057     paint.SetLineCap(LineCap::ROUND_CAP);
1058 #endif
1059     canvas->BeginPath();
1060     canvas->MoveTo({LINE22_X, LINE13_Y}); /* 竖线 */
1061     canvas->LineTo({LINE22_X, LINE11_Y});
1062     canvas->DrawPath(paint);
1063     canvas->BeginPath();
1064     canvas->MoveTo({LINE11_X, LINE23_Y}); /* 横线 */
1065     canvas->LineTo({LINE17_X, LINE23_Y});
1066     canvas->DrawPath(paint);
1067     canvas->BeginPath();
1068     canvas->MoveTo({LINE18_X, LINE25_Y}); /* 斜线 */
1069     canvas->LineTo({LINE24_X, LINE1_Y});
1070     canvas->DrawPath(paint);
1071 }
RM009LineJoinDrawPath()1072 void UITestCanvas::RM009LineJoinDrawPath()
1073 {
1074     if (container_ == nullptr) {
1075         return;
1076     }
1077     CreateTitleLabel("RM009LineJoin_圆角_斜角_尖角_限制尖角长度");
1078     UICanvas* canvas = CreateCanvas();
1079 
1080     Paint paint;
1081     paint.SetStrokeWidth(STROKE_WIDTH10);
1082     paint.SetStrokeColor(Color::Green());
1083 #if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
1084     paint.SetLineJoin(LineJoin::ROUND_JOIN);
1085 #endif
1086     canvas->BeginPath();
1087     canvas->MoveTo({LINE11_X, LINE13_Y});
1088     canvas->LineTo({LINE11_X, LINE11_Y});
1089     canvas->LineTo({LINE25_X, LINE25_X});
1090     canvas->LineTo({LINE22_X, LINE11_Y});
1091     canvas->DrawPath(paint);
1092 #if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
1093     paint.SetLineJoin(LineJoin::BEVEL_JOIN);
1094 #endif
1095     canvas->BeginPath();
1096     canvas->MoveTo({LINE1_Y, LINE13_Y});
1097     canvas->LineTo({LINE2_X, LINE11_Y});
1098     canvas->LineTo({LINE26_X, LINE25_Y});
1099     canvas->LineTo({LINE27_X, LINE11_Y});
1100     canvas->DrawPath(paint);
1101 #if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
1102     paint.SetLineJoin(LineJoin::MITER_JOIN);
1103 #endif
1104     canvas->BeginPath();
1105     canvas->MoveTo({LINE14_X, LINE13_Y});
1106     canvas->LineTo({LINE14_X, LINE11_Y});
1107     canvas->LineTo({LINE28_X, LINE25_Y});
1108     canvas->LineTo({LINE29_X, LINE11_Y});
1109     canvas->DrawPath(paint);
1110 #if defined(GRAPHIC_ENABLE_LINEJOIN_FLAG) && GRAPHIC_ENABLE_LINEJOIN_FLAG
1111     // 当斜接角度超过MiterLimit时应该转化为平角
1112     paint.SetLineJoin(LineJoin::MITER_JOIN);
1113     paint.SetMiterLimit(MITERLIMIT4);
1114 #endif
1115 
1116     canvas->BeginPath();
1117     canvas->MoveTo({LINE21_X, LINE13_Y});
1118     canvas->LineTo({LINE21_X, LINE11_Y});
1119     canvas->LineTo({LINE30_X, LINE25_Y});
1120     canvas->LineTo({LINE31_X, LINE25_Y});
1121     canvas->DrawPath(paint);
1122 }
RM009LineDashDrawPath()1123 void UITestCanvas::RM009LineDashDrawPath()
1124 {
1125 #if defined(GRAPHIC_ENABLE_DASH_GENERATE_FLAG) && GRAPHIC_ENABLE_DASH_GENERATE_FLAG
1126     if (container_ == nullptr) {
1127         return;
1128     }
1129     CreateTitleLabel("RM009LineDash_虚实线(10,5,5,2)_更改虚实线起点的偏移量(5)");
1130     UICanvas* canvas = CreateCanvas();
1131     Paint paint;
1132     paint.SetStrokeWidth(DASH_LINE_WIDTH2);
1133     paint.SetStrokeColor(Color::Green());
1134     float ds2[] = {DASH10, DASH5, DASH5, DASH2};
1135     paint.SetLineDash(ds2, DASH_COUNT);
1136     canvas->BeginPath();
1137     canvas->MoveTo({MOVETO20, MOVETO20});
1138     canvas->LineTo({LINET0200, MOVETO20});
1139     canvas->LineTo({LINET0200, LINET080});
1140     canvas->LineTo({LINET020, LINET080});
1141     canvas->ClosePath();
1142     canvas->DrawPath(paint);
1143 
1144     paint.SetLineDashOffset(LINE_DASH_OFFSET5);
1145     canvas->BeginPath();
1146     canvas->MoveTo({MOVETO20, LINET0120});
1147     canvas->LineTo({LINET0200, LINET0120});
1148     canvas->LineTo({LINET0200, LINET0180});
1149     canvas->LineTo({LINET020, LINET0180});
1150     canvas->ClosePath();
1151     canvas->DrawPath(paint);
1152 #endif
1153 }
1154 
1155 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
RM009StrokeAndClearRectDrawPath()1156 void UITestCanvas::RM009StrokeAndClearRectDrawPath()
1157 {
1158     if (container_ == nullptr) {
1159         return;
1160     }
1161     CreateTitleLabel("RM009_StrokeRect_ClearRect");
1162     UICanvas* canvas = CreateCanvas();
1163     Paint paint;
1164     paint.SetStrokeWidth(STROKEWIDTH2);
1165     paint.SetStrokeColor(Color::Orange());
1166     canvas->StrokeRect({START1_X, START1_Y}, RECT40, RECT50, paint);
1167 
1168     paint.SetFillColor(Color::Red());
1169     canvas->BeginPath();
1170     canvas->MoveTo({MOVETO30, MOVETO60});
1171     canvas->LineTo({LINET0200, MOVETO60});
1172     canvas->LineTo({LINET0200, LINET0200});
1173     canvas->LineTo({MOVETO30, LINET0200});
1174     canvas->ClosePath();
1175     canvas->FillPath(paint);
1176 
1177     canvas->ClearRect({RECT50, RECT80}, RECT100, RECT70);
1178 }
1179 
RM008UIKitCanvasTest001()1180 void UITestCanvas::RM008UIKitCanvasTest001()
1181 {
1182     if (container_ == nullptr) {
1183         return;
1184     }
1185     CreateTitleLabel("RM008_FillStyle_Solid_单色绘制多边形和填充多边形");
1186     UICanvas* canvas = CreateCanvas();
1187     Paint paint;
1188 
1189     paint.SetStyle(Paint::STROKE_FILL_STYLE);
1190     paint.SetStrokeWidth(STROKEWIDTH2);
1191     paint.SetStrokeColor(Color::Orange());
1192     paint.SetFillColor(Color::Blue());
1193     canvas->BeginPath();
1194 
1195     canvas->MoveTo({LINE11_X, LINE13_Y});
1196     canvas->LineTo({LINE22_X, LINE11_Y});
1197     canvas->LineTo({LINE26_X, LINE13_Y});
1198     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1199     canvas->LineTo({LINE26_X, LINE26_Y});
1200     canvas->LineTo({LINE4_X, LINE2_Y});
1201     canvas->LineTo({LINE11_X, LINE27_Y});
1202     canvas->LineTo({LINE3_X, LINE11_Y});
1203     canvas->ClosePath();
1204     canvas->FillPath(paint);
1205     canvas->DrawPath(paint);
1206 }
1207 
RM008UIKitCanvasTest002()1208 void UITestCanvas::RM008UIKitCanvasTest002()
1209 {
1210     if (container_ == nullptr) {
1211         return;
1212     }
1213     CreateTitleLabel("RM008_FillStyle_RM_013_Gradient_渐变填充多边形");
1214     UICanvas* canvas = CreateCanvas();
1215     Paint paint;
1216     paint.SetStyle(Paint::GRADIENT);
1217     // 线性渐变
1218 #if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG
1219     paint.createLinearGradient(LINEARGRADIENT50, LINEARGRADIENT50, LINEARGRADIENT150, LINEARGRADIENT150);
1220     paint.addColorStop(0, Color::Yellow());
1221     paint.addColorStop(COLOR_STOP3, Color::White());
1222     paint.addColorStop(COLOR_STOP6, Color::Green());
1223     paint.addColorStop(1, Color::Blue());
1224 #endif
1225     canvas->BeginPath();
1226     canvas->MoveTo({LINE11_X, LINE13_Y});
1227     canvas->LineTo({LINE22_X, LINE11_Y});
1228     canvas->LineTo({LINE26_X, LINE13_Y});
1229     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1230     canvas->LineTo({LINE26_X, LINE26_Y});
1231     canvas->LineTo({LINE4_X, LINE2_Y});
1232     canvas->LineTo({LINE11_X, LINE27_Y});
1233     canvas->LineTo({LINE3_X, LINE11_Y});
1234     canvas->ClosePath();
1235     canvas->FillPath(paint);
1236     // 放射渐变
1237 #if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG
1238     paint.createRadialGradient(RADIAL_GRADIENT300, RADIAL_GRADIENT140, RADIAL_GRADIENT5,
1239                                RADIAL_GRADIENT270, RADIAL_GRADIENT100, RADIAL_GRADIENT80);
1240 #endif
1241     canvas->BeginPath();
1242 
1243     canvas->MoveTo({LINE9_X, LINE13_Y});
1244     canvas->LineTo({LINE32_X, LINE11_Y});
1245     canvas->LineTo({LINE31_X, LINE13_Y});
1246     canvas->ArcTo({LINE31_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1247     canvas->LineTo({LINE31_X, LINE26_Y});
1248     canvas->LineTo({LINE21_X, LINE2_Y});
1249     canvas->LineTo({LINE9_X, LINE27_Y});
1250     canvas->LineTo({LINE33_X, LINE11_Y});
1251     canvas->ClosePath();
1252     canvas->FillPath(paint);
1253 }
1254 #endif
1255 
RM008UIKitCanvasTest003()1256 void UITestCanvas::RM008UIKitCanvasTest003()
1257 {
1258     if (container_ == nullptr) {
1259         return;
1260     }
1261     CreateTitleLabel("RM008_StrokeStyle_RM_013_Gradient_渐变绘制多边形路径");
1262     UICanvas* canvas = CreateCanvas();
1263     Paint paint;
1264     paint.SetStyle(Paint::GRADIENT);
1265     paint.SetStrokeWidth(STROKE_WIDTH8);
1266     // 线性渐变
1267 #if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG
1268     paint.createLinearGradient(LINEARGRADIENT50, LINEARGRADIENT50, LINEARGRADIENT150, LINEARGRADIENT150);
1269     paint.addColorStop(0, Color::Yellow());
1270     paint.addColorStop(COLOR_STOP3, Color::White());
1271     paint.addColorStop(COLOR_STOP6, Color::Green());
1272     paint.addColorStop(1, Color::Blue());
1273 #endif
1274     canvas->BeginPath();
1275     canvas->MoveTo({LINE11_X, LINE13_Y});
1276     canvas->LineTo({LINE22_X, LINE11_Y});
1277     canvas->LineTo({LINE26_X, LINE13_Y});
1278     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1279     canvas->LineTo({LINE26_X, LINE26_Y});
1280     canvas->LineTo({LINE4_X, LINE2_Y});
1281     canvas->LineTo({LINE11_X, LINE27_Y});
1282     canvas->LineTo({LINE3_X, LINE11_Y});
1283     canvas->ClosePath();
1284     canvas->DrawPath(paint);
1285     // 放射渐变
1286 #if defined(GRAPHIC_ENABLE_GRADIENT_FILL_FLAG) && GRAPHIC_ENABLE_GRADIENT_FILL_FLAG
1287     paint.createRadialGradient(LINEARGRADIENT300, LINEARGRADIENT140, LINEARGRADIENT5,
1288                                LINEARGRADIENT270, LINEARGRADIENT100, LINEARGRADIENT80);
1289 #endif
1290     canvas->BeginPath();
1291     canvas->MoveTo({LINE9_X, LINE13_Y});
1292     canvas->LineTo({LINE32_X, LINE11_Y});
1293     canvas->LineTo({LINE31_X, LINE13_Y});
1294     canvas->ArcTo({LINE31_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1295     canvas->LineTo({LINE31_X, LINE26_Y});
1296     canvas->LineTo({LINE21_X, LINE2_Y});
1297     canvas->LineTo({LINE9_X, LINE27_Y});
1298     canvas->LineTo({LINE33_X, LINE11_Y});
1299     canvas->ClosePath();
1300     canvas->DrawPath(paint);
1301 }
1302 
1303 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
RM008UIKitCanvasTest004()1304 void UITestCanvas::RM008UIKitCanvasTest004()
1305 {
1306     if (container_ == nullptr) {
1307         return;
1308     }
1309     CreateTitleLabel("RM008_Pattern_模式REPEAT(图像)绘制多边形路径和填充");
1310     UICanvas* canvas = CreateCanvas();
1311     Paint paint;
1312     paint.SetStyle(Paint::PATTERN);
1313     paint.SetStrokeWidth(STROKEWIDTH8);
1314 #if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG
1315     paint.CreatePattern(RED_IMAGE_PATH, REPEAT);
1316 #endif
1317     canvas->BeginPath();
1318     canvas->MoveTo({LINE11_X, LINE13_Y});
1319     canvas->LineTo({LINE22_X, LINE11_Y});
1320     canvas->LineTo({LINE26_X, LINE13_Y});
1321     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1322     canvas->LineTo({LINE26_X, LINE26_Y});
1323     canvas->LineTo({LINE4_X, LINE2_Y});
1324     canvas->LineTo({LINE11_X, LINE27_Y});
1325     canvas->LineTo({LINE3_X, LINE11_Y});
1326     canvas->ClosePath();
1327     canvas->DrawPath(paint);
1328 
1329     canvas->BeginPath();
1330     canvas->MoveTo({LINE9_X, LINE13_Y});
1331     canvas->LineTo({LINE32_X, LINE11_Y});
1332     canvas->LineTo({LINE31_X, LINE13_Y});
1333     canvas->ArcTo({LINE31_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1334     canvas->LineTo({LINE31_X, LINE26_Y});
1335     canvas->LineTo({LINE21_X, LINE2_Y});
1336     canvas->LineTo({LINE9_X, LINE27_Y});
1337     canvas->LineTo({LINE33_X, LINE11_Y});
1338     canvas->ClosePath();
1339     canvas->FillPath(paint);
1340 }
RM008UIKitCanvasTest005()1341 void UITestCanvas::RM008UIKitCanvasTest005()
1342 {
1343     if (container_ == nullptr) {
1344         return;
1345     }
1346     CreateTitleLabel("RM008_Pattern_模式REPEAT_X(图像)绘制多边形路径和填充");
1347     UICanvas* canvas = CreateCanvas();
1348     Paint paint;
1349     paint.SetStyle(Paint::PATTERN);
1350     paint.SetStrokeWidth(STROKEWIDTH8);
1351 #if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG
1352     paint.CreatePattern(RED_IMAGE_PATH, REPEAT_X);
1353 #endif
1354     canvas->BeginPath();
1355 
1356     canvas->MoveTo({LINE11_X, LINE13_Y});
1357     canvas->LineTo({LINE22_X, LINE11_Y});
1358     canvas->LineTo({LINE26_X, LINE13_Y});
1359     canvas->ArcTo({LINE26_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1360     canvas->LineTo({LINE26_X, LINE26_Y});
1361     canvas->LineTo({LINE4_X, LINE2_Y});
1362     canvas->LineTo({LINE11_X, LINE27_Y});
1363     canvas->LineTo({LINE3_X, LINE11_Y});
1364     canvas->ClosePath();
1365     canvas->DrawPath(paint);
1366 
1367     canvas->BeginPath();
1368     canvas->MoveTo({LINE9_X, LINE13_Y});
1369     canvas->LineTo({LINE32_X, LINE11_Y});
1370     canvas->LineTo({LINE31_X, LINE13_Y});
1371     canvas->ArcTo({LINE31_X, LINE1_Y}, ARC_RADIUS, START1_ANGLE, END1_ANGLE);
1372     canvas->LineTo({LINE31_X, LINE26_Y});
1373     canvas->LineTo({LINE21_X, LINE2_Y});
1374     canvas->LineTo({LINE9_X, LINE27_Y});
1375     canvas->LineTo({LINE33_X, LINE11_Y});
1376     canvas->ClosePath();
1377     canvas->FillPath(paint);
1378 }
RM008UIKitCanvasTest006()1379 void UITestCanvas::RM008UIKitCanvasTest006()
1380 {
1381     if (container_ == nullptr) {
1382         return;
1383     }
1384     CreateTitleLabel("RM008_Pattern_模式REPEAT_Y(图像)绘制多边形路径和填充");
1385     UICanvas* canvas = CreateCanvas();
1386     Paint paint;
1387     paint.SetStyle(Paint::PATTERN);
1388     paint.SetStrokeWidth(STROKEWIDTH8);
1389 #if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG
1390     paint.CreatePattern(RED_IMAGE_PATH, REPEAT_Y);
1391 #endif
1392     canvas->BeginPath();
1393     canvas->MoveTo({LINE11_X, LINE13_Y});
1394     canvas->LineTo({LINE11_X, LINE10_Y});
1395     canvas->LineTo({LINE28_X, LINE10_Y});
1396     canvas->LineTo({LINE28_X, LINE13_Y});
1397     canvas->ClosePath();
1398     canvas->DrawPath(paint);
1399 
1400     canvas->BeginPath();
1401     canvas->MoveTo({LINE11_X, LINE11_Y});
1402     canvas->LineTo({LINE11_X, LINE26_Y});
1403     canvas->LineTo({LINE28_X, LINE26_Y});
1404     canvas->LineTo({LINE28_X, LINE11_Y});
1405     canvas->ClosePath();
1406     canvas->FillPath(paint);
1407 }
RM008UIKitCanvasTest007()1408 void UITestCanvas::RM008UIKitCanvasTest007()
1409 {
1410     if (container_ == nullptr) {
1411         return;
1412     }
1413     CreateTitleLabel("RM008_Pattern_模式NO_REPEAT(图像)绘制多边形路径和填充");
1414     UICanvas* canvas = CreateCanvas();
1415     Paint paint;
1416     paint.SetStyle(Paint::PATTERN);
1417     paint.SetStrokeWidth(STROKEWIDTH8);
1418 #if defined(GRAPHIC_ENABLE_PATTERN_FILL_FLAG) && GRAPHIC_ENABLE_PATTERN_FILL_FLAG
1419     paint.CreatePattern(RED_IMAGE_PATH, NO_REPEAT);
1420 #endif
1421     canvas->BeginPath();
1422     canvas->MoveTo({LINE11_X, LINE13_Y});
1423     canvas->LineTo({LINE11_X, LINE10_Y});
1424     canvas->LineTo({LINE28_X, LINE10_Y});
1425     canvas->LineTo({LINE28_X, LINE13_Y});
1426     canvas->ClosePath();
1427     canvas->DrawPath(paint);
1428 
1429     canvas->BeginPath();
1430     canvas->MoveTo({LINE11_X, LINE11_Y});
1431     canvas->LineTo({LINE11_X, LINE26_Y});
1432     canvas->LineTo({LINE28_X, LINE26_Y});
1433     canvas->LineTo({LINE28_X, LINE11_Y});
1434     canvas->ClosePath();
1435     canvas->FillPath(paint);
1436 }
1437 
RM008UIKitCanvasShadowTest008()1438 void UITestCanvas::RM008UIKitCanvasShadowTest008()
1439 {
1440 #if defined(GRAPHIC_ENABLE_SHADOW_EFFECT_FLAG) && GRAPHIC_ENABLE_SHADOW_EFFECT_FLAG
1441     if (container_ == nullptr) {
1442         return;
1443     }
1444     CreateTitleLabel("RM008_阴影不偏移_偏移_改变模糊级别_改变模糊颜色");
1445     UICanvas* canvas = CreateCanvas();
1446     Paint paint;
1447     paint.SetFillStyle(Color::Orange());
1448     paint.SetStrokeWidth(STROKEWIDTH8);
1449     paint.SetShadowBlur(LINEARGRADIENT5);
1450     paint.SetShadowColor(Color::Black());
1451     canvas->BeginPath();
1452     canvas->MoveTo({LINE11_X, LINE13_Y});
1453     canvas->LineTo({LINE11_X, LINE10_Y});
1454     canvas->LineTo({LINE2_X, LINE10_Y});
1455     canvas->LineTo({LINE2_X, LINE13_Y});
1456     canvas->ClosePath();
1457     canvas->FillPath(paint);
1458     paint.SetShadowOffsetX(OFFSETX20);
1459     paint.SetShadowOffsetY(OFFSETX10);
1460     canvas->BeginPath();
1461     canvas->MoveTo({LINE26_X, LINE13_Y});
1462     canvas->LineTo({LINE26_X, LINE10_Y});
1463     canvas->LineTo({LINE28_X, LINE10_Y});
1464     canvas->LineTo({LINE28_X, LINE13_Y});
1465     canvas->ClosePath();
1466     canvas->FillPath(paint);
1467     paint.SetStrokeStyle(Color::Orange());
1468     paint.SetShadowOffsetX(0);
1469     paint.SetShadowOffsetY(0);
1470     canvas->BeginPath();
1471     canvas->MoveTo({LINE11_X, LINE11_Y});
1472     canvas->LineTo({LINE11_X, LINE2_Y});
1473     canvas->LineTo({LINE2_X, LINE2_Y});
1474     canvas->LineTo({LINE2_X, LINE11_Y});
1475     canvas->ClosePath();
1476     canvas->DrawPath(paint);
1477     paint.SetShadowOffsetX(OFFSETX20);
1478     paint.SetShadowOffsetY(OFFSETX10);
1479     canvas->BeginPath();
1480     canvas->MoveTo({LINE26_X, LINE11_Y});
1481     canvas->LineTo({LINE26_X, LINE2_Y});
1482     canvas->LineTo({LINE28_X, LINE2_Y});
1483     canvas->LineTo({LINE28_X, LINE11_Y});
1484     canvas->ClosePath();
1485     canvas->DrawPath(paint);
1486     paint.SetFillStyle(Color::Orange());
1487     paint.SetShadowBlur(SHADOWBLUR15);
1488     paint.SetShadowOffsetX(OFFSETX20);
1489     paint.SetShadowOffsetY(OFFSETX10);
1490     canvas->BeginPath();
1491     canvas->MoveTo({LINE34_X, LINE13_Y});
1492     canvas->LineTo({LINE34_X, LINE10_Y});
1493     canvas->LineTo({LINE31_X, LINE10_Y});
1494     canvas->LineTo({LINE31_X, LINE13_Y});
1495     canvas->ClosePath();
1496     canvas->FillPath(paint);
1497     paint.SetStrokeStyle(Color::Orange());
1498     paint.SetShadowBlur(SHADOWBLUR5);
1499     paint.SetShadowColor(Color::Blue());
1500     paint.SetShadowOffsetX(OFFSETX20);
1501     paint.SetShadowOffsetY(OFFSETX10);
1502     canvas->BeginPath();
1503     canvas->MoveTo({LINE34_X, LINE11_Y});
1504     canvas->LineTo({LINE34_X, LINE26_X});
1505     canvas->LineTo({LINE31_X, LINE26_X});
1506     canvas->LineTo({LINE31_X, LINE11_Y});
1507     canvas->ClosePath();
1508     canvas->DrawPath(paint);
1509 #endif
1510 }
1511 
1512 #endif
RM011StrokeText001()1513 void UITestCanvas::RM011StrokeText001()
1514 {
1515     CreateTitleLabel("RM011_StrokeText_多国文字加旋转放大");
1516 
1517 #if defined(GRAPHIC_ENABLE_DRAW_TEXT_FLAG) && GRAPHIC_ENABLE_DRAW_TEXT_FLAG
1518     UICanvas* canvas = CreateCanvas();
1519     UICanvas::FontStyle fontStyle;
1520     fontStyle.align = TEXT_ALIGNMENT_CENTER;
1521     fontStyle.direct = TEXT_DIRECT_LTR;
1522     fontStyle.fontName = DEFAULT_VECTOR_FONT_FILENAME;
1523     fontStyle.fontSize = FONT_SIZE15;
1524     fontStyle.letterSpace = FONT_LETTERSPACE2;
1525     Paint paint;
1526     paint.SetFillColor(Color::Blue());
1527     canvas->StrokeText("葡萄牙语:Hongmeng, teste", {0, HEIGHT_Y20}, fontStyle, paint);
1528     canvas->StrokeText("西班牙语:Hong Meng, test", {0, HEIGHT_Y40}, fontStyle, paint);
1529     canvas->StrokeText("法语:HongMeng, test", {0, HEIGHT_Y60}, fontStyle, paint);
1530     canvas->StrokeText("瓜拉尼语:mitapoañda, pens", {0, HEIGHT_Y80}, fontStyle, paint);
1531     canvas->StrokeText("荷兰语:Hongmeng, kom op.", {0, HEIGHT_Y100}, fontStyle, paint);
1532     canvas->StrokeText("樊瓦什语:Кайалла", {0, HEIGHT_Y120}, fontStyle, paint);
1533     canvas->StrokeText("白俄罗斯语:Прывітанне", {0, HEIGHT_Y140}, fontStyle, paint);
1534     canvas->StrokeText("希腊语:Γεια.", {0, HEIGHT_Y160}, fontStyle, paint);
1535     canvas->StrokeText("瑞典语:Hej, Hongmeng.", {0, HEIGHT_Y180}, fontStyle, paint);
1536     canvas->StrokeText("俄语: Привет, hongmon ", {0, HEIGHT_Y200}, fontStyle, paint);
1537     paint.Scale(SCALE1_X, SCALE1_Y);
1538     paint.Rotate(ROTATE45);
1539     canvas->StrokeText("中国 你好,鸿蒙。。", {HEIGHT_Y20, 0}, fontStyle, paint);
1540 #endif
1541 }
1542 
RM011CanvasScale001()1543 void UITestCanvas::RM011CanvasScale001()
1544 {
1545     if (container_ == nullptr) {
1546         return;
1547     }
1548     CreateTitleLabel("RM011放大和缩小Scale");
1549     UICanvas* canvas = CreateCanvas();
1550     Paint paint;
1551     paint.SetStrokeStyle(Color::Red());
1552     paint.SetStrokeWidth(STROKEWIDTH3);
1553     canvas->BeginPath();
1554     canvas->MoveTo({MOVETO5, MOVETO5});
1555     canvas->LineTo({LINET050, MOVETO5});
1556     canvas->LineTo({LINET050, LINET035});
1557     canvas->LineTo({MOVETO5, LINET035});
1558     canvas->ClosePath();
1559     canvas->DrawPath(paint);
1560     paint.SetStrokeStyle(Color::Green());
1561     paint.SetGlobalAlpha(GLOBALALPHA5);
1562     paint.Scale(SCALE2, SCALE4);
1563     canvas->BeginPath();
1564     canvas->MoveTo({MOVETO5, MOVETO5});
1565     canvas->LineTo({LINET050, MOVETO5});
1566     canvas->LineTo({LINET050, LINET035});
1567     canvas->LineTo({LINE3_X, LINE3_Y});
1568     canvas->ClosePath();
1569     canvas->DrawPath(paint);
1570     paint.SetStrokeStyle(Color::Blue());
1571     paint.SetGlobalAlpha(GLOBALALPHA5);
1572     paint.Scale(SCALE_X, SCALE_Y);
1573     canvas->BeginPath();
1574     canvas->MoveTo({LINE3_X, LINE4_Y});
1575     canvas->LineTo({LINE4_X, LINE4_Y});
1576     canvas->LineTo({LINE4_X, LINE3_Y});
1577     canvas->LineTo({LINE3_X, LINE3_Y});
1578     canvas->ClosePath();
1579     canvas->DrawPath(paint);
1580 }
1581 
RM011CanvasRotate001()1582 void UITestCanvas::RM011CanvasRotate001()
1583 {
1584     if (container_ == nullptr) {
1585         return;
1586     }
1587     CreateTitleLabel("RM011原(红)_旋转(绿)_平移(蓝)_单位矩阵(黄)_重置矩阵后再设置矩阵(橘色)");
1588     UICanvas* canvas = CreateCanvas();
1589     Paint paint;
1590     paint.SetStrokeStyle(Color::Red());
1591     paint.SetStrokeWidth(STROKE3_WIDTH);
1592     canvas->BeginPath();
1593     canvas->MoveTo({LINE8_X, LINE8_X});
1594     canvas->LineTo({LINE6_X, LINE6_Y});
1595     canvas->LineTo({LINE6_X, LINE7_Y});
1596     canvas->LineTo({LINE8_X, LINE8_Y});
1597     canvas->ClosePath();
1598     canvas->DrawPath(paint);
1599     paint.SetStrokeStyle(Color::Green());
1600     paint.Rotate(ROTATE_ANGLE);
1601     canvas->BeginPath();
1602     canvas->MoveTo({LINE8_X, LINE6_Y});
1603     canvas->LineTo({LINE6_X, LINE6_Y});
1604     canvas->LineTo({LINE6_X, LINE7_Y});
1605     canvas->LineTo({LINE8_X, LINE7_Y});
1606     canvas->ClosePath();
1607     canvas->DrawPath(paint);
1608     paint.Translate(TRANSLATE_X, TRANSLATE_Y);
1609     paint.SetStrokeStyle(Color::Blue());
1610     canvas->BeginPath();
1611     canvas->MoveTo({LINE8_X, LINE6_Y});
1612     canvas->LineTo({LINE6_X, LINE6_Y});
1613     canvas->LineTo({LINE6_X, LINE7_Y});
1614     canvas->LineTo({LINE8_X, LINE8_Y});
1615     canvas->ClosePath();
1616     canvas->DrawPath(paint);
1617     paint.Transform(SCALE1_X, SHEAR_X, SHEAR_Y, SCALE2_Y, TRANSLATE1_X, TRANSLATE1_Y);
1618     paint.SetStrokeStyle(Color::Yellow());
1619     canvas->BeginPath();
1620     canvas->MoveTo({LINE8_X, LINE6_Y});
1621     canvas->LineTo({LINE6_X, LINE6_Y});
1622     canvas->LineTo({LINE6_X, LINE7_Y});
1623     canvas->LineTo({LINE8_X, LINE8_Y});
1624     canvas->ClosePath();
1625     canvas->DrawPath(paint);
1626     paint.SetTransform(SCALE1_X, SHEAR1_X, SHEAR1_Y, SCALE2_Y, TRANSLATE1_X, TRANSLATE1_Y);
1627     paint.SetStrokeStyle(Color::Orange());
1628     canvas->BeginPath();
1629     canvas->MoveTo({LINE8_X, LINE6_Y});
1630     canvas->LineTo({LINE6_X, LINE6_Y});
1631     canvas->LineTo({LINE6_X, LINE7_Y});
1632     canvas->LineTo({LINE8_X, LINE8_Y});
1633     canvas->ClosePath();
1634     canvas->DrawPath(paint);
1635 }
1636 
1637 #if defined(ENABLE_CANVAS_EXTEND) && ENABLE_CANVAS_EXTEND
RM012globalAlpha001()1638 void UITestCanvas::RM012globalAlpha001()
1639 {
1640     if (container_ == nullptr) {
1641         return;
1642     }
1643     CreateTitleLabel("RM012_设置图像透明度_红不透明_绿蓝_一半透明度");
1644     UICanvas* canvas = CreateCanvas();
1645     Paint paint;
1646     paint.SetFillColor(Color::Red());
1647     canvas->BeginPath();
1648     canvas->MoveTo({LINE11_X, LINE13_Y});
1649     canvas->LineTo({LINE11_X, LINE11_Y});
1650     canvas->LineTo({LINE12_X, LINE11_Y});
1651     canvas->LineTo({LINE12_X, LINE13_Y});
1652     canvas->ClosePath();
1653     canvas->FillPath(paint);
1654 
1655     paint.SetGlobalAlpha(GLOBALALPHA2);
1656     paint.SetFillColor(Color::Green());
1657     canvas->BeginPath();
1658     canvas->MoveTo({LINE1_Y, LINE10_Y});
1659     canvas->LineTo({LINE2_X, LINE2_Y});
1660     canvas->LineTo({LINE9_X, LINE2_Y});
1661     canvas->LineTo({LINE9_X, LINE10_Y});
1662     canvas->ClosePath();
1663     canvas->FillPath(paint);
1664 
1665     paint.SetFillColor(Color::Blue());
1666     canvas->BeginPath();
1667     canvas->MoveTo({LINE14_X, LINE1_Y});
1668     canvas->LineTo({LINE14_X, LINE14_Y});
1669     canvas->LineTo({LINE15_X, LINE14_Y});
1670     canvas->LineTo({LINE15_X, LINE1_Y});
1671     canvas->ClosePath();
1672     canvas->FillPath(paint);
1673 }
1674 
RM012GlobalCompositeOperationSourceOver()1675 void UITestCanvas::RM012GlobalCompositeOperationSourceOver()
1676 {
1677     if (container_ == nullptr) {
1678         return;
1679     }
1680     CreateTitleLabel("RM012_设置混合_SOURCE_OVER_第二个图源在第一个图源之上");
1681     UICanvas* canvas = CreateCanvas();
1682     Paint paint;
1683     paint.SetFillColor(Color::Red());
1684     canvas->BeginPath();
1685     canvas->MoveTo({LINE11_X, LINE13_Y});
1686     canvas->LineTo({LINE11_X, LINE11_Y});
1687     canvas->LineTo({LINE12_X, LINE11_Y});
1688     canvas->LineTo({LINE12_X, LINE13_Y});
1689     canvas->ClosePath();
1690     canvas->FillPath(paint);
1691     paint.SetGlobalCompositeOperation(SOURCE_OVER);
1692     paint.SetFillColor(Color::Green());
1693     canvas->BeginPath();
1694     canvas->MoveTo({LINE1_Y, LINE10_Y});
1695     canvas->LineTo({LINE2_X, LINE2_Y});
1696     canvas->LineTo({LINE9_X, LINE2_Y});
1697     canvas->LineTo({LINE9_X, LINE10_Y});
1698     canvas->ClosePath();
1699     canvas->FillPath(paint);
1700 }
1701 
RM012GlobalCompositeOperationSourceAtop()1702 void UITestCanvas::RM012GlobalCompositeOperationSourceAtop()
1703 {
1704     if (container_ == nullptr) {
1705         return;
1706     }
1707     CreateTitleLabel("RM012_设置混合_SOURCE_ATOP_第一个图源和与第二个图源相交部分");
1708     UICanvas* canvas = CreateCanvas();
1709     Paint paint;
1710     paint.SetFillColor(Color::Red());
1711     canvas->BeginPath();
1712     canvas->MoveTo({LINE11_X, LINE13_Y});
1713     canvas->LineTo({LINE11_X, LINE11_Y});
1714     canvas->LineTo({LINE12_X, LINE11_Y});
1715     canvas->LineTo({LINE12_X, LINE13_Y});
1716     canvas->ClosePath();
1717     canvas->FillPath(paint);
1718     paint.SetGlobalCompositeOperation(SOURCE_ATOP);
1719     paint.SetFillColor(Color::Green());
1720     canvas->BeginPath();
1721     canvas->MoveTo({LINE1_Y, LINE10_Y});
1722     canvas->LineTo({LINE2_X, LINE2_Y});
1723     canvas->LineTo({LINE9_X, LINE2_Y});
1724     canvas->LineTo({LINE9_X, LINE10_Y});
1725     canvas->ClosePath();
1726     canvas->FillPath(paint);
1727 }
RM012GlobalCompositeOperationSourceIn()1728 void UITestCanvas::RM012GlobalCompositeOperationSourceIn()
1729 {
1730     if (container_ == nullptr) {
1731         return;
1732     }
1733     CreateTitleLabel("RM012_设置混合_SOURCE_IN_只显示两个相交部分显示第二个图源颜色");
1734     UICanvas* canvas = CreateCanvas();
1735     Paint paint;
1736     paint.SetFillColor(Color::Red());
1737     canvas->BeginPath();
1738     canvas->MoveTo({LINE11_X, LINE13_Y});
1739     canvas->LineTo({LINE11_X, LINE11_Y});
1740     canvas->LineTo({LINE12_X, LINE11_Y});
1741     canvas->LineTo({LINE12_X, LINE13_Y});
1742     canvas->ClosePath();
1743     canvas->FillPath(paint);
1744     paint.SetGlobalCompositeOperation(SOURCE_IN);
1745     paint.SetFillColor(Color::Green());
1746     canvas->BeginPath();
1747     canvas->MoveTo({LINE1_Y, LINE10_Y});
1748     canvas->LineTo({LINE2_X, LINE2_Y});
1749     canvas->LineTo({LINE9_X, LINE2_Y});
1750     canvas->LineTo({LINE9_X, LINE10_Y});
1751     canvas->ClosePath();
1752     canvas->FillPath(paint);
1753 }
RM012GlobalCompositeOperationSourceOut()1754 void UITestCanvas::RM012GlobalCompositeOperationSourceOut()
1755 {
1756     if (container_ == nullptr) {
1757         return;
1758     }
1759     CreateTitleLabel("RM012_设置混合_SOURCE_OUT_只显示第二个图源的第一个不相交部分");
1760     UICanvas* canvas = CreateCanvas();
1761     Paint paint;
1762     paint.SetFillColor(Color::Red());
1763     canvas->BeginPath();
1764     canvas->MoveTo({LINE11_X, LINE13_Y});
1765     canvas->LineTo({LINE11_X, LINE11_Y});
1766     canvas->LineTo({LINE12_X, LINE11_Y});
1767     canvas->LineTo({LINE12_X, LINE13_Y});
1768     canvas->ClosePath();
1769     canvas->FillPath(paint);
1770     paint.SetGlobalCompositeOperation(SOURCE_OUT);
1771     paint.SetFillColor(Color::Green());
1772     canvas->BeginPath();
1773     canvas->MoveTo({LINE1_Y, LINE10_Y});
1774     canvas->LineTo({LINE2_X, LINE2_Y});
1775     canvas->LineTo({LINE9_X, LINE2_Y});
1776     canvas->LineTo({LINE9_X, LINE10_Y});
1777     canvas->ClosePath();
1778     canvas->FillPath(paint);
1779 }
RM012GlobalCompositeOperationDestinationOver()1780 void UITestCanvas::RM012GlobalCompositeOperationDestinationOver()
1781 {
1782     if (container_ == nullptr) {
1783         return;
1784     }
1785     CreateTitleLabel("RM012_设置混合_DESTINATION_OVER_源图像在目标图像之上");
1786     UICanvas* canvas = CreateCanvas();
1787     Paint paint;
1788     paint.SetFillColor(Color::Red());
1789     canvas->BeginPath();
1790     canvas->MoveTo({LINE11_X, LINE13_Y});
1791     canvas->LineTo({LINE11_X, LINE11_Y});
1792     canvas->LineTo({LINE12_X, LINE11_Y});
1793     canvas->LineTo({LINE12_X, LINE13_Y});
1794     canvas->ClosePath();
1795     canvas->FillPath(paint);
1796     paint.SetGlobalCompositeOperation(DESTINATION_OVER);
1797     paint.SetFillColor(Color::Green());
1798     canvas->BeginPath();
1799     canvas->MoveTo({LINE1_Y, LINE10_Y});
1800     canvas->LineTo({LINE2_X, LINE2_Y});
1801     canvas->LineTo({LINE9_X, LINE2_Y});
1802     canvas->LineTo({LINE9_X, LINE10_Y});
1803     canvas->ClosePath();
1804     canvas->FillPath(paint);
1805 }
1806 
RM012GlobalCompositeOperationDestinationAtop()1807 void UITestCanvas::RM012GlobalCompositeOperationDestinationAtop()
1808 {
1809     if (container_ == nullptr) {
1810         return;
1811     }
1812     CreateTitleLabel("RM012_设置混合_DESTINATION_ATOP_在源图像上显示目标图像");
1813     UICanvas* canvas = CreateCanvas();
1814     Paint paint;
1815     paint.SetFillColor(Color::Red());
1816     canvas->BeginPath();
1817     canvas->MoveTo({LINE11_X, LINE13_Y});
1818     canvas->LineTo({LINE11_X, LINE11_Y});
1819     canvas->LineTo({LINE12_X, LINE11_Y});
1820     canvas->LineTo({LINE12_X, LINE13_Y});
1821     canvas->ClosePath();
1822     canvas->FillPath(paint);
1823     paint.SetGlobalCompositeOperation(DESTINATION_ATOP);
1824     paint.SetFillColor(Color::Green());
1825     canvas->BeginPath();
1826     canvas->MoveTo({LINE1_Y, LINE10_Y});
1827     canvas->LineTo({LINE2_X, LINE2_Y});
1828     canvas->LineTo({LINE9_X, LINE2_Y});
1829     canvas->LineTo({LINE9_X, LINE10_Y});
1830     canvas->ClosePath();
1831     canvas->FillPath(paint);
1832 }
1833 
RM012GlobalCompositeOperationDestinationIn()1834 void UITestCanvas::RM012GlobalCompositeOperationDestinationIn()
1835 {
1836     if (container_ == nullptr) {
1837         return;
1838     }
1839     CreateTitleLabel("RM012_设置混合_DESTINATION_IN_在源图像上显示目标图像");
1840     UICanvas* canvas = CreateCanvas();
1841     Paint paint;
1842     paint.SetFillColor(Color::Red());
1843     canvas->BeginPath();
1844     canvas->MoveTo({LINE11_X, LINE13_Y});
1845     canvas->LineTo({LINE11_X, LINE11_Y});
1846     canvas->LineTo({LINE12_X, LINE11_Y});
1847     canvas->LineTo({LINE12_X, LINE13_Y});
1848     canvas->ClosePath();
1849     canvas->FillPath(paint);
1850     paint.SetGlobalCompositeOperation(DESTINATION_IN);
1851     paint.SetFillColor(Color::Green());
1852     canvas->BeginPath();
1853     canvas->MoveTo({LINE1_Y, LINE10_Y});
1854     canvas->LineTo({LINE2_X, LINE2_Y});
1855     canvas->LineTo({LINE9_X, LINE2_Y});
1856     canvas->LineTo({LINE9_X, LINE10_Y});
1857     canvas->ClosePath();
1858     canvas->FillPath(paint);
1859 }
1860 
RM012GlobalCompositeOperationDestinationOut()1861 void UITestCanvas::RM012GlobalCompositeOperationDestinationOut()
1862 {
1863     if (container_ == nullptr) {
1864         return;
1865     }
1866     CreateTitleLabel("RM012_设置混合_DESTINATION_OUT_在源图像上显示目标图像");
1867     UICanvas* canvas = CreateCanvas();
1868     Paint paint;
1869     paint.SetFillColor(Color::Red());
1870     canvas->BeginPath();
1871     canvas->MoveTo({LINE11_X, LINE13_Y});
1872     canvas->LineTo({LINE11_X, LINE11_Y});
1873     canvas->LineTo({LINE12_X, LINE11_Y});
1874     canvas->LineTo({LINE12_X, LINE13_Y});
1875     canvas->ClosePath();
1876     canvas->FillPath(paint);
1877     paint.SetGlobalCompositeOperation(DESTINATION_OUT);
1878     paint.SetFillColor(Color::Green());
1879     canvas->BeginPath();
1880     canvas->MoveTo({LINE1_Y, LINE10_Y});
1881     canvas->LineTo({LINE2_X, LINE2_Y});
1882     canvas->LineTo({LINE9_X, LINE2_Y});
1883     canvas->LineTo({LINE9_X, LINE10_Y});
1884     canvas->ClosePath();
1885     canvas->FillPath(paint);
1886 }
1887 
RM012GlobalCompositeOperationLIGHTER()1888 void UITestCanvas::RM012GlobalCompositeOperationLIGHTER()
1889 {
1890     if (container_ == nullptr) {
1891         return;
1892     }
1893     CreateTitleLabel("RM012_设置混合_LIGHTER_显示源图像 + 目标图像相交部分混合");
1894     UICanvas* canvas = CreateCanvas();
1895     Paint paint;
1896     paint.SetFillColor(Color::Red());
1897     canvas->BeginPath();
1898     canvas->MoveTo({LINE11_X, LINE13_Y});
1899     canvas->LineTo({LINE11_X, LINE11_Y});
1900     canvas->LineTo({LINE12_X, LINE11_Y});
1901     canvas->LineTo({LINE12_X, LINE13_Y});
1902     canvas->ClosePath();
1903     canvas->FillPath(paint);
1904     paint.SetGlobalCompositeOperation(LIGHTER);
1905     paint.SetFillColor(Color::Blue());
1906     canvas->BeginPath();
1907     canvas->MoveTo({LINE1_Y, LINE10_Y});
1908     canvas->LineTo({LINE2_X, LINE2_Y});
1909     canvas->LineTo({LINE9_X, LINE2_Y});
1910     canvas->LineTo({LINE9_X, LINE10_Y});
1911     canvas->ClosePath();
1912     canvas->FillPath(paint);
1913 }
1914 
RM012GlobalCompositeOperationCopy()1915 void UITestCanvas::RM012GlobalCompositeOperationCopy()
1916 {
1917     if (container_ == nullptr) {
1918         return;
1919     }
1920     CreateTitleLabel("RM012_设置混合_COPY_只显示第二个图源绿色");
1921     UICanvas* canvas = CreateCanvas();
1922     Paint paint;
1923     paint.SetFillColor(Color::Red());
1924     canvas->BeginPath();
1925     canvas->MoveTo({LINE11_X, LINE13_Y});
1926     canvas->LineTo({LINE11_X, LINE11_Y});
1927     canvas->LineTo({LINE12_X, LINE11_Y});
1928     canvas->LineTo({LINE12_X, LINE13_Y});
1929     canvas->ClosePath();
1930     canvas->FillPath(paint);
1931     paint.SetGlobalCompositeOperation(COPY);
1932     paint.SetFillColor(Color::Green());
1933     canvas->BeginPath();
1934     canvas->MoveTo({LINE1_Y, LINE10_Y});
1935     canvas->LineTo({LINE2_X, LINE2_Y});
1936     canvas->LineTo({LINE9_X, LINE2_Y});
1937     canvas->LineTo({LINE9_X, LINE10_Y});
1938     canvas->ClosePath();
1939     canvas->FillPath(paint);
1940 }
1941 
RM012GlobalCompositeOperationXOR()1942 void UITestCanvas::RM012GlobalCompositeOperationXOR()
1943 {
1944     if (container_ == nullptr) {
1945         return;
1946     }
1947     CreateTitleLabel("RM012_设置混合_XOR_相交部分不显示");
1948     UICanvas* canvas = CreateCanvas();
1949     Paint paint;
1950     paint.SetFillColor(Color::Red());
1951     canvas->BeginPath();
1952     canvas->MoveTo({LINE11_X, LINE13_Y});
1953     canvas->LineTo({LINE11_X, LINE11_Y});
1954     canvas->LineTo({LINE12_X, LINE11_Y});
1955     canvas->LineTo({LINE12_X, LINE13_Y});
1956     canvas->ClosePath();
1957     canvas->FillPath(paint);
1958     paint.SetGlobalCompositeOperation(XOR);
1959     paint.SetFillColor(Color::Green());
1960     canvas->BeginPath();
1961     canvas->MoveTo({LINE1_Y, LINE10_Y});
1962     canvas->LineTo({LINE2_X, LINE2_Y});
1963     canvas->LineTo({LINE9_X, LINE2_Y});
1964     canvas->LineTo({LINE9_X, LINE10_Y});
1965     canvas->ClosePath();
1966     canvas->FillPath(paint);
1967 }
1968 
RM012SaveOrRestore002()1969 void UITestCanvas::RM012SaveOrRestore002()
1970 {
1971     if (container_ == nullptr) {
1972         return;
1973     }
1974     CreateTitleLabel("RM012_设置图像透明度_红不透明_绿蓝_一半透明度Save_Restore");
1975     UICanvas* canvas = CreateCanvas();
1976     Paint paint;
1977     paint.SetFillColor(Color::Red());
1978     canvas->BeginPath();
1979     canvas->MoveTo({LINE11_X, LINE13_Y});
1980     canvas->LineTo({LINE11_X, LINE11_Y});
1981     canvas->LineTo({LINE12_X, LINE11_Y});
1982     canvas->LineTo({LINE12_X, LINE13_Y});
1983     canvas->ClosePath();
1984     canvas->FillPath(paint);
1985 
1986     paint.SetGlobalAlpha(GLOBALALPHA2);
1987     paint.SetFillColor(Color::Green());
1988     canvas->BeginPath();
1989     canvas->MoveTo({LINE1_Y, LINE10_Y});
1990     canvas->LineTo({LINE2_X, LINE2_Y});
1991     canvas->LineTo({LINE9_X, LINE2_Y});
1992     canvas->LineTo({LINE9_X, LINE10_Y});
1993     canvas->ClosePath();
1994     canvas->FillPath(paint);
1995 
1996     canvas->Save(paint);
1997     paint.SetFillColor(Color::Blue());
1998     canvas->BeginPath();
1999     canvas->MoveTo({LINE14_X, LINE1_Y});
2000     canvas->LineTo({LINE14_X, LINE14_Y});
2001     canvas->LineTo({LINE15_X, LINE14_Y});
2002     canvas->LineTo({LINE15_X, LINE1_Y});
2003     canvas->ClosePath();
2004     paint = canvas->Restore();
2005     canvas->FillPath(paint);
2006 }
2007 #endif
2008 } // namespace OHOS
2009