1 /*
2 * Copyright (c) 2025 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 <native_drawing/drawing_image.h>
17 #include <native_drawing/drawing_text_typography.h>
18 #include <native_drawing/drawing_rect.h>
19 #include <native_drawing/drawing_point.h>
20 #include <native_drawing/drawing_region.h>
21 #include <native_drawing/drawing_round_rect.h>
22 #include <native_drawing/drawing_sampling_options.h>
23 #include <native_drawing/drawing_pixel_map.h>
24 #include <native_drawing/drawing_text_blob.h>
25 #include <native_drawing/drawing_shader_effect.h>
26 #include <native_drawing/drawing_gpu_context.h>
27 #include <native_drawing/drawing_surface.h>
28 #include <native_drawing/drawing_path_effect.h>
29 #include <native_drawing/drawing_color_filter.h>
30 #include <native_drawing/drawing_filter.h>
31 #include <native_drawing/drawing_image_filter.h>
32 #include <native_drawing/drawing_mask_filter.h>
33 #include <native_drawing/drawing_matrix.h>
34 #include "sample_graphics.h"
35 #include "common/log_common.h"
36
DrawRectBasic(OH_Drawing_Canvas * canvas)37 void SampleGraphics::DrawRectBasic(OH_Drawing_Canvas *canvas)
38 {
39 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
40 OH_Drawing_BrushSetColor(brush, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
41 OH_Drawing_BrushSetAntiAlias(brush, true);
42 OH_Drawing_CanvasAttachBrush(canvas, brush);
43 // 创建矩形对象
44 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(value200_, value200_, value500_, value500_);
45 OH_Drawing_Rect* rect_copy = OH_Drawing_RectCreate(0, 0, 0, 0);
46 OH_Drawing_RectCopy(rect, rect_copy);
47 // 设置矩形left,right,top,bottom
48 OH_Drawing_RectSetLeft(rect, value300_);
49 OH_Drawing_RectSetTop(rect, value300_);
50 OH_Drawing_RectSetRight(rect, value600_);
51 OH_Drawing_RectSetBottom(rect, value600_);
52 // 获取矩形left,right,top,bottom,width,height
53 SAMPLE_LOGI(
54 "left:%{public}f, right:%{public}f, top:%{public}f, bottom:%{public}f, width:%{public}f, height: %{public}f",
55 OH_Drawing_RectGetLeft(rect), OH_Drawing_RectGetRight(rect), OH_Drawing_RectGetTop(rect),
56 OH_Drawing_RectGetBottom(rect), OH_Drawing_RectGetWidth(rect), OH_Drawing_RectGetHeight(rect));
57 SAMPLE_LOGI(
58 "left:%{public}f, right:%{public}f, top:%{public}f, bottom:%{public}f, width:%{public}f, height: %{public}f",
59 OH_Drawing_RectGetLeft(rect_copy), OH_Drawing_RectGetRight(rect_copy), OH_Drawing_RectGetTop(rect_copy),
60 OH_Drawing_RectGetBottom(rect_copy), OH_Drawing_RectGetWidth(rect_copy), OH_Drawing_RectGetHeight(rect_copy));
61 // 绘制矩形
62 OH_Drawing_CanvasDrawRect(canvas, rect);
63 OH_Drawing_CanvasDrawRect(canvas, rect_copy);
64 OH_Drawing_CanvasDetachBrush(canvas);
65 OH_Drawing_BrushDestroy(brush);
66 OH_Drawing_RectDestroy(rect);
67 OH_Drawing_RectDestroy(rect_copy);
68 }
69
DrawRectIntersect(OH_Drawing_Canvas * canvas)70 void SampleGraphics::DrawRectIntersect(OH_Drawing_Canvas *canvas)
71 {
72 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
73 OH_Drawing_BrushSetColor(brush, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
74 OH_Drawing_BrushSetAntiAlias(brush, true);
75 OH_Drawing_CanvasAttachBrush(canvas, brush);
76 // 创建矩形对象
77 OH_Drawing_Rect* rect1 = OH_Drawing_RectCreate(value200_, value200_, value500_, value500_);
78 OH_Drawing_Rect* rect2 = OH_Drawing_RectCreate(value300_, value300_, value600_, value600_);
79 // 取交集
80 OH_Drawing_RectIntersect(rect1, rect2);
81 // 绘制矩形
82 OH_Drawing_CanvasDrawRect(canvas, rect1);
83 OH_Drawing_CanvasDetachBrush(canvas);
84 OH_Drawing_BrushDestroy(brush);
85 OH_Drawing_RectDestroy(rect1);
86 OH_Drawing_RectDestroy(rect2);
87 }
88
DrawRectJoin(OH_Drawing_Canvas * canvas)89 void SampleGraphics::DrawRectJoin(OH_Drawing_Canvas *canvas)
90 {
91 OH_Drawing_Brush* brush = OH_Drawing_BrushCreate();
92 OH_Drawing_BrushSetColor(brush, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
93 OH_Drawing_BrushSetAntiAlias(brush, true);
94 OH_Drawing_CanvasAttachBrush(canvas, brush);
95 // 创建矩形对象
96 OH_Drawing_Rect* rect1 = OH_Drawing_RectCreate(value200_, value200_, value500_, value500_);
97 OH_Drawing_Rect* rect2 = OH_Drawing_RectCreate(value300_, value300_, value600_, value600_);
98 // 取并集
99 OH_Drawing_RectJoin(rect1, rect2);
100 // 绘制矩形
101 OH_Drawing_CanvasDrawRect(canvas, rect1);
102 OH_Drawing_CanvasDetachBrush(canvas);
103 OH_Drawing_BrushDestroy(brush);
104 OH_Drawing_RectDestroy(rect1);
105 OH_Drawing_RectDestroy(rect2);
106 }
107
DrawRoundRect(OH_Drawing_Canvas * canvas)108 void SampleGraphics::DrawRoundRect(OH_Drawing_Canvas *canvas)
109 {
110 OH_Drawing_Brush *brush = OH_Drawing_BrushCreate();
111 OH_Drawing_BrushSetColor(brush, OH_Drawing_ColorSetArgb(rgbaMax_, rgbaMax_, rgbaMin_, rgbaMin_));
112 OH_Drawing_CanvasAttachBrush(canvas, brush);
113 // 创建矩形
114 OH_Drawing_Rect* rect = OH_Drawing_RectCreate(value100_, value100_, value900_, value600_);
115 // 创建圆角矩形
116 OH_Drawing_RoundRect* roundRect = OH_Drawing_RoundRectCreate(rect, value30_, value30_);
117 OH_Drawing_RoundRectSetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT, {value50_, value50_});
118 OH_Drawing_Corner_Radii p = OH_Drawing_RoundRectGetCorner(roundRect, OH_Drawing_CornerPos::CORNER_POS_TOP_LEFT);
119 SAMPLE_LOGI("top-left-corner:x=%{public}f, y:%{public}f", p.x, p.y);
120 // 绘制圆角矩形
121 OH_Drawing_CanvasDrawRoundRect(canvas, roundRect);
122 OH_Drawing_CanvasDetachBrush(canvas);
123 OH_Drawing_BrushDestroy(brush);
124 OH_Drawing_RectDestroy(rect);
125 OH_Drawing_RoundRectDestroy(roundRect);
126 }
127