1 /*
2  * Copyright (c) 2020-2022 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 "ui_test_font.h"
17 
18 #include "graphic_config.h"
19 
20 #include "common/screen.h"
21 #if ENABLE_VECTOR_FONT
22 #else
23 #include "common/ui_text_language.h"
24 #endif
25 #include "components/ui_label.h"
26 #include "font/ui_font.h"
27 #if ENABLE_MULTI_FONT
28 #include "font/ui_multi_font_manager.h"
29 #endif
30 
31 namespace OHOS {
32 namespace {
33 const int16_t GAP = 5;
34 const int16_t TITLE_HEIGHT = 20;
35 const uint16_t LABEL_WIDTH = 400;
36 const uint16_t LABEL_HEIGHT = 50;
37 const uint16_t FONT_SIZE = 30;
38 const uint16_t FONT_EMOJI_SIZE = 100;
39 const char* SOURCE_HAN_SANS_SC_REGULAR = "SourceHanSansSC-Regular.otf";
40 const char* ROBOTO_CONDENSED_REGULAR = "RobotoCondensed-Regular.ttf";
41 const char* DEFAULT_EMOJI_FILENAME = "NotoColorEmojiCompat.ttf";
42 #if ENABLE_MULTI_FONT
43 const int16_t F_HWEMOJI_REGULAR_30_32 = 99;
44 #endif
45 } // namespace
46 
SetUp()47 void UITestFont::SetUp()
48 {
49     if (container_ == nullptr) {
50         container_ = new UIScrollView();
51         container_->SetThrowDrag(true);
52         container_->SetHorizontalScrollState(false);
53         container_->Resize(Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight() - BACK_BUTTON_HEIGHT);
54         positionX_ = 50; // 50: init position x
55         positionY_ = 5;  // 5: init position y
56     }
57 }
58 
TearDown()59 void UITestFont::TearDown()
60 {
61     DeleteChildren(container_);
62     container_ = nullptr;
63 }
64 
InnerTestTitle(const char * title)65 void UITestFont::InnerTestTitle(const char* title)
66 {
67     UILabel* titleLabel = new UILabel();
68     titleLabel->SetPosition(TEXT_DISTANCE_TO_LEFT_SIDE, positionY_, Screen::GetInstance().GetWidth(),
69                             TITLE_LABEL_DEFAULT_HEIGHT);
70 #if ENABLE_VECTOR_FONT
71     titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, DEFAULT_VECTOR_FONT_SIZE);
72 #else
73     titleLabel->SetFontId(F_SOURCEHANSANSSC_REGULAR_18_4);
74 #endif
75     titleLabel->SetText(title);
76     container_->Add(titleLabel);
77     positionY_ += TITLE_HEIGHT + GAP;
78 }
79 
GetTestView()80 const UIView* UITestFont::GetTestView()
81 {
82     UIKitFontTestDisplay001();
83     UIKitFontTestDisplay002();
84     UIKitFontTestDisplay003();
85     UIKitFontTestDisplay004();
86     UIKitFontTestDisplay005();
87     UIKitFontTestDisplay006();
88     UIKitFontTestDisplay007();
89     UIKitFontTestDisplay008();
90     UIKitFontTestDisplay009();
91     UIKitFontTestDisplay010();
92     UIKitFontTestBaseline001();
93     UIKitFontTestBaseline002();
94     UIKitFontTestLineHeight001();
95     UIKitFontTestLineHeight002();
96 #if ENABLE_MULTI_FONT
97     UIKitFontMultiLanguage001();
98     UIKitFontMultiLanguage002();
99 #endif
100     UIKitFontTestBackgroundColor();
101     UIKitFontTestForegroundColor();
102     UIKitFontTestLineBackgroundSpan();
103     UIKitFontTestAbsoluteSizeSpan();
104     UIKitFontTestRelativeSizeSpan();
105     UIKitFontTestDisplayNegativeLineSpace001();
106     UIKitFontTestDisplayNegativeLineSpace002();
107     UIKitFontTestDisplayEmoji001();
108     UIKitFontTestDisplayEmoji002();
109     UIKitFontTestDisplayEmoji003();
110     return container_;
111 }
112 
UIKitFontTestDisplay001()113 void UITestFont::UIKitFontTestDisplay001()
114 {
115     if (container_ == nullptr) {
116         return;
117     }
118     InnerTestTitle(" Display single line Chinese");
119     UILabel* label = new UILabel();
120     label->SetPosition(positionX_, positionY_);
121     label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
122 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
123     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
124     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
125 #else
126     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
127 #endif
128     label->SetText("轻量图形子系统");
129     container_->Add(label);
130     positionY_ += LABEL_HEIGHT + GAP;
131 }
132 
UIKitFontTestDisplay002()133 void UITestFont::UIKitFontTestDisplay002()
134 {
135     if (container_ == nullptr) {
136         return;
137     }
138     InnerTestTitle(" Display multiline Chinese");
139     UILabel* label = new UILabel();
140     label->SetPosition(positionX_, positionY_);
141     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
142 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
143     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
144     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
145 #else
146     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
147 #endif
148     label->SetText(" 你好\n轻量图形子系统");
149     container_->Add(label);
150     positionY_ += LABEL_HEIGHT * 2 + GAP;  // 2 : double
151 }
152 
153 
UIKitFontTestDisplay003()154 void UITestFont::UIKitFontTestDisplay003()
155 {
156     if (container_ == nullptr) {
157         return;
158     }
159     InnerTestTitle(" Display single line English");
160     UILabel* label = new UILabel();
161     label->SetPosition(positionX_, positionY_);
162     label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
163 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
164     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
165     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
166 #else
167     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
168 #endif
169     label->SetText("uikit test");
170     container_->Add(label);
171     positionY_ += LABEL_HEIGHT + GAP;
172 }
173 
174 
UIKitFontTestDisplay004()175 void UITestFont::UIKitFontTestDisplay004()
176 {
177     if (container_ == nullptr) {
178         return;
179     }
180     InnerTestTitle(" Display multiline English");
181     UILabel* label = new UILabel();
182     label->SetPosition(positionX_, positionY_);
183     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
184 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
185     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
186     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
187 #else
188     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
189 #endif
190     label->SetText(" Hello\n uikit");
191     container_->Add(label);
192     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
193 }
194 
195 
UIKitFontTestDisplay005()196 void UITestFont::UIKitFontTestDisplay005()
197 {
198     if (container_ == nullptr) {
199         return;
200     }
201     InnerTestTitle(" Display single line Chinese and English");
202     UILabel* label = new UILabel();
203     label->SetPosition(positionX_, positionY_);
204     label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
205 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
206     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
207     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
208 #else
209     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
210 #endif
211     label->SetText("你好,轻量级图形 uikit");
212     container_->Add(label);
213     positionY_ += LABEL_HEIGHT + GAP;
214 }
215 
UIKitFontTestDisplay006()216 void UITestFont::UIKitFontTestDisplay006()
217 {
218     if (container_ == nullptr) {
219         return;
220     }
221     InnerTestTitle(" Display multiline Chinese and English");
222     UILabel* label = new UILabel();
223     label->SetPosition(positionX_, positionY_);
224     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
225 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
226     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
227     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
228 #else
229     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
230 #endif
231     label->SetText("你好\n轻量级图形 uikit");
232     container_->Add(label);
233     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
234 }
235 
236 
UIKitFontTestDisplay007()237 void UITestFont::UIKitFontTestDisplay007()
238 {
239     if (container_ == nullptr) {
240         return;
241     }
242     InnerTestTitle(" Display single line text color");
243     UILabel* label = new UILabel();
244     label->SetPosition(positionX_, positionY_);
245     label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
246 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
247     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
248     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
249 #else
250     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
251 #endif
252     label->SetStyle(STYLE_TEXT_COLOR, Color::Red().full);
253     label->SetText("你好,轻量级图形");
254     container_->Add(label);
255     positionY_ += LABEL_HEIGHT + GAP;
256 }
257 
UIKitFontTestDisplay008()258 void UITestFont::UIKitFontTestDisplay008()
259 {
260     if (container_ == nullptr) {
261         return;
262     }
263     InnerTestTitle(" Display multiline text color");
264     UILabel* label = new UILabel();
265     label->SetPosition(positionX_, positionY_);
266     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
267 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
268     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
269     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
270 #else
271     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
272 #endif
273     label->SetStyle(STYLE_TEXT_COLOR, Color::Yellow().full);
274     label->SetText("你好\n 轻量级图形 uikit");
275     container_->Add(label);
276     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
277 }
278 
279 
UIKitFontTestDisplay009()280 void UITestFont::UIKitFontTestDisplay009()
281 {
282     if (container_ == nullptr) {
283         return;
284     }
285     InnerTestTitle(" Display multiline text color");
286     UILabel* label = new UILabel();
287     label->SetPosition(positionX_ + 100, positionY_);  // 100 : offset x
288     label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
289     label->SetLineBreakMode(UILabel::LineBreakMode::LINE_BREAK_ADAPT);
290 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
291     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
292     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
293 #else
294     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
295 #endif
296     label->Rotate(90, Vector2<float> {0, 0}); // 90 : angle
297     label->SetText("轻量级图形");
298     container_->Add(label);
299     positionY_ += LABEL_HEIGHT * 4 + GAP; // 4 : coefficient
300 }
301 
302 
UIKitFontTestDisplay010()303 void UITestFont::UIKitFontTestDisplay010()
304 {
305     if (container_ == nullptr) {
306         return;
307     }
308     InnerTestTitle(" Display multiline text color");
309     UILabel* label = new UILabel();
310     label->SetPosition(positionX_ + 100, positionY_); // 100 : offset x
311     label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT); // 2 : half
312     label->SetLineBreakMode(UILabel::LineBreakMode::LINE_BREAK_MARQUEE);
313 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
314     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
315     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
316 #else
317     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
318 #endif
319     label->Rotate(90, Vector2<float> {0, 0}); // 90 : angle
320     label->SetText("轻量级图形,轻量级图形,轻量级图形");
321     container_->Add(label);
322     positionY_ += LABEL_HEIGHT * 4 + GAP; // 4 : coefficient
323 }
324 
325 
UIKitFontTestBaseline001()326 void UITestFont::UIKitFontTestBaseline001()
327 {
328     if (container_ == nullptr) {
329         return;
330     }
331     InnerTestTitle("Font baseline alignment");
332     UILabel* label = new UILabel();
333     label->SetPosition(positionX_, positionY_);
334     label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT); // 2 : half
335 #if ENABLE_VECTOR_FONT
336     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
337     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
338 #else
339     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
340 #endif
341     label->SetText("hello, uikit");
342 
343     UILabel* label2 = new UILabel();
344     label2->SetPosition(positionX_ + (LABEL_WIDTH / 2), positionY_); // 2 : half
345     label2->Resize(LABEL_WIDTH, LABEL_HEIGHT);
346 #if ENABLE_VECTOR_FONT
347     UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
348     label2->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
349 #else
350     label2->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
351 #endif
352     label2->SetText("hello, uikit");
353 
354     container_->Add(label);
355     container_->Add(label2);
356     positionY_ += LABEL_HEIGHT + GAP;
357 }
358 
UIKitFontTestBaseline002()359 void UITestFont::UIKitFontTestBaseline002()
360 {
361     if (container_ == nullptr) {
362         return;
363     }
364     InnerTestTitle(" Font baseline alignment");
365     UILabel* label = new UILabel();
366     label->SetPosition(positionX_, positionY_);
367     label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT); // 2 : half
368 #if ENABLE_VECTOR_FONT
369     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
370     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
371 #else
372     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
373 #endif
374     label->SetText("hello, uikit");
375     label->SetStyle(STYLE_LINE_HEIGHT, 30); // 30 : line height
376 
377     UILabel* label2 = new UILabel();
378     label2->SetPosition(positionX_ + (LABEL_WIDTH / 2), positionY_); // 2 : half
379     label2->Resize(LABEL_WIDTH, LABEL_HEIGHT);
380 #if ENABLE_VECTOR_FONT
381     UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
382     label2->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
383 #else
384     label2->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
385 #endif
386     label2->SetText("hello, uikit");
387     label2->SetStyle(STYLE_LINE_HEIGHT, 30); // 30 : line height
388 
389     container_->Add(label);
390     container_->Add(label2);
391     positionY_ += LABEL_HEIGHT + GAP;
392 }
393 
UIKitFontTestLineHeight001()394 void UITestFont::UIKitFontTestLineHeight001()
395 {
396     if (container_ == nullptr) {
397         return;
398     }
399     InnerTestTitle(" Font lineheight alignment");
400     UILabel* label = new UILabel();
401     label->SetPosition(positionX_, positionY_);
402     label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT * 2); // 2 : half
403 #if ENABLE_VECTOR_FONT
404     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
405     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
406 #else
407     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
408 #endif
409     label->SetText("hello,\n uikit");
410 
411     UILabel* label2 = new UILabel();
412     label2->SetPosition(positionX_ + (LABEL_WIDTH / 2), positionY_); // 2 : half
413     label2->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT * 2); // 2 : half
414 #if ENABLE_VECTOR_FONT
415     UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
416     label2->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
417 #else
418     label2->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
419 #endif
420     label2->SetText("hello,\n uikit");
421 
422     container_->Add(label);
423     container_->Add(label2);
424     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
425 }
426 
UIKitFontTestLineHeight002()427 void UITestFont::UIKitFontTestLineHeight002()
428 {
429     if (container_ == nullptr) {
430         return;
431     }
432     InnerTestTitle(" Font lineheight alignment");
433     UILabel* label = new UILabel();
434     label->SetPosition(positionX_, positionY_);
435     label->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT * 2); // 2 : half
436 #if ENABLE_VECTOR_FONT
437     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
438     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
439 #else
440     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
441 #endif
442     label->SetText("hello,\n uikit");
443     label->SetStyle(STYLE_LINE_HEIGHT, 40); // 40 : line height
444 
445     UILabel* label2 = new UILabel();
446     label2->SetPosition(positionX_ + (LABEL_WIDTH / 2), positionY_); // 2 : half
447     label2->Resize(LABEL_WIDTH / 2, LABEL_HEIGHT * 2); // 2 : half
448 #if ENABLE_VECTOR_FONT
449     UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
450     label2->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
451 #else
452     label2->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
453 #endif
454     label2->SetText("hello,\n uikit");
455     label2->SetStyle(STYLE_LINE_HEIGHT, 40); // 40 : line height
456 
457     container_->Add(label);
458     container_->Add(label2);
459     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
460 }
461 
462 #if ENABLE_MULTI_FONT
UIKitFontMultiLanguage001()463 void UITestFont::UIKitFontMultiLanguage001()
464 {
465     if (container_ == nullptr) {
466         return;
467     }
468 #if ENABLE_VECTOR_FONT
469     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
470     UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
471     uint16_t findPath[] = {UIFont::GetInstance()->GetFontId(SOURCE_HAN_SANS_SC_REGULAR)};
472     UIMultiFontManager::GetInstance()->SetSearchFontList(UIFont::GetInstance()->GetFontId(ROBOTO_CONDENSED_REGULAR),
473                                                          findPath, sizeof(findPath));
474 #else
475     uint16_t findPath[] = {F_SOURCEHANSANSSC_REGULAR_30_4};
476     UIMultiFontManager::GetInstance()->SetSearchFontList(F_ROBOTOCONDENSED_REGULAR_30_4, findPath, sizeof(findPath));
477 #endif
478     InnerTestTitle(" Display multilingual display");
479     UILabel* label = new UILabel();
480     label->SetPosition(positionX_, positionY_);
481     label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
482 #if ENABLE_VECTOR_FONT
483     label->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
484 #else
485     label->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
486 #endif
487     label->SetText("Hello, Test of GUI");
488     container_->Add(label);
489     positionY_ += LABEL_HEIGHT + GAP;
490 }
491 
UIKitFontMultiLanguage002()492 void UITestFont::UIKitFontMultiLanguage002()
493 {
494     if (container_ == nullptr) {
495         return;
496     }
497 #if ENABLE_VECTOR_FONT
498     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
499     UIFont::GetInstance()->RegisterFontInfo(ROBOTO_CONDENSED_REGULAR);
500     uint16_t findPath[] = {UIFont::GetInstance()->GetFontId(SOURCE_HAN_SANS_SC_REGULAR)};
501     UIMultiFontManager::GetInstance()->SetSearchFontList(UIFont::GetInstance()->GetFontId(ROBOTO_CONDENSED_REGULAR),
502                                                          findPath, sizeof(findPath));
503 #else
504     uint16_t findPath[] = {F_SOURCEHANSANSSC_REGULAR_30_4};
505     UIMultiFontManager::GetInstance()->SetSearchFontList(F_ROBOTOCONDENSED_REGULAR_30_4, findPath, sizeof(findPath));
506 #endif
507     InnerTestTitle(" Display multilingual display");
508     UILabel* label = new UILabel();
509     label->SetPosition(positionX_, positionY_);
510     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
511 #if ENABLE_VECTOR_FONT
512     label->SetFont(ROBOTO_CONDENSED_REGULAR, FONT_SIZE);
513 #else
514     label->SetFontId(F_ROBOTOCONDENSED_REGULAR_30_4);
515 #endif
516     label->SetText("Hello\n Test of GUI");
517     container_->Add(label);
518     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
519 }
520 #endif // ENABLE_MULTI_FONT
521 
UIKitFontTestBackgroundColor()522 void UITestFont::UIKitFontTestBackgroundColor()
523 {
524     if (container_ == nullptr) {
525         return;
526     }
527     InnerTestTitle(" Display background color ");
528     UILabel* label = new UILabel();
529     label->SetPosition(positionX_, positionY_);
530     label->Resize(LABEL_WIDTH, LABEL_HEIGHT);
531 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
532     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
533     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
534 #else
535     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
536 #endif
537     label->SetBackgroundColorSpan(Color::Red(), 0, 2); // 0 : start index; 2 : end index
538     label->SetBackgroundColorSpan(Color::Yellow(), 5, 6); // 5 : start index; 6 : end index
539     label->SetText("轻量图形子系统");
540     container_->Add(label);
541     positionY_ += LABEL_HEIGHT + GAP;
542 }
543 
UIKitFontTestForegroundColor()544 void UITestFont::UIKitFontTestForegroundColor()
545 {
546     if (container_ == nullptr) {
547         return;
548     }
549     InnerTestTitle(" Change some font colors ");
550     UILabel* label = new UILabel();
551     label->SetPosition(positionX_, positionY_);
552     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
553 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
554     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
555     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
556 #else
557     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
558 #endif
559     label->SetForegroundColorSpan(Color::Blue(), 1, 3); // 1 : start index; 2 : end index
560     label->SetForegroundColorSpan(Color::Red(), 6, 9); // 6 : start index; 9 : end index
561     label->SetText("轻量图形子\n系统轻量图形子系统轻量图形子系统轻量图形子系统轻量图形子系统轻量图形子系统");
562     container_->Add(label);
563     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
564 }
565 
UIKitFontTestLineBackgroundSpan()566 void UITestFont::UIKitFontTestLineBackgroundSpan()
567 {
568     if (container_ == nullptr) {
569         return;
570     }
571     InnerTestTitle(" Display LineBackgroundSpan ");
572     UILabel* label = new UILabel();
573     label->SetPosition(positionX_, positionY_);
574     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
575 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
576     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
577     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
578 #else
579     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
580 #endif
581     label->SetLineBackgroundSpan(Color::Blue(), 1, 3); // 1 : start index; 3 : end index
582     label->SetLineBackgroundSpan(Color::Red(), 5, 5); // 5 : start index; 5 : end index
583     label->SetText("轻量图\n形子系统");
584     container_->Add(label);
585     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
586 }
587 
UIKitFontTestAbsoluteSizeSpan()588 void UITestFont::UIKitFontTestAbsoluteSizeSpan()
589 {
590     if (container_ == nullptr) {
591             return;
592         }
593     InnerTestTitle(" Display absolute size span");
594     UILabel* label = new UILabel();
595     label->SetPosition(positionX_, positionY_);
596     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
597 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
598     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
599     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
600 #else
601     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
602 #endif
603     label->SetText("轻量图形子系统\n轻量图形子系统");
604     label->SetAbsoluteSizeSpan(1, 2, 38); // 1 : start index; 2 : end index; 38 absolute font size
605     label->SetAbsoluteSizeSpan(2, 3, 18); // 2 : start index; 3 : end index; 18 absolute font size
606     label->SetAbsoluteSizeSpan(3, 4, 24); // 3 : start index; 4 : end index; 24 absolute font size
607     label->SetAbsoluteSizeSpan(10, 11, 14); // 10 : start index; 11 : end index; 14 font size
608     container_->Add(label);
609     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
610 }
611 
UIKitFontTestRelativeSizeSpan()612 void UITestFont::UIKitFontTestRelativeSizeSpan()
613 {
614     if (container_ == nullptr) {
615             return;
616         }
617     InnerTestTitle(" Display Relative size span");
618     UILabel* label = new UILabel();
619     label->SetPosition(positionX_, positionY_);
620     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2); // 2 : double
621 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
622     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
623     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
624 #else
625     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
626 #endif
627     label->SetText("轻量图形子系统\n轻量图形子系统");
628     label->SetRelativeSizeSpan(1, 2, 0.8f); // 1 : start index; 2 : end index; 0.8f relative font size
629     label->SetRelativeSizeSpan(10, 11, 0.6f); // 1 : start index; 2 : end index; 0.6f relative font size
630     container_->Add(label);
631     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
632 }
633 
UIKitFontTestDisplayEmoji001()634 void UITestFont::UIKitFontTestDisplayEmoji001()
635 {
636     if (container_ == nullptr) {
637         return;
638     }
639     InnerTestTitle("Emoij");
640     UILabel* label = new UILabel();
641     label->SetPosition(positionX_, positionY_);
642 
643 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
644     label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT * 3); // 2 : double; 3 : triple
645     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
646     UIFont::GetInstance()->RegisterFontInfo(DEFAULT_EMOJI_FILENAME);
647     label->SetFont(DEFAULT_EMOJI_FILENAME, FONT_EMOJI_SIZE);
648     label->SetText("����������");
649     container_->Add(label);
650     positionY_ += LABEL_HEIGHT * 3 + GAP; // 3 : triple
651 #else
652     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 2);
653     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
654 #if defined(ENABLE_MULTI_FONT) && ENABLE_MULTI_FONT
655     uint16_t findPath[] = {F_HWEMOJI_REGULAR_30_32};
656     UIMultiFontManager::GetInstance()->SetSearchFontList(F_SOURCEHANSANSSC_REGULAR_30_4, findPath, sizeof(findPath));
657 #endif
658     label->SetText("\xEF\x80\x80\xEF\x80\x81\xEF\x80\x82\xEF\x80\x83\xEF\x80\x84\xEF\x80\x85\xEF\x80\x86\xEF\x80\x87"
659                    "\xEF\x80\x80\xEF\x80\x81\xEF\x80\x82\xEF\x80\x83\xEF\x80\x84\xEF\x80\x85\xEF\x80\x86\xEF\x80\x87");
660     container_->Add(label);
661     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double;
662 #endif
663 }
664 
UIKitFontTestDisplayEmoji002()665 void UITestFont::UIKitFontTestDisplayEmoji002()
666 {
667     if (container_ == nullptr) {
668         return;
669     }
670     InnerTestTitle("Text and Emoij");
671     UILabel* label = new UILabel();
672     label->SetPosition(positionX_, positionY_);
673 
674 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
675     label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT * 6); // 2 : double; 6 : six times
676     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
677     UIFont::GetInstance()->RegisterFontInfo(DEFAULT_EMOJI_FILENAME);
678     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_EMOJI_SIZE);
679     label->SetText("轻量图形子系统��������");
680     container_->Add(label);
681     positionY_ += LABEL_HEIGHT * 6 + GAP; // 6 : six times
682 #if defined(ENABLE_MULTI_FONT) && ENABLE_MULTI_FONT
683     uint16_t findPath[] = {UIFont::GetInstance()->GetFontId(DEFAULT_EMOJI_FILENAME, FONT_EMOJI_SIZE)};
684     UIMultiFontManager::GetInstance()->SetSearchFontList(
685         UIFont::GetInstance()->GetFontId(SOURCE_HAN_SANS_SC_REGULAR, FONT_EMOJI_SIZE), findPath, sizeof(findPath));
686 #endif
687 #else
688     label->Resize(LABEL_WIDTH, LABEL_HEIGHT * 3); // 3 : triple
689     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
690 #if defined(ENABLE_MULTI_FONT) && ENABLE_MULTI_FONT
691     uint16_t findPath[] = {F_HWEMOJI_REGULAR_30_32};
692     UIMultiFontManager::GetInstance()->SetSearchFontList(F_SOURCEHANSANSSC_REGULAR_30_4, findPath, sizeof(findPath));
693 #endif
694     label->SetText("轻量图形子系统\xEF\x80\x80\xEF\x80\x81\xEF\x80\x82\xEF\x80\x83\xEF\x80\x84鴻蒙");
695     container_->Add(label);
696     positionY_ += LABEL_HEIGHT * 3 + GAP; // 3 : triple
697 #endif
698 }
699 
UIKitFontTestDisplayEmoji003()700 void UITestFont::UIKitFontTestDisplayEmoji003()
701 {
702     if (container_ == nullptr) {
703         return;
704     }
705     InnerTestTitle("Text and Emoij line break");
706     UILabel* label = new UILabel();
707     label->SetPosition(positionX_, positionY_);
708 
709 #if defined(ENABLE_VECTOR_FONT) && ENABLE_VECTOR_FONT
710     label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT * 12); // 2 : double; 12 : twelve times
711     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
712     UIFont::GetInstance()->RegisterFontInfo(DEFAULT_EMOJI_FILENAME);
713     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_EMOJI_SIZE);
714     label->SetText("轻量图形子系统��������您好,轻量图形子系统,鴻蒙��");
715     container_->Add(label);
716     positionY_ += LABEL_HEIGHT * 6 + GAP; // 6 : six times
717 #else
718     label->Resize(380, LABEL_HEIGHT * 3); // 3 : triple
719     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
720 #if defined(ENABLE_MULTI_FONT) && ENABLE_MULTI_FONT
721     uint16_t findPath[] = {F_HWEMOJI_REGULAR_30_32};
722     UIMultiFontManager::GetInstance()->SetSearchFontList(F_SOURCEHANSANSSC_REGULAR_30_4, findPath, sizeof(findPath));
723 #endif
724     label->SetText("轻量图形子系统鴻蒙操作系統\xEF\x80\x80\xEF\x80\x80"); // EF8080
725     container_->Add(label);
726     positionY_ += LABEL_HEIGHT * 3 + GAP; // 3 : triple
727 #endif
728 }
729 
UIKitFontTestDisplayNegativeLineSpace001()730 void UITestFont::UIKitFontTestDisplayNegativeLineSpace001()
731 {
732     if (container_ == nullptr) {
733         return;
734     }
735     InnerTestTitle(" Negative linespace with one line not enabled ");
736     UILabel* label = new UILabel();
737     label->SetPosition(positionX_, positionY_);
738     label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT *2); // 2 : double
739 #if ENABLE_VECTOR_FONT
740     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
741     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
742 #else
743     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
744 #endif
745     label->SetStyle(STYLE_LINE_HEIGHT, FONT_SIZE);
746     label->SetStyle(STYLE_LINE_SPACE, -20); // -20 : lineSpace_
747     label->SetText("lineSpace_ = -20, with one line.");
748 
749     container_->Add(label);
750     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
751 }
752 
UIKitFontTestDisplayNegativeLineSpace002()753 void UITestFont::UIKitFontTestDisplayNegativeLineSpace002()
754 {
755     if (container_ == nullptr) {
756         return;
757     }
758     InnerTestTitle(" Negative linespace with two line is enabled. It is more clear when bounds can be seen. ");
759     UILabel* label = new UILabel();
760     label->SetPosition(positionX_, positionY_);
761     label->Resize(LABEL_WIDTH * 2, LABEL_HEIGHT *2); // 2 : double
762 #if ENABLE_VECTOR_FONT
763     UIFont::GetInstance()->RegisterFontInfo(SOURCE_HAN_SANS_SC_REGULAR);
764     label->SetFont(SOURCE_HAN_SANS_SC_REGULAR, FONT_SIZE);
765 #else
766     label->SetFontId(F_SOURCEHANSANSSC_REGULAR_30_4);
767 #endif
768     label->SetStyle(STYLE_LINE_SPACE, -20); // -20 : lineSpace_
769 
770     label->SetText("lineSpace_ = -20, \n with two line.");
771 
772     container_->Add(label);
773     positionY_ += LABEL_HEIGHT * 2 + GAP; // 2 : double
774 }
775 } // namespace OHOS
776