Merge "ImageView ResourceReady logic update" into devel/master
[platform/core/uifw/dali-toolkit.git] / docs / content / shared-javascript-and-cpp-documentation / text-label.md
1 <!--
2 /**-->
3
4 # Text Label {#text-label}
5
6 ## Overview
7
8 The Dali::Toolkit::TextLabel is a Dali::Toolkit::Control which renders a short text string.  
9 Text labels are lightweight, non-editable and do not respond to user input.
10
11 ### Basic usage
12
13 To display a TextLabel the TEXT property must be set using a UTF-8 string.
14
15 Note *CR+LF* new line characters are replaced by a *LF* one.
16
17 ~~~{.cpp}
18 // C++
19
20 TextLabel label = TextLabel::New();
21 label.SetProperty( TextLabel::Property::TEXT, "Hello World" );
22 label.SetAnchorPoint( AnchorPoint::TOP_LEFT );
23 Stage::GetCurrent().Add( label );
24 ~~~
25
26 ~~~{.js}
27 // JavaScript
28
29 var label = new dali.TextLabel();
30
31 label.text = "Hello World";
32 label.anchorPoint = dali.TOP_LEFT;
33
34 dali.stage.add( label );
35 ~~~
36
37 The label must also be added to the stage, or to an actor which is on the stage.  
38 The position of the label on-screen is dependent on the parentOrigin and anchorPoint properties.  
39
40 |  |  |
41 |--|--|
42 | (ParentOrigin::TOP_LEFT, AnchorPoint::TOP_LEFT) | ![ ](../assets/img/text-controls/TextLabelTopLeft.png) ![ ](TextLabelTopLeft.png)   |
43
44 ### Font Selection
45
46 By default TextLabel will automatically select a suitable font from the platform. However, a different font could be selected. See the [Font Selection](@ref font-selection) section for more details.
47
48 ### Mark-up Style
49
50 Mark-up tags can be used to change the style of the text. See the [Mark-up Style](@ref markup-style) section for more details.
51
52 ### Text Alignment
53
54 Wrapping can be enabled using the MULTI_LINE property:
55
56 ~~~{.cpp}
57 // C++
58
59 label.SetProperty( TextLabel::Property::MULTI_LINE, true );
60 ~~~
61
62 ~~~{.js}
63 // JavaScript
64
65 label.mutliLine = true;
66 ~~~
67
68 The text can be either aligned horizontally to the beginning, end, or center of the available area:
69
70 ~~~{.cpp}
71 // C++
72
73 label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "BEGIN" ); // "CENTER" or "END"
74 ~~~
75
76 ~~~{.js}
77 // JavaScript
78
79 label.HorizontalAlignment = "BEGIN"; // "CENTER" or "END"
80 ~~~
81
82 |  |  |
83 |--|--|
84 | Here is the "BEGIN" alignment shown for left-to-right (Latin)   |  right-to-left (Arabic) scripts |
85 | ![ ](../assets/img/text-controls/LatinBegin.png) ![ ](LatinBegin.png) | ![ ](../assets/img/text-controls/ArabicBegin.png) ![ ](ArabicBegin.png) |
86 | Here is the "CENTER" alignment shown for left-to-right (Latin)  | right-to-left (Arabic) scripts:|
87 | ![ ](../assets/img/text-controls/LatinCenter.png) ![ ](LatinCenter.png) | ![ ](../assets/img/text-controls/ArabicCenter.png) ![ ](ArabicCenter.png) |
88 | Here is the "END" alignment shown for left-to-right (Latin)  | right-to-left (Arabic) scripts:|
89 | ![ ](../assets/img/text-controls/LatinEnd.png) ![ ](LatinEnd.png) | ![ ](../assets/img/text-controls/ArabicEnd.png) ![ ](ArabicEnd.png) |
90
91
92 The examples above assume that the TextLabel size greater than the minimum required.  
93 The next section provides details about the other size related options.
94
95 ## Negotiating size
96
97 \link size-negotiation Size negotiation \endlink is a layouting feature supported by UI controls such as TextLabel.
98   
99 There are several resize policies which are commonly used with TextLabels.
100   
101 The following examples show TextLabels actual size by setting a colored background, whilst the black area represents the size of the parent control:  
102
103 ### Using natural size
104
105 With a "natural" size TextLabel will be large enough to display the text without wrapping, and will not have extra space to align the text within.  
106 Therefore in this example the same result would be displayed, regardless of the alignment or multi-line properties.  
107
108 ~~~{.cpp}
109 // C++
110
111 TextLabel label = TextLabel::New( "Hello World" );
112 label.SetAnchorPoint( AnchorPoint::TOP_LEFT );
113 label.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
114 label.SetBackgroundColor( Color::BLUE );
115 Stage::GetCurrent().Add( label );
116 ~~~
117
118 ~~~{.js}
119 // JavaScript
120
121 var label = new dali.Textlabel;
122 label.text = "Hello World";
123 label.anchorPoint = dali.TOP_LEFT;
124
125 label.widthResizePolicy = "USE_NATURAL_SIZE";
126 label.heightResizePolicy = "USE_NATURAL_SIZE";
127
128 label.textColor = dali.COLOR_WHITE;
129 // background color not available as it's currently not a property of control
130 dali.stage.add( label );
131 ~~~
132
133
134  ![ ](../assets/img/text-controls/HelloWorld-NaturalSize.png)
135  ![ ](HelloWorld-NaturalSize.png)
136
137
138 ### Height-for-width negotiation
139
140 To layout text labels vertically, a fixed (maximum) width should be provided by the parent control.  
141 Each TextLabel will then report a desired height for the given width.  
142 Here is an example of this behavior using TableView as the parent:
143
144 ~~~{.cpp}
145 // C++
146 TableView parent = TableView::New( 3, 1 );
147 parent.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
148 parent.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
149 parent.SetAnchorPoint( AnchorPoint::TOP_LEFT );
150 Stage::GetCurrent().Add( parent );
151
152 TextLabel label = TextLabel::New( "Hello World" );
153 label.SetAnchorPoint( AnchorPoint::TOP_LEFT );
154 label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
155 label.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
156 label.SetBackgroundColor( Color::BLUE );
157 parent.AddChild( label, TableView::CellPosition( 0, 0 ) );
158 parent.SetFitHeight( 0 );
159
160 label = TextLabel::New( "A Quick Brown Fox Jumps Over The Lazy Dog" );
161 label.SetAnchorPoint( AnchorPoint::TOP_LEFT );
162 label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
163 label.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
164 label.SetBackgroundColor( Color::GREEN );
165 label.SetProperty( TextLabel::Property::MULTI_LINE, true );
166 parent.AddChild( label, TableView::CellPosition( 1, 0 ) );
167 parent.SetFitHeight( 1 );
168
169 label = TextLabel::New( "لإعادة ترتيب الشاشات، يجب تغيير نوع العرض إلى شبكة قابلة للتخصيص." );
170 label.SetAnchorPoint( AnchorPoint::TOP_LEFT );
171 label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
172 label.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT );
173 label.SetBackgroundColor( Color::BLUE );
174 label.SetProperty( TextLabel::Property::MULTI_LINE, true );
175 parent.AddChild( label, TableView::CellPosition( 2, 0 ) );
176 parent.SetFitHeight( 2 );
177 ~~~
178
179  ![ ](../assets/img/text-controls/HelloWorld-HeightForWidth.png)
180  ![ ](HelloWorld-HeightForWidth.png)
181
182
183 Note that the "Hello World" text label (above) has been given the full width, not the natural width.
184
185 ### TextLabel Decorations
186
187 #### Color
188
189 To change the color of the text, the recommended way is to use the TEXT_COLOR property.  
190 Note that unlike the Actor::COLOR property, this will not affect child Actors added to the TextLabel.  
191
192 ~~~{.cpp}
193 // C++
194 label.SetProperty( TextLabel::Property::TEXT, "Red Text" );
195 label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
196 ~~~
197
198 ~~~{.js}
199 // JavaScript
200
201 label.text = "Red Text";
202 label.textColor = dali.COLOR_RED;
203 ~~~
204
205  ![ ](../assets/img/text-controls/RedText.png)
206  ![ ](RedText.png)
207
208 #### Drop Shadow
209
210 To add a drop-shadow to the text, simply set the SHADOW property. Shadow parameters can be set through a json string, see the examples below.
211
212 ~~~{.cpp}
213  // C++
214
215 stage.SetBackgroundColor( Color::BLUE );
216
217 label1.SetProperty( TextLabel::Property::TEXT, "Plain Text" );
218
219 label2.SetProperty( TextLabel::Property::TEXT, "Text with Shadow" );
220 label2.SetProperty( TextLabel::Property::SHADOW, "{\"offset\":\"1 1\",\"color\":\"black\"}" );
221
222 label3.SetProperty( TextLabel::Property::TEXT, "Text with Bigger Shadow" );
223 label3.SetProperty( TextLabel::Property::SHADOW, "{\"offset\":\"2 2\",\"color\":\"black\"}" );
224
225 label4.SetProperty( TextLabel::Property::TEXT, "Text with Color Shadow" );
226 label4.SetProperty( TextLabel::Property::SHADOW, "{\"offset\":\"1 1\",\"color\":\"red\"}" );
227 ~~~
228
229 ~~~{.js}
230 // JavaScript
231
232 dali.stage.setBackgroundColor( dali.COLOR_BLUE );
233
234 label1.text = "Plain Text";
235
236
237 label2.text = "Text with Shadow";
238 label2.shadow = "{\"offset\":\"1 1\",\"color\":\"black\"}";
239
240 label3.text = "Text with Bigger Shadow";
241 label3.shadow = "{\"offset\":\"2 2\",\"color\":\"black\"}";
242
243 label4.SetProperty( TextLabel::Property::TEXT, "Text with Color Shadow" );
244 label3.shadow = "{\"offset\":\"1 1\",\"color\":\"red\"}";
245 ~~~
246
247
248 ![ ](../assets/img/text-controls/PlainText.png)
249 ![ ](PlainText.png)
250
251
252 ![ ](../assets/img/text-controls/TextWithShadow.png)
253 ![ ](TextWithShadow.png)
254
255 ![ ](../assets/img/text-controls/TextWithBiggerShadow.png)
256 ![ ](TextWithBiggerShadow.png)
257
258
259 ![ ](../assets/img/text-controls/TextWithColorShadow.png)
260 ![ ](TextWithColorShadow.png)
261
262
263 #### Underline
264
265 The text can be underlined by setting UNDERLINE_ENABLED.  
266 The color can also be selected using the UNDERLINE_COLOR property.  
267
268 ~~~{.cpp}
269 // C++
270 label1.SetProperty( TextLabel::Property::TEXT, "Text with Underline" );
271 label1.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
272
273 label2.SetProperty( TextLabel::Property::TEXT, "Text with Color Underline" );
274 label2.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true );
275 label2.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::GREEN );
276 ~~~
277 ~~~{.js}
278 // JavaScript
279 label1.Text = "Text with Underline";
280 label1.underlineEnabled = true;
281
282 label2.Text = "Text with Color Underline";
283 label2.underlineEnabled = true;
284 label2.underlineColor = dali.COLOR_GREEN;
285 ~~~
286
287
288 ![ ](../assets/img/text-controls/TextWithUnderline.png)
289 ![ ](TextWithUnderline.png)
290
291
292 ![ ](../assets/img/text-controls/TextWithColorUnderline.png)
293 ![ ](TextWithColorUnderline.png)
294
295 By default the underline height will be taken from the font metrics, however this can be overridden using the UNDERLINE_HEIGHT property:
296
297 ~~~{.cpp}
298 // C++
299
300 label1.SetProperty( TextLabel::Property::UNDERLINE_HEIGHT, 1.0f );
301 ~~~
302
303 ~~~{.js}
304 // JavaScript
305
306 label1.underlineHeight = 1;
307 ~~~
308
309 ![ ](../assets/img/text-controls/TextWith1pxUnderline.png)
310 ![ ](TextWith1pxUnderline.png)
311
312 ### Auto Scrolling
313
314 ![ ](../assets/img/text-controls/AutoScroll.gif)
315 ![ ](AutoScroll.gif)
316
317 The \link text-auto-scrolling Auto text scrolling \endlink section details how to scroll text automatically.
318
319 ### Text Label Properties
320
321 The properties used by TextLabel are listed [here](@ref TextLabelProperties)
322
323 @class TextLabel
324
325 */