Merge "Add new layouting support for TextLabel and ImageView." into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / glyph-metrics-helper.cpp
1
2 /*
3  * Copyright (c) 2016 Samsung Electronics Co., Ltd.
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18
19 // FILE HEADER
20 #include <dali-toolkit/internal/text/glyph-metrics-helper.h>
21
22 namespace Dali
23 {
24
25 namespace Toolkit
26 {
27
28 namespace Text
29 {
30
31 Length GetNumberOfGlyphsOfGroup( GlyphIndex glyphIndex,
32                                  GlyphIndex lastGlyphPlusOne,
33                                  const Length* const charactersPerGlyphBuffer )
34 {
35   Length numberOfGLyphsInGroup = 1u;
36
37   for( GlyphIndex index = glyphIndex; index < lastGlyphPlusOne; ++index )
38   {
39     if( 0u == *( charactersPerGlyphBuffer + index ) )
40     {
41       ++numberOfGLyphsInGroup;
42     }
43     else
44     {
45       break;
46     }
47   }
48
49   return numberOfGLyphsInGroup;
50 }
51
52 void GetGlyphsMetrics( GlyphIndex glyphIndex,
53                        Length numberOfGlyphs,
54                        GlyphMetrics& glyphMetrics,
55                        const GlyphInfo* const glyphsBuffer,
56                        MetricsPtr& metrics )
57 {
58   const GlyphInfo& firstGlyph = *( glyphsBuffer + glyphIndex );
59
60   Text::FontMetrics fontMetrics;
61   metrics->GetFontMetrics( firstGlyph.fontId, fontMetrics );
62
63   glyphMetrics.fontId = firstGlyph.fontId;
64   glyphMetrics.fontHeight = fontMetrics.height;
65   glyphMetrics.width = firstGlyph.width;
66   glyphMetrics.advance = firstGlyph.advance;
67   glyphMetrics.ascender = fontMetrics.ascender;
68   glyphMetrics.xBearing = firstGlyph.xBearing;
69
70   for( unsigned int i = 1u; i < numberOfGlyphs; ++i )
71   {
72     const GlyphInfo& glyphInfo = *( glyphsBuffer + glyphIndex + i );
73
74     glyphMetrics.advance += glyphInfo.advance;
75     glyphMetrics.width += glyphInfo.width;
76   }
77 }
78
79 } // namespace Text
80
81 } // namespace Toolkit
82
83 } // namespace Dali