Commit f95b1257053b875ed48d271889fb718f0b86805f

Authored by Adeel Kazmi
Committed by Gerrit Code Review
2 parents 93a593cb affb5e80

Merge "Added animated shapes demo" into devel/master

com.samsung.dali-demo.xml
... ... @@ -106,9 +106,6 @@
106 106 <ui-application appid="animated-shapes.example" exec="/usr/apps/com.samsung.dali-demo/bin/animated-shapes.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
107 107 <label>Animated shapes</label>
108 108 </ui-application>
109   - <ui-application appid="path-animation.example" exec="/usr/apps/com.samsung.dali-demo/bin/path-animation.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
110   - <label>Path Animation</label>
111   - </ui-application>
112 109 <ui-application appid="atlas.example" exec="/usr/apps/com.samsung.dali-demo/bin/atlas.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
113 110 <label>Atlas</label>
114 111 </ui-application>
... ...
demo/dali-demo.cpp
... ... @@ -36,6 +36,7 @@ int DALI_EXPORT_API main(int argc, char **argv)
36 36 // Create the demo launcher
37 37 DaliTableView demo(app);
38 38  
  39 + demo.AddExample(Example("animated-shapes.example", DALI_DEMO_STR_TITLE_ANIMATED_SHAPES));
39 40 demo.AddExample(Example("bubble-effect.example", DALI_DEMO_STR_TITLE_BUBBLES));
40 41 demo.AddExample(Example("blocks.example", DALI_DEMO_STR_TITLE_BLOCKS));
41 42 demo.AddExample(Example("cube-transition-effect.example", DALI_DEMO_STR_TITLE_CUBE_TRANSITION));
... ...
examples/animated-shapes/animated-shapes-example.cpp 0 → 100644
  1 +/*
  2 + * Copyright (c) 2016 Samsung Electronics Co., Ltd.
  3 + *
  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
  7 + *
  8 + * http://www.apache.org/licenses/LICENSE-2.0
  9 + *
  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.
  15 + *
  16 + */
  17 +
  18 +#include <dali/dali.h>
  19 +#include <dali-toolkit/dali-toolkit.h>
  20 +#include "shared/view.h"
  21 +
  22 +#include <sstream>
  23 +
  24 +using namespace Dali;
  25 +using namespace Dali::Toolkit;
  26 +
  27 +namespace
  28 +{
  29 +
  30 +const char* APPLICATION_TITLE("Animated Shapes");
  31 +
  32 +const char* VERTEX_SHADER = DALI_COMPOSE_SHADER
  33 +(
  34 + attribute mediump vec3 aCoefficient;
  35 + uniform mediump mat4 uMvpMatrix;
  36 + uniform mediump vec3 uPosition[MAX_POINT_COUNT];
  37 + varying lowp vec2 vCoefficient;
  38 + void main()
  39 + {
  40 + int vertexId = int(aCoefficient.z);
  41 + gl_Position = uMvpMatrix * vec4(uPosition[vertexId], 1.0);
  42 +
  43 + vCoefficient = aCoefficient.xy;
  44 + }
  45 +);
  46 +
  47 +// Fragment shader.
  48 +const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER
  49 +(
  50 + uniform lowp vec4 uColor;
  51 + varying lowp vec2 vCoefficient;
  52 + void main()
  53 + {
  54 + lowp float C = (vCoefficient.x*vCoefficient.x-vCoefficient.y);
  55 + lowp float Cdx = dFdx(C);
  56 + lowp float Cdy = dFdy(C);
  57 +
  58 + lowp float distance = float(C / sqrt(Cdx*Cdx + Cdy*Cdy));
  59 + lowp float alpha = 0.5 - distance;
  60 + gl_FragColor = vec4( uColor.rgb, uColor.a * alpha );
  61 + }
  62 +);
  63 +
  64 +Shader CreateShader( unsigned int pointCount )
  65 +{
  66 + std::ostringstream vertexShader;
  67 + vertexShader << "#define MAX_POINT_COUNT "<< pointCount << "\n"<<VERTEX_SHADER;
  68 +
  69 + std::ostringstream fragmentShader;
  70 + fragmentShader << "#extension GL_OES_standard_derivatives : enable "<< "\n"<<FRAGMENT_SHADER;
  71 +
  72 + Shader shader = Shader::New( vertexShader.str(), fragmentShader.str() );
  73 + for( unsigned int i(0); i<pointCount; ++i )
  74 + {
  75 + std::ostringstream propertyName;
  76 + propertyName << "uPosition["<<i<<"]";
  77 + shader.RegisterProperty(propertyName.str(),Vector3(0.0f,0.0f,0.0f) );
  78 + }
  79 +
  80 + return shader;
  81 +}
  82 +
  83 +} //unnamed namespace
  84 +
  85 +// This example shows resolution independent rendering and animation of curves using the gpu.
  86 +//
  87 +class AnimatedShapesExample : public ConnectionTracker
  88 +{
  89 +public:
  90 +
  91 + AnimatedShapesExample( Application& application )
  92 +: mApplication( application )
  93 +{
  94 + // Connect to the Application's Init signal
  95 + mApplication.InitSignal().Connect( this, &AnimatedShapesExample::Create );
  96 +}
  97 +
  98 + ~AnimatedShapesExample()
  99 + {
  100 + // Nothing to do here;
  101 + }
  102 +
  103 + // The Init signal is received once (only) during the Application lifetime
  104 + void Create( Application& application )
  105 + {
  106 + // Hide the indicator bar
  107 + application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE );
  108 +
  109 + Stage stage = Stage::GetCurrent();
  110 +
  111 + // Creates the background gradient
  112 + Toolkit::Control background = Dali::Toolkit::Control::New();
  113 + background.SetAnchorPoint( Dali::AnchorPoint::CENTER );
  114 + background.SetParentOrigin( Dali::ParentOrigin::CENTER );
  115 + background.SetResizePolicy( Dali::ResizePolicy::FILL_TO_PARENT, Dali::Dimension::ALL_DIMENSIONS );
  116 + Dali::Property::Map map;
  117 + map.Insert( Visual::Property::TYPE, Visual::GRADIENT );
  118 + Property::Array stopOffsets;
  119 + stopOffsets.PushBack( 0.0f );
  120 + stopOffsets.PushBack( 1.0f );
  121 + map.Insert( GradientVisual::Property::STOP_OFFSET, stopOffsets );
  122 + Property::Array stopColors;
  123 + stopColors.PushBack( Vector4( 0.0f,0.0f,1.0f,1.0f ) );
  124 + stopColors.PushBack( Vector4( 1.0f,1.0f,1.0f,1.0f ) );
  125 + map.Insert( GradientVisual::Property::STOP_COLOR, stopColors );
  126 + Vector2 halfStageSize = Stage::GetCurrent().GetSize()*0.5f;
  127 + map.Insert( GradientVisual::Property::START_POSITION, Vector2(0.0f,-halfStageSize.y) );
  128 + map.Insert( GradientVisual::Property::END_POSITION, Vector2(0.0f,halfStageSize.y) );
  129 + map.Insert( GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE );
  130 + background.SetProperty( Dali::Toolkit::Control::Property::BACKGROUND, map );
  131 + stage.Add( background );
  132 +
  133 + // Create a TextLabel for the application title.
  134 + Toolkit::TextLabel label = Toolkit::TextLabel::New( APPLICATION_TITLE );
  135 + label.SetAnchorPoint( AnchorPoint::TOP_CENTER );
  136 + label.SetParentOrigin( Vector3( 0.5f, 0.0f, 0.5f ) );
  137 + label.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
  138 + label.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
  139 + label.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) );
  140 + stage.Add( label );
  141 +
  142 + CreateTriangleMorph(Vector3( stage.GetSize().x*0.5f, stage.GetSize().y*0.15f, 0.0f), 100.0f );
  143 + CreateCircleMorph( Vector3( stage.GetSize().x*0.5f, stage.GetSize().y*0.5f, 0.0f), 55.0f );
  144 + CreateQuadMorph( Vector3( stage.GetSize().x*0.5f, stage.GetSize().y*0.85f, 0.0f), 60.0f );
  145 +
  146 + stage.KeyEventSignal().Connect( this, &AnimatedShapesExample::OnKeyEvent );
  147 + }
  148 +
  149 + void CreateTriangleMorph( Vector3 center, float side )
  150 + {
  151 + float h = ( side *0.5f ) / 0.866f;
  152 +
  153 + Vector3 v0 = Vector3( -h, h, 0.0f );
  154 + Vector3 v1 = Vector3( 0.0f, -side * 0.366f, 0.0f );
  155 + Vector3 v2 = Vector3( h, h, 0.0f );
  156 +
  157 + Vector3 v3 = v0 + ( ( v1 - v0 ) * 0.5f );
  158 + Vector3 v4 = v1 + ( ( v2 - v1 ) * 0.5f );
  159 + Vector3 v5 = v2 + ( ( v0 - v2 ) * 0.5f );
  160 +
  161 + Shader shader = CreateShader( 12 );
  162 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[0]"), v0 );
  163 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[1]"), v3 );
  164 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[2]"), v1 );
  165 +
  166 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[3]"), v1 );
  167 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[4]"), v4 );
  168 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[5]"), v2 );
  169 +
  170 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[6]"), v2 );
  171 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[7]"), v5 );
  172 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[8]"), v0 );
  173 +
  174 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[9]"), v0 );
  175 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[10]"), v1 );
  176 + shader.SetProperty( shader.GetPropertyIndex( "uPosition[11]"), v2 );
  177 +
  178 +
  179 + //Create geometry
  180 + static const Vector3 vertexData[] = { Dali::Vector3( 0.0f, 0.0f, 0.0f ),
  181 + Dali::Vector3( 0.5f, 0.0f, 1.0f ),
  182 + Dali::Vector3( 1.0f, 1.0f, 2.0f ),
  183 +
  184 + Dali::Vector3( 0.0f, 0.0f, 3.0f ),
  185 + Dali::Vector3( 0.5f, 0.0f, 4.0f ),
  186 + Dali::Vector3( 1.0f, 1.0f, 5.0f ),
  187 +
  188 + Dali::Vector3( 0.0f, 0.0f, 6.0f ),
  189 + Dali::Vector3( 0.5f, 0.0f, 7.0f ),
  190 + Dali::Vector3( 1.0f, 1.0f, 8.0f ),
  191 +
  192 + Dali::Vector3( 0.0f, 1.0f, 9.0f ),
  193 + Dali::Vector3( 0.0f, 1.0f, 10.0f ),
  194 + Dali::Vector3( 0.0f, 1.0f, 11.0f )
  195 + };
  196 +
  197 + unsigned short indexData[] = { 0, 2, 1, 3, 5, 4, 6, 8, 7, 9, 11, 10 };
  198 +
  199 + //Create a vertex buffer for vertex positions and texture coordinates
  200 + Dali::Property::Map vertexFormat;
  201 + vertexFormat["aCoefficient"] = Dali::Property::VECTOR3;
  202 + Dali::PropertyBuffer vertexBuffer = Dali::PropertyBuffer::New( vertexFormat );
  203 + vertexBuffer.SetData( vertexData, sizeof(vertexData)/sizeof(vertexData[0]));
  204 +
  205 + //Create the geometry
  206 + Dali::Geometry geometry = Dali::Geometry::New();
  207 + geometry.AddVertexBuffer( vertexBuffer );
  208 + geometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0]) );
  209 +
  210 + Renderer renderer = Renderer::New( geometry, shader );
  211 + renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON );
  212 +
  213 + Actor actor = Actor::New();
  214 + actor.SetSize( 400.0f, 400.0f );
  215 + actor.SetPosition( center );
  216 + actor.SetAnchorPoint( AnchorPoint::CENTER );
  217 + actor.SetColor(Vector4(1.0f,1.0f,0.0f,1.0f) );
  218 + actor.AddRenderer( renderer );
  219 +
  220 + Stage stage = Stage::GetCurrent();
  221 + stage.Add( actor );
  222 +
  223 + //Animation
  224 + Animation animation = Animation::New(5.0f);
  225 + KeyFrames k0 = KeyFrames::New();
  226 + k0.Add( 0.0f,v3 );
  227 + k0.Add( 0.5f, v3 + Vector3(-150.0f,-150.0f,0.0f));
  228 + k0.Add( 1.0f, v3 );
  229 + animation.AnimateBetween( Property(shader, "uPosition[1]"),k0, AlphaFunction::EASE_IN_OUT_SINE );
  230 +
  231 + k0 = KeyFrames::New();
  232 + k0.Add( 0.0f,v4 );
  233 + k0.Add( 0.5f, v4 + Vector3(150.0f,-150.0f,0.0f));
  234 + k0.Add( 1.0f, v4 );
  235 + animation.AnimateBetween( Property(shader,"uPosition[4]"),k0, AlphaFunction::EASE_IN_OUT_SINE );
  236 +
  237 + k0 = KeyFrames::New();
  238 + k0.Add( 0.0f,v5 );
  239 + k0.Add( 0.5f, v5 + Vector3(0.0,150.0f,0.0f));
  240 + k0.Add( 1.0f, v5 );
  241 + animation.AnimateBetween( Property(shader, "uPosition[7]"),k0, AlphaFunction::EASE_IN_OUT_SINE );
  242 + animation.SetLooping( true );
  243 + animation.Play();
  244 + }
  245 +
  246 + void CreateCircleMorph( Vector3 center, float radius )
  247 + {
  248 + Shader shader = CreateShader( 16 );
  249 + shader.SetProperty( shader.GetPropertyIndex("uPosition[0]"), Vector3( -radius, -radius, 0.0f ) );
  250 + shader.SetProperty( shader.GetPropertyIndex("uPosition[1]"), Vector3( 0.0f, -radius, 0.0f ) );
  251 + shader.SetProperty( shader.GetPropertyIndex("uPosition[2]"), Vector3( radius, -radius, 0.0f ) );
  252 +
  253 + shader.SetProperty( shader.GetPropertyIndex("uPosition[3]"), Vector3( radius, -radius, 0.0f ) );
  254 + shader.SetProperty( shader.GetPropertyIndex("uPosition[4]"), Vector3( radius, 0.0f, 0.0f ) );
  255 + shader.SetProperty( shader.GetPropertyIndex("uPosition[5]"), Vector3( radius, radius, 0.0f ) );
  256 +
  257 + shader.SetProperty( shader.GetPropertyIndex("uPosition[6]"), Vector3( radius, radius, 0.0f ) );
  258 + shader.SetProperty( shader.GetPropertyIndex("uPosition[7]"), Vector3( 0.0f, radius, 0.0f ) );
  259 + shader.SetProperty( shader.GetPropertyIndex("uPosition[8]"), Vector3( -radius, radius, 0.0f ) );
  260 +
  261 + shader.SetProperty( shader.GetPropertyIndex("uPosition[9]"), Vector3( -radius, radius, 0.0f ) );
  262 + shader.SetProperty( shader.GetPropertyIndex("uPosition[10]"), Vector3( -radius, 0.0f, 0.0f ) );
  263 + shader.SetProperty( shader.GetPropertyIndex("uPosition[11]"), Vector3( -radius, -radius, 0.0f ) );
  264 +
  265 + shader.SetProperty( shader.GetPropertyIndex("uPosition[12]"), Vector3( -radius, -radius, 0.0f ) );
  266 + shader.SetProperty( shader.GetPropertyIndex("uPosition[13]"), Vector3( radius, -radius, 0.0f ) );
  267 + shader.SetProperty( shader.GetPropertyIndex("uPosition[14]"), Vector3( radius, radius, 0.0f ) );
  268 + shader.SetProperty( shader.GetPropertyIndex("uPosition[15]"), Vector3( -radius, radius, 0.0f ) );
  269 +
  270 + //shader.SetProperty( shader.GetPropertyIndex("uLineWidth"), 2.0f );
  271 +
  272 + static const Vector3 vertexData[] = { Vector3( 0.0f, 0.0f, 0.0f ),
  273 + Vector3( 0.5f, 0.0f, 1.0f ),
  274 + Vector3( 1.0f, 1.0f, 2.0f ),
  275 + Vector3( 0.0f, 0.0f, 3.0f ),
  276 + Vector3( 0.5f, 0.0f, 4.0f ),
  277 + Vector3( 1.0f, 1.0f, 5.0f ),
  278 + Vector3( 0.0f, 0.0f, 6.0f ),
  279 + Vector3( 0.5f, 0.0f, 7.0f ),
  280 + Vector3( 1.0f, 1.0f, 8.0f ),
  281 + Vector3( 0.0f, 0.0f, 9.0f ),
  282 + Vector3( 0.5f, 0.0f, 10.0f ),
  283 + Vector3( 1.0f, 1.0f, 11.0f ),
  284 + Vector3( 0.0f, 1.0f, 12.0f ),
  285 + Vector3( 0.0f, 1.0f, 13.0f ),
  286 + Vector3( 0.0f, 1.0f, 14.0f ),
  287 + Vector3( 0.0f, 1.0f, 15.0f )};
  288 +
  289 + short unsigned int indexData[] = { 0, 2, 1, 3, 5, 4, 6, 8, 7, 9, 11, 10, 12, 13, 14, 12, 14, 15 };
  290 +
  291 + //Create a vertex buffer for vertex positions and texture coordinates
  292 + Dali::Property::Map vertexFormat;
  293 + vertexFormat["aCoefficient"] = Dali::Property::VECTOR3;
  294 + Dali::PropertyBuffer vertexBuffer = Dali::PropertyBuffer::New( vertexFormat );
  295 + vertexBuffer.SetData( vertexData, sizeof(vertexData)/sizeof(vertexData[0]));
  296 +
  297 + //Create the geometry
  298 + Dali::Geometry geometry = Dali::Geometry::New();
  299 + geometry.AddVertexBuffer( vertexBuffer );
  300 + geometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0]) );
  301 +
  302 + Renderer renderer = Renderer::New( geometry, shader );
  303 + renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON );
  304 +
  305 + Actor actor = Actor::New();
  306 + actor.SetSize( 400.0f, 400.0f );
  307 + actor.SetPosition( center );
  308 + actor.SetAnchorPoint( AnchorPoint::CENTER );
  309 + actor.AddRenderer( renderer );
  310 +
  311 + Stage stage = Stage::GetCurrent();
  312 + stage.Add( actor );
  313 +
  314 + //Animation
  315 + Animation animation = Animation::New(5.0f);
  316 + KeyFrames k0 = KeyFrames::New();
  317 + k0.Add( 0.0f, Vector3( 0.0f,-radius*1.85, 0.0f ) );
  318 + k0.Add( 0.5f, Vector3( -radius*1.85, -radius*3.0f, 0.0f ) );
  319 + k0.Add( 1.0f, Vector3( 0.0f,-radius*1.85, 0.0f ) );
  320 + animation.AnimateBetween( Property( shader, shader.GetPropertyIndex("uPosition[1]") ),k0, AlphaFunction::EASE_IN_OUT_SINE );
  321 +
  322 + k0 = KeyFrames::New();
  323 + k0.Add( 0.0f, Vector3( radius*1.85, 0.0f, 0.0f ) );
  324 + k0.Add( 0.5f, Vector3( radius*3.0f,-radius*1.85, 0.0f ) );
  325 + k0.Add( 1.0f, Vector3( radius*1.85,0.0f, 0.0f ) );
  326 + animation.AnimateBetween( Property(shader, shader.GetPropertyIndex("uPosition[4]")),k0, AlphaFunction::EASE_IN_OUT_SINE );
  327 +
  328 + k0 = KeyFrames::New();
  329 + k0.Add( 0.0f, Vector3( 0.0f, radius*1.85, 0.0f ) );
  330 + k0.Add( 0.5f, Vector3( radius*1.85, radius*3.0f, 0.0f) );
  331 + k0.Add( 1.0f, Vector3( 0.0f, radius*1.85, 0.0f) );
  332 + animation.AnimateBetween( Property( shader, shader.GetPropertyIndex("uPosition[7]") ),k0, AlphaFunction::EASE_IN_OUT_SINE );
  333 +
  334 + k0 = KeyFrames::New();
  335 + k0.Add( 0.0f, Vector3( -radius*1.85, 0.0f, 0.0f) );
  336 + k0.Add( 0.5f, Vector3(-radius*3.0f, radius*1.85, 0.0f) );
  337 + k0.Add( 1.0f, Vector3( -radius*1.85, 0.0f, 0.0f) );
  338 + animation.AnimateBetween( Property( shader, shader.GetPropertyIndex("uPosition[10]") ),k0, AlphaFunction::EASE_IN_OUT_SINE );
  339 +
  340 + animation.AnimateBy( Property( actor, Actor::Property::ORIENTATION ), Quaternion( Radian( Degree(-90.0f) ), Vector3::ZAXIS ) );
  341 + animation.SetLooping( true );
  342 + animation.Play();
  343 + }
  344 +
  345 + void CreateQuadMorph( Vector3 center, float radius )
  346 + {
  347 + Shader shader = CreateShader( 16 );
  348 + shader.SetProperty( shader.GetPropertyIndex("uPosition[0]"), Vector3( -radius, -radius, 0.0f ) );
  349 + shader.SetProperty( shader.GetPropertyIndex("uPosition[1]"), Vector3( 0.0f, -radius, 0.0f ) );
  350 + shader.SetProperty( shader.GetPropertyIndex("uPosition[2]"), Vector3( radius, -radius, 0.0f ) );
  351 +
  352 + shader.SetProperty( shader.GetPropertyIndex("uPosition[3]"), Vector3( radius, -radius, 0.0f ) );
  353 + shader.SetProperty( shader.GetPropertyIndex("uPosition[4]"), Vector3( radius, 0.0f, 0.0f ) );
  354 + shader.SetProperty( shader.GetPropertyIndex("uPosition[5]"), Vector3( radius, radius, 0.0f ) );
  355 +
  356 + shader.SetProperty( shader.GetPropertyIndex("uPosition[6]"), Vector3( radius, radius, 0.0f ) );
  357 + shader.SetProperty( shader.GetPropertyIndex("uPosition[7]"), Vector3( 0.0f, radius, 0.0f ) );
  358 + shader.SetProperty( shader.GetPropertyIndex("uPosition[8]"), Vector3( -radius, radius, 0.0f ) );
  359 +
  360 + shader.SetProperty( shader.GetPropertyIndex("uPosition[9]"), Vector3( -radius, radius, 0.0f ) );
  361 + shader.SetProperty( shader.GetPropertyIndex("uPosition[10]"), Vector3( -radius, 0.0f, 0.0f ) );
  362 + shader.SetProperty( shader.GetPropertyIndex("uPosition[11]"), Vector3( -radius, -radius, 0.0f ) );
  363 +
  364 + shader.SetProperty( shader.GetPropertyIndex("uPosition[12]"), Vector3( -radius, -radius, 0.0f ) );
  365 + shader.SetProperty( shader.GetPropertyIndex("uPosition[13]"), Vector3( radius, -radius, 0.0f ) );
  366 + shader.SetProperty( shader.GetPropertyIndex("uPosition[14]"), Vector3( radius, radius, 0.0f ) );
  367 + shader.SetProperty( shader.GetPropertyIndex("uPosition[15]"), Vector3( -radius, radius, 0.0f ) );
  368 +
  369 + static const Vector3 vertexData[] = { Dali::Vector3( 0.0f, 0.0f, 0.0f ),
  370 + Dali::Vector3( 0.5f, 0.0f, 1.0f ),
  371 + Dali::Vector3( 1.0f, 1.0f, 2.0f ),
  372 +
  373 + Dali::Vector3( 0.0f, 0.0f, 3.0f ),
  374 + Dali::Vector3( 0.5f, 0.0f, 4.0f ),
  375 + Dali::Vector3( 1.0f, 1.0f, 5.0f ),
  376 +
  377 + Dali::Vector3( 0.0f, 0.0f, 6.0f ),
  378 + Dali::Vector3( 0.5f, 0.0f, 7.0f ),
  379 + Dali::Vector3( 1.0f, 1.0f, 8.0f ),
  380 +
  381 + Dali::Vector3( 0.0f, 0.0f, 9.0f ),
  382 + Dali::Vector3( 0.5f, 0.0f, 10.0f ),
  383 + Dali::Vector3( 1.0f, 1.0f, 11.0f ),
  384 +
  385 + Dali::Vector3( 0.0f, 1.0f, 12.0f ),
  386 + Dali::Vector3( 0.0f, 1.0f, 13.0f ),
  387 + Dali::Vector3( 0.0f, 1.0f, 14.0f ),
  388 + Dali::Vector3( 0.0f, 1.0f, 15.0f ) };
  389 +
  390 + short unsigned int indexData[] = { 0, 2, 1, 3, 5, 4, 6, 8, 7, 9, 11, 10, 12, 15, 14, 12, 14, 13 };
  391 +
  392 + //Create a vertex buffer for vertex positions and texture coordinates
  393 + Dali::Property::Map vertexFormat;
  394 + vertexFormat["aCoefficient"] = Dali::Property::VECTOR3;
  395 + Dali::PropertyBuffer vertexBuffer = Dali::PropertyBuffer::New( vertexFormat );
  396 + vertexBuffer.SetData( vertexData, sizeof(vertexData)/sizeof(vertexData[0]));
  397 +
  398 + //Create the geometry
  399 + Dali::Geometry geometry = Dali::Geometry::New();
  400 + geometry.AddVertexBuffer( vertexBuffer );
  401 + geometry.SetIndexBuffer( indexData, sizeof(indexData)/sizeof(indexData[0]) );
  402 +
  403 + Renderer renderer = Renderer::New( geometry, shader );
  404 + renderer.SetProperty( Renderer::Property::BLEND_MODE, BlendMode::ON );
  405 +
  406 + Actor actor = Actor::New();
  407 + actor.SetSize( 400.0f, 400.0f );
  408 + actor.SetPosition( center );
  409 + actor.SetAnchorPoint( AnchorPoint::CENTER );
  410 + actor.SetColor(Vector4(1.0f,0.0f,0.0f,1.0f) );
  411 + actor.AddRenderer( renderer );
  412 +
  413 + Stage stage = Stage::GetCurrent();
  414 + stage.Add( actor );
  415 +
  416 + //Animation
  417 + Animation animation = Animation::New( 5.0f );
  418 + KeyFrames k0 = KeyFrames::New();
  419 + k0.Add( 0.0f, Vector3( 0.0f, -radius, 0.0f ) );
  420 + k0.Add( 0.5f, Vector3( 0.0f, -radius*4.0f, 0.0f ) );
  421 + k0.Add( 1.0f, Vector3( 0.0f, -radius, 0.0f ) );
  422 + animation.AnimateBetween( Property(shader, shader.GetPropertyIndex("uPosition[1]")),k0, AlphaFunction::EASE_IN_OUT_SINE );
  423 +
  424 + k0 = KeyFrames::New();
  425 + k0.Add( 0.0f, Vector3( radius, 0.0f, 0.0f ) );
  426 + k0.Add( 0.5f, Vector3( radius*4.0f, 0.0f, 0.0f ) );
  427 + k0.Add( 1.0f, Vector3( radius, 0.0f, 0.0f ) );
  428 + animation.AnimateBetween( Property(shader, shader.GetPropertyIndex("uPosition[4]")),k0, AlphaFunction::EASE_IN_OUT_SINE );
  429 +
  430 + k0 = KeyFrames::New();
  431 + k0.Add( 0.0f, Vector3( 0.0f, radius, 0.0f ) );
  432 + k0.Add( 0.5f, Vector3( 0.0f, radius*4.0f, 0.0f ) );
  433 + k0.Add( 1.0f, Vector3( 0.0f, radius, 0.0f ) );
  434 + animation.AnimateBetween( Property(shader, shader.GetPropertyIndex("uPosition[7]")),k0, AlphaFunction::EASE_IN_OUT_SINE );
  435 +
  436 + k0 = KeyFrames::New();
  437 + k0.Add( 0.0f, Vector3( -radius, 0.0f, 0.0f ) );
  438 + k0.Add( 0.5f, Vector3( -radius*4.0f,0.0f, 0.0f ) );
  439 + k0.Add( 1.0f, Vector3( -radius, 0.0f, 0.0f ) );
  440 + animation.AnimateBetween( Property(shader, shader.GetPropertyIndex("uPosition[10]")),k0, AlphaFunction::EASE_IN_OUT_SINE );
  441 +
  442 + animation.AnimateBy( Property( actor, Actor::Property::ORIENTATION ), Quaternion( Radian( Degree(90.0f) ), Vector3::ZAXIS ) );
  443 + animation.SetLooping( true );
  444 + animation.Play();
  445 + }
  446 +
  447 + /**
  448 + * Main key event handler
  449 + */
  450 + void OnKeyEvent(const KeyEvent& event)
  451 + {
  452 + if( event.state == KeyEvent::Down && (IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK )) )
  453 + {
  454 + mApplication.Quit();
  455 + }
  456 + }
  457 +
  458 +private:
  459 + Application& mApplication;
  460 +
  461 +};
  462 +
  463 +void RunTest( Application& application )
  464 +{
  465 + AnimatedShapesExample test( application );
  466 + application.MainLoop();
  467 +}
  468 +
  469 +int main( int argc, char **argv )
  470 +{
  471 + Application application = Application::New( &argc, &argv );
  472 + RunTest( application );
  473 +
  474 + return 0;
  475 +}
