From e7799b0ec7b39e083bbb99eebd896e2aa1c2f358 Mon Sep 17 00:00:00 2001 From: Paul Wisbey Date: Tue, 14 Apr 2015 16:12:08 +0100 Subject: [PATCH] Text-related Programming guide updates Change-Id: I474917bd30af46ad58b389c5c8c3e4469578c606 --- .../text/rendering/atlas/text-atlas-renderer.cpp | 3 +- docs/content/example-code/property-example.cpp | 6 +- docs/content/images/actors/Text-Actor.png | Bin 2467 -> 0 bytes docs/content/images/actors/Text-Label.png | Bin 0 -> 4919 bytes .../text-controls/HelloWorld-HeightForWidth.png | Bin 0 -> 15693 bytes .../text-controls/HelloWorld-NaturalSize.png | Bin 0 -> 2307 bytes docs/content/images/text-controls/PlainText.png | Bin 0 -> 1472 bytes docs/content/images/text-controls/RedText.png | Bin 0 -> 1199 bytes .../images/text-controls/TextWith1pxUnderline.png | Bin 0 -> 2703 bytes .../images/text-controls/TextWithBiggerShadow.png | Bin 0 -> 4567 bytes .../images/text-controls/TextWithColorShadow.png | Bin 0 -> 3964 bytes .../text-controls/TextWithColorUnderline.png | Bin 0 -> 3062 bytes .../images/text-controls/TextWithShadow.png | Bin 0 -> 3370 bytes .../images/text-controls/TextWithUnderline.png | Bin 0 -> 2404 bytes docs/content/programming-guide/hello-world.h | 85 ++++--- docs/content/programming-guide/properties.h | 2 +- docs/content/programming-guide/script-hello.h | 34 ++- docs/content/programming-guide/size-negotiation.h | 13 +- docs/content/programming-guide/text-label.h | 261 ++++++++++++++++++++- 19 files changed, 324 insertions(+), 80 deletions(-) delete mode 100644 docs/content/images/actors/Text-Actor.png create mode 100644 docs/content/images/actors/Text-Label.png create mode 100644 docs/content/images/text-controls/HelloWorld-HeightForWidth.png create mode 100644 docs/content/images/text-controls/HelloWorld-NaturalSize.png create mode 100644 docs/content/images/text-controls/PlainText.png create mode 100644 docs/content/images/text-controls/RedText.png create mode 100644 docs/content/images/text-controls/TextWith1pxUnderline.png create mode 100644 docs/content/images/text-controls/TextWithBiggerShadow.png create mode 100644 docs/content/images/text-controls/TextWithColorShadow.png create mode 100644 docs/content/images/text-controls/TextWithColorUnderline.png create mode 100644 docs/content/images/text-controls/TextWithShadow.png create mode 100644 docs/content/images/text-controls/TextWithUnderline.png diff --git a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp index 7891391..b82b07b 100644 --- a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp +++ b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp @@ -21,6 +21,7 @@ // EXTERNAL INCLUDES #include #include +#include // INTERNAL INCLUDES #include @@ -722,4 +723,4 @@ AtlasRenderer::AtlasRenderer() AtlasRenderer::~AtlasRenderer() { delete mImpl; -} \ No newline at end of file +} diff --git a/docs/content/example-code/property-example.cpp b/docs/content/example-code/property-example.cpp index 35e7869..e0f40e6 100644 --- a/docs/content/example-code/property-example.cpp +++ b/docs/content/example-code/property-example.cpp @@ -101,7 +101,7 @@ class PropertyButtonsController: public ConnectionTracker } // Create the last selected button text view. - mTagText = Toolkit::TextView::New( "None selected" ); + mTagText = Toolkit::TextLabel::New( "None selected" ); mTagText.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); mTagText.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); mTagText.SetPosition( Vector3( 0.0f, -30.0f, 0.0f ) ); @@ -121,14 +121,14 @@ class PropertyButtonsController: public ConnectionTracker // Property::Index index = button.GetPropertyIndex( TAG_PROPERTY_NAME ); valueText << "Selected: " << button.GetProperty< float >( mTagPropertyIndex ); - mTagText.SetText( valueText.str() ); + mTagText.SetProperty( TextLabel::Property::TEXT, valueText.str() ); return true; } private: - Toolkit::TextView mTagText; ///< A text label used to show the last button pressed. + Toolkit::TextLabel mTagText; ///< A text label used to show the last button pressed. Property::Index mTagPropertyIndex; ///< A cached property index of our custom tag property. }; diff --git a/docs/content/images/actors/Text-Actor.png b/docs/content/images/actors/Text-Actor.png deleted file mode 100644 index 6bba38e12cf43f89e38336a24f63850152799ea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2467 zcmb7GeK^$F9-rE76Y_FzMf5^<$NNj0NaJlHRLNhe8n<6xZ#gNH(ZN?bJ9?$(__onWBdVbIEIp=$x@ArE?=bX>ye9!e` z?k>uTT8a<|L>YO+2?g3`5Xd^GO&dY)!oSj?pjn4Uxi~_~I6L0~V`Gr3ixXsJ_4}!@ zC=-k*oIT=$hd`9Jtp4jDcXPLcLFhT8n=`b3vx=IMsj=$fFTm|(O5KMCM>r(D|ZK*+i;#-H)8xoJH*{j`8Ry0;r zY(-q96vTKQ{y7PkMSrbGKyz3x@rZHJuaOkY5j(E2@r?NI*0z-99#)hOH3$%FrmNkW7%GpR}5ag^7Glf zeLPlI2f2s2Ja+oYeXUQ2ew67y=Kq@OqkvDK`N-oh=2?Zm82>L4@~M@6CjRqVvnHT` zooY33dmpCl=Jp)(knhUsCLS{9=TvQ{4^0S#nJ~Pd6N$kLhiJDvKxW492tBFWOUlc+ zA9?~2L1+3Zam6JiGV~Z6_ws>>f1L%U{Z`|+kU${da5&Ev@{caV-G zeX{t35kkH&JW4V4meWX^RaCOP%LDw~Q31?LBq=RBz{uOn%fCDNksqU?0i^mn#^(Hc z1M=d#qES@w2~DD~w1%B#zc|jf?rBZY$WGe{M^UW_6V8F;g`sO5P}SWgY2C!3wEmy- z_9!MghH|NPK}iN%74KLRPV2enE@X@M9Xxn@XlMw=nw~z(q1q99+oMOGr<(*c)S4T= zpxW6~RaG&>ec}6~1{z>UunJL~u=;dHvbVL(ZEkir-V#O* zu6v`5GRrm|PITN8I}nGpwzhuBzB3uex8h&Ki{JNVg5}WY^!?%8j~L@J z;AIYS&|I_ikm_cBx68`P&hVQWXSdVO4n2jj{{0m+17^iLcl`Wh9|Z)C4mMwj8^3qW zNQSOIA5k6ApOw19s<5a?zax7uQ|Hy<;^O=Mn!P+8ua|+xmN5i(a}neKk_Qi_cHcUTN>aD~bS2sEN!x)ulR?d{iN7fD{AxNS8>IigS ze?ML}S%Ym!QjYumx_%6wB=NU+Vn-AQx8B%>%qT1@e9vbhqMD?k-5>arM>mBQ-7lm?ucqgKYUGv_W1EW zboCillJbriL8qoAOxhl1FAaKpJ5fm^wC$#*;Z{XM^^`jYB7Aj|Lpri(_4PJ@M3_j% zXx2`TH?2b4`N0VQEP#Ej6`?6?HQ3W8XHc zv}y!)c9)`$qtQ74uI^mB&@aUZkUDvE&nRpVJA)Ol=TawQ8R)n~^=UG!g zqPKXi9YZoeq!T3~7?MaNR!8!z|Cs=j0x978BWgl8xp1F`3(<=*Sr=dcHlI{&epn%B zt8i+HD|nHEUzi?Zp9Gu&Gi8k2FfKa+`h9(UC?g8s&s;N9d!%D8bE)eC>&cTtKrBWW ze}8{mWF!Yj(`>;)K3Gg2(I)w#u(G;ZFi}#@sh?`fffW}Q zGX}>1xcyj8E<2SxJHm1;(+z!bmm-(T=Oq&FHl|dNbHYoy@zN`(r@>YuD{{t7&HZ{_ zUS1T-XM=;MnieNY9tAR+Vp^7>Q=<*XxcS_x3R_TMvjzqRwx+ap=2-1*Y;4r_l2_N63*Qf%7{j-0X2tzcD`E{_FG6$C z@>JRt8p<%AB=)ffx0S7QB=Zg&AL{GtTLA>gt_dmd-^XHpD`a_4ZQ+2*9B^(Z&H7ok zF@F5ldl!Lh;Bm9TKtc4N)*F>oRWt?z4)OtBxsu6bJr8OwNhThZO))(H1>C_ZI2;bR z3k5Bzh@-Bqu34t&EI>bOSD{;PRd|nX8Vx9YxGlBAxV#}l`_jU_Swfhbn_B?s!)rFC z?_F2X97{hx7|7hG>0+FKlb2IOjW?QVlmui1KfS6Tm5${b^N%b?3y3SrlGUr|J+Iyh z#QQK}LRQZNOO4ah_n>ylmt`&_wZtW{>OYpQPfSc~R#x^G7dWp%%(q`gzzY?&=-o_~ z#-#4DIseQW>Tucev*mY9jagHm*LeI{VZWd(Z(9Eab?!?rIMi5TvuaQ<>wbgg*epibi<= diff --git a/docs/content/images/actors/Text-Label.png b/docs/content/images/actors/Text-Label.png new file mode 100644 index 0000000000000000000000000000000000000000..cc2dc30367c07fedabb987dba21e295000123543 GIT binary patch literal 4919 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 X!}<&7OB}il?Fw+l!w+43Dm3Na*%2Rv literal 0 HcmV?d00001 diff --git a/docs/content/images/text-controls/PlainText.png b/docs/content/images/text-controls/PlainText.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef9ff151b67e3d496aaa1087d00efb471464411 GIT binary patch literal 1472 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 N002ovPDHLkV1i%hB1QlJ literal 0 HcmV?d00001 diff --git a/docs/content/images/text-controls/TextWith1pxUnderline.png b/docs/content/images/text-controls/TextWith1pxUnderline.png new file mode 100644 index 0000000000000000000000000000000000000000..082d19e07248e47d97f602b342410d400a78683e GIT binary patch literal 2703 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 literal 0 HcmV?d00001 diff --git a/docs/content/images/text-controls/TextWithShadow.png b/docs/content/images/text-controls/TextWithShadow.png new file mode 100644 index 0000000000000000000000000000000000000000..1cde8d232ef062a5e70fbfb07243d6f33e79fd57 GIT binary patch literal 3370 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 RtAqIv1Z(e#skRNE{Tn;Yc>DkW literal 0 HcmV?d00001 diff --git a/docs/content/programming-guide/hello-world.h b/docs/content/programming-guide/hello-world.h index 8031d99..2065659 100644 --- a/docs/content/programming-guide/hello-world.h +++ b/docs/content/programming-guide/hello-world.h @@ -12,56 +12,71 @@ Let's take a look at the code for this test application.

