1 /*
2 * Copyright (c) 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 "nativeFontNdk.h"
17
18 #define SUCCESS 0
19 #define FAIL (-1)
20 #define ARR_NUM_0 0
21 #define ARR_NUM_1 1
22 #define ARR_NUM_2 2
23 #define ARR_NUM_3 3
24 #define ARR_NUM_4 4
25 #define ALIGNMENT600 600
26 #define ALIGNMENT700 700
27 #define ALIGNMENT20 20
28 #define TEXTLINE30 30
29 #define TEXTLINE250 250
30 #define HEIGHT40 40
31 #define NUM_50 50
32 #define NUM_500 500.0
33 #define NUM_10 10
34 #define INT_NUM_2 2
35 #define INT_NUM_100 100
36 #define INT_NUM_200 200
37 #define INT_NUM_5 5
38 #define INT_NUM_400 400
39 #define INT_NUM_500 500
40 #define DOUBLE_NUM_2 2.0
41 #define DOUBLE_NUM_0 0.0
42 #define DOUBLE_NEGATIVE_NUM_1 (-1.0)
43 #define DOUBLE_NUM_05 0.5
44 #define DOUBLE_NUM_100 100.0
45 #define DOUBLE_NUM_800 800.0
46 #define DOUBLE_NUM_10 10.0
47 #define DOUBLE_NUM_15 15.0
48 #define DOUBLE_NUM_001 0.01
49
50 static OH_Drawing_TypographyStyle *typoStyle_ = nullptr;
51 static OH_Drawing_TextStyle *txtStyle_ = nullptr;
52 static OH_Drawing_FontCollection *fontCollection_ = nullptr;
53 static OH_Drawing_TypographyCreate *handler_ = nullptr;
54 static OH_Drawing_Typography *typography_ = nullptr;
55 static OH_Drawing_Bitmap *cBitmap_ = nullptr;
56 static OH_Drawing_Canvas *canvas_ = nullptr;
57 static OH_Drawing_TypographyCreate *handler2_ = nullptr;
58 static OH_Drawing_FontCollection *fontCollection2_ = nullptr;
59 static OH_Drawing_TextStyle *txtStyle2_ = nullptr;
60 static OH_Drawing_TypographyStyle *typoStyle2_ = nullptr;
61 std::string g_text;
62
PrepareCreateTextLine(const std::string & text)63 static void PrepareCreateTextLine(const std::string &text)
64 {
65 double maxWidth = NUM_500;
66 uint32_t height = HEIGHT40;
67 typoStyle_ = OH_Drawing_CreateTypographyStyle();
68 txtStyle_ = OH_Drawing_CreateTextStyle();
69 fontCollection_ = OH_Drawing_CreateFontCollection();
70 handler_ = OH_Drawing_CreateTypographyHandler(typoStyle_, fontCollection_);
71 OH_Drawing_SetTextStyleColor(txtStyle_, OH_Drawing_ColorSetArgb(0xFF, 0x00, 0x00, 0x00));
72 double fontSize = TEXTLINE30;
73 OH_Drawing_SetTextStyleFontSize(txtStyle_, fontSize);
74 OH_Drawing_SetTextStyleFontWeight(txtStyle_, FONT_WEIGHT_400);
75 bool halfLeading = true;
76 OH_Drawing_SetTextStyleHalfLeading(txtStyle_, halfLeading);
77 const char *fontFamilies[] = {"Roboto"};
78 OH_Drawing_SetTextStyleFontFamilies(txtStyle_, 1, fontFamilies);
79 OH_Drawing_TypographyHandlerPushTextStyle(handler_, txtStyle_);
80 OH_Drawing_TypographyHandlerAddText(handler_, text.c_str());
81 OH_Drawing_TypographyHandlerPopTextStyle(handler_);
82 typography_ = OH_Drawing_CreateTypography(handler_);
83 OH_Drawing_TypographyLayout(typography_, maxWidth);
84 double position[2] = {DOUBLE_NUM_10, DOUBLE_NUM_15};
85 cBitmap_ = OH_Drawing_BitmapCreate();
86 OH_Drawing_BitmapFormat cFormat {COLOR_FORMAT_RGBA_8888, ALPHA_FORMAT_OPAQUE};
87 uint32_t width = ALIGNMENT20;
88 OH_Drawing_BitmapBuild(cBitmap_, width, height, &cFormat);
89 canvas_ = OH_Drawing_CanvasCreate();
90 OH_Drawing_CanvasBind(canvas_, cBitmap_);
91 OH_Drawing_CanvasClear(canvas_, OH_Drawing_ColorSetArgb(0xFF, 0xFF, 0xFF, 0xFF));
92 OH_Drawing_TypographyPaint(typography_, canvas_, position[0], position[1]);
93 }
94
TearDown()95 static void TearDown()
96 {
97 if (canvas_ != nullptr) {
98 OH_Drawing_CanvasDestroy(canvas_);
99 canvas_ = nullptr;
100 }
101 if (typography_ != nullptr) {
102 OH_Drawing_DestroyTypography(typography_);
103 typography_ = nullptr;
104 }
105 if (handler_ != nullptr) {
106 OH_Drawing_DestroyTypographyHandler(handler_);
107 handler_ = nullptr;
108 }
109 if (txtStyle_ != nullptr) {
110 OH_Drawing_DestroyTextStyle(txtStyle_);
111 txtStyle_ = nullptr;
112 }
113 if (typoStyle_ != nullptr) {
114 OH_Drawing_DestroyTypographyStyle(typoStyle_);
115 typoStyle_ = nullptr;
116 }
117 if (cBitmap_ != nullptr) {
118 OH_Drawing_BitmapDestroy(cBitmap_);
119 cBitmap_ = nullptr;
120 }
121 if (fontCollection_ != nullptr) {
122 OH_Drawing_DestroyFontCollection(fontCollection_);
123 fontCollection_ = nullptr;
124 }
125 }
126
PrepareTypographyCreate(const char * text)127 static void PrepareTypographyCreate(const char *text)
128 {
129 fontCollection2_ = OH_Drawing_CreateFontCollection();
130 typoStyle2_ = OH_Drawing_CreateTypographyStyle();
131 handler2_ = OH_Drawing_CreateTypographyHandler(typoStyle2_, fontCollection2_);
132 txtStyle2_ = OH_Drawing_CreateTextStyle();
133 OH_Drawing_SetTextStyleColor(txtStyle2_, OH_Drawing_ColorSetArgb(0xFF, 0x00, 0x00, 0x00));
134 double fontSize = TEXTLINE30;
135 OH_Drawing_SetTextStyleFontSize(txtStyle2_, fontSize);
136 OH_Drawing_SetTextStyleFontWeight(txtStyle2_, FONT_WEIGHT_400);
137 OH_Drawing_SetTextStyleBaseLine(txtStyle2_, TEXT_BASELINE_ALPHABETIC);
138 const char *fontFamilies[] = {"Roboto"};
139 OH_Drawing_SetTextStyleFontFamilies(txtStyle2_, 1, fontFamilies);
140 OH_Drawing_TypographyHandlerPushTextStyle(handler2_, txtStyle2_);
141 if (text != nullptr) {
142 OH_Drawing_TypographyHandlerAddText(handler2_, text);
143 }
144 }
145
TypographyTearDown()146 static void TypographyTearDown()
147 {
148 if (handler2_ != nullptr) {
149 OH_Drawing_DestroyTypographyHandler(handler2_);
150 handler2_ = nullptr;
151 }
152 if (txtStyle2_ != nullptr) {
153 OH_Drawing_DestroyTextStyle(txtStyle2_);
154 txtStyle2_ = nullptr;
155 }
156 if (fontCollection2_ != nullptr) {
157 OH_Drawing_DestroyFontCollection(fontCollection2_);
158 fontCollection2_ = nullptr;
159 }
160 if (typoStyle2_ != nullptr) {
161 OH_Drawing_DestroyTypographyStyle(typoStyle2_);
162 typoStyle2_ = nullptr;
163 }
164 }
165
OHDrawingMatchFontDescriptors001(napi_env env,napi_callback_info info)166 napi_value OHDrawingMatchFontDescriptors001(napi_env env, napi_callback_info info)
167 {
168 napi_value result = nullptr;
169 OH_Drawing_FontDescriptor *descArr = OH_Drawing_MatchFontDescriptors(nullptr, nullptr);
170 if (descArr == nullptr) {
171 napi_create_int32(env, SUCCESS, &result);
172 } else {
173 napi_create_int32(env, FAIL, &result);
174 }
175 return result;
176 }
177
OHDrawingMatchFontDescriptors002(napi_env env,napi_callback_info info)178 napi_value OHDrawingMatchFontDescriptors002(napi_env env, napi_callback_info info)
179 {
180 napi_value result = nullptr;
181 OH_Drawing_FontDescriptor *desc = OH_Drawing_CreateFontDescriptor();
182 size_t num = 0;
183 OH_Drawing_FontDescriptor *descArr = OH_Drawing_MatchFontDescriptors(desc, &num);
184 if ((descArr != nullptr) && (num != 0)) {
185 napi_create_int32(env, SUCCESS, &result);
186 } else {
187 napi_create_int32(env, FAIL, &result);
188 }
189 OH_Drawing_DestroyFontDescriptor(desc);
190 OH_Drawing_DestroyFontDescriptors(descArr, num);
191 return result;
192 }
193
OHDrawingMatchFontDescriptors003(napi_env env,napi_callback_info info)194 napi_value OHDrawingMatchFontDescriptors003(napi_env env, napi_callback_info info)
195 {
196 napi_value result = nullptr;
197 OH_Drawing_FontDescriptor *desc = OH_Drawing_CreateFontDescriptor();
198 desc->weight = -1;
199 size_t num = 0;
200 OH_Drawing_FontDescriptor *descArr = OH_Drawing_MatchFontDescriptors(desc, &num);
201 if ((descArr == nullptr) && (num == 0)) {
202 napi_create_int32(env, SUCCESS, &result);
203 } else {
204 napi_create_int32(env, FAIL, &result);
205 }
206 OH_Drawing_DestroyFontDescriptor(desc);
207 return result;
208 }
209
OHDrawingMatchFontDescriptors004(napi_env env,napi_callback_info info)210 napi_value OHDrawingMatchFontDescriptors004(napi_env env, napi_callback_info info)
211 {
212 napi_value result = nullptr;
213 napi_create_array_with_length(env, ARR_NUM_2, &result);
214 napi_value result1 = nullptr;
215 napi_value result2 = nullptr;
216
217 OH_Drawing_FontDescriptor *desc = OH_Drawing_CreateFontDescriptor();
218 char *fontFamily = strdup("HarmonyOS Sans");
219 desc->fontFamily = fontFamily;
220 size_t num = 0;
221 OH_Drawing_FontDescriptor *descArr = OH_Drawing_MatchFontDescriptors(desc, &num);
222 if ((descArr != nullptr) && (num >= 1) && (strcmp(descArr[0].fontFamily, fontFamily) == 0)) {
223 napi_create_int32(env, SUCCESS, &result1);
224 } else {
225 napi_create_int32(env, FAIL, &result1);
226 }
227 OH_Drawing_DestroyFontDescriptors(descArr, num);
228 free(fontFamily);
229 napi_set_element(env, result, ARR_NUM_0, result1);
230
231 fontFamily = strdup("HarmonyOS Sans Condensed");
232 desc->fontFamily = fontFamily;
233 descArr = OH_Drawing_MatchFontDescriptors(desc, &num);
234 if ((descArr != nullptr) && (num == 1) && (strcmp(descArr[0].fontFamily, fontFamily) == 0)) {
235 napi_create_int32(env, SUCCESS, &result2);
236 } else {
237 napi_create_int32(env, FAIL, &result2);
238 }
239 OH_Drawing_DestroyFontDescriptors(descArr, num);
240 OH_Drawing_DestroyFontDescriptor(desc);
241 napi_set_element(env, result, ARR_NUM_1, result2);
242 return result;
243 }
244
OHDrawingMatchFontDescriptors005(napi_env env,napi_callback_info info)245 napi_value OHDrawingMatchFontDescriptors005(napi_env env, napi_callback_info info)
246 {
247 napi_value result = nullptr;
248 OH_Drawing_FontDescriptor *desc = OH_Drawing_CreateFontDescriptor();
249 char *fontFamily = strdup("HarmonyOS Sans");
250 desc->fontFamily = fontFamily;
251 desc->weight = INT_NUM_400;
252 size_t num = 0;
253 OH_Drawing_FontDescriptor *descArr = OH_Drawing_MatchFontDescriptors(desc, &num);
254 if ((descArr != nullptr) && (num >= 1) && (strcmp(descArr[0].fontFamily, fontFamily) == 0) &&
255 (descArr[0].weight == INT_NUM_400)) {
256 napi_create_int32(env, SUCCESS, &result);
257 } else {
258 napi_create_int32(env, FAIL, &result);
259 }
260 OH_Drawing_DestroyFontDescriptors(descArr, num);
261 OH_Drawing_DestroyFontDescriptor(desc);
262 return result;
263 }
264
OHDrawingGetFontDescriptorByFullName001(napi_env env,napi_callback_info info)265 napi_value OHDrawingGetFontDescriptorByFullName001(napi_env env, napi_callback_info info)
266 {
267 napi_value result = nullptr;
268 OH_Drawing_SystemFontType fontType = OH_Drawing_SystemFontType(0b10000);
269 OH_Drawing_FontDescriptor *descriptor = OH_Drawing_GetFontDescriptorByFullName(nullptr, fontType);
270 if (descriptor == nullptr) {
271 napi_create_int32(env, SUCCESS, &result);
272 } else {
273 napi_create_int32(env, FAIL, &result);
274 }
275 return result;
276 }
277
OHDrawingGetFontDescriptorByFullName002(napi_env env,napi_callback_info info)278 napi_value OHDrawingGetFontDescriptorByFullName002(napi_env env, napi_callback_info info)
279 {
280 napi_value result = nullptr;
281 const uint8_t ttfFullname[] = {
282 0x4F, 0x60,
283 0x59, 0x7D,
284 0x00, 0x6F,
285 0x00, 0x70,
286 0x00, 0x65,
287 0x00, 0x6E,
288 0x00, 0x68,
289 0x00, 0x61,
290 0x00, 0x72,
291 0x00, 0x6D,
292 0x00, 0x6F,
293 0x00, 0x6E,
294 0x00, 0x79
295 };
296 OH_Drawing_String drawingString;
297 drawingString.strData = const_cast<uint8_t*>(ttfFullname);
298 drawingString.strLen = sizeof(ttfFullname);
299 OH_Drawing_FontDescriptor *descriptor =
300 OH_Drawing_GetFontDescriptorByFullName(&drawingString, OH_Drawing_SystemFontType::ALL);
301 if (descriptor == nullptr) {
302 napi_create_int32(env, SUCCESS, &result);
303 } else {
304 napi_create_int32(env, FAIL, &result);
305 }
306 return result;
307 }
308
OHDrawingGetFontDescriptorByFullName003(napi_env env,napi_callback_info info)309 napi_value OHDrawingGetFontDescriptorByFullName003(napi_env env, napi_callback_info info)
310 {
311 napi_value result = nullptr;
312 napi_create_array_with_length(env, ARR_NUM_4, &result);
313 napi_value result1 = nullptr;
314 napi_value result2 = nullptr;
315 napi_value result3 = nullptr;
316 napi_value result4 = nullptr;
317
318 OH_Drawing_SystemFontType fontType = OH_Drawing_SystemFontType::GENERIC;
319 OH_Drawing_Array *fontList = OH_Drawing_GetSystemFontFullNamesByType(fontType);
320 if (fontList != nullptr) {
321 napi_create_int32(env, SUCCESS, &result1);
322 } else {
323 napi_create_int32(env, FAIL, &result1);
324 }
325 napi_set_element(env, result, ARR_NUM_0, result1);
326
327 size_t size = OH_Drawing_GetDrawingArraySize(fontList);
328 if (size != 0) {
329 napi_create_int32(env, SUCCESS, &result2);
330 } else {
331 napi_create_int32(env, FAIL, &result2);
332 }
333 napi_set_element(env, result, ARR_NUM_1, result2);
334
335 for (size_t i = 0; i < size; i++) {
336 const OH_Drawing_String *fontFullName = OH_Drawing_GetSystemFontFullNameByIndex(fontList, i);
337 if (fontFullName != nullptr) {
338 napi_create_int32(env, SUCCESS, &result3);
339 } else {
340 napi_create_int32(env, FAIL, &result3);
341 }
342 napi_set_element(env, result, ARR_NUM_2, result3);
343
344 OH_Drawing_FontDescriptor *descriptor = OH_Drawing_GetFontDescriptorByFullName(fontFullName, fontType);
345 if (descriptor != nullptr) {
346 napi_create_int32(env, SUCCESS, &result4);
347 } else {
348 napi_create_int32(env, FAIL, &result4);
349 }
350 napi_set_element(env, result, ARR_NUM_3, result4);
351 OH_Drawing_DestroyFontDescriptor(descriptor);
352 }
353 OH_Drawing_DestroySystemFontFullNames(fontList);
354 return result;
355 }
356
OHDrawingGetFontDescriptorByFullName004(napi_env env,napi_callback_info info)357 napi_value OHDrawingGetFontDescriptorByFullName004(napi_env env, napi_callback_info info)
358 {
359 napi_value result = nullptr;
360 napi_create_array_with_length(env, ARR_NUM_4, &result);
361 napi_value result1 = nullptr;
362 napi_value result2 = nullptr;
363 napi_value result3 = nullptr;
364 napi_value result4 = nullptr;
365
366 OH_Drawing_SystemFontType fontType = OH_Drawing_SystemFontType(ALL | STYLISH);
367 OH_Drawing_Array *fontList = OH_Drawing_GetSystemFontFullNamesByType(fontType);
368 if (fontList != nullptr) {
369 napi_create_int32(env, SUCCESS, &result1);
370 } else {
371 napi_create_int32(env, FAIL, &result1);
372 }
373 napi_set_element(env, result, ARR_NUM_0, result1);
374
375 size_t size = OH_Drawing_GetDrawingArraySize(fontList);
376 if (size != 0) {
377 napi_create_int32(env, SUCCESS, &result2);
378 } else {
379 napi_create_int32(env, FAIL, &result2);
380 }
381 napi_set_element(env, result, ARR_NUM_1, result2);
382
383 for (size_t i = 0; i < size; i++) {
384 const OH_Drawing_String *fontFullName = OH_Drawing_GetSystemFontFullNameByIndex(fontList, i);
385 if (fontFullName != nullptr) {
386 napi_create_int32(env, SUCCESS, &result3);
387 } else {
388 napi_create_int32(env, FAIL, &result3);
389 }
390 napi_set_element(env, result, ARR_NUM_2, result3);
391
392 OH_Drawing_FontDescriptor *descriptor = OH_Drawing_GetFontDescriptorByFullName(fontFullName, fontType);
393 if (descriptor != nullptr) {
394 napi_create_int32(env, SUCCESS, &result4);
395 } else {
396 napi_create_int32(env, FAIL, &result4);
397 }
398 napi_set_element(env, result, ARR_NUM_3, result4);
399 OH_Drawing_DestroyFontDescriptor(descriptor);
400 }
401 OH_Drawing_DestroySystemFontFullNames(fontList);
402 return result;
403 }
404
OHDrawingGetSystemFontFullNamesByType001(napi_env env,napi_callback_info info)405 napi_value OHDrawingGetSystemFontFullNamesByType001(napi_env env, napi_callback_info info)
406 {
407 napi_value result = nullptr;
408 OH_Drawing_SystemFontType fontType = OH_Drawing_SystemFontType(0b10000);
409 OH_Drawing_Array *fontList = OH_Drawing_GetSystemFontFullNamesByType(fontType);
410 if (fontList == nullptr) {
411 napi_create_int32(env, SUCCESS, &result);
412 } else {
413 napi_create_int32(env, FAIL, &result);
414 }
415 return result;
416 }
417
OHDrawingGetSystemFontFullNamesByType002(napi_env env,napi_callback_info info)418 napi_value OHDrawingGetSystemFontFullNamesByType002(napi_env env, napi_callback_info info)
419 {
420 napi_value result = nullptr;
421 napi_create_array_with_length(env, ARR_NUM_4, &result);
422 napi_value result1 = nullptr;
423 napi_value result2 = nullptr;
424 napi_value result3 = nullptr;
425 napi_value result4 = nullptr;
426
427 OH_Drawing_SystemFontType fontType = OH_Drawing_SystemFontType::GENERIC;
428 OH_Drawing_Array *fontList = OH_Drawing_GetSystemFontFullNamesByType(fontType);
429 if (fontList != nullptr) {
430 napi_create_int32(env, SUCCESS, &result1);
431 } else {
432 napi_create_int32(env, FAIL, &result1);
433 }
434 napi_set_element(env, result, ARR_NUM_0, result1);
435
436 const OH_Drawing_String *fullName = OH_Drawing_GetSystemFontFullNameByIndex(fontList, INT_NUM_500);
437 if (fullName == nullptr) {
438 napi_create_int32(env, SUCCESS, &result2);
439 } else {
440 napi_create_int32(env, FAIL, &result2);
441 }
442 OH_Drawing_DestroySystemFontFullNames(fontList);
443 napi_set_element(env, result, ARR_NUM_1, result2);
444
445 const OH_Drawing_String *fullName1 = OH_Drawing_GetSystemFontFullNameByIndex(nullptr, 0);
446 if (fullName1 == nullptr) {
447 napi_create_int32(env, SUCCESS, &result3);
448 } else {
449 napi_create_int32(env, FAIL, &result3);
450 }
451 napi_set_element(env, result, ARR_NUM_2, result3);
452
453 const OH_Drawing_String *fullName2 = OH_Drawing_GetSystemFontFullNameByIndex(nullptr, INT_NUM_500);
454 if (fullName2 == nullptr) {
455 napi_create_int32(env, SUCCESS, &result4);
456 } else {
457 napi_create_int32(env, FAIL, &result4);
458 }
459 napi_set_element(env, result, ARR_NUM_3, result4);
460 OH_Drawing_DestroySystemFontFullNames(nullptr);
461 return result;
462 }
463
OHDrawingGetSystemFontFullNamesByType003(napi_env env,napi_callback_info info)464 napi_value OHDrawingGetSystemFontFullNamesByType003(napi_env env, napi_callback_info info)
465 {
466 napi_value result = nullptr;
467 napi_create_array_with_length(env, ARR_NUM_2, &result);
468 napi_value result1 = nullptr;
469 napi_value result2 = nullptr;
470 OH_Drawing_FontCollection *fc = OH_Drawing_CreateSharedFontCollection();
471 const char *fontFamily = "NotoSansCJKjp-Regular-Alphabetic";
472 const char *fontPath = "/system/fonts/NotoSansCJK-Regular.ttc";
473 OH_Drawing_RegisterFont(fc, fontFamily, fontPath);
474
475 OH_Drawing_Array *ttfs = OH_Drawing_GetSystemFontFullNamesByType(CUSTOMIZED);
476 size_t num = OH_Drawing_GetDrawingArraySize(ttfs);
477 if (num == 1) {
478 napi_create_int32(env, SUCCESS, &result1);
479 } else {
480 napi_create_int32(env, FAIL, &result1);
481 }
482 napi_set_element(env, result, ARR_NUM_0, result1);
483
484 for (size_t i = 0; i < num; i++) {
485 const OH_Drawing_String *fullName = OH_Drawing_GetSystemFontFullNameByIndex(ttfs, i);
486 OH_Drawing_FontDescriptor *fd = OH_Drawing_GetFontDescriptorByFullName(fullName, CUSTOMIZED);
487 if (strcmp(fd->fullName, "Noto Sans CJK JP") == 0) {
488 napi_create_int32(env, SUCCESS, &result2);
489 } else {
490 napi_create_int32(env, FAIL, &result2);
491 }
492 napi_set_element(env, result, ARR_NUM_1, result2);
493 }
494 OH_Drawing_ClearFontCaches(fc);
495 OH_Drawing_DestroyFontCollection(fc);
496 return result;
497 }
498
OHDrawingGetSystemFontFullNamesByType004(napi_env env,napi_callback_info info)499 napi_value OHDrawingGetSystemFontFullNamesByType004(napi_env env, napi_callback_info info)
500 {
501 napi_value result = nullptr;
502 OH_Drawing_FontCollection *fc = OH_Drawing_CreateSharedFontCollection();
503 const char *fontFamily = "xxxxxxx";
504 const char *fontPath = "/system/fonts/xxxxxxx.ttf";
505 OH_Drawing_RegisterFont(fc, fontFamily, fontPath);
506
507 OH_Drawing_Array *ttfs = OH_Drawing_GetSystemFontFullNamesByType(CUSTOMIZED);
508 size_t num = OH_Drawing_GetDrawingArraySize(ttfs);
509 if (num == 0) {
510 napi_create_int32(env, SUCCESS, &result);
511 } else {
512 napi_create_int32(env, FAIL, &result);
513 }
514 OH_Drawing_ClearFontCaches(fc);
515 OH_Drawing_DestroyFontCollection(fc);
516 return result;
517 }
518
OHDrawingGetSystemFontFullNameByIndex001(napi_env env,napi_callback_info info)519 napi_value OHDrawingGetSystemFontFullNameByIndex001(napi_env env, napi_callback_info info)
520 {
521 napi_value result = nullptr;
522 const OH_Drawing_String *fullName = OH_Drawing_GetSystemFontFullNameByIndex(nullptr, 0 | 500);
523 if (fullName == nullptr) {
524 napi_create_int32(env, SUCCESS, &result);
525 } else {
526 napi_create_int32(env, FAIL, &result);
527 }
528 OH_Drawing_DestroySystemFontFullNames(nullptr);
529 return result;
530 }
531
OHDrawingCreateLineTypography001(napi_env env,napi_callback_info info)532 napi_value OHDrawingCreateLineTypography001(napi_env env, napi_callback_info info)
533 {
534 napi_value result = nullptr;
535 OH_Drawing_TypographyCreate *handler_ = nullptr;
536 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler_);
537 if (lineTypography == nullptr) {
538 napi_create_int32(env, SUCCESS, &result);
539 } else {
540 napi_create_int32(env, FAIL, &result);
541 }
542 return result;
543 }
544
OHDrawingCreateLineTypography002(napi_env env,napi_callback_info info)545 napi_value OHDrawingCreateLineTypography002(napi_env env, napi_callback_info info)
546 {
547 napi_value result = nullptr;
548 OH_Drawing_TypographyCreate *handler_ = nullptr;
549 OH_Drawing_FontCollection *fontCollection_ = nullptr;
550 OH_Drawing_TypographyStyle *typoStyle_ = nullptr;
551 const char *text = "OpenHarmony\n";
552 fontCollection_ = OH_Drawing_CreateFontCollection();
553 typoStyle_ = OH_Drawing_CreateTypographyStyle();
554 handler_ = OH_Drawing_CreateTypographyHandler(typoStyle_, fontCollection_);
555 OH_Drawing_TypographyHandlerAddText(handler_, text);
556 OH_Drawing_LineTypography *lineTypography1 = OH_Drawing_CreateLineTypography(handler_);
557 if (lineTypography1 != nullptr) {
558 napi_create_int32(env, SUCCESS, &result);
559 } else {
560 napi_create_int32(env, FAIL, &result);
561 }
562 OH_Drawing_DestroyFontCollection(fontCollection_);
563 OH_Drawing_DestroyTypographyStyle(typoStyle_);
564 OH_Drawing_DestroyTypographyHandler(handler_);
565 OH_Drawing_DestroyLineTypography(lineTypography1);
566 return result;
567 }
568
OHDrawingCreateLineTypography003(napi_env env,napi_callback_info info)569 napi_value OHDrawingCreateLineTypography003(napi_env env, napi_callback_info info)
570 {
571 napi_value result = nullptr;
572 napi_create_array_with_length(env, ARR_NUM_2, &result);
573 napi_value result1 = nullptr;
574 napi_value result2 = nullptr;
575
576 PrepareTypographyCreate("OpenHarmony\n");
577 OH_Drawing_LineTypography *lineTypography1 = OH_Drawing_CreateLineTypography(handler2_);
578 if (lineTypography1 != nullptr) {
579 napi_create_int32(env, SUCCESS, &result1);
580 } else {
581 napi_create_int32(env, FAIL, &result1);
582 }
583 napi_set_element(env, result, ARR_NUM_0, result1);
584 OH_Drawing_DestroyLineTypography(lineTypography1);
585 TypographyTearDown();
586
587 OH_Drawing_LineTypography *nullLineTypograph = OH_Drawing_CreateLineTypography(nullptr);
588 if (nullLineTypograph == nullptr) {
589 napi_create_int32(env, SUCCESS, &result2);
590 } else {
591 napi_create_int32(env, FAIL, &result2);
592 }
593 napi_set_element(env, result, ARR_NUM_1, result2);
594 return result;
595 }
596
OHDrawingCreateLineTypography004(napi_env env,napi_callback_info info)597 napi_value OHDrawingCreateLineTypography004(napi_env env, napi_callback_info info)
598 {
599 napi_value result = nullptr;
600 PrepareTypographyCreate(nullptr);
601 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
602 if (lineTypography == nullptr) {
603 napi_create_int32(env, SUCCESS, &result);
604 } else {
605 napi_create_int32(env, FAIL, &result);
606 }
607 return result;
608 }
609
OHDrawingLineTypographyGetLineBreak001(napi_env env,napi_callback_info info)610 napi_value OHDrawingLineTypographyGetLineBreak001(napi_env env, napi_callback_info info)
611 {
612 napi_value result = nullptr;
613 OH_Drawing_TypographyCreate *handler_ = nullptr;
614 OH_Drawing_FontCollection *fontCollection_ = nullptr;
615 OH_Drawing_TypographyStyle *typoStyle_ = nullptr;
616 const char *text = "OpenHarmony\n";
617 fontCollection_ = OH_Drawing_CreateFontCollection();
618 typoStyle_ = OH_Drawing_CreateTypographyStyle();
619 handler_ = OH_Drawing_CreateTypographyHandler(typoStyle_, fontCollection_);
620 OH_Drawing_TypographyHandlerAddText(handler_, text);
621 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler_);
622 double maxWidth = DOUBLE_NUM_800;
623 size_t startIndex = 0;
624 auto count = OH_Drawing_LineTypographyGetLineBreak(lineTypography, startIndex, maxWidth);
625 if (count == strlen(text)) {
626 napi_create_int32(env, SUCCESS, &result);
627 } else {
628 napi_create_int32(env, FAIL, &result);
629 }
630 OH_Drawing_DestroyFontCollection(fontCollection_);
631 OH_Drawing_DestroyTypographyStyle(typoStyle_);
632 OH_Drawing_DestroyTypographyHandler(handler_);
633 OH_Drawing_DestroyLineTypography(lineTypography);
634 return result;
635 }
636
OHDrawingLineTypographyGetLineBreak002(napi_env env,napi_callback_info info)637 napi_value OHDrawingLineTypographyGetLineBreak002(napi_env env, napi_callback_info info)
638 {
639 napi_value result = nullptr;
640 napi_create_array_with_length(env, ARR_NUM_2, &result);
641 napi_value result1 = nullptr;
642 napi_value result2 = nullptr;
643
644 const char *text = "OpenHarmony\n";
645 PrepareTypographyCreate(text);
646 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
647 if (lineTypography != nullptr) {
648 napi_create_int32(env, SUCCESS, &result1);
649 } else {
650 napi_create_int32(env, FAIL, &result1);
651 }
652 napi_set_element(env, result, ARR_NUM_0, result1);
653
654 double maxWidth = DOUBLE_NUM_800;
655 size_t startIndex = 0;
656 auto count = OH_Drawing_LineTypographyGetLineBreak(lineTypography, startIndex, maxWidth);
657 if (count == strlen(text)) {
658 napi_create_int32(env, SUCCESS, &result2);
659 } else {
660 napi_create_int32(env, FAIL, &result2);
661 }
662 napi_set_element(env, result, ARR_NUM_1, result2);
663 OH_Drawing_DestroyLineTypography(lineTypography);
664 TypographyTearDown();
665 return result;
666 }
667
OHDrawingLineTypographyGetLineBreak003(napi_env env,napi_callback_info info)668 napi_value OHDrawingLineTypographyGetLineBreak003(napi_env env, napi_callback_info info)
669 {
670 napi_value result = nullptr;
671 napi_create_array_with_length(env, ARR_NUM_2, &result);
672 napi_value result1 = nullptr;
673 napi_value result2 = nullptr;
674
675 const char *text1 = "hello\n world";
676 const char *text2 = "hello\n";
677 PrepareTypographyCreate(text1);
678 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
679 if (lineTypography != nullptr) {
680 napi_create_int32(env, SUCCESS, &result1);
681 } else {
682 napi_create_int32(env, FAIL, &result1);
683 }
684 napi_set_element(env, result, ARR_NUM_0, result1);
685
686 double maxWidth = DOUBLE_NUM_800;
687 size_t startIndex = 0;
688 auto count = OH_Drawing_LineTypographyGetLineBreak(lineTypography, startIndex, maxWidth);
689 if (count == strlen(text2)) {
690 napi_create_int32(env, SUCCESS, &result2);
691 } else {
692 napi_create_int32(env, FAIL, &result2);
693 }
694 napi_set_element(env, result, ARR_NUM_1, result2);
695 OH_Drawing_DestroyLineTypography(lineTypography);
696 TypographyTearDown();
697 return result;
698 }
699
OHDrawingLineTypographyGetLineBreak004(napi_env env,napi_callback_info info)700 napi_value OHDrawingLineTypographyGetLineBreak004(napi_env env, napi_callback_info info)
701 {
702 napi_value result = nullptr;
703 napi_create_array_with_length(env, ARR_NUM_3, &result);
704 napi_value result1 = nullptr;
705 napi_value result2 = nullptr;
706 napi_value result3 = nullptr;
707
708 const char *text = "OpenHarmoney\n";
709 PrepareTypographyCreate(text);
710 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
711 if (lineTypography != nullptr) {
712 napi_create_int32(env, SUCCESS, &result1);
713 } else {
714 napi_create_int32(env, FAIL, &result1);
715 }
716 napi_set_element(env, result, ARR_NUM_0, result1);
717
718 double maxWidth = DOUBLE_NUM_800;
719 size_t startIndex = strlen(text) - 1;
720 auto count = OH_Drawing_LineTypographyGetLineBreak(lineTypography, startIndex, maxWidth);
721 if (count == 1) {
722 napi_create_int32(env, SUCCESS, &result2);
723 } else {
724 napi_create_int32(env, FAIL, &result2);
725 }
726 napi_set_element(env, result, ARR_NUM_1, result2);
727
728 maxWidth = 0;
729 startIndex = 0;
730 count = OH_Drawing_LineTypographyGetLineBreak(lineTypography, startIndex, maxWidth);
731 if (count == 0) {
732 napi_create_int32(env, SUCCESS, &result3);
733 } else {
734 napi_create_int32(env, FAIL, &result3);
735 }
736 napi_set_element(env, result, ARR_NUM_2, result3);
737 OH_Drawing_DestroyLineTypography(lineTypography);
738 TypographyTearDown();
739 return result;
740 }
741
OHDrawingLineTypographyGetLineBreak005(napi_env env,napi_callback_info info)742 napi_value OHDrawingLineTypographyGetLineBreak005(napi_env env, napi_callback_info info)
743 {
744 napi_value result = nullptr;
745 napi_create_array_with_length(env, ARR_NUM_3, &result);
746 napi_value result1 = nullptr;
747 napi_value result2 = nullptr;
748 napi_value result3 = nullptr;
749
750 const char *text = "OpenHarmoney\n";
751 PrepareTypographyCreate(text);
752 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
753 if (lineTypography != nullptr) {
754 napi_create_int32(env, SUCCESS, &result1);
755 } else {
756 napi_create_int32(env, FAIL, &result1);
757 }
758 napi_set_element(env, result, ARR_NUM_0, result1);
759
760 double maxWidth = DOUBLE_NUM_800;
761 size_t startIndex = strlen(text);
762 auto count = OH_Drawing_LineTypographyGetLineBreak(lineTypography, startIndex, maxWidth);
763 if (count == 0) {
764 napi_create_int32(env, SUCCESS, &result2);
765 } else {
766 napi_create_int32(env, FAIL, &result2);
767 }
768 napi_set_element(env, result, ARR_NUM_1, result2);
769
770 maxWidth = DOUBLE_NUM_001;
771 startIndex = 0;
772 count = OH_Drawing_LineTypographyGetLineBreak(lineTypography, startIndex, maxWidth);
773 if (count == 1) {
774 napi_create_int32(env, SUCCESS, &result3);
775 } else {
776 napi_create_int32(env, FAIL, &result3);
777 }
778 napi_set_element(env, result, ARR_NUM_2, result3);
779 OH_Drawing_DestroyLineTypography(lineTypography);
780 TypographyTearDown();
781 return result;
782 }
783
OHDrawingLineTypographyCreateLine001(napi_env env,napi_callback_info info)784 napi_value OHDrawingLineTypographyCreateLine001(napi_env env, napi_callback_info info)
785 {
786 napi_value result = nullptr;
787 OH_Drawing_TypographyCreate *handler_ = nullptr;
788 OH_Drawing_FontCollection *fontCollection_ = nullptr;
789 OH_Drawing_TypographyStyle *typoStyle_ = nullptr;
790 const char *text = "OpenHarmony\n";
791 fontCollection_ = OH_Drawing_CreateFontCollection();
792 typoStyle_ = OH_Drawing_CreateTypographyStyle();
793 handler_ = OH_Drawing_CreateTypographyHandler(typoStyle_, fontCollection_);
794 OH_Drawing_TypographyHandlerAddText(handler_, text);
795 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler_);
796 size_t startIndex = 0;
797 size_t count = strlen(text);
798 auto line = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
799 if (line != nullptr) {
800 napi_create_int32(env, SUCCESS, &result);
801 } else {
802 napi_create_int32(env, FAIL, &result);
803 }
804 OH_Drawing_DestroyFontCollection(fontCollection_);
805 OH_Drawing_DestroyTypographyStyle(typoStyle_);
806 OH_Drawing_DestroyTypographyHandler(handler_);
807 OH_Drawing_DestroyLineTypography(lineTypography);
808 OH_Drawing_DestroyTextLine(line);
809 return result;
810 }
811
OHDrawingLineTypographyCreateLine002(napi_env env,napi_callback_info info)812 napi_value OHDrawingLineTypographyCreateLine002(napi_env env, napi_callback_info info)
813 {
814 napi_value result = nullptr;
815 napi_create_array_with_length(env, ARR_NUM_2, &result);
816 napi_value result1 = nullptr;
817 napi_value result2 = nullptr;
818
819 const char *text = "OpenHarmoney\n";
820 PrepareTypographyCreate(text);
821 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
822 if (lineTypography != nullptr) {
823 napi_create_int32(env, SUCCESS, &result1);
824 } else {
825 napi_create_int32(env, FAIL, &result1);
826 }
827 napi_set_element(env, result, ARR_NUM_0, result1);
828
829 size_t startIndex = 0;
830 size_t count = strlen(text);
831 auto line = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
832 if ((line != nullptr) && (OH_Drawing_TextLineGetGlyphCount(line) == 12L)) {
833 napi_create_int32(env, SUCCESS, &result2);
834 } else {
835 napi_create_int32(env, FAIL, &result2);
836 }
837 napi_set_element(env, result, ARR_NUM_1, result2);
838 OH_Drawing_DestroyTextLine(line);
839 OH_Drawing_DestroyLineTypography(lineTypography);
840 TypographyTearDown();
841 return result;
842 }
843
OHDrawingLineTypographyCreateLine003(napi_env env,napi_callback_info info)844 napi_value OHDrawingLineTypographyCreateLine003(napi_env env, napi_callback_info info)
845 {
846 napi_value result = nullptr;
847 napi_create_array_with_length(env, ARR_NUM_2, &result);
848 napi_value result1 = nullptr;
849 napi_value result2 = nullptr;
850
851 const char *text = "Hello\n world!";
852 PrepareTypographyCreate(text);
853 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
854 if (lineTypography != nullptr) {
855 napi_create_int32(env, SUCCESS, &result1);
856 } else {
857 napi_create_int32(env, FAIL, &result1);
858 }
859 napi_set_element(env, result, ARR_NUM_0, result1);
860
861 size_t startIndex = 0;
862 size_t count = strlen(text);
863 auto line = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
864 if ((line != nullptr) && (OH_Drawing_TextLineGetGlyphCount(line) == 5L)) {
865 napi_create_int32(env, SUCCESS, &result2);
866 } else {
867 napi_create_int32(env, FAIL, &result2);
868 }
869 napi_set_element(env, result, ARR_NUM_1, result2);
870 OH_Drawing_DestroyTextLine(line);
871 OH_Drawing_DestroyLineTypography(lineTypography);
872 TypographyTearDown();
873 return result;
874 }
875
OHDrawingLineTypographyCreateLine004(napi_env env,napi_callback_info info)876 napi_value OHDrawingLineTypographyCreateLine004(napi_env env, napi_callback_info info)
877 {
878 napi_value result = nullptr;
879 napi_create_array_with_length(env, ARR_NUM_3, &result);
880 napi_value result1 = nullptr;
881 napi_value result2 = nullptr;
882 napi_value result3 = nullptr;
883
884 const char *text = "OpenHarmoney\n";
885 PrepareTypographyCreate(text);
886 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
887 if (lineTypography != nullptr) {
888 napi_create_int32(env, SUCCESS, &result1);
889 } else {
890 napi_create_int32(env, FAIL, &result1);
891 }
892 napi_set_element(env, result, ARR_NUM_0, result1);
893
894 size_t startIndex = strlen(text) - 1;
895 size_t count = 1;
896 auto line1 = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
897 if ((line1 != nullptr) && (OH_Drawing_TextLineGetGlyphCount(line1) == 0L)) {
898 napi_create_int32(env, SUCCESS, &result2);
899 } else {
900 napi_create_int32(env, FAIL, &result2);
901 }
902 napi_set_element(env, result, ARR_NUM_1, result2);
903 OH_Drawing_DestroyTextLine(line1);
904
905 startIndex = 0;
906 count = 0;
907 auto line2 = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
908 if ((line2 != nullptr) && (OH_Drawing_TextLineGetGlyphCount(line2) == 12L)) {
909 napi_create_int32(env, SUCCESS, &result3);
910 } else {
911 napi_create_int32(env, FAIL, &result3);
912 }
913 napi_set_element(env, result, ARR_NUM_2, result3);
914 OH_Drawing_DestroyTextLine(line2);
915 OH_Drawing_DestroyLineTypography(lineTypography);
916 TypographyTearDown();
917 return result;
918 }
919
OHDrawingLineTypographyCreateLine005(napi_env env,napi_callback_info info)920 napi_value OHDrawingLineTypographyCreateLine005(napi_env env, napi_callback_info info)
921 {
922 napi_value result = nullptr;
923 napi_create_array_with_length(env, ARR_NUM_3, &result);
924 napi_value result1 = nullptr;
925 napi_value result2 = nullptr;
926 napi_value result3 = nullptr;
927
928 const char *text = "OpenHarmoney\n";
929 PrepareTypographyCreate(text);
930 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
931 if (lineTypography != nullptr) {
932 napi_create_int32(env, SUCCESS, &result1);
933 } else {
934 napi_create_int32(env, FAIL, &result1);
935 }
936 napi_set_element(env, result, ARR_NUM_0, result1);
937
938 size_t startIndex = strlen(text);
939 size_t count = 1;
940 auto line1 = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
941 if ((line1 == nullptr) && (OH_Drawing_TextLineGetGlyphCount(line1) == 0L)) {
942 napi_create_int32(env, SUCCESS, &result2);
943 } else {
944 napi_create_int32(env, FAIL, &result2);
945 }
946 napi_set_element(env, result, ARR_NUM_1, result2);
947 OH_Drawing_DestroyTextLine(line1);
948
949 startIndex = 0;
950 count = strlen(text) + 1;
951 auto line2 = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
952 if ((line2 == nullptr) && (OH_Drawing_TextLineGetGlyphCount(line2) == 0L)) {
953 napi_create_int32(env, SUCCESS, &result3);
954 } else {
955 napi_create_int32(env, FAIL, &result3);
956 }
957 napi_set_element(env, result, ARR_NUM_2, result3);
958 OH_Drawing_DestroyTextLine(line2);
959 OH_Drawing_DestroyLineTypography(lineTypography);
960 TypographyTearDown();
961 return result;
962 }
963
OHDrawingLineTypographyCreateLine006(napi_env env,napi_callback_info info)964 napi_value OHDrawingLineTypographyCreateLine006(napi_env env, napi_callback_info info)
965 {
966 napi_value result = nullptr;
967 napi_create_array_with_length(env, ARR_NUM_2, &result);
968 napi_value result1 = nullptr;
969 napi_value result2 = nullptr;
970
971 std::string text = "Hello \t 中国 测 World \n !@#$%^&*~(){}[] 123 4567890 - = ,. < >、/Drawing testlp 试 ";
972 text += "Drawing \n\n \u231A \u513B \u00A9\uFE0F aaa clp11⌚مرحبا中国 测 World测试文本";
973 PrepareTypographyCreate(text.c_str());
974 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
975 if (lineTypography != nullptr) {
976 napi_create_int32(env, SUCCESS, &result1);
977 } else {
978 napi_create_int32(env, FAIL, &result1);
979 }
980 napi_set_element(env, result, ARR_NUM_0, result1);
981
982 double maxWidth = DOUBLE_NUM_800;
983 size_t startIndex = 0;
984 int yPosition = 0;
985 do {
986 auto count = OH_Drawing_LineTypographyGetLineBreak(lineTypography, startIndex, maxWidth);
987 if (count == 0) {
988 break;
989 }
990 OH_Drawing_TextLine *line = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
991 if (line != nullptr) {
992 napi_create_int32(env, SUCCESS, &result2);
993 } else {
994 napi_create_int32(env, FAIL, &result2);
995 }
996 napi_set_element(env, result, ARR_NUM_1, result2);
997 yPosition += TEXTLINE30;
998 OH_Drawing_DestroyTextLine(line);
999 startIndex += count;
1000 } while (true);
1001 OH_Drawing_DestroyLineTypography(lineTypography);
1002 TypographyTearDown();
1003 return result;
1004 }
1005
OHDrawingFontGetBounds001(napi_env env,napi_callback_info info)1006 napi_value OHDrawingFontGetBounds001(napi_env env, napi_callback_info info)
1007 {
1008 napi_value result = nullptr;
1009 napi_create_array_with_length(env, ARR_NUM_3, &result);
1010 napi_value result1 = nullptr;
1011 napi_value result2 = nullptr;
1012 napi_value result3 = nullptr;
1013
1014 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1015 if (font != nullptr) {
1016 napi_create_int32(env, SUCCESS, &result1);
1017 } else {
1018 napi_create_int32(env, FAIL, &result1);
1019 }
1020 napi_set_element(env, result, ARR_NUM_0, result1);
1021
1022 OH_Drawing_FontSetTextSize(font, NUM_50);
1023 const char *space = " ";
1024 uint32_t count = OH_Drawing_FontCountText(font, space, strlen(space), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1025 if (count == strlen(space)) {
1026 napi_create_int32(env, SUCCESS, &result2);
1027 } else {
1028 napi_create_int32(env, FAIL, &result2);
1029 }
1030 napi_set_element(env, result, ARR_NUM_1, result2);
1031
1032 uint16_t glyphs[count];
1033 OH_Drawing_FontTextToGlyphs(font, space, strlen(space), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8,
1034 glyphs, count);
1035 OH_Drawing_Array *outRectarr = OH_Drawing_RectCreateArray(count - 1);
1036 if ((outRectarr != nullptr) &&
1037 (OH_Drawing_FontGetBounds(font, glyphs, count, outRectarr) == OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1038 (OH_Drawing_FontGetBounds(nullptr, glyphs, count, outRectarr) == OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1039 (OH_Drawing_FontGetBounds(font, nullptr, count, outRectarr) == OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1040 (OH_Drawing_FontGetBounds(font, glyphs, count, nullptr) == OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1041 (OH_Drawing_RectDestroyArray(outRectarr) == OH_DRAWING_SUCCESS)) {
1042 napi_create_int32(env, SUCCESS, &result3);
1043 } else {
1044 napi_create_int32(env, FAIL, &result3);
1045 }
1046 napi_set_element(env, result, ARR_NUM_2, result3);
1047 OH_Drawing_FontDestroy(font);
1048 return result;
1049 }
1050
OHDrawingFontGetBounds002(napi_env env,napi_callback_info info)1051 napi_value OHDrawingFontGetBounds002(napi_env env, napi_callback_info info)
1052 {
1053 napi_value result = nullptr;
1054 napi_create_array_with_length(env, ARR_NUM_3, &result);
1055 napi_value result1 = nullptr;
1056 napi_value result2 = nullptr;
1057 napi_value result3 = nullptr;
1058
1059 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1060 OH_Drawing_FontSetTextSize(font, NUM_50);
1061 const char *str = "helloworld";
1062 uint32_t count = OH_Drawing_FontCountText(font, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1063 uint16_t glyphs[count];
1064 OH_Drawing_FontTextToGlyphs(font, str, strlen(str), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8,
1065 glyphs, count);
1066 OH_Drawing_Array *outRectarr = OH_Drawing_RectCreateArray(count);
1067 size_t size = 0;
1068 if ((OH_Drawing_RectGetArraySize(outRectarr, &size) == OH_DRAWING_SUCCESS) &&
1069 (size == count) && (OH_Drawing_FontGetBounds(font, glyphs, count, outRectarr) == OH_DRAWING_SUCCESS)) {
1070 napi_create_int32(env, SUCCESS, &result1);
1071 } else {
1072 napi_create_int32(env, FAIL, &result1);
1073 }
1074 napi_set_element(env, result, ARR_NUM_0, result1);
1075
1076 for (int i = 0; i < count; i++) {
1077 OH_Drawing_Rect *iter = nullptr;
1078 if ((OH_Drawing_RectGetArrayElement(outRectarr, i, &iter) == OH_DRAWING_SUCCESS) &&
1079 (iter != nullptr) && (OH_Drawing_RectGetWidth(iter) > 0) &&
1080 (OH_Drawing_RectGetHeight(iter) > 0)) {
1081 napi_create_int32(env, SUCCESS, &result2);
1082 } else {
1083 napi_create_int32(env, FAIL, &result2);
1084 }
1085 napi_set_element(env, result, ARR_NUM_1, result2);
1086 }
1087
1088 if (OH_Drawing_RectDestroyArray(outRectarr) == OH_DRAWING_SUCCESS) {
1089 napi_create_int32(env, SUCCESS, &result3);
1090 } else {
1091 napi_create_int32(env, FAIL, &result3);
1092 }
1093 napi_set_element(env, result, ARR_NUM_2, result3);
1094 OH_Drawing_FontDestroy(font);
1095 return result;
1096 }
1097
OHDrawingFontGetBounds003(napi_env env,napi_callback_info info)1098 napi_value OHDrawingFontGetBounds003(napi_env env, napi_callback_info info)
1099 {
1100 napi_value result = nullptr;
1101 napi_create_array_with_length(env, ARR_NUM_3, &result);
1102 napi_value result1 = nullptr;
1103 napi_value result2 = nullptr;
1104 napi_value result3 = nullptr;
1105
1106 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1107 OH_Drawing_FontSetTextSize(font, NUM_50);
1108 const char *space = " ";
1109 uint32_t count = OH_Drawing_FontCountText(font, space, strlen(space), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1110 uint16_t glyphs[count];
1111 OH_Drawing_FontTextToGlyphs(font, space, strlen(space), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8,
1112 glyphs, count);
1113 OH_Drawing_Array *outRectarr = OH_Drawing_RectCreateArray(count);
1114 size_t size = 0;
1115 if ((OH_Drawing_RectGetArraySize(outRectarr, &size) == OH_DRAWING_SUCCESS) &&
1116 (size == count) && (OH_Drawing_FontGetBounds(font, glyphs, count, outRectarr) == OH_DRAWING_SUCCESS)) {
1117 napi_create_int32(env, SUCCESS, &result1);
1118 } else {
1119 napi_create_int32(env, FAIL, &result1);
1120 }
1121 napi_set_element(env, result, ARR_NUM_0, result1);
1122
1123 for (int i = 0; i < count; i++) {
1124 OH_Drawing_Rect *iter = nullptr;
1125 if ((OH_Drawing_RectGetArrayElement(outRectarr, i, &iter) == OH_DRAWING_SUCCESS) &&
1126 (iter != nullptr) && (OH_Drawing_RectGetWidth(iter) == 0) &&
1127 (OH_Drawing_RectGetHeight(iter) == 0)) {
1128 napi_create_int32(env, SUCCESS, &result2);
1129 } else {
1130 napi_create_int32(env, FAIL, &result2);
1131 }
1132 napi_set_element(env, result, ARR_NUM_1, result2);
1133 }
1134
1135 if (OH_Drawing_RectDestroyArray(outRectarr) == OH_DRAWING_SUCCESS) {
1136 napi_create_int32(env, SUCCESS, &result3);
1137 } else {
1138 napi_create_int32(env, FAIL, &result3);
1139 }
1140 napi_set_element(env, result, ARR_NUM_2, result3);
1141 OH_Drawing_FontDestroy(font);
1142 return result;
1143 }
1144
OHDrawingRectDestroyArray001(napi_env env,napi_callback_info info)1145 napi_value OHDrawingRectDestroyArray001(napi_env env, napi_callback_info info)
1146 {
1147 napi_value result = nullptr;
1148 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1149 OH_Drawing_FontSetTextSize(font, NUM_50);
1150 const char *space = " ";
1151 uint32_t count = OH_Drawing_FontCountText(font, space, strlen(space), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8);
1152 uint16_t glyphs[count];
1153 OH_Drawing_FontTextToGlyphs(font, space, strlen(space), OH_Drawing_TextEncoding::TEXT_ENCODING_UTF8,
1154 glyphs, count);
1155 OH_Drawing_Array *outRectarr = OH_Drawing_RectCreateArray(count - 1);
1156 if (OH_Drawing_RectDestroyArray(outRectarr) == OH_DRAWING_SUCCESS) {
1157 napi_create_int32(env, SUCCESS, &result);
1158 } else {
1159 napi_create_int32(env, FAIL, &result);
1160 }
1161 OH_Drawing_FontDestroy(font);
1162 return result;
1163 }
1164
OHDrawingRectGetArraySize001(napi_env env,napi_callback_info info)1165 napi_value OHDrawingRectGetArraySize001(napi_env env, napi_callback_info info)
1166 {
1167 napi_value result = nullptr;
1168 napi_create_array_with_length(env, ARR_NUM_2, &result);
1169 napi_value result1 = nullptr;
1170 napi_value result2 = nullptr;
1171
1172 OH_Drawing_Array *rectArray = OH_Drawing_RectCreateArray(NUM_50);
1173 if (rectArray != nullptr) {
1174 napi_create_int32(env, SUCCESS, &result1);
1175 } else {
1176 napi_create_int32(env, FAIL, &result1);
1177 }
1178 napi_set_element(env, result, ARR_NUM_0, result1);
1179
1180 size_t size = 0;
1181 if ((OH_Drawing_RectGetArraySize(nullptr, &size) == OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1182 (OH_Drawing_RectGetArraySize(rectArray, nullptr) == OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1183 (OH_Drawing_RectDestroyArray(rectArray) == OH_DRAWING_SUCCESS)) {
1184 napi_create_int32(env, SUCCESS, &result2);
1185 } else {
1186 napi_create_int32(env, FAIL, &result2);
1187 }
1188 napi_set_element(env, result, ARR_NUM_1, result2);
1189 return result;
1190 }
1191
OHDrawingRectGetArraySize002(napi_env env,napi_callback_info info)1192 napi_value OHDrawingRectGetArraySize002(napi_env env, napi_callback_info info)
1193 {
1194 napi_value result = nullptr;
1195 napi_create_array_with_length(env, ARR_NUM_2, &result);
1196 napi_value result1 = nullptr;
1197 napi_value result2 = nullptr;
1198
1199 OH_Drawing_Array *rectArray = OH_Drawing_RectCreateArray(NUM_10);
1200 if (rectArray != nullptr) {
1201 napi_create_int32(env, SUCCESS, &result1);
1202 } else {
1203 napi_create_int32(env, FAIL, &result1);
1204 }
1205 napi_set_element(env, result, ARR_NUM_0, result1);
1206
1207 size_t size = 0;
1208 if ((OH_Drawing_RectGetArraySize(rectArray, &size) == OH_DRAWING_SUCCESS) && (size == NUM_10) &&
1209 (OH_Drawing_RectDestroyArray(rectArray) == OH_DRAWING_SUCCESS)) {
1210 napi_create_int32(env, SUCCESS, &result2);
1211 } else {
1212 napi_create_int32(env, FAIL, &result2);
1213 }
1214 napi_set_element(env, result, ARR_NUM_1, result2);
1215 return result;
1216 }
1217
OHDrawingRectGetArrayElement001(napi_env env,napi_callback_info info)1218 napi_value OHDrawingRectGetArrayElement001(napi_env env, napi_callback_info info)
1219 {
1220 napi_value result = nullptr;
1221 size_t size = NUM_50;
1222 OH_Drawing_Array *rectArray = OH_Drawing_RectCreateArray(size);
1223 OH_Drawing_Rect *rect = nullptr;
1224 if ((OH_Drawing_RectGetArrayElement(rectArray, size, &rect) == OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1225 (OH_Drawing_RectGetArrayElement(rectArray, size - 1, nullptr) == OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1226 (OH_Drawing_RectGetArrayElement(rectArray, size - 1, &rect) == OH_DRAWING_SUCCESS)) {
1227 napi_create_int32(env, SUCCESS, &result);
1228 } else {
1229 napi_create_int32(env, FAIL, &result);
1230 }
1231 return result;
1232 }
1233
OHDrawingCreateTextTab001(napi_env env,napi_callback_info info)1234 napi_value OHDrawingCreateTextTab001(napi_env env, napi_callback_info info)
1235 {
1236 napi_value result = nullptr;
1237 OH_Drawing_TextTab *textTab = OH_Drawing_CreateTextTab(TEXT_ALIGN_LEFT, DOUBLE_NUM_0);
1238 if (textTab != nullptr) {
1239 napi_create_int32(env, SUCCESS, &result);
1240 } else {
1241 napi_create_int32(env, FAIL, &result);
1242 }
1243 OH_Drawing_DestroyTextTab(textTab);
1244 return result;
1245 }
1246
OHDrawingGetTextTabAlignment001(napi_env env,napi_callback_info info)1247 napi_value OHDrawingGetTextTabAlignment001(napi_env env, napi_callback_info info)
1248 {
1249 napi_value result = nullptr;
1250 OH_Drawing_TextTab *textTab = OH_Drawing_CreateTextTab(TEXT_ALIGN_LEFT, DOUBLE_NUM_0);
1251 if (OH_Drawing_GetTextTabAlignment(textTab) == TEXT_ALIGN_LEFT) {
1252 napi_create_int32(env, SUCCESS, &result);
1253 } else {
1254 napi_create_int32(env, FAIL, &result);
1255 }
1256 OH_Drawing_DestroyTextTab(textTab);
1257 return result;
1258 }
1259
OHDrawingGetTextTabLocation001(napi_env env,napi_callback_info info)1260 napi_value OHDrawingGetTextTabLocation001(napi_env env, napi_callback_info info)
1261 {
1262 napi_value result = nullptr;
1263 OH_Drawing_TextTab *textTab = OH_Drawing_CreateTextTab(TEXT_ALIGN_LEFT, DOUBLE_NUM_0);
1264 if (OH_Drawing_GetTextTabLocation(textTab) == DOUBLE_NUM_0) {
1265 napi_create_int32(env, SUCCESS, &result);
1266 } else {
1267 napi_create_int32(env, FAIL, &result);
1268 }
1269 OH_Drawing_DestroyTextTab(textTab);
1270 return result;
1271 }
1272
OHDrawingFontGetTextPath001(napi_env env,napi_callback_info info)1273 napi_value OHDrawingFontGetTextPath001(napi_env env, napi_callback_info info)
1274 {
1275 napi_value result = nullptr;
1276 OH_Drawing_Font *font = OH_Drawing_FontCreate();
1277 const char *str = "Hello 中文";
1278 size_t length = std::char_traits<char>::length(str);
1279 float x = 12.0f;
1280 float y = 150.0f;
1281 OH_Drawing_Path *path = OH_Drawing_PathCreate();
1282 if ((OH_Drawing_FontGetTextPath(nullptr, str, sizeof(char) * length, TEXT_ENCODING_UTF8, x, y, path) ==
1283 OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1284 (OH_Drawing_FontGetTextPath(font, nullptr, sizeof(char) * length, TEXT_ENCODING_UTF8, x, y, path) ==
1285 OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1286 (OH_Drawing_FontGetTextPath(font, str, 0, TEXT_ENCODING_UTF8, x, y, path) ==
1287 OH_DRAWING_ERROR_INVALID_PARAMETER) &&
1288 (OH_Drawing_FontGetTextPath(font, str, sizeof(char) * length, TEXT_ENCODING_UTF8, x, y, nullptr) ==
1289 OH_DRAWING_ERROR_INVALID_PARAMETER)) {
1290 napi_create_int32(env, SUCCESS, &result);
1291 } else {
1292 napi_create_int32(env, FAIL, &result);
1293 }
1294 OH_Drawing_FontDestroy(font);
1295 return result;
1296 }
1297
OHDrawingGetDrawingArraySize001(napi_env env,napi_callback_info info)1298 napi_value OHDrawingGetDrawingArraySize001(napi_env env, napi_callback_info info)
1299 {
1300 napi_value result = nullptr;
1301 OH_Drawing_SystemFontType fontType = OH_Drawing_SystemFontType::GENERIC;
1302 OH_Drawing_Array *fontList = OH_Drawing_GetSystemFontFullNamesByType(fontType);
1303 size_t size = OH_Drawing_GetDrawingArraySize(fontList);
1304 if (size != 0) {
1305 napi_create_int32(env, SUCCESS, &result);
1306 } else {
1307 napi_create_int32(env, FAIL, &result);
1308 }
1309 OH_Drawing_DestroySystemFontFullNames(fontList);
1310 return result;
1311 }
1312
OHDrawingTypographyGetTextLines001(napi_env env,napi_callback_info info)1313 napi_value OHDrawingTypographyGetTextLines001(napi_env env, napi_callback_info info)
1314 {
1315 napi_value result = nullptr;
1316 PrepareCreateTextLine("");
1317 OH_Drawing_Array *textLines = textLines = OH_Drawing_TypographyGetTextLines(typography_);
1318 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1319 if (size == 0) {
1320 napi_create_int32(env, SUCCESS, &result);
1321 } else {
1322 napi_create_int32(env, FAIL, &result);
1323 }
1324 OH_Drawing_DestroyTextLines(textLines);
1325 TearDown();
1326 return result;
1327 }
1328
OHDrawingTypographyGetTextLines002(napi_env env,napi_callback_info info)1329 napi_value OHDrawingTypographyGetTextLines002(napi_env env, napi_callback_info info)
1330 {
1331 napi_value result = nullptr;
1332 PrepareCreateTextLine("\n");
1333 OH_Drawing_Array *textLines = textLines = OH_Drawing_TypographyGetTextLines(typography_);
1334 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1335 if (size == INT_NUM_2) {
1336 napi_create_int32(env, SUCCESS, &result);
1337 } else {
1338 napi_create_int32(env, FAIL, &result);
1339 }
1340 OH_Drawing_DestroyTextLines(textLines);
1341 TearDown();
1342 return result;
1343 }
1344
OHDrawingDestroyTextLine001(napi_env env,napi_callback_info info)1345 napi_value OHDrawingDestroyTextLine001(napi_env env, napi_callback_info info)
1346 {
1347 napi_value result = nullptr;
1348 const char *text = "OpenHarmoney\n";
1349 PrepareTypographyCreate(text);
1350 OH_Drawing_LineTypography *lineTypography = OH_Drawing_CreateLineTypography(handler2_);
1351 size_t startIndex = 0;
1352 size_t count = strlen(text);
1353 auto line = OH_Drawing_LineTypographyCreateLine(lineTypography, startIndex, count);
1354 if (OH_Drawing_TextLineGetGlyphCount(line) == 12L) {
1355 napi_create_int32(env, SUCCESS, &result);
1356 } else {
1357 napi_create_int32(env, FAIL, &result);
1358 }
1359 OH_Drawing_DestroyTextLine(line);
1360 OH_Drawing_DestroyLineTypography(lineTypography);
1361 TypographyTearDown();
1362 return result;
1363 }
1364
OHDrawingGetTextLineByIndex001(napi_env env,napi_callback_info info)1365 napi_value OHDrawingGetTextLineByIndex001(napi_env env, napi_callback_info info)
1366 {
1367 napi_value result = nullptr;
1368 PrepareCreateTextLine("\n\n\n");
1369 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1370 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, -1 | 10);
1371 if (textLine == nullptr) {
1372 napi_create_int32(env, SUCCESS, &result);
1373 } else {
1374 napi_create_int32(env, FAIL, &result);
1375 }
1376 OH_Drawing_DestroyTextLines(textLines);
1377 TearDown();
1378 return result;
1379 }
1380
OHDrawingTextLineGetTextRange001(napi_env env,napi_callback_info info)1381 napi_value OHDrawingTextLineGetTextRange001(napi_env env, napi_callback_info info)
1382 {
1383 napi_value result = nullptr;
1384 PrepareCreateTextLine("\n\n\n");
1385 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1386 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, 0);
1387 size_t start = 0;
1388 OH_Drawing_TextLineGetTextRange(textLine, &start, nullptr);
1389 if (start == 0) {
1390 napi_create_int32(env, SUCCESS, &result);
1391 } else {
1392 napi_create_int32(env, FAIL, &result);
1393 }
1394 OH_Drawing_DestroyTextLines(textLines);
1395 TearDown();
1396 return result;
1397 }
1398
OHDrawingTextLineGetGlyphRuns001(napi_env env,napi_callback_info info)1399 napi_value OHDrawingTextLineGetGlyphRuns001(napi_env env, napi_callback_info info)
1400 {
1401 napi_value result = nullptr;
1402 PrepareCreateTextLine("\n\n\n");
1403 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1404 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, 0);
1405 OH_Drawing_Array *runs = OH_Drawing_TextLineGetGlyphRuns(textLine);
1406 if (runs == nullptr) {
1407 napi_create_int32(env, SUCCESS, &result);
1408 } else {
1409 napi_create_int32(env, FAIL, &result);
1410 }
1411 OH_Drawing_DestroyTextLines(textLines);
1412 TearDown();
1413 return result;
1414 }
1415
OHDrawingDestroyRuns001(napi_env env,napi_callback_info info)1416 napi_value OHDrawingDestroyRuns001(napi_env env, napi_callback_info info)
1417 {
1418 napi_value result = nullptr;
1419 PrepareCreateTextLine("\n\n\n");
1420 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1421 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1422 for (size_t index = 0; index < size - 1; index++) {
1423 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1424 OH_Drawing_Array *runs = OH_Drawing_TextLineGetGlyphRuns(textLine);
1425 size_t runsSize = OH_Drawing_GetDrawingArraySize(runs);
1426 if (runsSize == 0) {
1427 napi_create_int32(env, SUCCESS, &result);
1428 } else {
1429 napi_create_int32(env, FAIL, &result);
1430 }
1431 OH_Drawing_DestroyRuns(runs);
1432 }
1433 OH_Drawing_DestroyTextLines(textLines);
1434 TearDown();
1435 return result;
1436 }
1437
OHDrawingGetRunByIndex001(napi_env env,napi_callback_info info)1438 napi_value OHDrawingGetRunByIndex001(napi_env env, napi_callback_info info)
1439 {
1440 napi_value result = nullptr;
1441 OH_Drawing_Run *run = OH_Drawing_GetRunByIndex(nullptr, 0);
1442 if (run == nullptr) {
1443 napi_create_int32(env, SUCCESS, &result);
1444 } else {
1445 napi_create_int32(env, FAIL, &result);
1446 }
1447 return result;
1448 }
1449
OHDrawingTextLinePaint001(napi_env env,napi_callback_info info)1450 napi_value OHDrawingTextLinePaint001(napi_env env, napi_callback_info info)
1451 {
1452 napi_value result = nullptr;
1453 PrepareCreateTextLine("Hello 测 World \n!@#$%^&*~(){}[] 123 4567890 - = ,. < >、/Drawing testlp 试 Drawing ");
1454 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1455 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1456 for (size_t index = 0; index < size; index++) {
1457 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1458 OH_Drawing_TextLine *truncatedLine =
1459 OH_Drawing_TextLineCreateTruncatedLine(textLine, INT_NUM_100, ELLIPSIS_MODAL_HEAD, "...");
1460 OH_Drawing_TextLinePaint(truncatedLine, canvas_, TEXTLINE30, TEXTLINE250);
1461 double count = OH_Drawing_TextLineGetGlyphCount(truncatedLine);
1462 if (count > 0) {
1463 napi_create_int32(env, SUCCESS, &result);
1464 } else {
1465 napi_create_int32(env, FAIL, &result);
1466 }
1467 OH_Drawing_DestroyTextLine(truncatedLine);
1468 }
1469 OH_Drawing_DestroyTextLines(textLines);
1470 TearDown();
1471 return result;
1472 }
1473
OHDrawingTextLineCreateTruncatedLine001(napi_env env,napi_callback_info info)1474 napi_value OHDrawingTextLineCreateTruncatedLine001(napi_env env, napi_callback_info info)
1475 {
1476 napi_value result = nullptr;
1477 PrepareCreateTextLine("\n\n");
1478 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1479 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, 0);
1480 OH_Drawing_TextLine *truncatedLine = OH_Drawing_TextLineCreateTruncatedLine(textLine, INT_NUM_200, INT_NUM_5, "1");
1481 if (truncatedLine == nullptr) {
1482 napi_create_int32(env, SUCCESS, &result);
1483 } else {
1484 napi_create_int32(env, FAIL, &result);
1485 }
1486 OH_Drawing_DestroyTextLines(textLines);
1487 TearDown();
1488 return result;
1489 }
1490
OHDrawingTextLineGetTypographicBounds001(napi_env env,napi_callback_info info)1491 napi_value OHDrawingTextLineGetTypographicBounds001(napi_env env, napi_callback_info info)
1492 {
1493 napi_value result = nullptr;
1494 PrepareCreateTextLine("\n\n\n\n");
1495 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1496 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1497 double ascent = DOUBLE_NUM_0;
1498 double descent = DOUBLE_NUM_0;
1499 double leading = DOUBLE_NUM_0;
1500 for (size_t index = 0; index < size; index++) {
1501 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1502 double width = OH_Drawing_TextLineGetTypographicBounds(textLine, &ascent, &descent, &leading);
1503 if ((ascent < 0) && (descent > 0) && (leading == 0) && (width == 0)) {
1504 napi_create_int32(env, SUCCESS, &result);
1505 } else {
1506 napi_create_int32(env, FAIL, &result);
1507 }
1508 }
1509 OH_Drawing_DestroyTextLines(textLines);
1510 TearDown();
1511 return result;
1512 }
1513
OHDrawingTextLineGetImageBounds001(napi_env env,napi_callback_info info)1514 napi_value OHDrawingTextLineGetImageBounds001(napi_env env, napi_callback_info info)
1515 {
1516 napi_value result = nullptr;
1517 PrepareCreateTextLine("Hello 测 World \n!@#$%^&*~(){}[] 123 4567890 - = ,. < >、/Drawing testlp 试 Drawing ");
1518 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1519 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1520 for (size_t index = 0; index < size; index++) {
1521 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1522 OH_Drawing_Rect *rect = OH_Drawing_TextLineGetImageBounds(textLine);
1523 if ((OH_Drawing_RectGetRight(rect) > OH_Drawing_RectGetLeft(rect)) &&
1524 (OH_Drawing_RectGetBottom(rect) > OH_Drawing_RectGetTop(rect)) &&
1525 (OH_Drawing_RectGetWidth(rect) < NUM_500) &&
1526 (OH_Drawing_RectGetHeight(rect) <= HEIGHT40)) {
1527 napi_create_int32(env, SUCCESS, &result);
1528 } else {
1529 napi_create_int32(env, FAIL, &result);
1530 }
1531 }
1532 OH_Drawing_DestroyTextLines(textLines);
1533 TearDown();
1534 return result;
1535 }
1536
OHDrawingTextLineGetTrailingSpaceWidth001(napi_env env,napi_callback_info info)1537 napi_value OHDrawingTextLineGetTrailingSpaceWidth001(napi_env env, napi_callback_info info)
1538 {
1539 napi_value result = nullptr;
1540 PrepareCreateTextLine("Hello 测 World \n!@#$%^&*~(){}[] 123 4567890 - = ,. < >、/Drawing testlp 试 Drawing ");
1541 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1542 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1543 for (size_t index = 0; index < size; index++) {
1544 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1545 double width = OH_Drawing_TextLineGetTrailingSpaceWidth(textLine);
1546 if (width > 1) {
1547 napi_create_int32(env, SUCCESS, &result);
1548 } else {
1549 napi_create_int32(env, FAIL, &result);
1550 }
1551 }
1552 OH_Drawing_DestroyTextLines(textLines);
1553 TearDown();
1554 return result;
1555 }
1556
OHDrawingTextLineGetStringIndexForPosition001(napi_env env,napi_callback_info info)1557 napi_value OHDrawingTextLineGetStringIndexForPosition001(napi_env env, napi_callback_info info)
1558 {
1559 napi_value result = nullptr;
1560 PrepareCreateTextLine("\n\n");
1561 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1562 OH_Drawing_TextLine *textLine = textLine = OH_Drawing_GetTextLineByIndex(textLines, 0);
1563 if ((OH_Drawing_TextLineGetStringIndexForPosition(textLine, nullptr) == 0) &&
1564 (OH_Drawing_TextLineGetStringIndexForPosition(nullptr, nullptr) == 0)) {
1565 napi_create_int32(env, SUCCESS, &result);
1566 } else {
1567 napi_create_int32(env, FAIL, &result);
1568 }
1569 OH_Drawing_DestroyTextLines(textLines);
1570 TearDown();
1571 return result;
1572 }
1573
OHDrawingTextLineGetOffsetForStringIndex001(napi_env env,napi_callback_info info)1574 napi_value OHDrawingTextLineGetOffsetForStringIndex001(napi_env env, napi_callback_info info)
1575 {
1576 napi_value result = nullptr;
1577 PrepareCreateTextLine("\n\n");
1578 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1579 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1580 for (size_t index = 0; index < size; index++) {
1581 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1582 if ((OH_Drawing_TextLineGetOffsetForStringIndex(textLine, 0) == DOUBLE_NUM_0) &&
1583 (OH_Drawing_TextLineGetOffsetForStringIndex(textLine, INT_NUM_100) == DOUBLE_NUM_0)) {
1584 napi_create_int32(env, SUCCESS, &result);
1585 } else {
1586 napi_create_int32(env, FAIL, &result);
1587 }
1588 }
1589 OH_Drawing_DestroyTextLines(textLines);
1590 TearDown();
1591 return result;
1592 }
1593
OHDrawingTextLineGetAlignmentOffset001(napi_env env,napi_callback_info info)1594 napi_value OHDrawingTextLineGetAlignmentOffset001(napi_env env, napi_callback_info info)
1595 {
1596 napi_value result = nullptr;
1597 PrepareCreateTextLine("Hello 测 World \n!@#$%^&*~(){}[] 123 4567890 - = ,. < >、/Drawing testlp 试 Drawing ");
1598 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1599 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1600 for (size_t index = 0; index < size; index++) {
1601 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1602 if ((OH_Drawing_TextLineGetAlignmentOffset(textLine, DOUBLE_NUM_0, ALIGNMENT600) == DOUBLE_NUM_0) &&
1603 (OH_Drawing_TextLineGetAlignmentOffset(textLine, DOUBLE_NUM_05, ALIGNMENT700) > DOUBLE_NUM_100) &&
1604 (OH_Drawing_TextLineGetAlignmentOffset(textLine, DOUBLE_NEGATIVE_NUM_1, ALIGNMENT700) == DOUBLE_NUM_0) &&
1605 (OH_Drawing_TextLineGetAlignmentOffset(textLine, DOUBLE_NUM_2, ALIGNMENT20) == DOUBLE_NUM_0)) {
1606 napi_create_int32(env, SUCCESS, &result);
1607 } else {
1608 napi_create_int32(env, FAIL, &result);
1609 }
1610 }
1611 OH_Drawing_DestroyTextLines(textLines);
1612 TearDown();
1613 return result;
1614 }
1615
OHDrawingGetRunGlyphCount001(napi_env env,napi_callback_info info)1616 napi_value OHDrawingGetRunGlyphCount001(napi_env env, napi_callback_info info)
1617 {
1618 napi_value result = nullptr;
1619 uint32_t count = OH_Drawing_GetRunGlyphCount(nullptr);
1620 if (count == 0) {
1621 napi_create_int32(env, SUCCESS, &result);
1622 } else {
1623 napi_create_int32(env, FAIL, &result);
1624 }
1625 return result;
1626 }
1627
OHDrawingGetRunStringRange001(napi_env env,napi_callback_info info)1628 napi_value OHDrawingGetRunStringRange001(napi_env env, napi_callback_info info)
1629 {
1630 napi_value result = nullptr;
1631 uint64_t location = 0;
1632 uint64_t length = 0;
1633 OH_Drawing_GetRunStringRange(nullptr, &location, &length);
1634 if ((location == 0) && (length == 0) && (OH_Drawing_GetRunStringIndices(nullptr, 0, 0) == nullptr) &&
1635 (OH_Drawing_GetRunGlyphs(nullptr, 0, 0) == nullptr) &&
1636 (OH_Drawing_GetRunPositions(nullptr, 0, 0) == nullptr) &&
1637 (OH_Drawing_GetRunImageBounds(nullptr) == nullptr)) {
1638 napi_create_int32(env, SUCCESS, &result);
1639 } else {
1640 napi_create_int32(env, FAIL, &result);
1641 }
1642 return result;
1643 }
1644
OHDrawingGetRunTypographicBounds001(napi_env env,napi_callback_info info)1645 napi_value OHDrawingGetRunTypographicBounds001(napi_env env, napi_callback_info info)
1646 {
1647 napi_value result = nullptr;
1648 OH_Drawing_RunPaint(nullptr, nullptr, 0, 0);
1649 float ascent = DOUBLE_NUM_0;
1650 float descent = DOUBLE_NUM_0;
1651 float leading = DOUBLE_NUM_0;
1652 float width = OH_Drawing_GetRunTypographicBounds(nullptr, &ascent, &descent, &leading);
1653 if ((ascent == DOUBLE_NUM_0) && (descent == DOUBLE_NUM_0) && (leading == DOUBLE_NUM_0) && (width == DOUBLE_NUM_0)) {
1654 napi_create_int32(env, SUCCESS, &result);
1655 } else {
1656 napi_create_int32(env, FAIL, &result);
1657 }
1658 return result;
1659 }
1660
OHDrawingGetRunStringIndicesByIndex001(napi_env env,napi_callback_info info)1661 napi_value OHDrawingGetRunStringIndicesByIndex001(napi_env env, napi_callback_info info)
1662 {
1663 napi_value result = nullptr;
1664 g_text = "Hello 你好 World";
1665 PrepareCreateTextLine(g_text);
1666 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1667 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1668 for (size_t index = 0; index < size; index++) {
1669 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1670 OH_Drawing_Array *runs = OH_Drawing_TextLineGetGlyphRuns(textLine);
1671 size_t runsSize = OH_Drawing_GetDrawingArraySize(runs);
1672 for (size_t runIndex = 0; runIndex < runsSize; runIndex++) {
1673 OH_Drawing_Run *run = OH_Drawing_GetRunByIndex(runs, runIndex);
1674 uint32_t count = OH_Drawing_GetRunGlyphCount(run);
1675 uint64_t location = 0;
1676 uint64_t length = 0;
1677 OH_Drawing_GetRunStringRange(run, &location, &length);
1678 OH_Drawing_Array *stringIndicesArr = OH_Drawing_GetRunStringIndices(run, 0, count);
1679 size_t sizeArr = OH_Drawing_GetDrawingArraySize(stringIndicesArr);
1680 for (size_t stringIndex = 0; stringIndex < sizeArr; stringIndex++) {
1681 uint64_t indices = OH_Drawing_GetRunStringIndicesByIndex(stringIndicesArr, stringIndex);
1682 if (indices >= 0) {
1683 napi_create_int32(env, SUCCESS, &result);
1684 } else {
1685 napi_create_int32(env, FAIL, &result);
1686 }
1687 }
1688 OH_Drawing_DestroyRunStringIndices(stringIndicesArr);
1689 }
1690 OH_Drawing_DestroyRuns(runs);
1691 }
1692 OH_Drawing_DestroyTextLines(textLines);
1693 TearDown();
1694 return result;
1695 }
1696
OHDrawingGetRunImageBounds001(napi_env env,napi_callback_info info)1697 napi_value OHDrawingGetRunImageBounds001(napi_env env, napi_callback_info info)
1698 {
1699 napi_value result = nullptr;
1700 g_text = "Hello 你好 World";
1701 PrepareCreateTextLine(g_text);
1702 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1703 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1704 for (size_t index = 0; index < size; index++) {
1705 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1706 OH_Drawing_Array *runs = OH_Drawing_TextLineGetGlyphRuns(textLine);
1707 size_t runsSize = OH_Drawing_GetDrawingArraySize(runs);
1708 for (size_t runIndex = 0; runIndex < runsSize; runIndex++) {
1709 OH_Drawing_Run *run = OH_Drawing_GetRunByIndex(runs, runIndex);
1710 uint32_t count = OH_Drawing_GetRunGlyphCount(run);
1711 uint64_t location = 0;
1712 uint64_t length = 0;
1713 OH_Drawing_GetRunStringRange(run, &location, &length);
1714 OH_Drawing_Array *stringIndicesArr = OH_Drawing_GetRunStringIndices(run, 0, count);
1715 size_t sizeArr = OH_Drawing_GetDrawingArraySize(stringIndicesArr);
1716 for (size_t stringIndex = 0; stringIndex < sizeArr; stringIndex++) {
1717 uint64_t indices = OH_Drawing_GetRunStringIndicesByIndex(stringIndicesArr, stringIndex);
1718 }
1719 OH_Drawing_DestroyRunStringIndices(stringIndicesArr);
1720 OH_Drawing_Rect *bounds = OH_Drawing_GetRunImageBounds(run);
1721 if (bounds != nullptr) {
1722 napi_create_int32(env, SUCCESS, &result);
1723 } else {
1724 napi_create_int32(env, FAIL, &result);
1725 }
1726 OH_Drawing_DestroyRunImageBounds(bounds);
1727 OH_Drawing_RunPaint(canvas_, run, DOUBLE_NUM_0, DOUBLE_NUM_0);
1728 }
1729 OH_Drawing_DestroyRuns(runs);
1730 }
1731 OH_Drawing_DestroyTextLines(textLines);
1732 TearDown();
1733 return result;
1734 }
1735
OHDrawingGetRunGlyphsByIndex001(napi_env env,napi_callback_info info)1736 napi_value OHDrawingGetRunGlyphsByIndex001(napi_env env, napi_callback_info info)
1737 {
1738 napi_value result = nullptr;
1739 g_text = "Hello 你好 World";
1740 PrepareCreateTextLine(g_text);
1741 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1742 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1743 for (size_t index = 0; index < size; index++) {
1744 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1745 OH_Drawing_Array *runs = OH_Drawing_TextLineGetGlyphRuns(textLine);
1746 size_t runsSize = OH_Drawing_GetDrawingArraySize(runs);
1747 for (size_t runIndex = 0; runIndex < runsSize; runIndex++) {
1748 OH_Drawing_Run *run = OH_Drawing_GetRunByIndex(runs, runIndex);
1749 uint32_t count = OH_Drawing_GetRunGlyphCount(run);
1750 float ascent = DOUBLE_NUM_0;
1751 float descent = DOUBLE_NUM_0;
1752 float leading = DOUBLE_NUM_0;
1753 float width = OH_Drawing_GetRunTypographicBounds(run, &ascent, &descent, &leading);
1754 OH_Drawing_Array *glyphs = OH_Drawing_GetRunGlyphs(run, 0, count);
1755 size_t glyphSize = OH_Drawing_GetDrawingArraySize(glyphs);
1756 for (size_t glyphsIndex = 0; glyphsIndex < glyphSize; glyphsIndex++) {
1757 if (OH_Drawing_GetRunGlyphsByIndex(glyphs, glyphsIndex) > 0) {
1758 napi_create_int32(env, SUCCESS, &result);
1759 } else {
1760 napi_create_int32(env, FAIL, &result);
1761 }
1762 }
1763 OH_Drawing_DestroyRunGlyphs(glyphs);
1764 }
1765 OH_Drawing_DestroyRuns(runs);
1766 }
1767 OH_Drawing_DestroyTextLines(textLines);
1768 TearDown();
1769 return result;
1770 }
1771
OHDrawingGetRunPositions001(napi_env env,napi_callback_info info)1772 napi_value OHDrawingGetRunPositions001(napi_env env, napi_callback_info info)
1773 {
1774 napi_value result = nullptr;
1775 g_text = "Hello 你好 World";
1776 PrepareCreateTextLine(g_text);
1777 OH_Drawing_Array *textLines = OH_Drawing_TypographyGetTextLines(typography_);
1778 size_t size = OH_Drawing_GetDrawingArraySize(textLines);
1779 for (size_t index = 0; index < size; index++) {
1780 OH_Drawing_TextLine *textLine = OH_Drawing_GetTextLineByIndex(textLines, index);
1781 OH_Drawing_Array *runs = OH_Drawing_TextLineGetGlyphRuns(textLine);
1782 size_t runsSize = OH_Drawing_GetDrawingArraySize(runs);
1783 for (size_t runIndex = 0; runIndex < runsSize; runIndex++) {
1784 OH_Drawing_Run *run = OH_Drawing_GetRunByIndex(runs, runIndex);
1785 uint32_t count = OH_Drawing_GetRunGlyphCount(run);
1786 OH_Drawing_Array *positions = OH_Drawing_GetRunPositions(run, 0, count);
1787 size_t positionSize = OH_Drawing_GetDrawingArraySize(positions);
1788 for (size_t posIndex = 0; posIndex < positionSize; posIndex++) {
1789 OH_Drawing_Point *pos = OH_Drawing_GetRunPositionsByIndex(positions, posIndex);
1790 float x = DOUBLE_NUM_0;
1791 OH_Drawing_PointGetX(pos, &x);
1792 if (x >= DOUBLE_NUM_0) {
1793 napi_create_int32(env, SUCCESS, &result);
1794 } else {
1795 napi_create_int32(env, FAIL, &result);
1796 }
1797 }
1798 OH_Drawing_DestroyRunPositions(positions);
1799 }
1800 OH_Drawing_DestroyRuns(runs);
1801 }
1802 OH_Drawing_DestroyTextLines(textLines);
1803 TearDown();
1804 return result;
1805 }
1806
OHDrawingGetFontCollectionGlobalInstance001(napi_env env,napi_callback_info info)1807 napi_value OHDrawingGetFontCollectionGlobalInstance001(napi_env env, napi_callback_info info)
1808 {
1809 napi_value result = nullptr;
1810 OH_Drawing_FontCollection *fontCollection = OH_Drawing_GetFontCollectionGlobalInstance();
1811 if (fontCollection != nullptr) {
1812 napi_create_int32(env, SUCCESS, &result);
1813 } else {
1814 napi_create_int32(env, FAIL, &result);
1815 }
1816 return result;
1817 }