... ...
resources/po/as.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "অ্যানিমেটেড আকার"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "অৱৰুদ্ধ কৰক"
3 6  
... ...
resources/po/de.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "Animierte Formen"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "Blöcke"
3 6  
... ...
resources/po/en_GB.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "Animated Shapes"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "Blocks"
3 6  
... ...
resources/po/en_US.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "Animated Shapes"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "Blocks"
3 6  
... ...
resources/po/es.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "Formas Animadas"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "Bloques"
3 6  
... ...
resources/po/ko.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "애니메이션 모양"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "블록"
3 6  
... ...
resources/po/ml.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "ആനിമേഷൻ രൂപങ്ങൾ"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "തടയപ്പെട്ട"
3 6  
... ...
resources/po/ur.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "متحرک شکلیں"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "اینٹیں"
3 6  
... ...
resources/po/zn_CH.po
  1 +msgid "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES"
  2 +msgstr "动画造型"
  3 +
1 4 msgid "DALI_DEMO_STR_TITLE_BLOCKS"
2 5 msgstr "块体"
3 6  
... ...
shared/dali-demo-strings.h
... ... @@ -32,6 +32,7 @@ extern &quot;C&quot;
32 32  
33 33 #ifdef INTERNATIONALIZATION_ENABLED
34 34  
  35 +#define DALI_DEMO_STR_TITLE_ANIMATED_SHAPES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_ANIMATED_SHAPES")
35 36 #define DALI_DEMO_STR_TITLE_BLOCKS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BLOCKS")
36 37 #define DALI_DEMO_STR_TITLE_BUBBLES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BUBBLES")
37 38 #define DALI_DEMO_STR_TITLE_BUTTONS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_BUTTONS")
... ... @@ -81,6 +82,7 @@ extern &quot;C&quot;
81 82  
82 83 #else // !INTERNATIONALIZATION_ENABLED
83 84  
  85 +#define DALI_DEMO_STR_TITLE_ANIMATED_SHAPES "Animated Shapes"
84 86 #define DALI_DEMO_STR_TITLE_BLOCKS "Blocks"
85 87 #define DALI_DEMO_STR_TITLE_BUBBLES "Bubbles"
86 88 #define DALI_DEMO_STR_TITLE_BUTTONS "Buttons"
... ...