• 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 "cj_common_ffi.h"
17 #include "cj_drawing_log.h"
18 #include "cj_drawing_util.h"
19 #include "matrix_impl/cj_matrix.h"
20 
21 namespace OHOS {
22 namespace CJDrawing {
23 using namespace OHOS::FFI;
24 extern "C" {
25 // Matrix
FfiGraphicDrawingMatrixCreate(int64_t id)26 FFI_EXPORT int64_t FfiGraphicDrawingMatrixCreate(int64_t id)
27 {
28     ROSEN_LOGD("FfiGraphicDrawingMatrixCreate start");
29     return CjMatrix::CreateCjMatrix(id);
30 }
31 
FfiGraphicDrawingMatrixSetRotation(int64_t id,float degree,float px,float py)32 FFI_EXPORT int32_t FfiGraphicDrawingMatrixSetRotation(int64_t id, float degree, float px, float py)
33 {
34     ROSEN_LOGD("FfiGraphicDrawingMatrixSetRotation start");
35     auto instance = FFIData::GetData<CjMatrix>(id);
36     if (instance == nullptr) {
37         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
38     }
39     return instance->SetRotation(degree, px, py);
40 }
41 
FfiGraphicDrawingMatrixSetScale(int64_t id,float sx,float sy,float px,float py)42 FFI_EXPORT int32_t FfiGraphicDrawingMatrixSetScale(int64_t id, float sx, float sy, float px, float py)
43 {
44     ROSEN_LOGD("FfiGraphicDrawingMatrixSetScale start");
45     auto instance = FFIData::GetData<CjMatrix>(id);
46     if (instance == nullptr) {
47         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
48     }
49     return instance->SetScale(sx, sy, px, py);
50 }
51 
FfiGraphicDrawingMatrixSetTranslation(int64_t id,float dx,float dy)52 FFI_EXPORT int32_t FfiGraphicDrawingMatrixSetTranslation(int64_t id, float dx, float dy)
53 {
54     ROSEN_LOGD("FfiGraphicDrawingMatrixSetTranslation start");
55     auto instance = FFIData::GetData<CjMatrix>(id);
56     if (instance == nullptr) {
57         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
58     }
59     return instance->SetTranslation(dx, dy);
60 }
61 
FfiGraphicDrawingMatrixSetSkew(int64_t id,float kx,float ky,float px,float py)62 FFI_EXPORT int32_t FfiGraphicDrawingMatrixSetSkew(int64_t id, float kx, float ky, float px, float py)
63 {
64     ROSEN_LOGD("FfiGraphicDrawingMatrixSetSkew start");
65     auto instance = FFIData::GetData<CjMatrix>(id);
66     if (instance == nullptr) {
67         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
68     }
69     return instance->SetSkew(kx, ky, px, py);
70 }
71 
FfiGraphicDrawingMatrixSetConcat(int64_t id,int64_t matrix1,int64_t matrix2)72 FFI_EXPORT int32_t FfiGraphicDrawingMatrixSetConcat(int64_t id, int64_t matrix1, int64_t matrix2)
73 {
74     ROSEN_LOGD("FfiGraphicDrawingMatrixSetConcat start");
75     auto instance = FFIData::GetData<CjMatrix>(id);
76     if (instance == nullptr) {
77         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
78     }
79     auto cjMatrix1 = FFIData::GetData<CjMatrix>(matrix1);
80     if (cjMatrix1 == nullptr) {
81         return ParserErr(CjDrawingErrorCode::ERROR_PARAM_VERIFICATION_FAILED);
82     }
83     auto cjMatrix2 = FFIData::GetData<CjMatrix>(matrix2);
84     if (cjMatrix2 == nullptr) {
85         return ParserErr(CjDrawingErrorCode::ERROR_PARAM_VERIFICATION_FAILED);
86     }
87     return instance->SetConcat(*cjMatrix1, *cjMatrix2);
88 }
89 
FfiGraphicDrawingMatrixSetSinCos(int64_t id,float sinValue,float cosValue,float px,float py)90 FFI_EXPORT int32_t FfiGraphicDrawingMatrixSetSinCos(int64_t id, float sinValue, float cosValue, float px, float py)
91 {
92     ROSEN_LOGD("FfiGraphicDrawingMatrixSetSinCos start");
93     auto instance = FFIData::GetData<CjMatrix>(id);
94     if (instance == nullptr) {
95         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
96     }
97     return instance->SetSinCos(sinValue, cosValue, px, py);
98 }
99 
FfiGraphicDrawingMatrixSetMatrix(int64_t id,CArrFloat values)100 FFI_EXPORT int32_t FfiGraphicDrawingMatrixSetMatrix(int64_t id, CArrFloat values)
101 {
102     ROSEN_LOGD("FfiGraphicDrawingMatrixSetMatrix start");
103     auto instance = FFIData::GetData<CjMatrix>(id);
104     if (instance == nullptr) {
105         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
106     }
107     return instance->SetMatrix(values);
108 }
109 
FfiGraphicDrawingMatrixSetMatrixByMatrix(int64_t id,int64_t matrix)110 FFI_EXPORT int32_t FfiGraphicDrawingMatrixSetMatrixByMatrix(int64_t id, int64_t matrix)
111 {
112     ROSEN_LOGD("FfiGraphicDrawingMatrixSetMatrixByMatrix start");
113     auto instance = FFIData::GetData<CjMatrix>(id);
114     if (instance == nullptr) {
115         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
116     }
117     auto cjMatrix = FFIData::GetData<CjMatrix>(matrix);
118     if (cjMatrix == nullptr) {
119         return ParserErr(CjDrawingErrorCode::ERROR_PARAM_VERIFICATION_FAILED);
120     }
121     return instance->SetMatrixByMatrix(*cjMatrix);
122 }
123 
FfiGraphicDrawingMatrixPostRotate(int64_t id,float degree,float px,float py)124 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPostRotate(int64_t id, float degree, float px, float py)
125 {
126     ROSEN_LOGD("FfiGraphicDrawingMatrixPostRotate start");
127     auto instance = FFIData::GetData<CjMatrix>(id);
128     if (instance == nullptr) {
129         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
130     }
131     return instance->PostRotate(degree, px, py);
132 }
133 
FfiGraphicDrawingMatrixPostScale(int64_t id,float sx,float sy,float px,float py)134 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPostScale(int64_t id, float sx, float sy, float px, float py)
135 {
136     ROSEN_LOGD("FfiGraphicDrawingMatrixPostScale start");
137     auto instance = FFIData::GetData<CjMatrix>(id);
138     if (instance == nullptr) {
139         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
140     }
141     return instance->PostScale(sx, sy, px, py);
142 }
143 
FfiGraphicDrawingMatrixPostTranslate(int64_t id,float dx,float dy)144 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPostTranslate(int64_t id, float dx, float dy)
145 {
146     ROSEN_LOGD("FfiGraphicDrawingMatrixPostTranslate start");
147     auto instance = FFIData::GetData<CjMatrix>(id);
148     if (instance == nullptr) {
149         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
150     }
151     return instance->PostTranslate(dx, dy);
152 }
153 
FfiGraphicDrawingMatrixPostSkew(int64_t id,float kx,float ky,float px,float py)154 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPostSkew(int64_t id, float kx, float ky, float px, float py)
155 {
156     ROSEN_LOGD("FfiGraphicDrawingMatrixPostSkew start");
157     auto instance = FFIData::GetData<CjMatrix>(id);
158     if (instance == nullptr) {
159         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
160     }
161     return instance->PostSkew(kx, ky, px, py);
162 }
163 
FfiGraphicDrawingMatrixPostConcat(int64_t id,int64_t matrix)164 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPostConcat(int64_t id, int64_t matrix)
165 {
166     ROSEN_LOGD("FfiGraphicDrawingMatrixPostConcat start");
167     auto instance = FFIData::GetData<CjMatrix>(id);
168     if (instance == nullptr) {
169         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
170     }
171     auto cjMatrix = FFIData::GetData<CjMatrix>(matrix);
172     if (cjMatrix == nullptr) {
173         return ParserErr(CjDrawingErrorCode::ERROR_PARAM_VERIFICATION_FAILED);
174     }
175     return instance->PostConcat(*cjMatrix);
176 }
177 
FfiGraphicDrawingMatrixPreRotate(int64_t id,float degree,float px,float py)178 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPreRotate(int64_t id, float degree, float px, float py)
179 {
180     ROSEN_LOGD("FfiGraphicDrawingMatrixPreRotate start");
181     auto instance = FFIData::GetData<CjMatrix>(id);
182     if (instance == nullptr) {
183         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
184     }
185     return instance->PreRotate(degree, px, py);
186 }
187 
FfiGraphicDrawingMatrixPreScale(int64_t id,float sx,float sy,float px,float py)188 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPreScale(int64_t id, float sx, float sy, float px, float py)
189 {
190     ROSEN_LOGD("FfiGraphicDrawingMatrixPreScale start");
191     auto instance = FFIData::GetData<CjMatrix>(id);
192     if (instance == nullptr) {
193         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
194     }
195     return instance->PreScale(sx, sy, px, py);
196 }
197 
FfiGraphicDrawingMatrixPreTranslate(int64_t id,float dx,float dy)198 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPreTranslate(int64_t id, float dx, float dy)
199 {
200     ROSEN_LOGD("FfiGraphicDrawingMatrixPreTranslate start");
201     auto instance = FFIData::GetData<CjMatrix>(id);
202     if (instance == nullptr) {
203         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
204     }
205     return instance->PreTranslate(dx, dy);
206 }
207 
FfiGraphicDrawingMatrixPreSkew(int64_t id,float kx,float ky,float px,float py)208 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPreSkew(int64_t id, float kx, float ky, float px, float py)
209 {
210     ROSEN_LOGD("FfiGraphicDrawingMatrixPreSkew start");
211     auto instance = FFIData::GetData<CjMatrix>(id);
212     if (instance == nullptr) {
213         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
214     }
215     return instance->PreSkew(kx, ky, px, py);
216 }
217 
FfiGraphicDrawingMatrixPreConcat(int64_t id,int64_t matrix)218 FFI_EXPORT int32_t FfiGraphicDrawingMatrixPreConcat(int64_t id, int64_t matrix)
219 {
220     ROSEN_LOGD("FfiGraphicDrawingMatrixPreConcat start");
221     auto instance = FFIData::GetData<CjMatrix>(id);
222     if (instance == nullptr) {
223         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
224     }
225     auto cjMatrix = FFIData::GetData<CjMatrix>(matrix);
226     if (cjMatrix == nullptr) {
227         return ParserErr(CjDrawingErrorCode::ERROR_PARAM_VERIFICATION_FAILED);
228     }
229     return instance->PreConcat(*cjMatrix);
230 }
231 
FfiGraphicDrawingMatrixInvert(int64_t id,int64_t matrix)232 FFI_EXPORT RetDataBool FfiGraphicDrawingMatrixInvert(int64_t id, int64_t matrix)
233 {
234     ROSEN_LOGD("FfiGraphicDrawingMatrixInvert start");
235     auto instance = FFIData::GetData<CjMatrix>(id);
236     if (instance == nullptr) {
237         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = false};
238     }
239     auto cjMatrix = FFIData::GetData<CjMatrix>(matrix);
240     if (cjMatrix == nullptr) {
241         return {.code = ParserErr(CjDrawingErrorCode::ERROR_PARAM_VERIFICATION_FAILED), .data = false};
242     }
243     return instance->Invert(*cjMatrix);
244 }
245 
FfiGraphicDrawingMatrixReset(int64_t id)246 FFI_EXPORT int32_t FfiGraphicDrawingMatrixReset(int64_t id)
247 {
248     ROSEN_LOGD("FfiGraphicDrawingMatrixReset start");
249     auto instance = FFIData::GetData<CjMatrix>(id);
250     if (instance == nullptr) {
251         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
252     }
253     return instance->Reset();
254 }
255 
FfiGraphicDrawingMatrixIsEqual(int64_t id,int64_t matrix)256 FFI_EXPORT RetDataBool FfiGraphicDrawingMatrixIsEqual(int64_t id, int64_t matrix)
257 {
258     ROSEN_LOGD("FfiGraphicDrawingMatrixIsEqual start");
259     auto instance = FFIData::GetData<CjMatrix>(id);
260     if (instance == nullptr) {
261         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = false};
262     }
263     auto cjMatrix = FFIData::GetData<CjMatrix>(matrix);
264     if (cjMatrix == nullptr) {
265         return {.code = ParserErr(CjDrawingErrorCode::ERROR_PARAM_VERIFICATION_FAILED), .data = false};
266     }
267     return instance->IsEqual(*cjMatrix);
268 }
269 
FfiGraphicDrawingMatrixIsIdentity(int64_t id)270 FFI_EXPORT RetDataBool FfiGraphicDrawingMatrixIsIdentity(int64_t id)
271 {
272     ROSEN_LOGD("FfiGraphicDrawingMatrixIsIdentity start");
273     auto instance = FFIData::GetData<CjMatrix>(id);
274     if (instance == nullptr) {
275         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = false};
276     }
277     return instance->IsIdentity();
278 }
279 
FfiGraphicDrawingMatrixIsAffine(int64_t id)280 FFI_EXPORT RetDataBool FfiGraphicDrawingMatrixIsAffine(int64_t id)
281 {
282     ROSEN_LOGD("FfiGraphicDrawingMatrixIsAffine start");
283     auto instance = FFIData::GetData<CjMatrix>(id);
284     if (instance == nullptr) {
285         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = false};
286     }
287     return instance->IsAffine();
288 }
289 
FfiGraphicDrawingMatrixRectStaysRect(int64_t id)290 FFI_EXPORT RetDataBool FfiGraphicDrawingMatrixRectStaysRect(int64_t id)
291 {
292     ROSEN_LOGD("FfiGraphicDrawingMatrixRectStaysRect start");
293     auto instance = FFIData::GetData<CjMatrix>(id);
294     if (instance == nullptr) {
295         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = false};
296     }
297     return instance->RectStaysRect();
298 }
299 
FfiGraphicDrawingMatrixGetValue(int64_t id,int64_t index)300 FFI_EXPORT RetDataScalar FfiGraphicDrawingMatrixGetValue(int64_t id, int64_t index)
301 {
302     ROSEN_LOGD("FfiGraphicDrawingMatrixGetValue start");
303     auto instance = FFIData::GetData<CjMatrix>(id);
304     if (instance == nullptr) {
305         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = 0.0};
306     }
307     return instance->GetValue(index);
308 }
309 
FfiGraphicDrawingMatrixGetAll(int64_t id,CArrFloat arr)310 FFI_EXPORT int32_t FfiGraphicDrawingMatrixGetAll(int64_t id, CArrFloat arr)
311 {
312     ROSEN_LOGD("FfiGraphicDrawingMatrixGetAll start");
313     auto instance = FFIData::GetData<CjMatrix>(id);
314     if (instance == nullptr) {
315         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
316     }
317     return instance->GetAll(arr);
318 }
319 
FfiGraphicDrawingMatrixMapRadius(int64_t id,float radius)320 FFI_EXPORT RetDataScalar FfiGraphicDrawingMatrixMapRadius(int64_t id, float radius)
321 {
322     ROSEN_LOGD("FfiGraphicDrawingMatrixMapRadius start");
323     auto instance = FFIData::GetData<CjMatrix>(id);
324     if (instance == nullptr) {
325         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = 0.0};
326     }
327     return instance->MapRadius(radius);
328 }
329 
FfiGraphicDrawingMatrixMapPoints(int64_t id,CArrPoint src,CArrPoint dst)330 FFI_EXPORT int32_t FfiGraphicDrawingMatrixMapPoints(int64_t id, CArrPoint src, CArrPoint dst)
331 {
332     ROSEN_LOGD("FfiGraphicDrawingMatrixMapPoints start");
333     auto instance = FFIData::GetData<CjMatrix>(id);
334     if (instance == nullptr) {
335         return ParserErr(CjDrawingErrorCode::INTERNAL_ERROR);
336     }
337     return instance->MapPoints(src, dst);
338 }
339 
FfiGraphicDrawingMatrixMapRect(int64_t id,CRect * dst,CRect src)340 FFI_EXPORT RetDataBool FfiGraphicDrawingMatrixMapRect(int64_t id, CRect *dst, CRect src)
341 {
342     ROSEN_LOGD("FfiGraphicDrawingMatrixMapRect start");
343     auto instance = FFIData::GetData<CjMatrix>(id);
344     if (instance == nullptr) {
345         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = false};
346     }
347     return instance->MapRect(*dst, src);
348 }
349 
FfiGraphicDrawingMatrixSetRectToRect(int64_t id,CRect src,CRect dst,int32_t scaleToFit)350 FFI_EXPORT RetDataBool FfiGraphicDrawingMatrixSetRectToRect(int64_t id, CRect src, CRect dst, int32_t scaleToFit)
351 {
352     ROSEN_LOGD("FfiGraphicDrawingMatrixSetRectToRect start");
353     auto instance = FFIData::GetData<CjMatrix>(id);
354     if (instance == nullptr) {
355         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = false};
356     }
357     return instance->SetRectToRect(src, dst, scaleToFit);
358 }
359 
FfiGraphicDrawingMatrixSetPolyToPoly(int64_t id,CArrPoint src,CArrPoint dst,int64_t count)360 FFI_EXPORT RetDataBool FfiGraphicDrawingMatrixSetPolyToPoly(int64_t id, CArrPoint src, CArrPoint dst, int64_t count)
361 {
362     ROSEN_LOGD("FfiGraphicDrawingMatrixSetPolyToPoly start");
363     auto instance = FFIData::GetData<CjMatrix>(id);
364     if (instance == nullptr) {
365         return {.code = ParserErr(CjDrawingErrorCode::INTERNAL_ERROR), .data = false};
366     }
367     return instance->SetPolyToPoly(src, dst, count);
368 }
369 }
370 }  // namespace CJDrawing
371 }  // namespace OHOS
372