Example code

\code -#include -using namespace Dali; +#include -/****************************************************** - * Demonstrates how to display "Hello World" on screen - ******************************************************/ +using namespace Dali; +using Dali::Toolkit::TextLabel; -class ExampleApp +// This example shows how to create and display Hello World! using a simple TextActor +// +class HelloWorldController : public ConnectionTracker { public: - ExampleApp(Application &app) - : mApp(app) + + HelloWorldController( Application& application ) + : mApplication( application ) { - // Connect to Dali::Application init signal. Do not make calls to Dali before this signal is received. - app.SignalInit().Connect(this, &ExampleApp::Create); + // Connect to the Application's Init signal + mApplication.InitSignal().Connect( this, &HelloWorldController::Create ); } - ~ExampleApp() + ~HelloWorldController() { - // Remove Hello World TextActor from stage - Stage::GetCurrent().Remove(mTextActor); + // Remove Hello World actor from stage + Stage::GetCurrent().Remove(mTextLabel); } -public: - - void Create(Application& app) + // The Init signal is received once (only) during the Application lifetime + void Create( Application& application ) { - // Initialize the actor - mTextActor = TextActor::New("Hello World"); + // Get a handle to the stage + Stage stage = Stage::GetCurrent(); + + mTextLabel = TextLabel::New( "Hello World" ); + mTextLabel.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + stage.Add( mTextLabel ); - // Center the actor. Note: default anchor point is CENTER - mTextActor.SetParentOrigin(ParentOrigin::CENTER); + // Respond to a click anywhere on the stage + stage.GetRootLayer().TouchedSignal().Connect( this, &HelloWorldController::OnTouch ); + } - // Display the actor on the stage - Stage::GetCurrent().Add(mTextActor); + bool OnTouch( Actor actor, const TouchEvent& touch ) + { + // quit the application + mApplication.Quit(); + return true; } private: - Application& mApp; - TextActor mTextActor; + Application& mApplication; + TextLabel mTextLabel; }; -int -main(int argc, char **argv) +void RunTest( Application& application ) +{ + HelloWorldController test( application ); + + application.MainLoop(); +} + +// Entry point for Linux & Tizen applications +// +int main( int argc, char **argv ) { - Application daliApp(&argc, &argv); + Application application = Application::New( &argc, &argv ); - ExampleApp helloApp (daliApp); - daliApp.MainLoop(); + RunTest( application ); return 0; } @@ -85,10 +100,10 @@ main(int argc, char **argv) That's why we store the Actor's handle: \code ... - mTextActor = TextActor::New("Hello World"); + mTextLabel = TextLabel::New("Hello World"); ... \endcode - Even if the TextActor is removed from the stage, it will be kept alive through our reference.\n + Even if the TextLabel is removed from the stage, it will be kept alive through our reference.\n You can read more about implicit smart-pointer semantics in chapter \link handle-body-idiom Handle – body\endlink.

