diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml
index 9b759cf..a53530e 100644
--- a/com.samsung.dali-demo.xml
+++ b/com.samsung.dali-demo.xml
@@ -278,6 +278,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
http://tizen.org/privilege/mediastorage
diff --git a/examples/simple-bitmap-font-text-label/simple-text-label-example.cpp b/examples/simple-bitmap-font-text-label/simple-text-label-example.cpp
new file mode 100644
index 0000000..04ad1fb
--- /dev/null
+++ b/examples/simple-bitmap-font-text-label/simple-text-label-example.cpp
@@ -0,0 +1,204 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * @file simple-text-label-example.cpp
+ * @brief Basic usage of SimpleTextLabel control
+ */
+
+// EXTERNAL INCLUDES
+#include
+
+#include
+#include
+#include
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+/**
+ * @brief The main class of the demo.
+ */
+class SimpleTextLabelExample : public ConnectionTracker
+{
+public:
+
+ SimpleTextLabelExample( Application& application )
+ : mApplication( application )
+ {
+ // Connect to the Application's Init signal
+ mApplication.InitSignal().Connect( this, &SimpleTextLabelExample::Create );
+ }
+
+ ~SimpleTextLabelExample()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * One-time setup in response to Application InitSignal.
+ */
+ void Create( Application& application )
+ {
+ Stage stage = Stage::GetCurrent();
+
+ stage.KeyEventSignal().Connect(this, &SimpleTextLabelExample::OnKeyEvent);
+
+ TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+
+ DevelText::BitmapFontDescription fontDescription;
+ fontDescription.name = "Digits";
+ fontDescription.underlinePosition = 0.f;
+ fontDescription.underlineThickness = 0.f;
+
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0030.png", "0", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0031.png", "1", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0032.png", "2", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0033.png", "3", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0034.png", "4", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0035.png", "5", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0036.png", "6", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0037.png", "7", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0038.png", "8", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0039.png", "9", 34.f, 0.f } );
+ fontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u003a.png", ":", 34.f, 0.f } );
+
+
+ DevelText::BitmapFontDescription colorFontDescription;
+ colorFontDescription.name = "DigitsColor";
+ colorFontDescription.underlinePosition = 0.f;
+ colorFontDescription.underlineThickness = 0.f;
+ colorFontDescription.isColorFont = true;
+
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0030_color.png", "0", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0031_color.png", "1", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0032_color.png", "2", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0033_color.png", "3", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0034_color.png", "4", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0035_color.png", "5", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0036_color.png", "6", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0037_color.png", "7", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0038_color.png", "8", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u0039_color.png", "9", 34.f, 0.f } );
+ colorFontDescription.glyphs.push_back( { DEMO_IMAGE_DIR "u003a_color.png", ":", 34.f, 0.f } );
+
+ TextAbstraction::BitmapFont bitmapFont;
+ TextAbstraction::BitmapFont bitmapColorFont;
+
+ DevelText::CreateBitmapFont( fontDescription, bitmapFont );
+ DevelText::CreateBitmapFont( colorFontDescription, bitmapColorFont );
+
+ fontClient.GetFontId( bitmapFont );
+ fontClient.GetFontId( bitmapColorFont );
+
+ TextLabel label01 = TextLabel::New();
+ label01.SetAnchorPoint( AnchorPoint::CENTER );
+ label01.SetParentOrigin( ParentOrigin::CENTER );
+ label01.SetSize( 400.f, 50.f );
+ label01.SetPosition( 0.f, -100.f );
+ label01.SetProperty( TextLabel::Property::MULTI_LINE, true );
+
+ label01.SetProperty( TextLabel::Property::ENABLE_MARKUP, true );
+ label01.SetProperty( TextLabel::Property::TEXT, "0123456789:" );
+ label01.SetProperty( TextLabel::Property::TEXT_COLOR, Color::RED );
+ label01.SetProperty( TextLabel::Property::FONT_FAMILY, "Digits" );
+
+ label01.SetBackgroundColor( Color::BLACK );
+
+ stage.Add( label01 );
+
+
+ TextLabel label02 = TextLabel::New();
+ label02.SetAnchorPoint( AnchorPoint::CENTER );
+ label02.SetParentOrigin( ParentOrigin::CENTER );
+ label02.SetSize( 400.f, 50.f );
+ label02.SetPosition( 0.f, -50.f );
+ label02.SetProperty( TextLabel::Property::MULTI_LINE, true );
+
+ label02.SetProperty( TextLabel::Property::TEXT, "0123456789:" );
+ label02.SetProperty( TextLabel::Property::TEXT_COLOR, Color::WHITE );
+ label02.SetProperty( TextLabel::Property::FONT_FAMILY, "DigitsColor" );
+
+ label02.SetBackgroundColor( Color::BLACK );
+
+ stage.Add( label02 );
+
+ TextLabel label03 = TextLabel::New();
+ label03.SetAnchorPoint( AnchorPoint::CENTER );
+ label03.SetParentOrigin( ParentOrigin::CENTER );
+ label03.SetSize( 400.f, 50.f );
+ label03.SetPosition( 0.f, 0.f );
+ label03.SetProperty( TextLabel::Property::MULTI_LINE, true );
+
+ label03.SetProperty( TextLabel::Property::TEXT, "0123456789:" );
+ label03.SetProperty( TextLabel::Property::FONT_FAMILY, "Digits" );
+
+ label03.SetBackgroundColor( Color::WHITE );
+
+ stage.Add( label03 );
+
+ TextLabel label04 = TextLabel::New();
+ label04.SetAnchorPoint( AnchorPoint::CENTER );
+ label04.SetParentOrigin( ParentOrigin::CENTER );
+ label04.SetSize( 400.f, 50.f );
+ label04.SetPosition( 0.f, 50.f );
+ label04.SetProperty( TextLabel::Property::MULTI_LINE, true );
+
+ label04.SetProperty( TextLabel::Property::TEXT, "0123456789:" );
+ label04.SetProperty( TextLabel::Property::FONT_FAMILY, "Digits" );
+ label04.SetProperty( TextLabel::Property::TEXT_COLOR, Color::WHITE );
+
+ label04.SetBackgroundColor( Color::BLACK );
+
+ stage.Add( label04 );
+ }
+
+ /**
+ * Main key event handler
+ */
+ void OnKeyEvent(const KeyEvent& event)
+ {
+ if(event.state == KeyEvent::Down)
+ {
+ if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
+ {
+ mApplication.Quit();
+ }
+ }
+ }
+
+private:
+
+ Application& mApplication;
+};
+
+void RunTest( Application& application )
+{
+ SimpleTextLabelExample test( application );
+
+ application.MainLoop();
+}
+
+/** Entry point for Linux & Tizen applications */
+int main( int argc, char **argv )
+{
+ Application application = Application::New( &argc, &argv );
+
+ RunTest( application );
+
+ return 0;
+}
diff --git a/examples/simple-text-field/simple-text-field.cpp b/examples/simple-text-field/simple-text-field.cpp
new file mode 100644
index 0000000..d96906b
--- /dev/null
+++ b/examples/simple-text-field/simple-text-field.cpp
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * @file simple-text-field-example.cpp
+ * @brief Very basic usage of TextField control
+ */
+
+// EXTERNAL INCLUDES
+#include
+#include
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+
+/**
+ * @brief The main class of the demo.
+ */
+class SimpleTextFieldExample : public ConnectionTracker
+{
+public:
+
+ SimpleTextFieldExample( Application& application )
+ : mApplication( application )
+ {
+ // Connect to the Application's Init signal
+ mApplication.InitSignal().Connect( this, &SimpleTextFieldExample::Create );
+ }
+
+ ~SimpleTextFieldExample()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * One-time setup in response to Application InitSignal.
+ */
+ void Create( Application& application )
+ {
+ Stage stage = Stage::GetCurrent();
+ stage.SetBackgroundColor( Vector4( 0.04f, 0.345f, 0.392f, 1.0f ) );
+
+ TextField field = TextField::New();
+ field.SetParentOrigin( ParentOrigin::CENTER );
+ field.SetSize( 300.f, 60.f );
+ field.SetBackgroundColor( Color::WHITE );
+ field.SetBackgroundColor( Vector4( 1.f, 1.f, 1.f, 0.15f ) );
+
+ field.SetProperty( TextField::Property::TEXT_COLOR, Color::BLACK );
+ field.SetProperty( TextField::Property::PLACEHOLDER_TEXT, "Unnamed folder" );
+ field.SetProperty( TextField::Property::PLACEHOLDER_TEXT_FOCUSED, "Enter folder name." );
+
+ stage.Add( field );
+ }
+
+private:
+
+ Application& mApplication;
+};
+
+void RunTest( Application& application )
+{
+ SimpleTextFieldExample test( application );
+
+ application.MainLoop();
+}
+
+/** Entry point for Linux & Tizen applications */
+int main( int argc, char **argv )
+{
+ // DALI_DEMO_THEME_PATH not passed to Application so TextField example uses default Toolkit style sheet.
+ Application application = Application::New( &argc, &argv );
+
+ RunTest( application );
+
+ return 0;
+}
diff --git a/examples/simple-text-label/simple-text-label-example.cpp b/examples/simple-text-label/simple-text-label-example.cpp
new file mode 100644
index 0000000..78e7db7
--- /dev/null
+++ b/examples/simple-text-label/simple-text-label-example.cpp
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * @file simple-text-label-example.cpp
+ * @brief Basic usage of SimpleTextLabel control
+ */
+
+// EXTERNAL INCLUDES
+#include
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+/**
+ * @brief The main class of the demo.
+ */
+class SimpleTextLabelExample : public ConnectionTracker
+{
+public:
+
+ SimpleTextLabelExample( Application& application )
+ : mApplication( application )
+ {
+ // Connect to the Application's Init signal
+ mApplication.InitSignal().Connect( this, &SimpleTextLabelExample::Create );
+ }
+
+ ~SimpleTextLabelExample()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * One-time setup in response to Application InitSignal.
+ */
+ void Create( Application& application )
+ {
+ Stage stage = Stage::GetCurrent();
+
+ stage.KeyEventSignal().Connect(this, &SimpleTextLabelExample::OnKeyEvent);
+
+ mLabel = TextLabel::New( "A Quick Brown Fox Jumps Over The Lazy Dog" );
+ mLabel.SetName( "SimpleTextLabel" );
+ mLabel.SetAnchorPoint( AnchorPoint::CENTER );
+ mLabel.SetParentOrigin( ParentOrigin::CENTER );
+ mLabel.SetSize( 400.f, 400.f );
+ mLabel.SetProperty( TextLabel::Property::MULTI_LINE, true );
+ mLabel.SetProperty( TextLabel::Property::TEXT_COLOR, Color::BLACK );
+ mLabel.SetBackgroundColor( Color::WHITE );
+
+ stage.Add( mLabel );
+ }
+
+ /**
+ * Main key event handler
+ */
+ void OnKeyEvent(const KeyEvent& event)
+ {
+ if(event.state == KeyEvent::Down)
+ {
+ if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
+ {
+ mApplication.Quit();
+ }
+ }
+ }
+
+private:
+
+ Application& mApplication;
+
+ TextLabel mLabel;
+};
+
+void RunTest( Application& application )
+{
+ SimpleTextLabelExample test( application );
+
+ application.MainLoop();
+}
+
+/** Entry point for Linux & Tizen applications */
+int main( int argc, char **argv )
+{
+ Application application = Application::New( &argc, &argv );
+
+ RunTest( application );
+
+ return 0;
+}
diff --git a/examples/simple-text-renderer/simple-text-renderer-example.cpp b/examples/simple-text-renderer/simple-text-renderer-example.cpp
new file mode 100644
index 0000000..3f8116f
--- /dev/null
+++ b/examples/simple-text-renderer/simple-text-renderer-example.cpp
@@ -0,0 +1,357 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * @file simple-text-renderer-example.cpp
+ * @brief Basic usage of Text Renderer utility.
+ */
+
+// EXTERNAL INCLUDES
+#include
+#include
+#include
+#include
+
+#include
+#include
+
+using namespace std;
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+namespace
+{
+
+const std::string IMAGE1 = DEMO_IMAGE_DIR "application-icon-1.png";
+const std::string IMAGE2 = DEMO_IMAGE_DIR "application-icon-6.png";
+
+#define MAKE_SHADER(A)#A
+
+const std::string VERSION_3_ES = "#version 300 es\n";
+
+const char* VERTEX_SHADER = MAKE_SHADER(
+ precision mediump float;
+
+ in vec2 aPosition;
+ in vec2 aTexCoord;
+
+ out vec2 vUV;
+
+ uniform vec3 uSize;
+ uniform mat4 uMvpMatrix;
+
+ void main()
+ {
+ vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);
+ vertexPosition.xyz *= uSize;
+ gl_Position = uMvpMatrix * vertexPosition;
+
+ vUV = aTexCoord;
+ }
+);
+
+const char* FRAGMENT_SHADER = MAKE_SHADER(
+ precision mediump float;
+
+ in vec2 vUV;
+
+ out vec4 FragColor;
+
+ uniform sampler2D sAlbedo;
+ uniform vec4 uColor;
+
+ void main()
+ {
+ vec4 color = texture( sAlbedo, vUV );
+ FragColor = vec4( color.rgb, uColor.a * color.a );
+ }
+);
+
+Renderer CreateRenderer()
+{
+ // Create the geometry.
+ struct Vertex
+ {
+ Dali::Vector2 position;
+ Dali::Vector2 texCoord;
+ };
+
+ static const Vertex vertices[] = {{ Dali::Vector2( -0.5f, -0.5f ), Dali::Vector2( 0.0f, 0.0f ) },
+ { Dali::Vector2( 0.5f, -0.5f ), Dali::Vector2( 1.0f, 0.0f ) },
+ { Dali::Vector2( -0.5f, 0.5f ), Dali::Vector2( 0.0f, 1.0f ) },
+ { Dali::Vector2( 0.5f, 0.5f ), Dali::Vector2( 1.0f, 1.0f ) }};
+
+ Property::Map property;
+ property.Add("aPosition", Property::VECTOR2).Add("aTexCoord", Property::VECTOR2);
+
+ PropertyBuffer vertexBuffer = PropertyBuffer::New(property);
+
+ vertexBuffer.SetData(vertices, sizeof(vertices) / sizeof(Vertex));
+
+ Geometry geometry = Geometry::New();
+ geometry.AddVertexBuffer(vertexBuffer);
+
+ geometry.SetType(Geometry::TRIANGLE_STRIP);
+
+ // Create the shader
+ Shader shader = Shader::New( VERSION_3_ES + VERTEX_SHADER, VERSION_3_ES + FRAGMENT_SHADER );
+
+ // Create the renderer
+
+ Renderer renderer = Renderer::New( geometry, shader );
+
+ return renderer;
+}
+
+TextureSet CreateTextureSet( const Dali::Toolkit::DevelText::RendererParameters& textParameters, const std::vector& embeddedItems )
+{
+
+ Dali::Vector embeddedItemLayout;
+
+ Devel::PixelBuffer pixelBuffer = Toolkit::DevelText::Render( textParameters, embeddedItemLayout );
+
+
+ const int dstWidth = static_cast( pixelBuffer.GetWidth() );
+ const int dstHeight = static_cast( pixelBuffer.GetHeight() );
+
+ unsigned int index = 0u;
+ for( const auto& itemLayout : embeddedItemLayout )
+ {
+ int width = static_cast( itemLayout.size.width );
+ int height = static_cast( itemLayout.size.height );
+ int x = static_cast( itemLayout.position.x );
+ int y = static_cast( itemLayout.position.y );
+
+ Dali::Devel::PixelBuffer itemPixelBuffer = Dali::LoadImageFromFile( embeddedItems[index++] );
+ itemPixelBuffer.Resize( width, height );
+ itemPixelBuffer.Rotate( itemLayout.angle );
+
+ width = static_cast( itemPixelBuffer.GetWidth() );
+ height = static_cast( itemPixelBuffer.GetHeight() );
+
+ Dali::Pixel::Format itemPixelFormat = itemPixelBuffer.GetPixelFormat();
+
+ // Check if the item is out of the buffer.
+
+ if( ( x + width < 0 ) ||
+ ( x > dstWidth ) ||
+ ( y < 0 ) ||
+ ( y - height > dstHeight ) )
+ {
+ // The embedded item is completely out of the buffer.
+ continue;
+ }
+
+ // Crop if it exceeds the boundaries of the destination buffer.
+ int layoutX = 0;
+ int layoutY = 0;
+ int cropX = 0;
+ int cropY = 0;
+ int newWidth = width;
+ int newHeight = height;
+
+ bool crop = false;
+
+ if( 0 > x )
+ {
+ newWidth += x;
+ cropX = std::abs( x );
+ crop = true;
+ }
+ else
+ {
+ layoutX = x;
+ }
+
+ if( cropX + newWidth > dstWidth )
+ {
+ crop = true;
+ newWidth -= ( ( cropX + newWidth ) - dstWidth );
+ }
+
+ layoutY = y;
+ if( 0.f > layoutY )
+ {
+ newHeight += layoutY;
+ cropY = std::abs(layoutY);
+ crop = true;
+ }
+
+ if( cropY + newHeight > dstHeight )
+ {
+ crop = true;
+ newHeight -= ( ( cropY + newHeight ) - dstHeight );
+ }
+
+ uint16_t uiCropX = static_cast(cropX);
+ uint16_t uiCropY = static_cast(cropY);
+ uint16_t uiNewWidth = static_cast(newWidth);
+ uint16_t uiNewHeight = static_cast(newHeight);
+
+ if( crop )
+ {
+ itemPixelBuffer.Crop( uiCropX, uiCropY, uiNewWidth, uiNewHeight );
+ }
+
+ // Blend the item pixel buffer with the text's color according its blending mode.
+ if( Dali::TextAbstraction::ColorBlendingMode::MULTIPLY == itemLayout.colorBlendingMode )
+ {
+ Dali::Devel::PixelBuffer buffer = Dali::Devel::PixelBuffer::New( uiNewWidth,
+ uiNewHeight,
+ itemPixelFormat );
+
+ unsigned char* bufferPtr = buffer.GetBuffer();
+ const unsigned char* itemBufferPtr = itemPixelBuffer.GetBuffer();
+ const unsigned int bytesPerPixel = Dali::Pixel::GetBytesPerPixel(itemPixelFormat);
+ const unsigned int size = uiNewWidth * uiNewHeight * bytesPerPixel;
+
+ for (unsigned int i = 0u; i < size; i += bytesPerPixel)
+ {
+ *(bufferPtr + 0u) = static_cast( static_cast( *(itemBufferPtr + 0u) ) * textParameters.textColor.r );
+ *(bufferPtr + 1u) = static_cast( static_cast( *(itemBufferPtr + 1u) ) * textParameters.textColor.g );
+ *(bufferPtr + 2u) = static_cast( static_cast( *(itemBufferPtr + 2u) ) * textParameters.textColor.b );
+ *(bufferPtr + 3u) = static_cast( static_cast( *(itemBufferPtr + 3u) ) * textParameters.textColor.a );
+
+ itemBufferPtr += bytesPerPixel;
+ bufferPtr += bytesPerPixel;
+ }
+
+ itemPixelBuffer = buffer;
+ }
+
+ Dali::Toolkit::DevelText::UpdateBuffer(itemPixelBuffer, pixelBuffer, layoutX, layoutY, true);
+ }
+
+ PixelData pixelData = Devel::PixelBuffer::Convert( pixelBuffer );
+
+ Texture texture = Texture::New( TextureType::TEXTURE_2D,
+ pixelData.GetPixelFormat(),
+ pixelData.GetWidth(),
+ pixelData.GetHeight() );
+ texture.Upload(pixelData);
+
+ TextureSet textureSet = TextureSet::New();
+ textureSet.SetTexture( 0u, texture );
+
+ return textureSet;
+}
+
+} // namespace
+
+
+/**
+ * @brief The main class of the demo.
+ */
+class SimpleTextRendererExample : public ConnectionTracker
+{
+public:
+
+ SimpleTextRendererExample( Application& application )
+ : mApplication( application )
+ {
+ // Connect to the Application's Init signal
+ mApplication.InitSignal().Connect( this, &SimpleTextRendererExample::Create );
+ }
+
+ ~SimpleTextRendererExample()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * One-time setup in response to Application InitSignal.
+ */
+ void Create( Application& application )
+ {
+ Stage stage = Stage::GetCurrent();
+ stage.SetBackgroundColor( Color::WHITE );
+ stage.SetBackgroundColor( Vector4( 0.04f, 0.345f, 0.392f, 1.0f ) );
+
+ stage.KeyEventSignal().Connect(this, &SimpleTextRendererExample::OnKeyEvent);
+
+ const std::string image1 = " ";
+ const std::string image2 = " ";
+
+ Dali::Toolkit::DevelText::RendererParameters textParameters;
+ textParameters.text = "Hello " + image1 + " world " + image2 + " this " + image1 + " is " + image2 + " a " + image1 + " demo " + image2 + " of " + image1 + " circular " + image2 + " text " + image1 + " width " + image2 + " icons.";
+ textParameters.horizontalAlignment = "center";
+ textParameters.verticalAlignment = "center";
+ textParameters.circularAlignment = "center";
+ textParameters.fontFamily = "SamsungUI";
+ textParameters.fontWeight = "";
+ textParameters.fontWidth = "";
+ textParameters.fontSlant = "";
+ textParameters.layout = "circular";
+ textParameters.textColor = Color::BLACK;
+ textParameters.fontSize = 25.f;
+ textParameters.textWidth = 360u;
+ textParameters.textHeight = 360u;
+ textParameters.radius = 180u;
+ textParameters.beginAngle = 15.f;
+ textParameters.incrementAngle = 360.f;
+ textParameters.ellipsisEnabled = true;
+ textParameters.markupEnabled = true;
+
+ std::vector embeddedItems = { IMAGE2, IMAGE2, IMAGE2, IMAGE2, IMAGE2 };
+
+ TextureSet textureSet = CreateTextureSet( textParameters, embeddedItems );
+
+ Renderer renderer = CreateRenderer();
+ renderer.SetTextures( textureSet );
+
+ Actor actor = Actor::New();
+ actor.SetAnchorPoint( AnchorPoint::CENTER );
+ actor.SetParentOrigin( ParentOrigin::CENTER );
+ actor.SetPosition( 0.f, 0.f);
+ actor.SetSize( 360.f, 360.f );
+ actor.SetColor( Color::WHITE );
+
+ actor.AddRenderer( renderer );
+
+ stage.Add( actor );
+ }
+
+ /**
+ * Main key event handler
+ */
+ void OnKeyEvent(const KeyEvent& event)
+ {
+ if(event.state == KeyEvent::Down)
+ {
+ if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
+ {
+ mApplication.Quit();
+ }
+ }
+ }
+
+private:
+
+ Application& mApplication;
+};
+
+/** Entry point for Linux & Tizen applications */
+int main( int argc, char **argv )
+{
+ Application application = Application::New( &argc, &argv );
+
+ SimpleTextRendererExample test( application );
+
+ application.MainLoop();
+
+ return 0;
+}
diff --git a/examples/simple-text-visual/simple-text-visual-example.cpp b/examples/simple-text-visual/simple-text-visual-example.cpp
new file mode 100644
index 0000000..b92e2a4
--- /dev/null
+++ b/examples/simple-text-visual/simple-text-visual-example.cpp
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * @file text-visual-example.cpp
+ * @brief Basic usage of Text Visual.
+ */
+
+// EXTERNAL INCLUDES
+#include
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+/**
+ * @brief The main class of the demo.
+ */
+class TextVisualExample : public ConnectionTracker
+{
+public:
+
+ TextVisualExample( Application& application )
+ : mApplication( application )
+ {
+ // Connect to the Application's Init signal
+ mApplication.InitSignal().Connect( this, &TextVisualExample::Create );
+ }
+
+ ~TextVisualExample()
+ {
+ // Nothing to do here.
+ }
+
+ /**
+ * One-time setup in response to Application InitSignal.
+ */
+ void Create( Application& application )
+ {
+ Stage stage = Stage::GetCurrent();
+
+ stage.KeyEventSignal().Connect(this, &TextVisualExample::OnKeyEvent);
+ stage.SetBackgroundColor( Color::WHITE );
+
+ Dali::Toolkit::Control control = Dali::Toolkit::ImageView::New();
+ control.SetParentOrigin( ParentOrigin::CENTER );
+
+ const std::string markupText( "Hello world" );
+
+ Dali::Property::Map map;
+ map.Add( Dali::Toolkit::Visual::Property::TYPE, Dali::Toolkit::Visual::TEXT ).
+ Add( Dali::Toolkit::TextVisual::Property::ENABLE_MARKUP, true ).
+ Add( Dali::Toolkit::TextVisual::Property::TEXT, markupText ).
+ Add( Dali::Toolkit::TextVisual::Property::TEXT_COLOR, Dali::Vector4( 0.25f, 0.25f, 0.5f, 1.f ) ).
+ Add( Dali::Toolkit::TextVisual::Property::FONT_FAMILY, "TizenSansRegular" ).
+ Add( Dali::Toolkit::TextVisual::Property::POINT_SIZE, 30.f ).
+ Add( Dali::Toolkit::TextVisual::Property::HORIZONTAL_ALIGNMENT, "END" ).
+ Add( Dali::Toolkit::TextVisual::Property::VERTICAL_ALIGNMENT, "CENTER" );
+
+ control.SetProperty( Dali::Toolkit::Control::Property::BACKGROUND, map );
+
+ stage.Add( control );
+ }
+
+ /**
+ * Main key event handler
+ */
+ void OnKeyEvent(const KeyEvent& event)
+ {
+ if(event.state == KeyEvent::Down)
+ {
+ if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) )
+ {
+ mApplication.Quit();
+ }
+ }
+ }
+
+private:
+
+ Application& mApplication;
+
+ TextLabel mLabel;
+};
+
+void RunTest( Application& application )
+{
+ TextVisualExample test( application );
+
+ application.MainLoop();
+}
+
+/** Entry point for Linux & Tizen applications */
+int main( int argc, char **argv )
+{
+ Application application = Application::New( &argc, &argv );
+
+ RunTest( application );
+
+ return 0;
+}
diff --git a/resources/images/u0030.png b/resources/images/u0030.png
new file mode 100644
index 0000000..1b0cc3c
--- /dev/null
+++ b/resources/images/u0030.png
diff --git a/resources/images/u0030_color.png b/resources/images/u0030_color.png
new file mode 100644
index 0000000..e96a6cb
--- /dev/null
+++ b/resources/images/u0030_color.png
diff --git a/resources/images/u0031.png b/resources/images/u0031.png
new file mode 100644
index 0000000..2c70e9c
--- /dev/null
+++ b/resources/images/u0031.png
diff --git a/resources/images/u0031_color.png b/resources/images/u0031_color.png
new file mode 100644
index 0000000..fe63bea
--- /dev/null
+++ b/resources/images/u0031_color.png
diff --git a/resources/images/u0032.png b/resources/images/u0032.png
new file mode 100644
index 0000000..2ed2d75
--- /dev/null
+++ b/resources/images/u0032.png
diff --git a/resources/images/u0032_color.png b/resources/images/u0032_color.png
new file mode 100644
index 0000000..c0344a0
--- /dev/null
+++ b/resources/images/u0032_color.png
diff --git a/resources/images/u0033.png b/resources/images/u0033.png
new file mode 100644
index 0000000..2cb1673
--- /dev/null
+++ b/resources/images/u0033.png
diff --git a/resources/images/u0033_color.png b/resources/images/u0033_color.png
new file mode 100644
index 0000000..50d5d62
--- /dev/null
+++ b/resources/images/u0033_color.png
diff --git a/resources/images/u0034.png b/resources/images/u0034.png
new file mode 100644
index 0000000..99d72e1
--- /dev/null
+++ b/resources/images/u0034.png
diff --git a/resources/images/u0034_color.png b/resources/images/u0034_color.png
new file mode 100644
index 0000000..2afbbaf
--- /dev/null
+++ b/resources/images/u0034_color.png
diff --git a/resources/images/u0035.png b/resources/images/u0035.png
new file mode 100644
index 0000000..2780eae
--- /dev/null
+++ b/resources/images/u0035.png
diff --git a/resources/images/u0035_color.png b/resources/images/u0035_color.png
new file mode 100644
index 0000000..7a08e63
--- /dev/null
+++ b/resources/images/u0035_color.png
diff --git a/resources/images/u0036.png b/resources/images/u0036.png
new file mode 100644
index 0000000..62e240f
--- /dev/null
+++ b/resources/images/u0036.png
diff --git a/resources/images/u0036_color.png b/resources/images/u0036_color.png
new file mode 100644
index 0000000..c4e0df2
--- /dev/null
+++ b/resources/images/u0036_color.png
diff --git a/resources/images/u0037.png b/resources/images/u0037.png
new file mode 100644
index 0000000..ae3790a
--- /dev/null
+++ b/resources/images/u0037.png
diff --git a/resources/images/u0037_color.png b/resources/images/u0037_color.png
new file mode 100644
index 0000000..0ee53db
--- /dev/null
+++ b/resources/images/u0037_color.png
diff --git a/resources/images/u0038.png b/resources/images/u0038.png
new file mode 100644
index 0000000..e2b0d13
--- /dev/null
+++ b/resources/images/u0038.png
diff --git a/resources/images/u0038_color.png b/resources/images/u0038_color.png
new file mode 100644
index 0000000..0f7f785
--- /dev/null
+++ b/resources/images/u0038_color.png
diff --git a/resources/images/u0039.png b/resources/images/u0039.png
new file mode 100644
index 0000000..2a3f481
--- /dev/null
+++ b/resources/images/u0039.png
diff --git a/resources/images/u0039_color.png b/resources/images/u0039_color.png
new file mode 100644
index 0000000..1133735
--- /dev/null
+++ b/resources/images/u0039_color.png
diff --git a/resources/images/u003a.png b/resources/images/u003a.png
new file mode 100644
index 0000000..a6ca724
--- /dev/null
+++ b/resources/images/u003a.png
diff --git a/resources/images/u003a_color.png b/resources/images/u003a_color.png
new file mode 100644
index 0000000..4922e69
--- /dev/null
+++ b/resources/images/u003a_color.png
diff --git a/resources/po/en_US.po b/resources/po/en_US.po
index d2b73e3..875c3d8 100755
--- a/resources/po/en_US.po
+++ b/resources/po/en_US.po
@@ -261,3 +261,12 @@ msgstr "Web View"
msgid "DALI_DEMO_STR_TITLE_ANIMATED_VECTOR_IMAGES"
msgstr "Animated Vector Images"
+
+msgid "DALI_DEMO_STR_TITLE_TEXT_RENDERER"
+msgstr "Text Renderer"
+
+msgid "DALI_DEMO_STR_TITLE_TEXT_VISUAL"
+msgstr "Text Visual"
+
+msgid "DALI_DEMO_STR_TITLE_TEXT_LABEL_BITMAP_FONT"
+msgstr "Text Bitmap Font"
diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h
index 08580a1..2e76c41 100644
--- a/shared/dali-demo-strings.h
+++ b/shared/dali-demo-strings.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -119,6 +119,9 @@ extern "C"
#define DALI_DEMO_STR_TITLE_TOOLTIP dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TOOLTIP")
#define DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS")
#define DALI_DEMO_STR_TITLE_WEB_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_WEB_VIEW")
+#define DALI_DEMO_STR_TITLE_TEXT_RENDERER dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_RENDERER")
+#define DALI_DEMO_STR_TITLE_TEXT_VISUAL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_VISUAL")
+#define DALI_DEMO_STR_TITLE_TEXT_LABEL_BITMAP_FONT dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_LABEL_BITMAP_FONT")
#else // !INTERNATIONALIZATION_ENABLED
@@ -209,6 +212,9 @@ extern "C"
#define DALI_DEMO_STR_TITLE_TOOLTIP "Tooltip"
#define DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS "Visual Transitions"
#define DALI_DEMO_STR_TITLE_WEB_VIEW "Web View"
+#define DALI_DEMO_STR_TITLE_TEXT_RENDERER "Text Renderer"
+#define DALI_DEMO_STR_TITLE_TEXT_VISUAL "Text Visual"
+#define DALI_DEMO_STR_TITLE_TEXT_LABEL_BITMAP_FONT "Text Bitmap Font"
#endif
#ifdef __cplusplus
diff --git a/tests-reel/dali-tests-reel.cpp b/tests-reel/dali-tests-reel.cpp
index b8e84fb..fe635c4 100644
--- a/tests-reel/dali-tests-reel.cpp
+++ b/tests-reel/dali-tests-reel.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -49,6 +49,11 @@ int DALI_EXPORT_API main(int argc, char **argv)
demo.AddExample(Example("text-memory-profiling.example", DALI_DEMO_STR_TITLE_TEXT_MEMORY_PROFILING));
demo.AddExample(Example("text-overlap.example", DALI_DEMO_STR_TITLE_TEXT_OVERLAP));
demo.AddExample(Example("visual-transitions.example", DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS));
+ demo.AddExample(Example("simple-text-label.example", DALI_DEMO_STR_TITLE_TEXT_LABEL));
+ demo.AddExample(Example("simple-text-field.example", DALI_DEMO_STR_TITLE_TEXT_FIELD));
+ demo.AddExample(Example("simple-text-renderer.example", DALI_DEMO_STR_TITLE_TEXT_RENDERER));
+ demo.AddExample(Example("simple-text-visual.example", DALI_DEMO_STR_TITLE_TEXT_VISUAL));
+ demo.AddExample(Example("simple-bitmap-font-text-label.example", DALI_DEMO_STR_TITLE_TEXT_LABEL_BITMAP_FONT));
demo.SortAlphabetically( true );