1 /*
2 * Copyright (c) 2023-2024 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "drawing_rect.h"
17
18 #include "drawing_canvas_utils.h"
19
20 #include "utils/rect.h"
21
22 using namespace OHOS;
23 using namespace Rosen;
24 using namespace Drawing;
25
CastToRect(OH_Drawing_Rect * cRect)26 static Rect* CastToRect(OH_Drawing_Rect* cRect)
27 {
28 return reinterpret_cast<Rect*>(cRect);
29 }
30
OH_Drawing_RectCreate(float left,float top,float right,float bottom)31 OH_Drawing_Rect* OH_Drawing_RectCreate(float left, float top, float right, float bottom)
32 {
33 return (OH_Drawing_Rect*)new Rect(left, top, right, bottom);
34 }
35
OH_Drawing_RectIntersect(OH_Drawing_Rect * cRect,const OH_Drawing_Rect * other)36 bool OH_Drawing_RectIntersect(OH_Drawing_Rect* cRect, const OH_Drawing_Rect* other)
37 {
38 Rect* rect = CastToRect(cRect);
39 const Rect* otherRect = reinterpret_cast<const Rect*>(other);
40 if (rect == nullptr || otherRect == nullptr) {
41 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
42 return false;
43 }
44 return rect->Intersect(*otherRect);
45 }
46
OH_Drawing_RectJoin(OH_Drawing_Rect * cRect,const OH_Drawing_Rect * other)47 bool OH_Drawing_RectJoin(OH_Drawing_Rect* cRect, const OH_Drawing_Rect* other)
48 {
49 Rect* rect = CastToRect(cRect);
50 const Rect* otherRect = reinterpret_cast<const Rect*>(other);
51 if (rect == nullptr || otherRect == nullptr) {
52 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
53 return false;
54 }
55 return rect->Join(*otherRect);
56 }
57
OH_Drawing_RectSetTop(OH_Drawing_Rect * cRect,float top)58 void OH_Drawing_RectSetTop(OH_Drawing_Rect* cRect, float top)
59 {
60 Rect* rect = CastToRect(cRect);
61 if (rect == nullptr) {
62 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
63 return;
64 }
65 rect->SetTop(top);
66 }
67
OH_Drawing_RectSetBottom(OH_Drawing_Rect * cRect,float bottom)68 void OH_Drawing_RectSetBottom(OH_Drawing_Rect* cRect, float bottom)
69 {
70 Rect* rect = CastToRect(cRect);
71 if (rect == nullptr) {
72 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
73 return;
74 }
75 rect->SetBottom(bottom);
76 }
77
OH_Drawing_RectSetLeft(OH_Drawing_Rect * cRect,float left)78 void OH_Drawing_RectSetLeft(OH_Drawing_Rect* cRect, float left)
79 {
80 Rect* rect = CastToRect(cRect);
81 if (rect == nullptr) {
82 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
83 return;
84 }
85 rect->SetLeft(left);
86 }
87
OH_Drawing_RectSetRight(OH_Drawing_Rect * cRect,float right)88 void OH_Drawing_RectSetRight(OH_Drawing_Rect* cRect, float right)
89 {
90 Rect* rect = CastToRect(cRect);
91 if (rect == nullptr) {
92 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
93 return;
94 }
95 rect->SetRight(right);
96 }
97
OH_Drawing_RectGetTop(OH_Drawing_Rect * cRect)98 float OH_Drawing_RectGetTop(OH_Drawing_Rect* cRect)
99 {
100 Rect* rect = CastToRect(cRect);
101 if (rect == nullptr) {
102 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
103 return 0.f;
104 }
105 return rect->GetTop();
106 }
107
OH_Drawing_RectGetBottom(OH_Drawing_Rect * cRect)108 float OH_Drawing_RectGetBottom(OH_Drawing_Rect* cRect)
109 {
110 Rect* rect = CastToRect(cRect);
111 if (rect == nullptr) {
112 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
113 return 0.f;
114 }
115 return rect->GetBottom();
116 }
117
OH_Drawing_RectGetLeft(OH_Drawing_Rect * cRect)118 float OH_Drawing_RectGetLeft(OH_Drawing_Rect* cRect)
119 {
120 Rect* rect = CastToRect(cRect);
121 if (rect == nullptr) {
122 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
123 return 0.f;
124 }
125 return rect->GetLeft();
126 }
127
OH_Drawing_RectGetRight(OH_Drawing_Rect * cRect)128 float OH_Drawing_RectGetRight(OH_Drawing_Rect* cRect)
129 {
130 Rect* rect = CastToRect(cRect);
131 if (rect == nullptr) {
132 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
133 return 0.f;
134 }
135 return rect->GetRight();
136 }
137
OH_Drawing_RectGetHeight(OH_Drawing_Rect * cRect)138 float OH_Drawing_RectGetHeight(OH_Drawing_Rect* cRect)
139 {
140 Rect* rect = CastToRect(cRect);
141 if (rect == nullptr) {
142 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
143 return 0.f;
144 }
145 return rect->GetHeight();
146 }
147
OH_Drawing_RectGetWidth(OH_Drawing_Rect * cRect)148 float OH_Drawing_RectGetWidth(OH_Drawing_Rect* cRect)
149 {
150 Rect* rect = CastToRect(cRect);
151 if (rect == nullptr) {
152 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
153 return 0.f;
154 }
155 return rect->GetWidth();
156 }
157
OH_Drawing_RectCopy(OH_Drawing_Rect * sRect,OH_Drawing_Rect * dRect)158 void OH_Drawing_RectCopy(OH_Drawing_Rect* sRect, OH_Drawing_Rect* dRect)
159 {
160 Rect* rectSrc = CastToRect(dRect);
161 if (rectSrc == nullptr) {
162 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
163 return;
164 }
165
166 Rect* rectDst = CastToRect(sRect);
167 if (rectDst == nullptr) {
168 g_drawingErrorCode = OH_DRAWING_ERROR_INVALID_PARAMETER;
169 return;
170 }
171
172 rectSrc->SetLeft(rectDst->GetLeft());
173 rectSrc->SetTop(rectDst->GetTop());
174 rectSrc->SetRight(rectDst->GetRight());
175 rectSrc->SetBottom(rectDst->GetBottom());
176 }
177
OH_Drawing_RectDestroy(OH_Drawing_Rect * cRect)178 void OH_Drawing_RectDestroy(OH_Drawing_Rect* cRect)
179 {
180 if (!cRect) {
181 return;
182 }
183 delete CastToRect(cRect);
184 }
185