Main loop

@@ -107,6 +122,12 @@ main(int argc, char **argv) After running './hello' this should be visible on the screen: - \image html Text-Actor.png "Hello world example" + + + + +
+ \image html Text-Label.png "Hello world example" +
*/ diff --git a/docs/content/programming-guide/properties.h b/docs/content/programming-guide/properties.h index 8838e78..0a85d51 100644 --- a/docs/content/programming-guide/properties.h +++ b/docs/content/programming-guide/properties.h @@ -244,7 +244,7 @@ This is a basic example of a button defined in JSON by setting the default prope } }, "label-actor": { - "type": "TextView", + "type": "TextLabel", "text": "Normal" } } diff --git a/docs/content/programming-guide/script-hello.h b/docs/content/programming-guide/script-hello.h index 837e022..3bb5ece 100644 --- a/docs/content/programming-guide/script-hello.h +++ b/docs/content/programming-guide/script-hello.h @@ -6,19 +6,13 @@ * * @code * { - * "fonts": - * { - * "freesans": {"name": "FreeSans", "point-size": 12.0, "weight": "WEIGHT_REGULAR" } - * }, - * "actors": - * [ - * {"name":"text-actor", - * "type":"Text", - * "text":"Hello World", - * "font":"freesans", - * "parent-origin":"CENTER" - * } - * ] + * // a tree of actors + * "stage": [{ + * "name": "text-label", + * "type": "TextLabel", + * "text": "Hello World", + * "parent-origin": "CENTER" + * }] * } * @endcode * @@ -31,7 +25,7 @@ * * builder.LoadFromString(json_data); * - * Actor actor = builder.GetActor("text-actor"); + * Actor actor = builder.GetActor("text-label"); * * Stage::GetCurrent().Add(actor); * @endcode @@ -46,15 +40,15 @@ * daliscript hello-world.js * @endcode * - * The TextActor control to display Hello World can be constructed using Javascript dot notation accessing Dali Actor Properties. + * The TextLabel control to display Hello World can be constructed using Javascript dot notation accessing Dali Actor Properties. * * @code - * var textActor = Dali.TextActor(); + * var textLabel = Dali.TextLabel(); * - * textActor.text = "Hello World"; - * textActor.font = "FreeSans"; - * textActor.font-weight = "WEIGHT_REGULAR"; - * textActor.parent-origin = "CENTER"; + * textLabel.text = "Hello World"; + * textLabel.font-family = "FreeSans"; + * textLabel.font-style = "Regular"; + * textLabel.parent-origin = "CENTER"; * * Dali.Run(); * @endcode diff --git a/docs/content/programming-guide/size-negotiation.h b/docs/content/programming-guide/size-negotiation.h index 8259359..2f64d83 100644 --- a/docs/content/programming-guide/size-negotiation.h +++ b/docs/content/programming-guide/size-negotiation.h @@ -92,8 +92,7 @@ Dimension::WIDTH then there is a height-for-width dependency in effect. The clas is a text view that wraps its text. The following example snippet shows a text view that expands its width to the size of its parent, wraps its contents and then determines its height based on the width. @code -TextView text = TextView::New( "Example" ); -text.SetMultilinePolicy( SplitByWord ); +TextLabel text = TextLabel::New( "Example" ); text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT ); @endcode @@ -140,11 +139,7 @@ content.SetFitHeight( 1 ); content.SetPadding( Padding( 20.0f, 20.0f, 20.0f, 0.0f ) ); // Text -Toolkit::TextView text = Toolkit::TextView::New(); -text.SetText( "Do you really want to quit?" ); -text.SetMultilinePolicy( Toolkit::TextView::SplitByWord ); -text.SetWidthExceedPolicy( Toolkit::TextView::Split ); -text.SetLineJustification( Toolkit::TextView::Left ); +Toolkit::TextLabel text = Toolkit::TextLabel::New( "Do you really want to quit?" ); text.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); text.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT ); @@ -174,9 +169,7 @@ checkBox.SetSize( Vector2( 48, 48 ) ); root.AddChild( checkBox, Toolkit::TableView::CellPosition( 0, 0 ) ); -Toolkit::TextView text2 = Toolkit::TextView::New(); -text2.SetText( "Don't show again" ); -text2.SetLineJustification( Toolkit::TextView::Left ); +Toolkit::TextLabel text2 = Toolkit::TextLabel::New( "Don't show again" ); text2.SetPadding( Padding( 20.0f, 0.0f, 0.0f, 10.0f ) ); root.AddChild( text2, Toolkit::TableView::CellPosition( 0, 1 ) ); diff --git a/docs/content/programming-guide/text-label.h b/docs/content/programming-guide/text-label.h index 35754de..24f8b1b 100644 --- a/docs/content/programming-guide/text-label.h +++ b/docs/content/programming-guide/text-label.h @@ -11,39 +11,33 @@ To display a TextLabel the TEXT property must be set using a UTF-8 string. \code TextLabel label = TextLabel::New(); label.SetProperty( TextLabel::Property::TEXT, "Hello World" ); +label.SetAnchorPoint( AnchorPoint::TOP_LEFT ); Stage::GetCurrent().Add( label ); \endcode The label must also be added to the stage, or to an actor which is on the stage.\n -In this example the text-label will be automatically given a natural size i.e. large enough to fit the text.\n -The position of the label on-screen is dependent on the parent-origin and anchor-point properties: +The position of the label on-screen is dependent on the parent-origin and anchor-point properties.\n - -
\image html TextLabelTopLeft.png - \image html TextLabelCenter.png -
(ParentOrigin::TOP_LEFT, AnchorPoint::TOP_LEFT) - (ParentOrigin::CENTER, AnchorPoint::CENTER) -
-\subsection fontselection Font Selection +\subsection fontSelection Font Selection By default TextLabel will automatically select a suitable font from the platform.\n Typically fonts do not support all scripts, for example Latin fonts often do not provide Arabic glyphs.\n Therefore you should expect TextLabel to select different fonts for each script. -Alternatively a font may be requested using eiter or all of FONT_FAMILY, FONT_STYLE, and POINT_SIZE properties: +Alternatively a font may be requested using either or all of FONT_FAMILY, FONT_STYLE, and POINT_SIZE properties: \code label.SetProperty( TextLabel::Property::FONT_FAMILY, "HelveticaNue" ); label.SetProperty( TextLabel::Property::FONT_STYLE, "Regular" ); @@ -51,16 +45,70 @@ label.SetProperty( TextLabel::Property::POINT_SIZE, 12.0f ); \endcode However the TextLabel will fall-back to using the default font, if the requested font does not support the required scripts. -\subsection fontselection Text Alignment +\subsection fontStyles Font Styles + +Setting a font size programmatically is not ideal for applications which support multiple screen resolutions etc.\n +A more flexible approach is to prepare various JSON stylesheets, and request a different style for each platform:\n + +\code +StyleManager styleManager = StyleManager::Get(); +styleManager.RequestThemeChange( "example-path/example.json" ); +\endcode + +To change the font for standard text labels, this JSON syntax can be used: + +\code +{ + "styles": + { + "textlabel": + { + "font-family":"Arial", + "font-style":"Regular", + "point-size":8 + } + } +} +\endcode + +However the same point-size is unlikely to be suitable for all labels in an application.\n +To set custom sizes simply set a "style name" for each case, and then provide a style override in JSON: + +\code + label.SetProperty( Control::Property::STYLE_NAME, "custom" ); +\endcode + +\code +{ + "styles": + { + "textlabel": + { + "font-family":"Arial", + "font-style":"Regular", + "point-size":8 + }, + + "custom": + { + "point-size":10 + } + } +} +\endcode + +In the example above, standard text labels will have point-size 8, and "custom" labels will have point-size 10.\n + +\subsection textAlignment Text Alignment Wrapping can be enabled using the MULTI_LINE property:\n \code label.SetProperty( TextLabel::Property::MULTI_LINE, true ); \endcode -The text can be either aligned to the start, end, or center of the available area: +The text can be either aligned horizontally to the beginning, end, or center of the available area: \code -label.SetProperty( TextLabel::Property::ALIGNMENT, "BEGIN" ); // "CENTER" or "END" +label.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "BEGIN" ); // "CENTER" or "END" \endcode @@ -105,4 +153,191 @@ label.SetProperty( TextLabel::Property::ALIGNMENT, "BEGIN" ); // "CENTER" or "EN
+The examples above assume that the TextLabel size greater than the minimum required.\n +The next section provides details about the other size related options. + +\subsection negotiatingSize Negotiating size + +\link size-negotiation Size negotiation \endlink is a layouting feature supported by UI controls such as TextLabel.\n +There are several resize policies which are commonly used with TextLabels.\n +The following examples show TextLabels actual size by setting a colored background, whilst the black area represents the size of the parent control:\n + +

Using natural size

+ +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.\n +Therefore in this example the same result would be displayed, regardless of the alignment or multi-line properties.\n + +\code +TextLabel label = TextLabel::New( "Hello World" ); +label.SetAnchorPoint( AnchorPoint::TOP_LEFT ); +label.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); +label.SetBackgroundColor( Color::BLUE ); +Stage::GetCurrent().Add( label ); +\endcode + + + + + +
+ \image html HelloWorld-NaturalSize.png +
+ +

