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