• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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