Height-for-width negotiation

+ +To layout text labels vertically, a fixed (maximum) width should be provided by the parent control.\n +Each TextLabel will then report a desired height for the given width.\n +Here is an example of this behavior using TableView as the parent: + +\code +TableView parent = TableView::New( 3, 1 ); +parent.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); +parent.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT ); +parent.SetAnchorPoint( AnchorPoint::TOP_LEFT ); +Stage::GetCurrent().Add( parent ); + +TextLabel label = TextLabel::New( "Hello World" ); +label.SetAnchorPoint( AnchorPoint::TOP_LEFT ); +label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); +label.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT ); +label.SetBackgroundColor( Color::BLUE ); +parent.AddChild( label, TableView::CellPosition( 0, 0 ) ); +parent.SetFitHeight( 0 ); + +label = TextLabel::New( "A Quick Brown Fox Jumps Over The Lazy Dog" ); +label.SetAnchorPoint( AnchorPoint::TOP_LEFT ); +label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); +label.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT ); +label.SetBackgroundColor( Color::GREEN ); +label.SetProperty( TextLabel::Property::MULTI_LINE, true ); +parent.AddChild( label, TableView::CellPosition( 1, 0 ) ); +parent.SetFitHeight( 1 ); + +label = TextLabel::New( "لإعادة ترتيب الشاشات، يجب تغيير نوع العرض إلى شبكة قابلة للتخصيص." ); +label.SetAnchorPoint( AnchorPoint::TOP_LEFT ); +label.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); +label.SetResizePolicy( ResizePolicy::DIMENSION_DEPENDENCY, Dimension::HEIGHT ); +label.SetBackgroundColor( Color::BLUE ); +label.SetProperty( TextLabel::Property::MULTI_LINE, true ); +parent.AddChild( label, TableView::CellPosition( 2, 0 ) ); +parent.SetFitHeight( 2 ); +\endcode + + + + + +
+ \image html HelloWorld-HeightForWidth.png +
+ +Note that the "Hello World" text label (above) has been given the full width, not the natural width. + +\subsection textLabelDecorations TextLabel Decorations + +

