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