2 * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
21 #include <dali-toolkit/internal/text/shaper.h>
22 #include <dali-toolkit-test-suite-utils.h>
23 #include <dali-toolkit/dali-toolkit.h>
24 #include <toolkit-text-utils.h>
27 using namespace Toolkit;
30 // Tests the following function.
31 // void ShapeText( const Vector<Character>& text,
32 // const Vector<LineBreakInfo>& lineBreakInfo,
33 // const Vector<ScriptRun>& scripts,
34 // const Vector<FontRun>& fonts,
35 // CharacterIndex startCharacterIndex,
36 // GlyphIndex startGlyphIndex,
37 // Length numberOfCharacters,
38 // Vector<GlyphInfo>& glyphs,
39 // Vector<CharacterIndex>& glyphToCharacterMap,
40 // Vector<Length>& charactersPerGlyph,
41 // Vector<GlyphIndex>& newParagraphGlyphs );
43 //////////////////////////////////////////////////////////
50 FontId fontId; ///< Identifies the font containing the glyph
51 GlyphIndex index; ///< Uniquely identifies a glyph for a given FontId
52 float width; ///< The width of the glyph
53 float height; ///< The height of the glyph
54 float xBearing; ///< The distance from the cursor position to the leftmost border of the glyph
55 float yBearing; ///< The distance from the baseline to the topmost border of the glyph
56 float advance; ///< The distance to move the cursor for this glyph
57 float scaleFactor; ///< The scaling applied (fixed-size fonts only)
58 bool softwareItalic; ///< Whether glyph needs software support to draw italic style
59 bool softwareBold; ///< Whether glyph needs software support to draw bold style
62 bool IsEqualGlyph ( const GlyphInfoData& glyphData, const GlyphInfo& glyph )
64 if( glyphData.fontId != glyph.fontId )
68 if( glyphData.index != glyph.index )
72 if( fabsf( glyphData.width - glyph.width ) > Math::MACHINE_EPSILON_1000 )
76 if( fabsf( glyphData.height - glyph.height ) > Math::MACHINE_EPSILON_1000 )
80 if( fabsf( glyphData.xBearing - glyph.xBearing ) > Math::MACHINE_EPSILON_1000 )
84 if( fabsf( glyphData.yBearing - glyph.yBearing ) > Math::MACHINE_EPSILON_1000 )
88 if( fabsf( glyphData.advance - glyph.advance ) > Math::MACHINE_EPSILON_1000 )
92 if( fabsf( glyphData.scaleFactor - glyph.scaleFactor ) > Math::MACHINE_EPSILON_1000 )
96 if( glyphData.softwareItalic != glyph.softwareItalic )
100 if( glyphData.softwareBold != glyph.softwareBold )
110 std::string description; ///< Description of the test.
111 std::string text; ///< input text.
112 uint32_t index; ///< The index from where to start to query the break info.
113 uint32_t numberOfCharacters; ///< The requested number of characters.
114 uint32_t expectedNumberOfGlyphs; ///< The expected number of glyphs.
115 GlyphInfoData* glyphs; ///< The glyphs.
116 CharacterIndex* characterIndices; ///< The character index for each glyph.
117 Length* charactersPerGlyph; ///< The characters per glyph.
118 uint32_t expectedNumberOfNewParagraphGlyphs; ///< The expected number of glyphs.
119 GlyphIndex* newParagraphGlyphs; ///< Indices to the new paragraphs glyphs.
120 Vector<FontDescriptionRun> fontDescriptions; ///< Fonts which is used for text.
123 bool ShapeInfoTest( const ShapeInfoData& data )
125 // 1) Create the model.
126 LogicalModelPtr logicalModel;
127 VisualModelPtr visualModel;
129 Size textArea(100.f, 60.f);
132 const Vector<FontDescriptionRun> fontDescriptions;
133 const LayoutOptions options;
134 CreateTextModel( data.text,
136 data.fontDescriptions,
144 // 2) Clear the model.
146 Vector<GlyphInfo>& glyphs = visualModel->mGlyphs;
147 Vector<CharacterIndex>& glyphToCharacter = visualModel->mGlyphsToCharacters;
148 Vector<Length>& charactersPerGlyph = visualModel->mCharactersPerGlyph;
149 Vector<GlyphIndex>& charactersToGlyph = visualModel->mCharactersToGlyph;
150 Vector<Length>& glyphsPerCharacter = visualModel->mGlyphsPerCharacter;
152 // Get the glyph index.
153 GlyphIndex glyphIndex = 0u;
154 if( 0u != visualModel->mCharactersToGlyph.Count() )
156 glyphIndex = *( visualModel->mCharactersToGlyph.Begin() + data.index );
158 const CharacterIndex lastCharacterIndex = data.index + data.numberOfCharacters - 1u;
159 const Length numberOfGlyphs = *( visualModel->mCharactersToGlyph.Begin() + lastCharacterIndex ) + *( visualModel->mGlyphsPerCharacter.Begin() + lastCharacterIndex ) - glyphIndex;
161 // Erase the glyph info from the text model.
162 // Got from the ShapeText() function.
163 glyphs.Erase( glyphs.Begin() + glyphIndex, glyphs.Begin() + glyphIndex + numberOfGlyphs );
164 glyphToCharacter.Erase( glyphToCharacter.Begin() + glyphIndex, glyphToCharacter.Begin() + glyphIndex + numberOfGlyphs );
165 charactersPerGlyph.Erase( charactersPerGlyph.Begin() + glyphIndex, charactersPerGlyph.Begin() + glyphIndex + numberOfGlyphs );
167 // Got from the VisualModel::CreateCharacterToGlyphTable() and the VisualModel::CreateGlyphsPerCharacterTable() methods.
168 charactersToGlyph.Erase( charactersToGlyph.Begin() + data.index,
169 charactersToGlyph.Begin() + data.index + data.numberOfCharacters );
170 glyphsPerCharacter.Erase( glyphsPerCharacter.Begin() + data.index,
171 glyphsPerCharacter.Begin() + data.index + data.numberOfCharacters );
173 // Update the glyph to character indices.
174 for( Vector<CharacterIndex>::Iterator it = glyphToCharacter.Begin() + glyphIndex,
175 endIt = glyphToCharacter.End();
179 CharacterIndex& index = *it;
180 index -= data.numberOfCharacters;
185 // Reset the metrics got from the model as the ShapeText() function doesn't retrieve them.
186 for( Vector<GlyphInfo>::Iterator it = glyphs.Begin(),
187 endIt = glyphs.End();
191 GlyphInfo& info = *it;
196 info.scaleFactor = 0.f;
199 // 3) Call the ShapeText() function.
201 Vector<GlyphIndex> newParagraphGlyphs;
203 ShapeText( logicalModel->mText,
204 logicalModel->mLineBreakInfo,
205 logicalModel->mScriptRuns,
206 logicalModel->mFontRuns,
209 data.numberOfCharacters,
213 newParagraphGlyphs );
215 // Clear the advance of the new paragraph glyphs.
216 for( Vector<GlyphIndex>::Iterator it = newParagraphGlyphs.Begin(),
217 endIt = newParagraphGlyphs.End();
221 GlyphInfo& info = *( glyphs.Begin() + *it );
225 // 4) Compare the results.
227 if( data.expectedNumberOfGlyphs != glyphs.Count() )
229 std::cout << " Different number of glyphs : " << glyphs.Count() << ", expected : " << data.expectedNumberOfGlyphs << std::endl;
233 for( unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index )
235 if( !IsEqualGlyph( data.glyphs[index], glyphs[index] ) )
237 std::cout << " different glyph info, index : " << index << std::endl;
242 for( unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index )
244 if( data.characterIndices[index] != glyphToCharacter[index] )
246 std::cout << " different character index, index : " << index << std::endl;
251 for( unsigned int index = 0u; index < data.expectedNumberOfGlyphs; ++index )
253 if( data.charactersPerGlyph[index] != charactersPerGlyph[index] )
255 std::cout << " different character per glyph, index : " << index << std::endl;
260 if( data.expectedNumberOfNewParagraphGlyphs != newParagraphGlyphs.Count() )
262 std::cout << " Different number of new paragraph glyphs : " << newParagraphGlyphs.Count() << ", expected : " << data.expectedNumberOfNewParagraphGlyphs << std::endl;
266 for( unsigned int index = 0u; index < data.expectedNumberOfNewParagraphGlyphs; ++index )
268 if( data.newParagraphGlyphs[index] != newParagraphGlyphs[index] )
270 std::cout << " different new paragraph glyph, index : " << index << std::endl;
280 //////////////////////////////////////////////////////////
282 int UtcDaliTextShape(void)
284 tet_infoline(" UtcDaliTextShape");
286 struct GlyphInfoData glyphs02[] =
288 { 1u, 43u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f },
289 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
290 { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
291 { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
292 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
293 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
294 { 1u, 90u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
295 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
296 { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f },
297 { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
298 { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
301 CharacterIndex characterIndices02[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u };
302 Length charactersPerGlyph02[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u };
304 struct GlyphInfoData glyphs03[] =
306 { 1u, 43u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f },
307 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
308 { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
309 { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
310 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
311 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
312 { 1u, 90u, 0.f, 0.f, 0.f, 0.f, 13.f, 0.f },
313 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
314 { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f },
315 { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
316 { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
317 { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f },
318 { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
319 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
320 { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
321 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
322 { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f },
325 CharacterIndex characterIndices03[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u, 10u, 11u, 12u, 13u, 14u, 15u, 16u };
326 Length charactersPerGlyph03[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u };
327 CharacterIndex newParagraphGlyphs03[] = { 11u, 16u };
329 struct GlyphInfoData glyphs04[] =
331 { 2u, 160u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
332 { 2u, 123u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
333 { 2u, 153u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
334 { 2u, 160u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
335 { 2u, 150u, 0.f, 0.f, 0.f, 0.f, 14.f, 0.f },
336 { 2u, 153u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
337 { 2u, 160u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
338 { 2u, 151u, 0.f, 0.f, 0.f, 0.f, 12.f, 0.f },
339 { 2u, 153u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
340 { 2u, 160u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
341 { 2u, 147u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
342 { 2u, 153u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
345 CharacterIndex characterIndices04[] = { 0u, 0u, 0u, 2u, 2u, 2u, 4u, 4u, 4u, 6u, 6u, 6u };
346 Length charactersPerGlyph04[] = { 0u, 0u, 2u, 0u, 0u, 2u, 0u, 0u, 2u, 0u, 0u, 2u };
348 struct GlyphInfoData glyphs05[] =
350 { 1u, 47u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
351 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
352 { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f },
353 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
354 { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
355 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
356 { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
357 { 1u, 83u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
358 { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
359 { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
360 { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
361 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
362 { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
363 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
364 { 1u, 79u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
365 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
366 { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f },
367 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
368 { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
369 { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
370 { 1u, 87u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f },
371 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
372 { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
373 { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
374 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
375 { 1u, 87u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f },
376 { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f },
377 { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
378 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
379 { 1u, 84u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
380 { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
381 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
382 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
383 { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
384 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
385 { 1u, 5034u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
386 { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
387 { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
388 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
389 { 1u, 69u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
390 { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
391 { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
392 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
393 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
394 { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
395 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
396 { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
397 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
398 { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
399 { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f },
400 { 1u, 83u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
401 { 1u, 82u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
402 { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
403 { 1u, 86u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
404 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
405 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
406 { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
407 { 1u, 85u, 0.f, 0.f, 0.f, 0.f, 6.f, 0.f },
408 { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
409 { 1u, 70u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
410 { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
411 { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
412 { 1u, 71u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
413 { 1u, 76u, 0.f, 0.f, 0.f, 0.f, 4.f, 0.f },
414 { 1u, 68u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
415 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
416 { 1u, 81u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
417 { 1u, 72u, 0.f, 0.f, 0.f, 0.f, 9.f, 0.f },
418 { 1u, 3u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
419 { 1u, 70u, 0.f, 0.f, 0.f, 0.f, 8.f, 0.f },
420 { 1u, 88u, 0.f, 0.f, 0.f, 0.f, 10.f, 0.f },
421 { 1u, 80u, 0.f, 0.f, 0.f, 0.f, 15.f, 0.f },
422 { 1u, 17u, 0.f, 0.f, 0.f, 0.f, 5.f, 0.f },
423 { 1u, 0u, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f },
426 CharacterIndex characterIndices05[] = { 0u, 1u, 2u, 3u, 4u, 5u, 6u, 7u, 8u, 9u,
427 10u, 11u, 12u, 13u, 14u, 15u, 16u, 17u, 18u, 19u,
428 20u, 21u, 22u, 23u, 24u, 25u, 26u, 27u, 28u, 29u,
429 30u, 31u, 32u, 33u, 34u, 35u, 37u, 38u, 39u, 40u,
430 41u, 42u, 43u, 44u, 45u, 46u, 47u, 48u, 49u, 50u,
431 51u, 52u, 53u, 54u, 55u, 56u, 57u, 58u, 59u, 60u,
432 61u, 62u, 63u, 64u, 65u, 66u, 67u, 68u, 69u, 70u,
433 71u, 72u, 73u, 74u };
434 Length charactersPerGlyph05[] = { 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
435 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
436 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
437 1u, 1u, 1u, 1u, 1u, 2u, 1u, 1u, 1u, 1u,
438 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
439 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
440 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u, 1u,
442 CharacterIndex newParagraphGlyphs05[] = { 26u };
443 CharacterIndex newParagraphGlyphs06[] = { 49u };
444 CharacterIndex newParagraphGlyphs07[] = { 73u };
446 struct ShapeInfoData data[] =
468 charactersPerGlyph02,
473 "Latin script. Some paragraphs.",
474 "Hello world\ndemo\n",
480 charactersPerGlyph03,
485 "Malayalam script. More glyphs than characters.",
492 charactersPerGlyph04,
497 "Latin script with some paragraphs. Update initial paragraph.",
498 "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
504 charactersPerGlyph05,
509 "Latin script with some paragraphs. Update mid paragraph.",
510 "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
516 charactersPerGlyph05,
521 "Latin script with some paragraphs. Update final paragraph.",
522 "Lorem ipsum dolor sit amet\naeque definiebas ea mei\nposse iracundia ne cum.\n",
528 charactersPerGlyph05,
533 const unsigned int numberOfTests = 7u;
535 for( unsigned int index = 0u; index < numberOfTests; ++index )
537 ToolkitTestApplication application;
538 if( !ShapeInfoTest( data[index] ) )
540 tet_result(TET_FAIL);
544 tet_result(TET_PASS);
548 int UtcDaliTextSoftwareStyling(void)
550 tet_infoline(" UtcDaliTextSoftwareStyling");
552 struct GlyphInfoData glyphs01[] =
554 { 2u, 14750u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
555 { 2u, 9802u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
556 { 2u, 12811u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, true },
558 struct GlyphInfoData glyphs02[] =
560 { 2u, 14750u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, false, false },
561 { 2u, 9802u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, false, true },
562 { 2u, 12811u, 0.f, 0.f, 0.f, 0.f, 16.f, 0.f, true, false },
565 CharacterIndex characterIndices[] = { 0u, 1u, 2u };
566 Length charactersPerGlyph[] = { 1u, 1u, 1u };
568 Vector<FontDescriptionRun> fontDescriptions01;
569 Vector<FontDescriptionRun> fontDescriptions02;
571 FontDescriptionRun fontDescriptionRun01 =
579 TextAbstraction::FontWeight::BOLD,
580 TextAbstraction::FontWidth::NONE,
581 TextAbstraction::FontSlant::ITALIC,
582 TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
589 fontDescriptions01.PushBack(fontDescriptionRun01);
591 FontDescriptionRun fontDescriptionRun02 =
599 TextAbstraction::FontWeight::NONE,
600 TextAbstraction::FontWidth::NONE,
601 TextAbstraction::FontSlant::NONE,
602 TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
609 FontDescriptionRun fontDescriptionRun03 =
617 TextAbstraction::FontWeight::BOLD,
618 TextAbstraction::FontWidth::NONE,
619 TextAbstraction::FontSlant::NONE,
620 TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
627 FontDescriptionRun fontDescriptionRun04 =
635 TextAbstraction::FontWeight::NONE,
636 TextAbstraction::FontWidth::NONE,
637 TextAbstraction::FontSlant::ITALIC,
638 TextAbstraction::FontClient::DEFAULT_POINT_SIZE,
646 fontDescriptions02.PushBack(fontDescriptionRun02);
647 fontDescriptions02.PushBack(fontDescriptionRun03);
648 fontDescriptions02.PushBack(fontDescriptionRun04);
651 struct ShapeInfoData data[] =
654 "Chiness script. Characters have same font description",
667 "Chiness script. Each character has different font description.",
681 const unsigned int numberOfTests = 2u;
683 for( unsigned int index = 0u; index < numberOfTests; ++index )
685 ToolkitTestApplication application;
686 if( !ShapeInfoTest( data[index] ) )
688 tet_result(TET_FAIL);
692 tet_result(TET_PASS);