Color

+ +To change the color of the text, the recommended way is to use the TEXT_COLOR property.\n +Note that unlike the Actor::COLOR property, this will not affect child Actors added to the TextLabel.\n + +\code +label.SetProperty( TextLabel::Property::TEXT, "Red Text" ); +label.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED ); +\endcode + + + + + +
+ \image html RedText.png +
+ +

Drop Shadow

+ +To add a drop-shadow to the text, simply set the SHADOW_OFFSET property with non-zero values.\n +The color can also be selected using the SHADOW_COLOR property.\n + +\code +stage.SetBackgroundColor( Color::BLUE ); + +label1.SetProperty( TextLabel::Property::TEXT, "Plain Text" ); + +label2.SetProperty( TextLabel::Property::TEXT, "Text with Shadow" ); +label2.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 1.0f, 1.0f ) ); +label4.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLACK ); + +label3.SetProperty( TextLabel::Property::TEXT, "Text with Bigger Shadow" ); +label3.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 2.0f, 2.0f ) ); +label4.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::BLACK ); + +label4.SetProperty( TextLabel::Property::TEXT, "Text with Color Shadow" ); +label4.SetProperty( TextLabel::Property::SHADOW_OFFSET, Vector2( 1.0f, 1.0f ) ); +label4.SetProperty( TextLabel::Property::SHADOW_COLOR, Color::RED ); +\endcode + + + + + + + + + + + + + + +
+ \image html PlainText.png +
+ \image html TextWithShadow.png +
+ \image html TextWithBiggerShadow.png +
+ \image html TextWithColorShadow.png +
+ +

Underline

+ +The text can be underlined by setting UNDERLINE_ENABLED.\n +The color can also be selected using the UNDERLINE_COLOR property.\n + +\code +label1.SetProperty( TextLabel::Property::TEXT, "Text with Underline" ); +label1.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true ); + +label2.SetProperty( TextLabel::Property::TEXT, "Text with Color Underline" ); +label2.SetProperty( TextLabel::Property::UNDERLINE_ENABLED, true ); +label2.SetProperty( TextLabel::Property::UNDERLINE_COLOR, Color::GREEN ); +\endcode + + + + + + + + +
+ \image html TextWithUnderline.png +
+ \image html TextWithColorUnderline.png +
+ +By default the underline height will be taken from the font metrics, however this can be overridden using the UNDERLINE_HEIGHT property: + +\code +label1.SetProperty( TextLabel::Property::UNDERLINE_HEIGHT, 1.0f ); +\endcode + + + + + +
+ \image html TextWith1pxUnderline.png +
+ */ -- 2.7.4