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