• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 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 <texgine/dynamic_file_font_provider.h>
17 #include <texgine/system_font_provider.h>
18 #include <texgine/typography_builder.h>
19 
20 #include "feature_test_framework.h"
21 #include "text_define.h"
22 
23 using namespace OHOS::Rosen::TextEngine;
24 
25 namespace {
26 #define FAMILY1 WOMAN SKIN1 ZWJ RED_HEART ZWJ MAN SKIN0
27 #define FAMILY2 PERSON SKIN4 ZWJ RED_HEART ZWJ MAN ZWJ PERSON SKIN2
28 #define ROLE1 PERSON SKIN3 ZWJ AIRPLANE
29 #define ROLE2 PERSON SKIN1 ZWJ LAPTOP
30 #define GENERED1 BOUNCING_BALL SKIN2 ZWJ WOMAN_SPORT_VARIANT EMOJI_VARIANT
31 #define GENERED2 LIFTING_WEIGHTS SKIN0 ZWJ MAN_SPORT_VARIANT EMOJI_VARIANT
32 #define HAIR1 MAN SKIN2 ZWJ HAIR_BALD
33 #define HAIR2 PERSON SKIN4 ZWJ HAIR_CURLY
34 #define OTHER1 RED_HEART ZWJ "\U0001F525"
35 #define OTHER2 F_FLAG EMOJI_VARIANT ZWJ TRANSGENDER EMOJI_VARIANT
36 
37 struct Emoji {
38     TextStyle style = { .fontSize = 32 };
39     std::string emoji;
40     std::string title;
41 } g_emojis[] = {
42     {
43         .emoji = WATCH,
44         .title = "watch",
45     },
46     {
47         .emoji = FAST_FORWARD_BUTTON,
48         .title = "fast forward button",
49     },
50     {
51         .emoji = ALART_CLOCK,
52         .title = "alart clock",
53     },
54     {
55         .emoji = UMBRELLA,
56         .title = "umbrella",
57     },
58     {
59         .emoji = RED_CIRCLE,
60         .title = "red circle",
61     },
62     {
63         .emoji = BLACK_LARGE_SQUARE,
64         .title = "black large square",
65     },
66     {
67         .emoji = CURLY_LOOP,
68         .title = "curly loop",
69     },
70     {
71         .emoji = PLUS,
72         .title = "plus",
73     },
74     {
75         .emoji = SNOWMAN,
76         .title = "snowman",
77     },
78     {
79         .emoji = VOLTAGE,
80         .title = "voltage",
81     },
82     {
83         .emoji = COPYRIGHT,
84         .title = "copyright",
85     },
86     {
87         .emoji = REGISTERED,
88         .title = "registered",
89     },
90     {
91         .emoji = DOUBLE_EXCLAMATION_MARK,
92         .title = "double exclamation mark",
93     },
94     {
95         .emoji = EXCLAMATION_QUESTION_MARK,
96         .title = "exclamation question mark",
97     },
98     {
99         .emoji = WAVY_DASH,
100         .title = "wavy dash",
101     },
102     {
103         .emoji = LEFT_ARROW,
104         .title = "left arrow",
105     },
106     {
107         .emoji = RED_HEART,
108         .title = "red heart",
109     },
110     {
111         .emoji = PENCIL,
112         .title = "pencil",
113     },
114     {
115         .emoji = AIRPLANE,
116         .title = "airplan",
117     },
118     {
119         .emoji = ATOM,
120         .title = "atom",
121     },
122     {
123         .emoji = RED_DRAGON,
124         .title = "red dragon",
125     },
126     {
127         .emoji = JOKER,
128         .title = "joker",
129     },
130     {
131         .emoji = CYCLONE,
132         .title = "cyclone",
133     },
134     {
135         .emoji = NEW_MOON_FACE,
136         .title = "new moon face",
137     },
138     {
139         .emoji = CAT,
140         .title = "cat",
141     },
142     {
143         .emoji = DOG,
144         .title = "dog",
145     },
146     {
147         .emoji = BOY,
148         .title = "boy",
149     },
150     {
151         .emoji = POST_BOX,
152         .title = "postbox",
153     },
154     {
155         .emoji = GRINNING_FACE,
156         .title = "grinning face",
157     },
158     {
159         .emoji = ROCKET,
160         .title = "rocket",
161     },
162     {
163         .emoji = CLOUD_WITH_RAIN,
164         .title = "cloud with rain",
165     },
166     {
167         .emoji = TORNADO,
168         .title = "tornado",
169     },
170     {
171         .emoji = FOG,
172         .title = "fog",
173     },
174     {
175         .emoji = PERSON_GOLFING,
176         .title = "person golfing",
177     },
178     {
179         .emoji = MOTOR_CYCLE,
180         .title = "motorcycle",
181     },
182     {
183         .emoji = CANDLE,
184         .title = "candle",
185     },
186     {
187         .emoji = SPIDER,
188         .title = "spider",
189     },
190     {
191         .emoji = BED,
192         .title = "bed",
193     },
194     {
195         .emoji = WORLD_MAP,
196         .title = "world map",
197     },
198     {
199         .emoji = SPEAKING_HEAD,
200         .title = "speaking head",
201     },
202     {
203         .emoji = SHARP,
204         .title = "sharp",
205     },
206     {
207         .emoji = ASTERISK,
208         .title = "asterisk",
209     },
210     {
211         .emoji = ZERO,
212         .title = "zero",
213     },
214     {
215         .emoji = ONE,
216         .title = "one",
217     },
218     {
219         .emoji = TWO,
220         .title = "two",
221     },
222     {
223         .emoji = THREE,
224         .title = "three",
225     },
226     {
227         .emoji = FOUR,
228         .title = "four",
229     },
230     {
231         .emoji = FIVE,
232         .title = "five",
233     },
234     {
235         .emoji = SIX,
236         .title = "six",
237     },
238     {
239         .emoji = SEVEN,
240         .title = "seven"
241     },
242     {
243         .emoji = CHINA,
244         .title = "China",
245     },
246     {
247         .emoji = AUSTRALIA,
248         .title = "Australia",
249     },
250     {
251         .emoji = CANADA,
252         .title = "Canada",
253     },
254     {
255         .emoji = FRANCE,
256         .title = "France",
257     },
258     {
259         .emoji = IRELAND,
260         .title = "Ireland",
261     },
262     {
263         .emoji = INDIA,
264         .title = "India",
265     },
266     {
267         .emoji = ICELAND,
268         .title = "Iceland",
269     },
270     {
271         .emoji = ITALY,
272         .title = "Italy",
273     },
274     {
275         .emoji = JAPAN,
276         .title = "Japan",
277     },
278     {
279         .emoji = RUSSIA,
280         .title = "Russia",
281     },
282     {
283         .emoji = BOY0,
284         .title = "boy ligth",
285     },
286     {
287         .emoji = BOY1,
288         .title = "boy medium light",
289     },
290     {
291         .emoji = BOY2,
292         .title = "boy medium skin",
293     },
294     {
295         .emoji = BOY3,
296         .title = "boy medium dark",
297     },
298     {
299         .emoji = BOY4,
300         .title = "boy dark",
301     },
302     {
303         .emoji = GIRL0,
304         .title = "girl ligth",
305     },
306     {
307         .emoji = GIRL1,
308         .title = "girl medium light",
309     },
310     {
311         .emoji = GIRL2,
312         .title = "girl medium skin",
313     },
314     {
315         .emoji = GIRL3,
316         .title = "girl medium dark",
317     },
318     {
319         .emoji = GIRL4,
320         .title = "girl dark",
321     },
322     {
323         .emoji = FAMILY1,
324         .title = "family 1",
325     },
326     {
327         .emoji = FAMILY2,
328         .title = "family 2",
329     },
330     {
331         .emoji = ROLE1,
332         .title = "role 1",
333     },
334     {
335         .emoji = ROLE2,
336         .title = "role 2",
337     },
338     {
339         .emoji = GENERED1,
340         .title = "genered 1",
341     },
342     {
343         .emoji = GENERED2,
344         .title = "genered 2",
345     },
346     {
347         .emoji = HAIR1,
348         .title = "hair 1",
349     },
350     {
351         .emoji = HAIR2,
352         .title = "hair 2",
353     },
354     {
355         .emoji = OTHER1,
356         .title = "other 1",
357     },
358     {
359         .emoji = OTHER2,
360         .title = "other 2",
361     }
362 };
363 
364 class EmojiTest : public TestFeature {
365 public:
EmojiTest()366     EmojiTest() : TestFeature("EmojiTest")
367     {
368     }
369 
Layout()370     void Layout()
371     {
372         for (auto &emoji : g_emojis) {
373             TypographyStyle tystyle;
374             auto dfProvider = DynamicFileFontProvider::Create();
375             dfProvider->LoadFont("Segoe UI Emoji", RESOURCE_PATH_PREFIX "seguiemj.ttf");
376             auto fps = FontProviders::Create();
377             fps->AppendFontProvider(dfProvider);
378             fps->AppendFontProvider(SystemFontProvider::GetInstance());
379             auto builder = TypographyBuilder::Create(tystyle, std::move(fps));
380 
381             emoji.style.fontFamilies = {"Segoe UI Emoji"};
382             builder->PushStyle(emoji.style);
383             builder->AppendSpan(emoji.emoji);
384             builder->PopStyle();
385 
386             auto typography = builder->Build();
387             double widthLimit = 100;
388             typography->Layout(widthLimit);
389             typographies_.push_back({ .typography = typography, .comment = emoji.title });
390         }
391     }
392 } g_test;
393 } // namespace
394