Commit e74b8b44afcf8bb20a7fe3da25ececb0e01e7469
[dali_1.2.5] Merge branch 'devel/master'
Change-Id: I124203ec4115d626695b7b11212eed346c3eaf2b
Showing
28 changed files
with
1262 additions
and
1190 deletions
com.samsung.dali-demo.xml
| @@ -55,9 +55,6 @@ | @@ -55,9 +55,6 @@ | ||
| 55 | <ui-application appid="motion-stretch.example" exec="/usr/apps/com.samsung.dali-demo/bin/motion-stretch.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> | 55 | <ui-application appid="motion-stretch.example" exec="/usr/apps/com.samsung.dali-demo/bin/motion-stretch.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> |
| 56 | <label>Motion Stretch</label> | 56 | <label>Motion Stretch</label> |
| 57 | </ui-application> | 57 | </ui-application> |
| 58 | - <ui-application appid="radial-menu.example" exec="/usr/apps/com.samsung.dali-demo/bin/radial-menu.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> | ||
| 59 | - <label>Radial Menu</label> | ||
| 60 | - </ui-application> | ||
| 61 | <ui-application appid="refraction-effect.example" exec="/usr/apps/com.samsung.dali-demo/bin/refraction-effect.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> | 58 | <ui-application appid="refraction-effect.example" exec="/usr/apps/com.samsung.dali-demo/bin/refraction-effect.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> |
| 62 | <label>Refraction effect</label> | 59 | <label>Refraction effect</label> |
| 63 | </ui-application> | 60 | </ui-application> |
| @@ -172,4 +169,7 @@ | @@ -172,4 +169,7 @@ | ||
| 172 | <ui-application appid="styling.example" exec="/usr/apps/com.samsung.dali-demo/bin/styling.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> | 169 | <ui-application appid="styling.example" exec="/usr/apps/com.samsung.dali-demo/bin/styling.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> |
| 173 | <label>Styling</label> | 170 | <label>Styling</label> |
| 174 | </ui-application> | 171 | </ui-application> |
| 172 | + <ui-application appid="progress-bar.example" exec="/usr/apps/com.samsung.dali-demo/bin/progress-bar.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true"> | ||
| 173 | + <label>Progress Bar</label> | ||
| 174 | + </ui-application> | ||
| 175 | </manifest> | 175 | </manifest> |
demo/dali-demo.cpp
| 1 | /* | 1 | /* |
| 2 | - * Copyright (c) 2014 Samsung Electronics Co., Ltd. | 2 | + * Copyright (c) 2016 Samsung Electronics Co., Ltd. |
| 3 | * | 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. | 5 | * you may not use this file except in compliance with the License. |
| @@ -46,7 +46,6 @@ int DALI_EXPORT_API main(int argc, char **argv) | @@ -46,7 +46,6 @@ int DALI_EXPORT_API main(int argc, char **argv) | ||
| 46 | demo.AddExample(Example("motion-blur.example", DALI_DEMO_STR_TITLE_MOTION_BLUR)); | 46 | demo.AddExample(Example("motion-blur.example", DALI_DEMO_STR_TITLE_MOTION_BLUR)); |
| 47 | demo.AddExample(Example("motion-stretch.example", DALI_DEMO_STR_TITLE_MOTION_STRETCH)); | 47 | demo.AddExample(Example("motion-stretch.example", DALI_DEMO_STR_TITLE_MOTION_STRETCH)); |
| 48 | demo.AddExample(Example("page-turn-view.example", DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW)); | 48 | demo.AddExample(Example("page-turn-view.example", DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW)); |
| 49 | - demo.AddExample(Example("radial-menu.example", DALI_DEMO_STR_TITLE_RADIAL_MENU)); | ||
| 50 | demo.AddExample(Example("refraction-effect.example", DALI_DEMO_STR_TITLE_REFRACTION)); | 49 | demo.AddExample(Example("refraction-effect.example", DALI_DEMO_STR_TITLE_REFRACTION)); |
| 51 | demo.AddExample(Example("scroll-view.example", DALI_DEMO_STR_TITLE_SCROLL_VIEW)); | 50 | demo.AddExample(Example("scroll-view.example", DALI_DEMO_STR_TITLE_SCROLL_VIEW)); |
| 52 | demo.AddExample(Example("shadow-bone-lighting.example", DALI_DEMO_STR_TITLE_LIGHTS_AND_SHADOWS)); | 51 | demo.AddExample(Example("shadow-bone-lighting.example", DALI_DEMO_STR_TITLE_LIGHTS_AND_SHADOWS)); |
| @@ -81,6 +80,8 @@ int DALI_EXPORT_API main(int argc, char **argv) | @@ -81,6 +80,8 @@ int DALI_EXPORT_API main(int argc, char **argv) | ||
| 81 | demo.AddExample(Example("mesh-visual.example", DALI_DEMO_STR_TITLE_MESH_VISUAL)); | 80 | demo.AddExample(Example("mesh-visual.example", DALI_DEMO_STR_TITLE_MESH_VISUAL)); |
| 82 | demo.AddExample(Example("primitive-shapes.example", DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES)); | 81 | demo.AddExample(Example("primitive-shapes.example", DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES)); |
| 83 | demo.AddExample(Example("styling.example", DALI_DEMO_STR_TITLE_STYLING)); | 82 | demo.AddExample(Example("styling.example", DALI_DEMO_STR_TITLE_STYLING)); |
| 83 | + demo.AddExample(Example("sparkle.example", DALI_DEMO_STR_TITLE_SPARKLE)); | ||
| 84 | + demo.AddExample(Example("progress-bar.example", DALI_DEMO_STR_TITLE_PROGRESS_BAR)); | ||
| 84 | 85 | ||
| 85 | demo.SortAlphabetically( true ); | 86 | demo.SortAlphabetically( true ); |
| 86 | 87 |
examples/mesh-visual/mesh-visual-example.cpp
| @@ -95,25 +95,19 @@ public: | @@ -95,25 +95,19 @@ public: | ||
| 95 | Stage stage = Stage::GetCurrent(); | 95 | Stage stage = Stage::GetCurrent(); |
| 96 | stage.SetBackgroundColor( Vector4( 0.0, 0.5, 1.0, 1.0 ) ); | 96 | stage.SetBackgroundColor( Vector4( 0.0, 0.5, 1.0, 1.0 ) ); |
| 97 | 97 | ||
| 98 | - //Set up layer to place objects on. | ||
| 99 | - Layer baseLayer = Layer::New(); | ||
| 100 | - baseLayer.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 101 | - baseLayer.SetAnchorPoint( AnchorPoint::CENTER ); | ||
| 102 | - baseLayer.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); | ||
| 103 | - baseLayer.SetBehavior( Layer::LAYER_2D ); //We use a 2D layer as this is closer to UI work than full 3D scene creation. | ||
| 104 | - baseLayer.SetDepthTestDisabled( false ); //Enable depth testing, as otherwise the 2D layer would not do so. | ||
| 105 | - baseLayer.RegisterProperty( "Tag", LAYER_TAG ); //Used to differentiate between different kinds of actor. | ||
| 106 | - baseLayer.TouchedSignal().Connect( this, &MeshVisualController::OnTouch ); | ||
| 107 | - stage.Add( baseLayer ); | 98 | + //Set up root layer to receive touch gestures. |
| 99 | + Layer rootLayer = stage.GetRootLayer(); | ||
| 100 | + rootLayer.RegisterProperty( "Tag", LAYER_TAG ); //Used to differentiate between different kinds of actor. | ||
| 101 | + rootLayer.TouchSignal().Connect( this, &MeshVisualController::OnTouch ); | ||
| 108 | 102 | ||
| 109 | //Place models on the scene. | 103 | //Place models on the scene. |
| 110 | - SetupModels( baseLayer ); | 104 | + SetupModels( rootLayer ); |
| 111 | 105 | ||
| 112 | //Place buttons on the scene. | 106 | //Place buttons on the scene. |
| 113 | - SetupButtons( baseLayer ); | 107 | + SetupButtons( rootLayer ); |
| 114 | 108 | ||
| 115 | //Add a light to the scene. | 109 | //Add a light to the scene. |
| 116 | - SetupLight( baseLayer ); | 110 | + SetupLight( rootLayer ); |
| 117 | 111 | ||
| 118 | //Allow for exiting of the application via key presses. | 112 | //Allow for exiting of the application via key presses. |
| 119 | stage.KeyEventSignal().Connect( this, &MeshVisualController::OnKeyEvent ); | 113 | stage.KeyEventSignal().Connect( this, &MeshVisualController::OnKeyEvent ); |
| @@ -129,7 +123,7 @@ public: | @@ -129,7 +123,7 @@ public: | ||
| 129 | mContainers[i].SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); | 123 | mContainers[i].SetResizePolicy( ResizePolicy::SIZE_RELATIVE_TO_PARENT, Dimension::ALL_DIMENSIONS ); |
| 130 | mContainers[i].RegisterProperty( "Tag", MODEL_TAG ); //Used to differentiate between different kinds of actor. | 124 | mContainers[i].RegisterProperty( "Tag", MODEL_TAG ); //Used to differentiate between different kinds of actor. |
| 131 | mContainers[i].RegisterProperty( "Model", Property::Value( i ) ); //Used to index into the model. | 125 | mContainers[i].RegisterProperty( "Model", Property::Value( i ) ); //Used to index into the model. |
| 132 | - mContainers[i].TouchedSignal().Connect( this, &MeshVisualController::OnTouch ); | 126 | + mContainers[i].TouchSignal().Connect( this, &MeshVisualController::OnTouch ); |
| 133 | layer.Add( mContainers[i] ); | 127 | layer.Add( mContainers[i] ); |
| 134 | } | 128 | } |
| 135 | 129 | ||
| @@ -284,7 +278,7 @@ public: | @@ -284,7 +278,7 @@ public: | ||
| 284 | SetLightImage(); | 278 | SetLightImage(); |
| 285 | 279 | ||
| 286 | //Connect to touch signal for dragging. | 280 | //Connect to touch signal for dragging. |
| 287 | - mLightSource.TouchedSignal().Connect( this, &MeshVisualController::OnTouch ); | 281 | + mLightSource.TouchSignal().Connect( this, &MeshVisualController::OnTouch ); |
| 288 | 282 | ||
| 289 | //Place the light source on a layer above the base, so that it is rendered above everything else. | 283 | //Place the light source on a layer above the base, so that it is rendered above everything else. |
| 290 | Layer upperLayer = Layer::New(); | 284 | Layer upperLayer = Layer::New(); |
| @@ -396,14 +390,11 @@ public: | @@ -396,14 +390,11 @@ public: | ||
| 396 | 390 | ||
| 397 | //If the light source is touched, move it by dragging it. | 391 | //If the light source is touched, move it by dragging it. |
| 398 | //If a model is touched, rotate it by panning around. | 392 | //If a model is touched, rotate it by panning around. |
| 399 | - bool OnTouch( Actor actor, const TouchEvent& event ) | 393 | + bool OnTouch( Actor actor, const TouchData& touch ) |
| 400 | { | 394 | { |
| 401 | - //Get primary touch point. | ||
| 402 | - const Dali::TouchPoint& point = event.GetPoint( 0 ); | ||
| 403 | - | ||
| 404 | - switch( point.state ) | 395 | + switch( touch.GetState( 0 ) ) |
| 405 | { | 396 | { |
| 406 | - case TouchPoint::Down: | 397 | + case PointState::DOWN: |
| 407 | { | 398 | { |
| 408 | //Determine what was touched. | 399 | //Determine what was touched. |
| 409 | actor.GetProperty( actor.GetPropertyIndex( "Tag" ) ).Get( mTag ); | 400 | actor.GetProperty( actor.GetPropertyIndex( "Tag" ) ).Get( mTag ); |
| @@ -417,13 +408,13 @@ public: | @@ -417,13 +408,13 @@ public: | ||
| 417 | mModels[mSelectedModelIndex].rotationAnimation.Pause(); | 408 | mModels[mSelectedModelIndex].rotationAnimation.Pause(); |
| 418 | 409 | ||
| 419 | //Store start points. | 410 | //Store start points. |
| 420 | - mPanStart = point.screen; | 411 | + mPanStart = touch.GetScreenPosition( 0 ); |
| 421 | mRotationStart = mModels[mSelectedModelIndex].rotation; | 412 | mRotationStart = mModels[mSelectedModelIndex].rotation; |
| 422 | } | 413 | } |
| 423 | 414 | ||
| 424 | break; | 415 | break; |
| 425 | } | 416 | } |
| 426 | - case TouchPoint::Motion: | 417 | + case PointState::MOTION: |
| 427 | { | 418 | { |
| 428 | //Switch on the kind of actor we're interacting with. | 419 | //Switch on the kind of actor we're interacting with. |
| 429 | switch( mTag ) | 420 | switch( mTag ) |
| @@ -431,7 +422,7 @@ public: | @@ -431,7 +422,7 @@ public: | ||
| 431 | case MODEL_TAG: //Rotate model | 422 | case MODEL_TAG: //Rotate model |
| 432 | { | 423 | { |
| 433 | //Calculate displacement and corresponding rotation. | 424 | //Calculate displacement and corresponding rotation. |
| 434 | - Vector2 displacement = point.screen - mPanStart; | 425 | + Vector2 displacement = touch.GetScreenPosition( 0 ) - mPanStart; |
| 435 | mModels[mSelectedModelIndex].rotation = Vector2( mRotationStart.x - displacement.y / Y_ROTATION_DISPLACEMENT_FACTOR, // Y displacement rotates around X axis | 426 | mModels[mSelectedModelIndex].rotation = Vector2( mRotationStart.x - displacement.y / Y_ROTATION_DISPLACEMENT_FACTOR, // Y displacement rotates around X axis |
| 436 | mRotationStart.y + displacement.x / X_ROTATION_DISPLACEMENT_FACTOR ); // X displacement rotates around Y axis | 427 | mRotationStart.y + displacement.x / X_ROTATION_DISPLACEMENT_FACTOR ); // X displacement rotates around Y axis |
| 437 | Quaternion rotation = Quaternion( Radian( mModels[mSelectedModelIndex].rotation.x ), Vector3::XAXIS) * | 428 | Quaternion rotation = Quaternion( Radian( mModels[mSelectedModelIndex].rotation.x ), Vector3::XAXIS) * |
| @@ -445,7 +436,7 @@ public: | @@ -445,7 +436,7 @@ public: | ||
| 445 | case LIGHT_TAG: //Drag light | 436 | case LIGHT_TAG: //Drag light |
| 446 | { | 437 | { |
| 447 | //Set light source to new position and update the models accordingly. | 438 | //Set light source to new position and update the models accordingly. |
| 448 | - mLightSource.SetPosition( Vector3( point.screen ) ); | 439 | + mLightSource.SetPosition( Vector3( touch.GetScreenPosition( 0 ) ) ); |
| 449 | UpdateLight(); | 440 | UpdateLight(); |
| 450 | 441 | ||
| 451 | break; | 442 | break; |
| @@ -454,8 +445,8 @@ public: | @@ -454,8 +445,8 @@ public: | ||
| 454 | 445 | ||
| 455 | break; | 446 | break; |
| 456 | } | 447 | } |
| 457 | - case TouchPoint::Interrupted: //Same as finished. | ||
| 458 | - case TouchPoint::Finished: | 448 | + case PointState::INTERRUPTED: //Same as finished. |
| 449 | + case PointState::FINISHED: | ||
| 459 | { | 450 | { |
| 460 | if( mTag == MODEL_TAG ) | 451 | if( mTag == MODEL_TAG ) |
| 461 | { | 452 | { |
examples/model3d-view/model3d-view-example.cpp
| @@ -76,18 +76,10 @@ public: | @@ -76,18 +76,10 @@ public: | ||
| 76 | Vector2 screenSize = stage.GetSize(); | 76 | Vector2 screenSize = stage.GetSize(); |
| 77 | 77 | ||
| 78 | //Add background | 78 | //Add background |
| 79 | - Toolkit::ImageView backView = Toolkit::ImageView::New(BACKGROUND_IMAGE); | ||
| 80 | - backView.SetAnchorPoint( AnchorPoint::TOP_LEFT ); | ||
| 81 | - stage.Add(backView); | ||
| 82 | - | ||
| 83 | - //Add 3D model control | ||
| 84 | - m3DLayer = Layer::New(); | ||
| 85 | - stage.GetRootLayer().Add(m3DLayer); | ||
| 86 | - | ||
| 87 | - //3D models require 3D based rendering method, so it can use depth buffer, etc. | ||
| 88 | - m3DLayer.SetBehavior(Layer::LAYER_3D); | ||
| 89 | - m3DLayer.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 90 | - m3DLayer.SetAnchorPoint( AnchorPoint::CENTER ); | 79 | + Toolkit::ImageView backView = Toolkit::ImageView::New( BACKGROUND_IMAGE ); |
| 80 | + backView.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 81 | + backView.SetAnchorPoint( AnchorPoint::CENTER ); | ||
| 82 | + stage.Add( backView ); | ||
| 91 | 83 | ||
| 92 | mModelCounter = 0; | 84 | mModelCounter = 0; |
| 93 | 85 | ||
| @@ -100,7 +92,7 @@ public: | @@ -100,7 +92,7 @@ public: | ||
| 100 | 92 | ||
| 101 | mModel3dView.SetProperty(Model3dView::Property::LIGHT_POSITION, Vector3(5,10.,0)); | 93 | mModel3dView.SetProperty(Model3dView::Property::LIGHT_POSITION, Vector3(5,10.,0)); |
| 102 | 94 | ||
| 103 | - m3DLayer.Add( mModel3dView ); | 95 | + backView.Add( mModel3dView ); |
| 104 | 96 | ||
| 105 | mIlluminationShader = Model3dView::IlluminationType(mModel3dView.GetProperty<int>(Model3dView::Property::ILLUMINATION_TYPE)); | 97 | mIlluminationShader = Model3dView::IlluminationType(mModel3dView.GetProperty<int>(Model3dView::Property::ILLUMINATION_TYPE)); |
| 106 | 98 | ||
| @@ -108,7 +100,7 @@ public: | @@ -108,7 +100,7 @@ public: | ||
| 108 | mButtonLayer.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); | 100 | mButtonLayer.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); |
| 109 | mButtonLayer.SetParentOrigin( ParentOrigin::CENTER ); | 101 | mButtonLayer.SetParentOrigin( ParentOrigin::CENTER ); |
| 110 | mButtonLayer.SetAnchorPoint( AnchorPoint::CENTER ); | 102 | mButtonLayer.SetAnchorPoint( AnchorPoint::CENTER ); |
| 111 | - stage.GetRootLayer().Add(mButtonLayer); | 103 | + stage.Add(mButtonLayer); |
| 112 | 104 | ||
| 113 | // Create button for model changing | 105 | // Create button for model changing |
| 114 | Toolkit::PushButton editButton = Toolkit::PushButton::New(); | 106 | Toolkit::PushButton editButton = Toolkit::PushButton::New(); |
| @@ -281,7 +273,6 @@ private: | @@ -281,7 +273,6 @@ private: | ||
| 281 | int mModelCounter; | 273 | int mModelCounter; |
| 282 | Model3dView mModel3dView; | 274 | Model3dView mModel3dView; |
| 283 | 275 | ||
| 284 | - Layer m3DLayer; | ||
| 285 | Layer mButtonLayer; | 276 | Layer mButtonLayer; |
| 286 | TapGestureDetector mTapDetector; | 277 | TapGestureDetector mTapDetector; |
| 287 | 278 |
examples/progress-bar/progress-bar-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 "shared/view.h" | ||
| 19 | +#include <dali-toolkit/dali-toolkit.h> | ||
| 20 | +#include <dali-toolkit/devel-api/controls/progress-bar/progress-bar.h> | ||
| 21 | + | ||
| 22 | +using namespace Dali; | ||
| 23 | +using namespace Dali::Toolkit; | ||
| 24 | +using Dali::Toolkit::ProgressBar; | ||
| 25 | + | ||
| 26 | +namespace | ||
| 27 | +{ | ||
| 28 | + | ||
| 29 | +const char* const BACKGROUND_IMAGE = DEMO_IMAGE_DIR "background-gradient.jpg"; | ||
| 30 | +const char* const TOOLBAR_IMAGE = DEMO_IMAGE_DIR "top-bar.png"; | ||
| 31 | +const char* const TOOLBAR_TITLE = "Progress Bar"; | ||
| 32 | + | ||
| 33 | +const Vector4 BACKGROUND_COLOUR( 1.0f, 1.0f, 1.0f, 0.15f ); | ||
| 34 | + | ||
| 35 | +// Layout sizes | ||
| 36 | +const int MARGIN_SIZE = 10; | ||
| 37 | +const int TOP_MARGIN = 85; | ||
| 38 | + | ||
| 39 | +} // namespace | ||
| 40 | + | ||
| 41 | +/** This example shows how to create and use PROGRESS BAR. | ||
| 42 | + */ | ||
| 43 | + | ||
| 44 | +class ProgressBarExample: public ConnectionTracker | ||
| 45 | +{ | ||
| 46 | +public: | ||
| 47 | + | ||
| 48 | + ProgressBarExample( Application& application ) | ||
| 49 | + : mApplication( application ) | ||
| 50 | + { | ||
| 51 | + // Connect to the Application's Init signal | ||
| 52 | + mProgressValue = 0.0f; | ||
| 53 | + mApplication.InitSignal().Connect( this, &ProgressBarExample::Create ); | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + ~ProgressBarExample() | ||
| 57 | + { | ||
| 58 | + // Nothing to do here | ||
| 59 | + } | ||
| 60 | + | ||
| 61 | + void Create( Application& application ) | ||
| 62 | + { | ||
| 63 | + // The Init signal is received once (only) during the Application lifetime | ||
| 64 | + | ||
| 65 | + // Respond to key events | ||
| 66 | + Stage::GetCurrent().KeyEventSignal().Connect( this, &ProgressBarExample::OnKeyEvent ); | ||
| 67 | + | ||
| 68 | + // Creates a default view with a default tool bar. | ||
| 69 | + // The view is added to the stage. | ||
| 70 | + | ||
| 71 | + mContentLayer = DemoHelper::CreateView( application, | ||
| 72 | + mView, | ||
| 73 | + mToolBar, | ||
| 74 | + BACKGROUND_IMAGE, | ||
| 75 | + TOOLBAR_IMAGE, | ||
| 76 | + TOOLBAR_TITLE ); | ||
| 77 | + | ||
| 78 | + mProgressBar = ProgressBar::New(); | ||
| 79 | + mProgressBar.SetParentOrigin(ParentOrigin::TOP_CENTER); | ||
| 80 | + mProgressBar.SetAnchorPoint(AnchorPoint::TOP_CENTER); | ||
| 81 | + mProgressBar.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); | ||
| 82 | + mProgressBar.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT); | ||
| 83 | + | ||
| 84 | + Toolkit::TableView contentTable = Toolkit::TableView::New(2, 1); | ||
| 85 | + contentTable.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH); | ||
| 86 | + contentTable.SetResizePolicy(ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT); | ||
| 87 | + contentTable.SetAnchorPoint(AnchorPoint::TOP_LEFT); | ||
| 88 | + contentTable.SetParentOrigin(ParentOrigin::TOP_LEFT); | ||
| 89 | + contentTable.SetCellPadding(Size(MARGIN_SIZE, MARGIN_SIZE * 0.5f)); | ||
| 90 | + | ||
| 91 | + for( unsigned int i = 0; i < contentTable.GetRows(); ++i ) | ||
| 92 | + { | ||
| 93 | + contentTable.SetFitHeight( i ); | ||
| 94 | + } | ||
| 95 | + | ||
| 96 | + contentTable.SetPosition( 0.0f, TOP_MARGIN ); | ||
| 97 | + mContentLayer.Add( contentTable ); | ||
| 98 | + | ||
| 99 | + // Image selector for progress bar | ||
| 100 | + Toolkit::TableView progressBackground = Toolkit::TableView::New( 1, 1 ); | ||
| 101 | + progressBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); | ||
| 102 | + progressBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT ); | ||
| 103 | + progressBackground.SetBackgroundColor( BACKGROUND_COLOUR ); | ||
| 104 | + progressBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) ); | ||
| 105 | + progressBackground.SetRelativeWidth( 0, 1.0f ); | ||
| 106 | + progressBackground.SetFitHeight( 0 ); | ||
| 107 | + contentTable.Add( progressBackground ); | ||
| 108 | + progressBackground.Add( mProgressBar ); | ||
| 109 | + | ||
| 110 | + // Create buttons | ||
| 111 | + Toolkit::TableView buttonBackground = Toolkit::TableView::New( 2, 1 ); | ||
| 112 | + buttonBackground.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); | ||
| 113 | + buttonBackground.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT ); | ||
| 114 | + buttonBackground.SetBackgroundColor( BACKGROUND_COLOUR ); | ||
| 115 | + buttonBackground.SetCellPadding( Size( MARGIN_SIZE, MARGIN_SIZE ) ); | ||
| 116 | + | ||
| 117 | + for( unsigned int i = 0; i < buttonBackground.GetRows(); ++i ) | ||
| 118 | + { | ||
| 119 | + buttonBackground.SetFitHeight( i ); | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + contentTable.Add( buttonBackground ); | ||
| 123 | + | ||
| 124 | + mSetProgressButton = Toolkit::PushButton::New(); | ||
| 125 | + mSetProgressButton.SetLabelText( "Set Progress" ); | ||
| 126 | + mSetProgressButton.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); | ||
| 127 | + mSetProgressButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT ); | ||
| 128 | + mSetProgressButton.ClickedSignal().Connect( this, &ProgressBarExample::OnSetProgressButtonSelected ); | ||
| 129 | + | ||
| 130 | + buttonBackground.Add( mSetProgressButton ); | ||
| 131 | + | ||
| 132 | + mResetProgressButton = Toolkit::PushButton::New(); | ||
| 133 | + mResetProgressButton.SetLabelText( "Reset Progress" ); | ||
| 134 | + mResetProgressButton.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); | ||
| 135 | + mResetProgressButton.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT ); | ||
| 136 | + mResetProgressButton.ClickedSignal().Connect( this, &ProgressBarExample::OnResetProgressButtonSelected ); | ||
| 137 | + | ||
| 138 | + buttonBackground.Add( mResetProgressButton ); | ||
| 139 | + } | ||
| 140 | + | ||
| 141 | + bool OnResetProgressButtonSelected( Toolkit::Button button ) | ||
| 142 | + { | ||
| 143 | + mProgressValue = 0.0f; | ||
| 144 | + mProgressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, 0.0f); | ||
| 145 | + return true; | ||
| 146 | + } | ||
| 147 | + | ||
| 148 | + bool OnSetProgressButtonSelected( Toolkit::Button button ) | ||
| 149 | + { | ||
| 150 | + mProgressValue += 0.1f; | ||
| 151 | + mProgressBar.SetProperty(ProgressBar::Property::PROGRESS_VALUE, mProgressValue); | ||
| 152 | + return true; | ||
| 153 | + } | ||
| 154 | + | ||
| 155 | + void OnKeyEvent( const KeyEvent& event ) | ||
| 156 | + { | ||
| 157 | + if( event.state == KeyEvent::Down ) | ||
| 158 | + { | ||
| 159 | + if( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) ) | ||
| 160 | + { | ||
| 161 | + // Exit application when click back or escape. | ||
| 162 | + mApplication.Quit(); | ||
| 163 | + } | ||
| 164 | + } | ||
| 165 | + } | ||
| 166 | + | ||
| 167 | +private: | ||
| 168 | + | ||
| 169 | + Application& mApplication; | ||
| 170 | + Toolkit::Control mView; ///< The View instance. | ||
| 171 | + Toolkit::ToolBar mToolBar; ///< The View's Toolbar. | ||
| 172 | + Layer mContentLayer; ///< Content layer. | ||
| 173 | + ProgressBar mProgressBar; | ||
| 174 | + Toolkit::PushButton mSetProgressButton; | ||
| 175 | + Toolkit::PushButton mResetProgressButton; | ||
| 176 | + float mProgressValue; | ||
| 177 | +}; | ||
| 178 | + | ||
| 179 | +void RunTest( Application& application ) | ||
| 180 | +{ | ||
| 181 | + ProgressBarExample test( application ); | ||
| 182 | + application.MainLoop(); | ||
| 183 | +} | ||
| 184 | + | ||
| 185 | +// Entry point for Linux & Tizen applications | ||
| 186 | +int DALI_EXPORT_API main( int argc, char **argv ) | ||
| 187 | +{ | ||
| 188 | + Application application = Application::New( &argc, &argv, DEMO_THEME_PATH ); | ||
| 189 | + | ||
| 190 | + RunTest( application ); | ||
| 191 | + | ||
| 192 | + return 0; | ||
| 193 | +} |
examples/radial-menu/radial-menu-example.cpp deleted
| 1 | -/* | ||
| 2 | - * Copyright (c) 2015 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 | -#include "radial-sweep-view.h" | ||
| 22 | -#include "radial-sweep-view-impl.h" | ||
| 23 | - | ||
| 24 | -using namespace Dali; | ||
| 25 | -using namespace Dali::Toolkit; | ||
| 26 | - | ||
| 27 | -namespace | ||
| 28 | -{ | ||
| 29 | -const char* TEST_OUTER_RING_FILENAME = DEMO_IMAGE_DIR "layer2.png"; // Image to be masked | ||
| 30 | -const char* TEST_INNER_RING_FILENAME = DEMO_IMAGE_DIR "layer1.png"; // Image to be masked | ||
| 31 | -const char* TEST_MENU_FILENAME = DEMO_IMAGE_DIR "layer3.png"; // Image to be masked | ||
| 32 | -const char* TEST_DIAL_FILENAME = DEMO_IMAGE_DIR "layer4.png"; // Image to be masked | ||
| 33 | -const char* TOOLBAR_IMAGE( DEMO_IMAGE_DIR "top-bar.png" ); // Background for toolbar | ||
| 34 | -const char* APPLICATION_TITLE( "Radial Menu" ); | ||
| 35 | -const char * const PLAY_ICON( DEMO_IMAGE_DIR "icon-play.png" ); | ||
| 36 | -const char * const PLAY_ICON_SELECTED( DEMO_IMAGE_DIR "icon-play-selected.png" ); | ||
| 37 | -const char * const STOP_ICON( DEMO_IMAGE_DIR "icon-stop.png" ); | ||
| 38 | -const char * const STOP_ICON_SELECTED( DEMO_IMAGE_DIR "icon-stop-selected.png" ); | ||
| 39 | -} | ||
| 40 | - | ||
| 41 | - | ||
| 42 | -/******************************************************************************** | ||
| 43 | - * Application controller class | ||
| 44 | - */ | ||
| 45 | - | ||
| 46 | -// This example shows how to create a mesh actor for use as a stencil buffer | ||
| 47 | -class RadialMenuExample : public ConnectionTracker | ||
| 48 | -{ | ||
| 49 | -public: | ||
| 50 | - /** | ||
| 51 | - * Constructor | ||
| 52 | - * @param[in] app The application handle | ||
| 53 | - */ | ||
| 54 | - RadialMenuExample(Application app); | ||
| 55 | - | ||
| 56 | - /** | ||
| 57 | - * Destructor | ||
| 58 | - */ | ||
| 59 | - ~RadialMenuExample(); | ||
| 60 | - | ||
| 61 | -private: | ||
| 62 | - | ||
| 63 | - /** | ||
| 64 | - * Initialization signal handler - all actor initialization should happen here | ||
| 65 | - * @param[in] app The application handle | ||
| 66 | - */ | ||
| 67 | - void OnInit(Application& app); | ||
| 68 | - | ||
| 69 | - /** | ||
| 70 | - * Create a sweep view with the given image and parameters | ||
| 71 | - */ | ||
| 72 | - RadialSweepView CreateSweepView( std::string imageName, Degree initial, Degree final ); | ||
| 73 | - | ||
| 74 | - /** | ||
| 75 | - * Start the sweep animation on the menu | ||
| 76 | - */ | ||
| 77 | - void StartAnimation(); | ||
| 78 | - | ||
| 79 | - /** | ||
| 80 | - * Play or pause the animation when the button is clicked | ||
| 81 | - */ | ||
| 82 | - bool OnButtonClicked( Toolkit::Button button ); | ||
| 83 | - | ||
| 84 | - /** | ||
| 85 | - * Update the state flag and change the button icon when the animation is finished | ||
| 86 | - */ | ||
| 87 | - void OnAnimationFinished( Animation& source ); | ||
| 88 | - | ||
| 89 | - /** | ||
| 90 | - * Main key event handler | ||
| 91 | - * | ||
| 92 | - * @param[in] event The key event to respond to | ||
| 93 | - */ | ||
| 94 | - void OnKeyEvent(const KeyEvent& event); | ||
| 95 | - | ||
| 96 | -private: // Member variables | ||
| 97 | - enum AnimState | ||
| 98 | - { | ||
| 99 | - STOPPED, | ||
| 100 | - PAUSED, | ||
| 101 | - PLAYING | ||
| 102 | - }; | ||
| 103 | - | ||
| 104 | - Application mApplication; ///< The application handle | ||
| 105 | - Toolkit::Control mView; ///< The toolbar view | ||
| 106 | - Layer mContents; ///< The toolbar contents pane | ||
| 107 | - ImageView mImageView; ///< Image view shown by stencil mask | ||
| 108 | - Animation mAnimation; | ||
| 109 | - AnimState mAnimationState; | ||
| 110 | - | ||
| 111 | - Toolkit::PushButton mPlayStopButton; | ||
| 112 | - ImageView mDialView; | ||
| 113 | - RadialSweepView mRadialSweepView1; | ||
| 114 | - RadialSweepView mRadialSweepView2; | ||
| 115 | - RadialSweepView mRadialSweepView3; | ||
| 116 | -}; | ||
| 117 | - | ||
| 118 | -RadialMenuExample::RadialMenuExample(Application app) | ||
| 119 | -: mApplication( app ), | ||
| 120 | - mAnimationState(STOPPED) | ||
| 121 | -{ | ||
| 122 | - // Connect to the Application's Init signal | ||
| 123 | - app.InitSignal().Connect(this, &RadialMenuExample::OnInit); | ||
| 124 | -} | ||
| 125 | - | ||
| 126 | -RadialMenuExample::~RadialMenuExample() | ||
| 127 | -{ | ||
| 128 | - // Nothing to do here; actor handles will clean up themselves. | ||
| 129 | -} | ||
| 130 | - | ||
| 131 | -void RadialMenuExample::OnInit(Application& app) | ||
| 132 | -{ | ||
| 133 | - Stage stage = Dali::Stage::GetCurrent(); | ||
| 134 | - | ||
| 135 | - // The Init signal is received once (only) during the Application lifetime | ||
| 136 | - stage.KeyEventSignal().Connect(this, &RadialMenuExample::OnKeyEvent); | ||
| 137 | - | ||
| 138 | - // Create toolbar & view | ||
| 139 | - Toolkit::ToolBar toolBar; | ||
| 140 | - mContents = DemoHelper::CreateView( mApplication, | ||
| 141 | - mView, | ||
| 142 | - toolBar, | ||
| 143 | - "", | ||
| 144 | - TOOLBAR_IMAGE, | ||
| 145 | - APPLICATION_TITLE ); | ||
| 146 | - | ||
| 147 | - mPlayStopButton = Toolkit::PushButton::New(); | ||
| 148 | - mPlayStopButton.SetUnselectedImage( STOP_ICON ); | ||
| 149 | - mPlayStopButton.SetSelectedImage( STOP_ICON_SELECTED ); | ||
| 150 | - | ||
| 151 | - mPlayStopButton.ClickedSignal().Connect( this, &RadialMenuExample::OnButtonClicked ); | ||
| 152 | - | ||
| 153 | - toolBar.AddControl( mPlayStopButton, | ||
| 154 | - DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, | ||
| 155 | - Toolkit::Alignment::HorizontalRight, | ||
| 156 | - DemoHelper::DEFAULT_PLAY_PADDING ); | ||
| 157 | - | ||
| 158 | - | ||
| 159 | - const ImageDimensions intImgSize = ResourceImage::GetImageSize(TEST_OUTER_RING_FILENAME); | ||
| 160 | - Vector2 imgSize = Vector2( intImgSize.GetWidth(), intImgSize.GetHeight() ); | ||
| 161 | - Vector2 stageSize = stage.GetSize(); | ||
| 162 | - float scale = stageSize.width / imgSize.width; | ||
| 163 | - float availableHeight = stageSize.height - DemoHelper::DEFAULT_VIEW_STYLE.mToolBarHeight * 2.0f; | ||
| 164 | - if(availableHeight <= stageSize.width) | ||
| 165 | - { | ||
| 166 | - scale = availableHeight / imgSize.width; | ||
| 167 | - } | ||
| 168 | - | ||
| 169 | - mRadialSweepView1 = CreateSweepView( TEST_OUTER_RING_FILENAME, Degree(-90.0f), Degree(-90.0f)); | ||
| 170 | - mRadialSweepView2 = CreateSweepView( TEST_INNER_RING_FILENAME, Degree(90.0f), Degree(0.0f)); | ||
| 171 | - mRadialSweepView3 = CreateSweepView( TEST_MENU_FILENAME, Degree(100.0f), Degree(0.0f)); | ||
| 172 | - mRadialSweepView3.SetInitialActorAngle(Degree(-110)); | ||
| 173 | - mRadialSweepView3.SetFinalActorAngle(Degree(0)); | ||
| 174 | - | ||
| 175 | - mDialView = ImageView::New( TEST_DIAL_FILENAME ); | ||
| 176 | - mDialView.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); | ||
| 177 | - mDialView.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 178 | - mDialView.SetScale(scale); | ||
| 179 | - Layer dialLayer = Layer::New(); | ||
| 180 | - | ||
| 181 | - dialLayer.Add( mDialView ); | ||
| 182 | - dialLayer.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 183 | - dialLayer.SetSize(stage.GetSize()); | ||
| 184 | - mContents.Add(dialLayer); | ||
| 185 | - | ||
| 186 | - mRadialSweepView1.SetScale(scale); | ||
| 187 | - mRadialSweepView2.SetScale(scale); | ||
| 188 | - mRadialSweepView3.SetScale(scale); | ||
| 189 | - | ||
| 190 | - StartAnimation(); | ||
| 191 | -} | ||
| 192 | - | ||
| 193 | -void RadialMenuExample::StartAnimation() | ||
| 194 | -{ | ||
| 195 | - mDialView.SetOpacity(0.0f); | ||
| 196 | - mRadialSweepView1.SetOpacity(0.0f); | ||
| 197 | - mAnimation = Animation::New(6.0f); | ||
| 198 | - mRadialSweepView1.Activate(mAnimation, 0.0f, 3.0f); | ||
| 199 | - mRadialSweepView2.Activate(mAnimation, 1.5f, 3.0f); | ||
| 200 | - mRadialSweepView3.Activate(mAnimation, 3.0f, 3.0f); | ||
| 201 | - mAnimation.AnimateTo( Property( mDialView, Actor::Property::COLOR_ALPHA ), 1.0f, AlphaFunction::EASE_IN, TimePeriod( 0.0f, 0.8f ) ); | ||
| 202 | - mAnimation.AnimateTo( Property( mRadialSweepView1, Actor::Property::COLOR_ALPHA ), 1.0f, AlphaFunction::EASE_IN, TimePeriod( 0.0f, 0.5f ) ); | ||
| 203 | - mAnimation.FinishedSignal().Connect( this, &RadialMenuExample::OnAnimationFinished ); | ||
| 204 | - | ||
| 205 | - mAnimationState = PLAYING; | ||
| 206 | - mAnimation.Play(); | ||
| 207 | -} | ||
| 208 | - | ||
| 209 | -bool RadialMenuExample::OnButtonClicked( Toolkit::Button button ) | ||
| 210 | -{ | ||
| 211 | - switch( mAnimationState ) | ||
| 212 | - { | ||
| 213 | - case PLAYING: | ||
| 214 | - { | ||
| 215 | - mAnimation.Pause(); | ||
| 216 | - mAnimationState = PAUSED; | ||
| 217 | - mPlayStopButton.SetUnselectedImage( PLAY_ICON ); | ||
| 218 | - mPlayStopButton.SetSelectedImage( PLAY_ICON_SELECTED ); | ||
| 219 | - } | ||
| 220 | - break; | ||
| 221 | - | ||
| 222 | - case PAUSED: | ||
| 223 | - { | ||
| 224 | - mAnimation.Play(); | ||
| 225 | - mAnimationState = PLAYING; | ||
| 226 | - mPlayStopButton.SetUnselectedImage( STOP_ICON ); | ||
| 227 | - mPlayStopButton.SetSelectedImage( STOP_ICON_SELECTED ); | ||
| 228 | - } | ||
| 229 | - break; | ||
| 230 | - | ||
| 231 | - case STOPPED: | ||
| 232 | - { | ||
| 233 | - mPlayStopButton.SetUnselectedImage( STOP_ICON ); | ||
| 234 | - mPlayStopButton.SetSelectedImage( STOP_ICON_SELECTED ); | ||
| 235 | - mRadialSweepView1.Deactivate(); | ||
| 236 | - mRadialSweepView2.Deactivate(); | ||
| 237 | - mRadialSweepView3.Deactivate(); | ||
| 238 | - StartAnimation(); | ||
| 239 | - } | ||
| 240 | - } | ||
| 241 | - return false; | ||
| 242 | -} | ||
| 243 | - | ||
| 244 | -void RadialMenuExample::OnAnimationFinished( Animation& source ) | ||
| 245 | -{ | ||
| 246 | - mAnimationState = STOPPED; | ||
| 247 | - mPlayStopButton.SetUnselectedImage( PLAY_ICON ); | ||
| 248 | - mPlayStopButton.SetSelectedImage( PLAY_ICON_SELECTED ); | ||
| 249 | -} | ||
| 250 | - | ||
| 251 | -RadialSweepView RadialMenuExample::CreateSweepView( std::string imageName, | ||
| 252 | - Degree initialAngle, | ||
| 253 | - Degree finalAngle) | ||
| 254 | -{ | ||
| 255 | - // Create the image | ||
| 256 | - mImageView = ImageView::New(imageName); | ||
| 257 | - mImageView.SetParentOrigin(ParentOrigin::CENTER); | ||
| 258 | - mImageView.SetAnchorPoint(AnchorPoint::CENTER); | ||
| 259 | - mImageView.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); | ||
| 260 | - | ||
| 261 | - // Create the stencil | ||
| 262 | - const ImageDimensions imageSize = ResourceImage::GetImageSize(imageName); | ||
| 263 | - float diameter = std::max(imageSize.GetWidth(), imageSize.GetHeight()); | ||
| 264 | - RadialSweepView radialSweepView = RadialSweepView::New(); | ||
| 265 | - radialSweepView.SetDiameter( diameter ); | ||
| 266 | - radialSweepView.SetInitialAngle( initialAngle ); | ||
| 267 | - radialSweepView.SetFinalAngle( finalAngle ); | ||
| 268 | - radialSweepView.SetInitialSector( Degree(0.0f) ); | ||
| 269 | - radialSweepView.SetFinalSector( Degree(359.999f) ); | ||
| 270 | - radialSweepView.SetSize( Stage::GetCurrent().GetSize()); | ||
| 271 | - radialSweepView.SetEasingFunction( Dali::AlphaFunction::EASE_IN_OUT ); | ||
| 272 | - radialSweepView.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 273 | - mContents.Add(radialSweepView); | ||
| 274 | - radialSweepView.Add( mImageView ); | ||
| 275 | - mImageView.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 276 | - | ||
| 277 | - return radialSweepView; | ||
| 278 | -} | ||
| 279 | - | ||
| 280 | - | ||
| 281 | -void RadialMenuExample::OnKeyEvent(const KeyEvent& event) | ||
| 282 | -{ | ||
| 283 | - if(event.state == KeyEvent::Down) | ||
| 284 | - { | ||
| 285 | - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) | ||
| 286 | - { | ||
| 287 | - mApplication.Quit(); | ||
| 288 | - } | ||
| 289 | - } | ||
| 290 | -} | ||
| 291 | - | ||
| 292 | -void RunTest(Application app) | ||
| 293 | -{ | ||
| 294 | - RadialMenuExample test(app); | ||
| 295 | - | ||
| 296 | - app.MainLoop(); | ||
| 297 | -} | ||
| 298 | - | ||
| 299 | -// Entry point for Linux & Tizen applications | ||
| 300 | -int DALI_EXPORT_API main(int argc, char **argv) | ||
| 301 | -{ | ||
| 302 | - Application app = Application::New(&argc, &argv, DEMO_THEME_PATH); | ||
| 303 | - | ||
| 304 | - RunTest(app); | ||
| 305 | - | ||
| 306 | - return 0; | ||
| 307 | -} |
examples/radial-menu/radial-sweep-view-impl.cpp deleted
| 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 "radial-sweep-view-impl.h" | ||
| 19 | - | ||
| 20 | -#include <dali/public-api/rendering/renderer.h> | ||
| 21 | -#include <sstream> | ||
| 22 | - | ||
| 23 | -using namespace Dali; | ||
| 24 | - | ||
| 25 | -namespace | ||
| 26 | -{ | ||
| 27 | - | ||
| 28 | -const char* VERTEX_SHADER_PREFIX( "#define MATH_PI_2 1.570796\n#define MATH_PI_4 0.785398\n" ); | ||
| 29 | - | ||
| 30 | -const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( | ||
| 31 | -attribute mediump float aAngleIndex;\n | ||
| 32 | -attribute mediump vec2 aPosition1;\n | ||
| 33 | -attribute mediump vec2 aPosition2;\n | ||
| 34 | -uniform mediump mat4 uMvpMatrix;\n | ||
| 35 | -uniform mediump float uStartAngle;\n | ||
| 36 | -uniform mediump float uRotationAngle;\n | ||
| 37 | -\n | ||
| 38 | -void main()\n | ||
| 39 | -{\n | ||
| 40 | - float currentAngle = uStartAngle + uRotationAngle;\n | ||
| 41 | - float angleInterval1 = MATH_PI_4 * aAngleIndex;\n | ||
| 42 | - vec4 vertexPosition = vec4(0.0, 0.0, 0.0, 1.0);\n | ||
| 43 | - if( currentAngle >= angleInterval1)\n | ||
| 44 | - {\n | ||
| 45 | - float angleInterval2 = angleInterval1 + MATH_PI_2;\n | ||
| 46 | - float angle = currentAngle < angleInterval2 ? currentAngle : angleInterval2;\n | ||
| 47 | - float delta;\n | ||
| 48 | - if( mod( aAngleIndex+4.0, 4.0) < 2.0 )\n | ||
| 49 | - {\n | ||
| 50 | - delta = 0.5 - 0.5*cos(angle) / sin(angle);\n | ||
| 51 | - }\n | ||
| 52 | - else\n | ||
| 53 | - {\n | ||
| 54 | - delta = 0.5 + 0.5*sin(angle) / cos(angle);\n | ||
| 55 | - }\n | ||
| 56 | - vertexPosition.xy = mix( aPosition1, aPosition2, delta );\n | ||
| 57 | - }\n | ||
| 58 | - gl_Position = uMvpMatrix * vertexPosition;\n | ||
| 59 | -} | ||
| 60 | -); | ||
| 61 | - | ||
| 62 | -const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( | ||
| 63 | -uniform lowp vec4 uColor;\n | ||
| 64 | -\n | ||
| 65 | -void main()\n | ||
| 66 | -{\n | ||
| 67 | - gl_FragColor = uColor;\n | ||
| 68 | -}\n | ||
| 69 | -); | ||
| 70 | - | ||
| 71 | -float HoldZeroFastEaseInOutHoldOne(float progress) | ||
| 72 | -{ | ||
| 73 | - if( progress < 0.2f) | ||
| 74 | - { | ||
| 75 | - return 0.0f; | ||
| 76 | - } | ||
| 77 | - else if(progress < 0.5f) | ||
| 78 | - { | ||
| 79 | - progress = (progress-0.2) / 0.3f; | ||
| 80 | - return progress*progress*progress*0.5f; | ||
| 81 | - } | ||
| 82 | - else if(progress < 0.8f) | ||
| 83 | - { | ||
| 84 | - progress = ((progress - 0.5f) / 0.3f) - 1.0f; | ||
| 85 | - return (progress*progress*progress+1.0f) * 0.5f + 0.5f; | ||
| 86 | - } | ||
| 87 | - else | ||
| 88 | - { | ||
| 89 | - return 1.0f; | ||
| 90 | - } | ||
| 91 | -} | ||
| 92 | - | ||
| 93 | -} // anonymous namespace | ||
| 94 | - | ||
| 95 | - | ||
| 96 | -RadialSweepView RadialSweepViewImpl::New( ) | ||
| 97 | -{ | ||
| 98 | - return New( 2.0f, 100.0f, ANGLE_0, ANGLE_0, ANGLE_0, ANGLE_360 ); | ||
| 99 | -} | ||
| 100 | - | ||
| 101 | - | ||
| 102 | -RadialSweepView RadialSweepViewImpl::New( float duration, float diameter, Radian initialAngle, Radian finalAngle, Radian initialSector, Radian finalSector ) | ||
| 103 | -{ | ||
| 104 | - RadialSweepViewImpl* impl= new RadialSweepViewImpl(duration, diameter, initialAngle, finalAngle, initialSector, finalSector); | ||
| 105 | - RadialSweepView handle = RadialSweepView(*impl); | ||
| 106 | - return handle; | ||
| 107 | -} | ||
| 108 | - | ||
| 109 | -RadialSweepViewImpl::RadialSweepViewImpl( float duration, float diameter, Radian initialAngle, Radian finalAngle, Radian initialSector, Radian finalSector ) | ||
| 110 | -: Control( ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ), | ||
| 111 | - mDuration(duration), | ||
| 112 | - mDiameter(diameter), | ||
| 113 | - mInitialAngle(initialAngle), | ||
| 114 | - mFinalAngle(finalAngle), | ||
| 115 | - mInitialSector(initialSector), | ||
| 116 | - mFinalSector(finalSector), | ||
| 117 | - mInitialActorAngle(0), | ||
| 118 | - mFinalActorAngle(0), | ||
| 119 | - mEasingFunction(HoldZeroFastEaseInOutHoldOne), | ||
| 120 | - mStartAngleIndex(Property::INVALID_INDEX), | ||
| 121 | - mRotationAngleIndex(Property::INVALID_INDEX), | ||
| 122 | - mRotateActorsWithStencil(false), | ||
| 123 | - mRotateActors(false) | ||
| 124 | -{ | ||
| 125 | -} | ||
| 126 | - | ||
| 127 | -void RadialSweepViewImpl::SetDuration(float duration) | ||
| 128 | -{ | ||
| 129 | - mDuration = duration; | ||
| 130 | -} | ||
| 131 | - | ||
| 132 | -void RadialSweepViewImpl::SetEasingFunction( Dali::AlphaFunction easingFunction ) | ||
| 133 | -{ | ||
| 134 | - mEasingFunction = easingFunction; | ||
| 135 | -} | ||
| 136 | - | ||
| 137 | -void RadialSweepViewImpl::SetDiameter(float diameter) | ||
| 138 | -{ | ||
| 139 | - mDiameter = diameter; | ||
| 140 | -} | ||
| 141 | - | ||
| 142 | -void RadialSweepViewImpl::SetInitialAngle( Dali::Radian initialAngle) | ||
| 143 | -{ | ||
| 144 | - mInitialAngle = initialAngle; | ||
| 145 | -} | ||
| 146 | - | ||
| 147 | -void RadialSweepViewImpl::SetFinalAngle( Dali::Radian finalAngle) | ||
| 148 | -{ | ||
| 149 | - mFinalAngle = finalAngle; | ||
| 150 | -} | ||
| 151 | - | ||
| 152 | -void RadialSweepViewImpl::SetInitialSector( Dali::Radian initialSector) | ||
| 153 | -{ | ||
| 154 | - mInitialSector = initialSector; | ||
| 155 | -} | ||
| 156 | - | ||
| 157 | -void RadialSweepViewImpl::SetFinalSector( Dali::Radian finalSector) | ||
| 158 | -{ | ||
| 159 | - mFinalSector = finalSector; | ||
| 160 | -} | ||
| 161 | - | ||
| 162 | -void RadialSweepViewImpl::SetInitialActorAngle( Dali::Radian initialAngle ) | ||
| 163 | -{ | ||
| 164 | - mInitialActorAngle = initialAngle; | ||
| 165 | - mRotateActors = true; | ||
| 166 | -} | ||
| 167 | - | ||
| 168 | -void RadialSweepViewImpl::SetFinalActorAngle( Dali::Radian finalAngle ) | ||
| 169 | -{ | ||
| 170 | - mFinalActorAngle = finalAngle; | ||
| 171 | - mRotateActors = true; | ||
| 172 | -} | ||
| 173 | - | ||
| 174 | -float RadialSweepViewImpl::GetDuration( ) | ||
| 175 | -{ | ||
| 176 | - return mDuration; | ||
| 177 | -} | ||
| 178 | - | ||
| 179 | -float RadialSweepViewImpl::GetDiameter( ) | ||
| 180 | -{ | ||
| 181 | - return mDiameter; | ||
| 182 | -} | ||
| 183 | - | ||
| 184 | -Dali::Radian RadialSweepViewImpl::GetInitialAngle( ) | ||
| 185 | -{ | ||
| 186 | - return mInitialAngle; | ||
| 187 | -} | ||
| 188 | - | ||
| 189 | -Dali::Radian RadialSweepViewImpl::GetFinalAngle( ) | ||
| 190 | -{ | ||
| 191 | - return mFinalAngle; | ||
| 192 | -} | ||
| 193 | - | ||
| 194 | -Dali::Radian RadialSweepViewImpl::GetInitialSector( ) | ||
| 195 | -{ | ||
| 196 | - return mInitialSector; | ||
| 197 | -} | ||
| 198 | - | ||
| 199 | -Dali::Radian RadialSweepViewImpl::GetFinalSector( ) | ||
| 200 | -{ | ||
| 201 | - return mFinalSector; | ||
| 202 | -} | ||
| 203 | - | ||
| 204 | -Dali::Radian RadialSweepViewImpl::GetInitialActorAngle( ) | ||
| 205 | -{ | ||
| 206 | - return mInitialActorAngle; | ||
| 207 | -} | ||
| 208 | - | ||
| 209 | -Dali::Radian RadialSweepViewImpl::GetFinalActorAngle( ) | ||
| 210 | -{ | ||
| 211 | - return mFinalActorAngle; | ||
| 212 | -} | ||
| 213 | - | ||
| 214 | -void RadialSweepViewImpl::RotateActorsWithStencil(bool rotate) | ||
| 215 | -{ | ||
| 216 | - mRotateActorsWithStencil = rotate; | ||
| 217 | -} | ||
| 218 | - | ||
| 219 | -void RadialSweepViewImpl::Add(Actor actor) | ||
| 220 | -{ | ||
| 221 | - if( ! mLayer ) | ||
| 222 | - { | ||
| 223 | - mLayer = Layer::New(); | ||
| 224 | - Self().Add(mLayer); | ||
| 225 | - mLayer.SetSize( Stage::GetCurrent().GetSize() ); | ||
| 226 | - mLayer.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 227 | - } | ||
| 228 | - | ||
| 229 | - mLayer.Add(actor); | ||
| 230 | -} | ||
| 231 | - | ||
| 232 | -void RadialSweepViewImpl::Activate( Animation anim, float offsetTime, float duration ) | ||
| 233 | -{ | ||
| 234 | - bool startAnimation=false; | ||
| 235 | - if( ! anim ) | ||
| 236 | - { | ||
| 237 | - mAnim = Animation::New( mDuration ); | ||
| 238 | - anim = mAnim; | ||
| 239 | - startAnimation = true; | ||
| 240 | - } | ||
| 241 | - | ||
| 242 | - if( ! mStencilActor ) | ||
| 243 | - { | ||
| 244 | - CreateStencil( mInitialSector ); | ||
| 245 | - mLayer.Add( mStencilActor ); | ||
| 246 | - mStencilActor.SetScale(mDiameter); | ||
| 247 | - } | ||
| 248 | - | ||
| 249 | - mStencilActor.SetOrientation( mInitialAngle, Vector3::ZAXIS ); | ||
| 250 | - mStencilActor.SetProperty( mRotationAngleIndex, mInitialSector.radian ); | ||
| 251 | - | ||
| 252 | - if( mRotateActors ) | ||
| 253 | - { | ||
| 254 | - for(unsigned int i=0, count=mLayer.GetChildCount(); i<count; i++) | ||
| 255 | - { | ||
| 256 | - Actor actor = mLayer.GetChildAt(i); | ||
| 257 | - if( actor != mStencilActor ) | ||
| 258 | - { | ||
| 259 | - anim.AnimateTo( Property( actor, Actor::Property::ORIENTATION ), Quaternion( Radian( mInitialActorAngle ), Vector3::ZAXIS ) ); | ||
| 260 | - } | ||
| 261 | - } | ||
| 262 | - } | ||
| 263 | - | ||
| 264 | - anim.AnimateTo( Property( mStencilActor, mRotationAngleIndex ), mFinalSector.radian, mEasingFunction, TimePeriod( offsetTime, duration ) ); | ||
| 265 | - anim.AnimateTo( Property( mStencilActor, Actor::Property::ORIENTATION ), Quaternion( Radian( mFinalAngle ), Vector3::ZAXIS ), mEasingFunction, TimePeriod( offsetTime, duration ) ); | ||
| 266 | - | ||
| 267 | - if( mRotateActorsWithStencil ) | ||
| 268 | - { | ||
| 269 | - for(unsigned int i=0, count=mLayer.GetChildCount(); i<count; i++) | ||
| 270 | - { | ||
| 271 | - Actor actor = mLayer.GetChildAt(i); | ||
| 272 | - if( actor != mStencilActor ) | ||
| 273 | - { | ||
| 274 | - anim.AnimateTo( Property( actor, Actor::Property::ORIENTATION ), Quaternion( Radian( mFinalAngle.radian - mInitialAngle.radian ) , Vector3::ZAXIS ), mEasingFunction, TimePeriod( offsetTime, duration ) ); | ||
| 275 | - } | ||
| 276 | - } | ||
| 277 | - } | ||
| 278 | - else if( mRotateActors ) | ||
| 279 | - { | ||
| 280 | - for(unsigned int i=0, count=mLayer.GetChildCount(); i<count; i++) | ||
| 281 | - { | ||
| 282 | - Actor actor = mLayer.GetChildAt(i); | ||
| 283 | - if( actor != mStencilActor ) | ||
| 284 | - { | ||
| 285 | - anim.AnimateTo( Property( actor, Actor::Property::ORIENTATION ), Quaternion( Radian( mFinalActorAngle ), Vector3::ZAXIS ), mEasingFunction, TimePeriod( offsetTime, duration ) ); | ||
| 286 | - } | ||
| 287 | - } | ||
| 288 | - } | ||
| 289 | - | ||
| 290 | - | ||
| 291 | - if( startAnimation ) | ||
| 292 | - { | ||
| 293 | - anim.SetLooping(true); | ||
| 294 | - anim.Play(); | ||
| 295 | - } | ||
| 296 | -} | ||
| 297 | - | ||
| 298 | - | ||
| 299 | -void RadialSweepViewImpl::Deactivate() | ||
| 300 | -{ | ||
| 301 | - if( mAnim ) | ||
| 302 | - { | ||
| 303 | - mAnim.Stop(); | ||
| 304 | - } | ||
| 305 | -} | ||
| 306 | - | ||
| 307 | -void RadialSweepViewImpl::CreateStencil( Radian initialSector ) | ||
| 308 | -{ | ||
| 309 | - // Create the stencil mesh geometry | ||
| 310 | - // 3-----2 | ||
| 311 | - // | \ / | | ||
| 312 | - // | 0--1 , 6 | ||
| 313 | - // | / \ | | ||
| 314 | - // 4-----5 | ||
| 315 | - | ||
| 316 | - struct VertexPosition { float angleIndex; Vector2 position1; Vector2 position2; }; | ||
| 317 | - VertexPosition vertexData[7] = { // With X coordinate inverted to make the animation go anti clockwise from left center | ||
| 318 | - { 9.f, Vector2( 0.f, 0.f ), Vector2( 0.f, 0.f ) }, // center point, keep static | ||
| 319 | - { 0.f, Vector2( -0.5f, 0.f ), Vector2( -0.5f, 0.f ) }, // vertex 1, 0 degree, keep static | ||
| 320 | - { -1.f, Vector2( -0.5f, 0.5f ), Vector2( -0.5f, -0.5f ) }, // -45 ~ 45 degrees ( 0 ~ 45) | ||
| 321 | - { 1.f, Vector2( -0.5f, -0.5f ), Vector2( 0.5f, -0.5f ) }, // 45 ~ 135 degrees | ||
| 322 | - { 3.f, Vector2( 0.5f, -0.5f ), Vector2( 0.5f, 0.5f ) }, // 135 ~ 225 degrees | ||
| 323 | - { 5.f, Vector2( 0.5f, 0.5f ), Vector2( -0.5f, 0.5f ) }, // 225 ~ 315 degrees | ||
| 324 | - { 7.f, Vector2( -0.5f, 0.5f ), Vector2( -0.5f, -0.5f ) } // 315 ~ 405 degrees ( 315 ~ 359.999 ) | ||
| 325 | - }; | ||
| 326 | - Property::Map vertexFormat; | ||
| 327 | - vertexFormat["aAngleIndex"] = Property::FLOAT; | ||
| 328 | - vertexFormat["aPosition1"] = Property::VECTOR2; | ||
| 329 | - vertexFormat["aPosition2"] = Property::VECTOR2; | ||
| 330 | - PropertyBuffer vertices = PropertyBuffer::New( vertexFormat ); | ||
| 331 | - vertices.SetData( vertexData, 7u ); | ||
| 332 | - | ||
| 333 | - unsigned short indexData[15] = { 0,1,2,0,2,3,0,3,4,0,4,5,0,5,6 }; | ||
| 334 | - | ||
| 335 | - Geometry meshGeometry = Geometry::New(); | ||
| 336 | - meshGeometry.AddVertexBuffer( vertices ); | ||
| 337 | - meshGeometry.SetIndexBuffer( &indexData[0], sizeof( indexData )/sizeof(indexData[0]) ); | ||
| 338 | - | ||
| 339 | - // Create shader | ||
| 340 | - std::ostringstream vertexShaderStringStream; | ||
| 341 | - vertexShaderStringStream<<VERTEX_SHADER_PREFIX<<VERTEX_SHADER; | ||
| 342 | - Shader shader = Shader::New( vertexShaderStringStream.str(), FRAGMENT_SHADER ); | ||
| 343 | - | ||
| 344 | - // Create renderer | ||
| 345 | - Renderer renderer = Renderer::New( meshGeometry, shader ); | ||
| 346 | - | ||
| 347 | - mStencilActor = Actor::New(); | ||
| 348 | - mStencilActor.AddRenderer( renderer ); | ||
| 349 | - mStencilActor.SetSize(1.f, 1.f); | ||
| 350 | - | ||
| 351 | - // register properties | ||
| 352 | - mStartAngleIndex = mStencilActor.RegisterProperty("uStartAngle", 0.f); | ||
| 353 | - mRotationAngleIndex = mStencilActor.RegisterProperty("uRotationAngle", initialSector.radian); | ||
| 354 | - | ||
| 355 | - mStencilActor.SetDrawMode( DrawMode::STENCIL ); | ||
| 356 | - mStencilActor.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 357 | -} |
examples/radial-menu/radial-sweep-view-impl.h deleted
| 1 | -#ifndef DALI_DEMO_RADIAL_SWEEP_VIEW_IMPL_H | ||
| 2 | -#define DALI_DEMO_RADIAL_SWEEP_VIEW_IMPL_H | ||
| 3 | - | ||
| 4 | -/* | ||
| 5 | - * Copyright (c) 2015 Samsung Electronics Co., Ltd. | ||
| 6 | - * | ||
| 7 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 8 | - * you may not use this file except in compliance with the License. | ||
| 9 | - * You may obtain a copy of the License at | ||
| 10 | - * | ||
| 11 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 12 | - * | ||
| 13 | - * Unless required by applicable law or agreed to in writing, software | ||
| 14 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 15 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 16 | - * See the License for the specific language governing permissions and | ||
| 17 | - * limitations under the License. | ||
| 18 | - * | ||
| 19 | - */ | ||
| 20 | - | ||
| 21 | -#include <dali-toolkit/dali-toolkit.h> | ||
| 22 | -#include "radial-sweep-view.h" | ||
| 23 | - | ||
| 24 | - | ||
| 25 | -/******************************************************************************** | ||
| 26 | - * Class to implement a layer with a radial sweep stencil mask and an actor tree | ||
| 27 | - */ | ||
| 28 | -class RadialSweepViewImpl : public Dali::Toolkit::Internal::Control | ||
| 29 | -{ | ||
| 30 | -public: | ||
| 31 | - static RadialSweepView New(); | ||
| 32 | - | ||
| 33 | - static RadialSweepView New( float duration, | ||
| 34 | - float diameter, | ||
| 35 | - Dali::Radian initialAngle, | ||
| 36 | - Dali::Radian finalAngle, | ||
| 37 | - Dali::Radian initialSector, | ||
| 38 | - Dali::Radian finalSector ); | ||
| 39 | - | ||
| 40 | - RadialSweepViewImpl( float duration, | ||
| 41 | - float diameter, | ||
| 42 | - Dali::Radian initialAngle, | ||
| 43 | - Dali::Radian finalAngle, | ||
| 44 | - Dali::Radian initialSector, | ||
| 45 | - Dali::Radian finalSector ); | ||
| 46 | - | ||
| 47 | - void SetDuration(float duration); | ||
| 48 | - void SetEasingFunction( Dali::AlphaFunction easingFunction ); | ||
| 49 | - | ||
| 50 | - void SetDiameter(float diameter); | ||
| 51 | - void SetInitialAngle( Dali::Radian initialAngle); | ||
| 52 | - void SetFinalAngle( Dali::Radian finalAngle); | ||
| 53 | - void SetInitialSector( Dali::Radian initialSector); | ||
| 54 | - void SetFinalSector( Dali::Radian finalSector); | ||
| 55 | - void SetInitialActorAngle( Dali::Radian initialAngle ); | ||
| 56 | - void SetFinalActorAngle( Dali::Radian finalAngle ); | ||
| 57 | - | ||
| 58 | - float GetDuration( ); | ||
| 59 | - float GetDiameter( ); | ||
| 60 | - Dali::Radian GetInitialAngle( ); | ||
| 61 | - Dali::Radian GetFinalAngle( ); | ||
| 62 | - Dali::Radian GetInitialSector( ); | ||
| 63 | - Dali::Radian GetFinalSector( ); | ||
| 64 | - Dali::Radian GetInitialActorAngle( ); | ||
| 65 | - Dali::Radian GetFinalActorAngle( ); | ||
| 66 | - | ||
| 67 | - void RotateActorsWithStencil(bool rotate); | ||
| 68 | - | ||
| 69 | - void Add( Dali::Actor actor ); | ||
| 70 | - | ||
| 71 | - void Activate( Dali::Animation anim = Dali::Animation(), float offsetTime=0, float duration=2.0f ); | ||
| 72 | - | ||
| 73 | - void Deactivate(); | ||
| 74 | - | ||
| 75 | -private: | ||
| 76 | - | ||
| 77 | - /** | ||
| 78 | - * Create the stencil mask | ||
| 79 | - */ | ||
| 80 | - void CreateStencil(Dali::Radian initialSector ); | ||
| 81 | - | ||
| 82 | -private: | ||
| 83 | - Dali::Layer mLayer; | ||
| 84 | - Dali::Animation mAnim; | ||
| 85 | - float mDuration; | ||
| 86 | - float mDiameter; | ||
| 87 | - Dali::Radian mInitialAngle; | ||
| 88 | - Dali::Radian mFinalAngle; | ||
| 89 | - Dali::Radian mInitialSector; | ||
| 90 | - Dali::Radian mFinalSector; | ||
| 91 | - Dali::Radian mInitialActorAngle; | ||
| 92 | - Dali::Radian mFinalActorAngle; | ||
| 93 | - Dali::AlphaFunction mEasingFunction; | ||
| 94 | - Dali::Actor mStencilActor; ///< Stencil actor which generates mask | ||
| 95 | - Dali::Property::Index mStartAngleIndex; ///< Index of start-angle property | ||
| 96 | - Dali::Property::Index mRotationAngleIndex; ///< Index of rotation-angle property | ||
| 97 | - bool mRotateActorsWithStencil:1; | ||
| 98 | - bool mRotateActors; | ||
| 99 | -}; | ||
| 100 | - | ||
| 101 | - | ||
| 102 | -inline RadialSweepViewImpl& GetImpl( RadialSweepView& obj ) | ||
| 103 | -{ | ||
| 104 | - DALI_ASSERT_ALWAYS(obj); | ||
| 105 | - Dali::RefObject& handle = obj.GetImplementation(); | ||
| 106 | - return static_cast<RadialSweepViewImpl&>(handle); | ||
| 107 | -} | ||
| 108 | - | ||
| 109 | -inline const RadialSweepViewImpl& GetImpl( const RadialSweepView& obj ) | ||
| 110 | -{ | ||
| 111 | - DALI_ASSERT_ALWAYS(obj); | ||
| 112 | - const Dali::RefObject& handle = obj.GetImplementation(); | ||
| 113 | - return static_cast<const RadialSweepViewImpl&>(handle); | ||
| 114 | -} | ||
| 115 | - | ||
| 116 | - | ||
| 117 | - | ||
| 118 | -#endif // DALI_DEMO_RADIAL_SWEEP_VIEW_IMPL_H |
examples/radial-menu/radial-sweep-view.cpp deleted
| 1 | -/* | ||
| 2 | - * Copyright (c) 2015 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 "radial-sweep-view.h" | ||
| 19 | -#include "radial-sweep-view-impl.h" | ||
| 20 | - | ||
| 21 | -using namespace Dali; | ||
| 22 | - | ||
| 23 | -RadialSweepView::RadialSweepView() | ||
| 24 | -{ | ||
| 25 | -} | ||
| 26 | - | ||
| 27 | -RadialSweepView::RadialSweepView(const RadialSweepView& handle) | ||
| 28 | -: Control(handle) | ||
| 29 | -{ | ||
| 30 | -} | ||
| 31 | - | ||
| 32 | -RadialSweepView& RadialSweepView::operator=(const RadialSweepView& rhs) | ||
| 33 | -{ | ||
| 34 | - if( &rhs != this ) | ||
| 35 | - { | ||
| 36 | - Control::operator=(rhs); | ||
| 37 | - } | ||
| 38 | - return *this; | ||
| 39 | -} | ||
| 40 | - | ||
| 41 | -RadialSweepView::~RadialSweepView() | ||
| 42 | -{ | ||
| 43 | -} | ||
| 44 | - | ||
| 45 | -RadialSweepView RadialSweepView::DownCast( BaseHandle handle ) | ||
| 46 | -{ | ||
| 47 | - return Control::DownCast<RadialSweepView, RadialSweepViewImpl>(handle); | ||
| 48 | -} | ||
| 49 | - | ||
| 50 | -RadialSweepView RadialSweepView::New( ) | ||
| 51 | -{ | ||
| 52 | - return RadialSweepViewImpl::New(); | ||
| 53 | -} | ||
| 54 | - | ||
| 55 | -RadialSweepView RadialSweepView::New( float duration, | ||
| 56 | - float diameter, | ||
| 57 | - Radian initialAngle, | ||
| 58 | - Radian finalAngle, | ||
| 59 | - Radian initialSector, | ||
| 60 | - Radian finalSector ) | ||
| 61 | -{ | ||
| 62 | - return RadialSweepViewImpl::New(duration, diameter, initialAngle, finalAngle, initialSector, finalSector ); | ||
| 63 | -} | ||
| 64 | - | ||
| 65 | -RadialSweepView::RadialSweepView( RadialSweepViewImpl& impl ) | ||
| 66 | -: Control( impl ) | ||
| 67 | -{ | ||
| 68 | -} | ||
| 69 | - | ||
| 70 | -RadialSweepView::RadialSweepView( Dali::Internal::CustomActor* impl ) | ||
| 71 | -: Control( impl ) | ||
| 72 | -{ | ||
| 73 | - VerifyCustomActorPointer<RadialSweepViewImpl>(impl); | ||
| 74 | -} | ||
| 75 | - | ||
| 76 | -void RadialSweepView::SetDuration(float duration) | ||
| 77 | -{ | ||
| 78 | - GetImpl(*this).SetDuration(duration); | ||
| 79 | -} | ||
| 80 | - | ||
| 81 | -void RadialSweepView::SetEasingFunction( Dali::AlphaFunction easingFunction ) | ||
| 82 | -{ | ||
| 83 | - GetImpl(*this).SetEasingFunction( easingFunction ); | ||
| 84 | -} | ||
| 85 | - | ||
| 86 | -void RadialSweepView::SetDiameter(float diameter) | ||
| 87 | -{ | ||
| 88 | - GetImpl(*this).SetDiameter(diameter); | ||
| 89 | -} | ||
| 90 | - | ||
| 91 | -void RadialSweepView::SetInitialAngle( Dali::Radian initialAngle) | ||
| 92 | -{ | ||
| 93 | - GetImpl(*this).SetInitialAngle(initialAngle); | ||
| 94 | -} | ||
| 95 | - | ||
| 96 | -void RadialSweepView::SetFinalAngle( Dali::Radian finalAngle) | ||
| 97 | -{ | ||
| 98 | - GetImpl(*this).SetFinalAngle(finalAngle); | ||
| 99 | -} | ||
| 100 | - | ||
| 101 | -void RadialSweepView::SetInitialSector( Dali::Radian initialSector) | ||
| 102 | -{ | ||
| 103 | - GetImpl(*this).SetInitialSector(initialSector); | ||
| 104 | -} | ||
| 105 | - | ||
| 106 | -void RadialSweepView::SetFinalSector( Dali::Radian finalSector) | ||
| 107 | -{ | ||
| 108 | - GetImpl(*this).SetFinalSector(finalSector); | ||
| 109 | -} | ||
| 110 | - | ||
| 111 | -void RadialSweepView::SetInitialActorAngle( Dali::Radian initialAngle ) | ||
| 112 | -{ | ||
| 113 | - GetImpl(*this).SetInitialActorAngle(initialAngle); | ||
| 114 | -} | ||
| 115 | - | ||
| 116 | -void RadialSweepView::SetFinalActorAngle( Dali::Radian finalAngle ) | ||
| 117 | -{ | ||
| 118 | - GetImpl(*this).SetFinalActorAngle(finalAngle); | ||
| 119 | -} | ||
| 120 | - | ||
| 121 | -float RadialSweepView::GetDuration( ) | ||
| 122 | -{ | ||
| 123 | - return GetImpl(*this).GetDuration(); | ||
| 124 | -} | ||
| 125 | - | ||
| 126 | -float RadialSweepView::GetDiameter( ) | ||
| 127 | -{ | ||
| 128 | - return GetImpl(*this).GetDiameter(); | ||
| 129 | -} | ||
| 130 | - | ||
| 131 | -Dali::Radian RadialSweepView::GetInitialAngle( ) | ||
| 132 | -{ | ||
| 133 | - return GetImpl(*this).GetInitialAngle(); | ||
| 134 | -} | ||
| 135 | - | ||
| 136 | -Dali::Radian RadialSweepView::GetFinalAngle( ) | ||
| 137 | -{ | ||
| 138 | - return GetImpl(*this).GetFinalAngle(); | ||
| 139 | -} | ||
| 140 | - | ||
| 141 | -Dali::Radian RadialSweepView::GetInitialSector( ) | ||
| 142 | -{ | ||
| 143 | - return GetImpl(*this).GetInitialSector(); | ||
| 144 | -} | ||
| 145 | - | ||
| 146 | -Dali::Radian RadialSweepView::GetFinalSector( ) | ||
| 147 | -{ | ||
| 148 | - return GetImpl(*this).GetFinalSector(); | ||
| 149 | -} | ||
| 150 | - | ||
| 151 | -Dali::Radian RadialSweepView::GetInitialActorAngle( ) | ||
| 152 | -{ | ||
| 153 | - return GetImpl(*this).GetInitialActorAngle(); | ||
| 154 | -} | ||
| 155 | - | ||
| 156 | -Dali::Radian RadialSweepView::GetFinalActorAngle( ) | ||
| 157 | -{ | ||
| 158 | - return GetImpl(*this).GetFinalActorAngle(); | ||
| 159 | -} | ||
| 160 | - | ||
| 161 | -void RadialSweepView::RotateActorsWithStencil(bool rotate) | ||
| 162 | -{ | ||
| 163 | - GetImpl(*this).RotateActorsWithStencil(rotate); | ||
| 164 | -} | ||
| 165 | - | ||
| 166 | -void RadialSweepView::Add(Actor actor) | ||
| 167 | -{ | ||
| 168 | - GetImpl(*this).Add(actor); | ||
| 169 | -} | ||
| 170 | - | ||
| 171 | -void RadialSweepView::Activate() | ||
| 172 | -{ | ||
| 173 | - GetImpl(*this).Activate(); | ||
| 174 | -} | ||
| 175 | - | ||
| 176 | -void RadialSweepView::Activate( Dali::Animation anim, float offsetTime, float duration ) | ||
| 177 | -{ | ||
| 178 | - GetImpl(*this).Activate(anim, offsetTime, duration); | ||
| 179 | -} | ||
| 180 | - | ||
| 181 | -void RadialSweepView::Deactivate() | ||
| 182 | -{ | ||
| 183 | - GetImpl(*this).Deactivate(); | ||
| 184 | -} |
examples/radial-menu/radial-sweep-view.h deleted
| 1 | -#ifndef DALI_DEMO_RADIAL_SWEEP_VIEW_H | ||
| 2 | -#define DALI_DEMO_RADIAL_SWEEP_VIEW_H | ||
| 3 | - | ||
| 4 | -/* | ||
| 5 | - * Copyright (c) 2015 Samsung Electronics Co., Ltd. | ||
| 6 | - * | ||
| 7 | - * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 8 | - * you may not use this file except in compliance with the License. | ||
| 9 | - * You may obtain a copy of the License at | ||
| 10 | - * | ||
| 11 | - * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 12 | - * | ||
| 13 | - * Unless required by applicable law or agreed to in writing, software | ||
| 14 | - * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 15 | - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 16 | - * See the License for the specific language governing permissions and | ||
| 17 | - * limitations under the License. | ||
| 18 | - * | ||
| 19 | - */ | ||
| 20 | - | ||
| 21 | -#include <dali-toolkit/dali-toolkit.h> | ||
| 22 | - | ||
| 23 | -class RadialSweepViewImpl; | ||
| 24 | - | ||
| 25 | - | ||
| 26 | -/******************************************************************************** | ||
| 27 | - * Handle to RadialSweepView implementation | ||
| 28 | - */ | ||
| 29 | -class RadialSweepView : public Dali::Toolkit::Control | ||
| 30 | -{ | ||
| 31 | -public: | ||
| 32 | - /** | ||
| 33 | - * Create a new RadialSweepView with default parameters (2 second animation, | ||
| 34 | - * no rotation, sweeping out a full circle). | ||
| 35 | - */ | ||
| 36 | - static RadialSweepView New( ); | ||
| 37 | - | ||
| 38 | - /** | ||
| 39 | - * Create a new RadialSweepView. | ||
| 40 | - * @param[in] duration The duration of the sweep animation | ||
| 41 | - * @param[in] diameter The diameter of the stencil mask | ||
| 42 | - * @param[in] initialAngle The initial angle of the anticlockwise line of the sweep sector | ||
| 43 | - * @param[in] finalAngle The final angle of the anticlockwise line of the sweep sector | ||
| 44 | - * @param[in] initialSector The angle of the starting sector | ||
| 45 | - * @param[in] finalSector The angle of the sector at the end of the animation. | ||
| 46 | - * Note, to cover the entire circle, use a value of 359.9999 degrees, not zero or 360 degrees. | ||
| 47 | - * | ||
| 48 | - * initial sector | ||
| 49 | - * \ | . | ||
| 50 | - * \ | . | ||
| 51 | - * initialAngle \ | . final sector | ||
| 52 | - * \| _| | ||
| 53 | - * .________ | ||
| 54 | - */ | ||
| 55 | - static RadialSweepView New( float duration, | ||
| 56 | - float diameter, | ||
| 57 | - Dali::Radian initialAngle, | ||
| 58 | - Dali::Radian finalAngle, | ||
| 59 | - Dali::Radian initialSector, | ||
| 60 | - Dali::Radian finalSector ); | ||
| 61 | - | ||
| 62 | - void SetDuration(float duration); | ||
| 63 | - | ||
| 64 | - void SetEasingFunction( Dali::AlphaFunction easingFunction ); | ||
| 65 | - | ||
| 66 | - void SetDiameter(float diameter); | ||
| 67 | - | ||
| 68 | - void SetInitialAngle( Dali::Radian initialAngle); | ||
| 69 | - | ||
| 70 | - void SetFinalAngle( Dali::Radian finalAngle); | ||
| 71 | - | ||
| 72 | - void SetInitialSector( Dali::Radian initialSector); | ||
| 73 | - | ||
| 74 | - void SetFinalSector( Dali::Radian finalSector); | ||
| 75 | - | ||
| 76 | - void SetInitialActorAngle( Dali::Radian initialAngle ); | ||
| 77 | - | ||
| 78 | - void SetFinalActorAngle( Dali::Radian finalAngle ); | ||
| 79 | - | ||
| 80 | - float GetDuration( ); | ||
| 81 | - | ||
| 82 | - float GetDiameter( ); | ||
| 83 | - | ||
| 84 | - Dali::Radian GetInitialAngle( ); | ||
| 85 | - | ||
| 86 | - Dali::Radian GetFinalAngle( ); | ||
| 87 | - | ||
| 88 | - Dali::Radian GetInitialSector( ); | ||
| 89 | - | ||
| 90 | - Dali::Radian GetFinalSector( ); | ||
| 91 | - | ||
| 92 | - Dali::Radian GetInitialActorAngle( ); | ||
| 93 | - | ||
| 94 | - Dali::Radian GetFinalActorAngle( ); | ||
| 95 | - | ||
| 96 | - /** | ||
| 97 | - * @param[in] rotate True if the actors should rotate with the stencil | ||
| 98 | - */ | ||
| 99 | - void RotateActorsWithStencil(bool rotate); | ||
| 100 | - | ||
| 101 | - /** | ||
| 102 | - * Add actors to the view | ||
| 103 | - */ | ||
| 104 | - void Add(Actor actor); | ||
| 105 | - | ||
| 106 | - /** | ||
| 107 | - * Activate the sweep animation | ||
| 108 | - */ | ||
| 109 | - void Activate( ); | ||
| 110 | - | ||
| 111 | - void Activate( Dali::Animation anim, float offsetTime, float duration ); | ||
| 112 | - | ||
| 113 | - /** | ||
| 114 | - * Deactivate the sweep animation | ||
| 115 | - */ | ||
| 116 | - void Deactivate(); | ||
| 117 | - | ||
| 118 | - /** | ||
| 119 | - * Default constructor. Create an uninitialized handle. | ||
| 120 | - */ | ||
| 121 | - RadialSweepView(); | ||
| 122 | - | ||
| 123 | - /** | ||
| 124 | - * Copy constructor | ||
| 125 | - */ | ||
| 126 | - RadialSweepView(const RadialSweepView& handle); | ||
| 127 | - | ||
| 128 | - /** | ||
| 129 | - * Assignment operator | ||
| 130 | - */ | ||
| 131 | - RadialSweepView& operator=(const RadialSweepView& rhs); | ||
| 132 | - | ||
| 133 | - /** | ||
| 134 | - * Destructor | ||
| 135 | - */ | ||
| 136 | - ~RadialSweepView(); | ||
| 137 | - | ||
| 138 | - /** | ||
| 139 | - * Downcast method | ||
| 140 | - */ | ||
| 141 | - static RadialSweepView DownCast( BaseHandle handle ); | ||
| 142 | - | ||
| 143 | -public: // Not for use by application developers | ||
| 144 | - | ||
| 145 | - RadialSweepView( RadialSweepViewImpl& impl ); | ||
| 146 | - | ||
| 147 | - RadialSweepView( Dali::Internal::CustomActor* impl ); | ||
| 148 | -}; | ||
| 149 | - | ||
| 150 | -#endif |
examples/renderer-stencil/renderer-stencil-example.cpp
| @@ -275,13 +275,10 @@ private: | @@ -275,13 +275,10 @@ private: | ||
| 275 | renderer.SetTextures( textureSet ); | 275 | renderer.SetTextures( textureSet ); |
| 276 | 276 | ||
| 277 | // Setup the renderer properties: | 277 | // Setup the renderer properties: |
| 278 | - // We are writing to the color buffer & culling back faces. | ||
| 279 | - renderer.SetProperty( Renderer::Property::WRITE_TO_COLOR_BUFFER, true ); | 278 | + // We are writing to the color buffer & culling back faces (no stencil is used for the main cube). |
| 279 | + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR ); | ||
| 280 | renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); | 280 | renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); |
| 281 | 281 | ||
| 282 | - // No stencil is used for the main cube. | ||
| 283 | - renderer.SetProperty( Renderer::Property::STENCIL_MODE, StencilMode::OFF ); | ||
| 284 | - | ||
| 285 | // We do need to write to the depth buffer as other objects need to appear underneath this cube. | 282 | // We do need to write to the depth buffer as other objects need to appear underneath this cube. |
| 286 | renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::ON ); | 283 | renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::ON ); |
| 287 | // We do not need to test the depth buffer as we are culling the back faces. | 284 | // We do not need to test the depth buffer as we are culling the back faces. |
| @@ -316,13 +313,10 @@ private: | @@ -316,13 +313,10 @@ private: | ||
| 316 | renderer.SetTextures( planeTextureSet ); | 313 | renderer.SetTextures( planeTextureSet ); |
| 317 | 314 | ||
| 318 | // Setup the renderer properties: | 315 | // Setup the renderer properties: |
| 319 | - // We are writing to the color buffer & culling back faces (as we are NOT doing depth write). | ||
| 320 | - renderer.SetProperty( Renderer::Property::WRITE_TO_COLOR_BUFFER, true ); | 316 | + // We are writing to the color buffer & culling back faces as we are NOT doing depth write (no stencil is used for the floor). |
| 317 | + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR ); | ||
| 321 | renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); | 318 | renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); |
| 322 | 319 | ||
| 323 | - // No stencil is used for the floor. | ||
| 324 | - renderer.SetProperty( Renderer::Property::STENCIL_MODE, StencilMode::OFF ); | ||
| 325 | - | ||
| 326 | // We do not write to the depth buffer as its not needed. | 320 | // We do not write to the depth buffer as its not needed. |
| 327 | renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::OFF ); | 321 | renderer.SetProperty( Renderer::Property::DEPTH_WRITE_MODE, DepthWriteMode::OFF ); |
| 328 | // We do need to test the depth buffer as we need the floor to be underneath the cube. | 322 | // We do need to test the depth buffer as we need the floor to be underneath the cube. |
| @@ -360,11 +354,9 @@ private: | @@ -360,11 +354,9 @@ private: | ||
| 360 | Renderer renderer = CreateRenderer( planeGeometry, size, false, Vector4::ONE ); | 354 | Renderer renderer = CreateRenderer( planeGeometry, size, false, Vector4::ONE ); |
| 361 | 355 | ||
| 362 | // Setup the renderer properties: | 356 | // Setup the renderer properties: |
| 363 | - // The stencil plane is only for stencilling, so disable writing to color buffer. | ||
| 364 | - renderer.SetProperty( Renderer::Property::WRITE_TO_COLOR_BUFFER, false ); | 357 | + // The stencil plane is only for stencilling. |
| 358 | + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::STENCIL ); | ||
| 365 | 359 | ||
| 366 | - // Enable stencil. Draw to the stencil buffer (only). | ||
| 367 | - renderer.SetProperty( Renderer::Property::STENCIL_MODE, StencilMode::ON ); | ||
| 368 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION, StencilFunction::ALWAYS ); | 360 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION, StencilFunction::ALWAYS ); |
| 369 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_REFERENCE, 1 ); | 361 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_REFERENCE, 1 ); |
| 370 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_MASK, 0xFF ); | 362 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_MASK, 0xFF ); |
| @@ -410,8 +402,9 @@ private: | @@ -410,8 +402,9 @@ private: | ||
| 410 | renderer.SetTextures( textureSet ); | 402 | renderer.SetTextures( textureSet ); |
| 411 | 403 | ||
| 412 | // Setup the renderer properties: | 404 | // Setup the renderer properties: |
| 413 | - // Write to color buffer so reflection is visible | ||
| 414 | - renderer.SetProperty( Renderer::Property::WRITE_TO_COLOR_BUFFER, true ); | 405 | + // Write to color buffer so reflection is visible. |
| 406 | + // Also enable the stencil buffer, as we will be testing against it to only draw to areas within the stencil. | ||
| 407 | + renderer.SetProperty( Renderer::Property::RENDER_MODE, RenderMode::COLOR_STENCIL ); | ||
| 415 | // We cull to skip drawing the back faces. | 408 | // We cull to skip drawing the back faces. |
| 416 | renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); | 409 | renderer.SetProperty( Renderer::Property::FACE_CULLING_MODE, FaceCullingMode::BACK ); |
| 417 | 410 | ||
| @@ -422,7 +415,6 @@ private: | @@ -422,7 +415,6 @@ private: | ||
| 422 | renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB, BlendFactor::ONE ); | 415 | renderer.SetProperty( Renderer::Property::BLEND_FACTOR_DEST_RGB, BlendFactor::ONE ); |
| 423 | 416 | ||
| 424 | // Enable stencil. Here we only draw to areas within the stencil. | 417 | // Enable stencil. Here we only draw to areas within the stencil. |
| 425 | - renderer.SetProperty( Renderer::Property::STENCIL_MODE, StencilMode::ON ); | ||
| 426 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION, StencilFunction::EQUAL ); | 418 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION, StencilFunction::EQUAL ); |
| 427 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_REFERENCE, 1 ); | 419 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_REFERENCE, 1 ); |
| 428 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_MASK, 0xff ); | 420 | renderer.SetProperty( Renderer::Property::STENCIL_FUNCTION_MASK, 0xff ); |
examples/renderer-stencil/renderer-stencil-shaders.h
| @@ -29,7 +29,7 @@ const char * const POSITION( "aPosition"); | @@ -29,7 +29,7 @@ const char * const POSITION( "aPosition"); | ||
| 29 | const char * const NORMAL( "aNormal" ); | 29 | const char * const NORMAL( "aNormal" ); |
| 30 | const char * const TEXTURE( "aTexCoord" ); | 30 | const char * const TEXTURE( "aTexCoord" ); |
| 31 | 31 | ||
| 32 | -// Shader for todor (vertex): | 32 | +// Shader for basic, per-vertex lighting (vertex): |
| 33 | const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( | 33 | const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( |
| 34 | attribute mediump vec3 aPosition; | 34 | attribute mediump vec3 aPosition; |
| 35 | attribute highp vec3 aNormal; | 35 | attribute highp vec3 aNormal; |
| @@ -62,6 +62,7 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( | @@ -62,6 +62,7 @@ const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( | ||
| 62 | } | 62 | } |
| 63 | ); | 63 | ); |
| 64 | 64 | ||
| 65 | +// Fragment shader. | ||
| 65 | const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( | 66 | const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( |
| 66 | varying mediump vec2 vTexCoord; | 67 | varying mediump vec2 vTexCoord; |
| 67 | varying mediump vec3 vIllumination; | 68 | varying mediump vec3 vIllumination; |
| @@ -74,6 +75,7 @@ const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( | @@ -74,6 +75,7 @@ const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( | ||
| 74 | } | 75 | } |
| 75 | ); | 76 | ); |
| 76 | 77 | ||
| 78 | +// Shader for basic, per-vertex lighting with texture (vertex): | ||
| 77 | const char* VERTEX_SHADER_TEXTURED = DALI_COMPOSE_SHADER( | 79 | const char* VERTEX_SHADER_TEXTURED = DALI_COMPOSE_SHADER( |
| 78 | attribute mediump vec3 aPosition; | 80 | attribute mediump vec3 aPosition; |
| 79 | attribute highp vec3 aNormal; | 81 | attribute highp vec3 aNormal; |
| @@ -107,6 +109,7 @@ const char* VERTEX_SHADER_TEXTURED = DALI_COMPOSE_SHADER( | @@ -107,6 +109,7 @@ const char* VERTEX_SHADER_TEXTURED = DALI_COMPOSE_SHADER( | ||
| 107 | } | 109 | } |
| 108 | ); | 110 | ); |
| 109 | 111 | ||
| 112 | +// Fragment shader. | ||
| 110 | const char* FRAGMENT_SHADER_TEXTURED = DALI_COMPOSE_SHADER( | 113 | const char* FRAGMENT_SHADER_TEXTURED = DALI_COMPOSE_SHADER( |
| 111 | varying mediump vec2 vTexCoord; | 114 | varying mediump vec2 vTexCoord; |
| 112 | varying mediump vec3 vIllumination; | 115 | varying mediump vec3 vIllumination; |
examples/size-negotiation/size-negotiation-example.cpp
| @@ -798,7 +798,7 @@ private: | @@ -798,7 +798,7 @@ private: | ||
| 798 | Layer mContentLayer; ///< Content layer. | 798 | Layer mContentLayer; ///< Content layer. |
| 799 | 799 | ||
| 800 | Toolkit::TextLabel mTitleActor; ///< Title text. | 800 | Toolkit::TextLabel mTitleActor; ///< Title text. |
| 801 | - Toolkit::Popup mMenu; ///< The navigation menu todor. | 801 | + Toolkit::Popup mMenu; ///< The navigation menu. |
| 802 | Toolkit::Popup mPopup; ///< The current example popup. | 802 | Toolkit::Popup mPopup; ///< The current example popup. |
| 803 | 803 | ||
| 804 | Toolkit::ItemView mItemView; ///< ItemView to hold test images. | 804 | Toolkit::ItemView mItemView; ///< ItemView to hold test images. |
examples/sparkle/sparkle-effect-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 | + | ||
| 21 | +#include <sstream> | ||
| 22 | +#include <algorithm> | ||
| 23 | +#include <map> | ||
| 24 | + | ||
| 25 | +#include "shared/utility.h" | ||
| 26 | +#include "sparkle-effect.h" | ||
| 27 | + | ||
| 28 | +using namespace Dali; | ||
| 29 | +using Dali::Toolkit::ImageView; | ||
| 30 | + | ||
| 31 | +using namespace SparkleEffect; | ||
| 32 | + | ||
| 33 | +namespace // unnamed namespace | ||
| 34 | +{ | ||
| 35 | + | ||
| 36 | +//background image for normal status | ||
| 37 | +const char * const CIRCLE_BACKGROUND_IMAGE( DEMO_IMAGE_DIR "sparkle_normal_background.png" ); | ||
| 38 | +//particle shape image | ||
| 39 | +const char * const PARTICLE_IMAGE( DEMO_IMAGE_DIR "sparkle_particle.png" ); | ||
| 40 | + | ||
| 41 | +float EaseOutSquare( float progress ) | ||
| 42 | +{ | ||
| 43 | + return 1.0f - (1.0f-progress) * (1.0f-progress); | ||
| 44 | +} | ||
| 45 | + | ||
| 46 | +float CustomBounce( float progress ) | ||
| 47 | +{ | ||
| 48 | + float p = 1.f-progress; | ||
| 49 | + p *=p; | ||
| 50 | + return 17.68f*p*p*p*progress; | ||
| 51 | +} | ||
| 52 | + | ||
| 53 | +float Mix( const Vector2& range, float a ) | ||
| 54 | +{ | ||
| 55 | + return range.x * a + range.y*(1.f-a)-0.001f; | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +const Vector4 BACKGROUND_COLOR( 0.f, 0.f, 0.05f, 1.f ); | ||
| 59 | + | ||
| 60 | +} // unnamed namespace | ||
| 61 | + | ||
| 62 | +// This example shows a sparkle particle effect | ||
| 63 | +// | ||
| 64 | +class SparkleEffectExample : public ConnectionTracker | ||
| 65 | +{ | ||
| 66 | +public: | ||
| 67 | + | ||
| 68 | + /** | ||
| 69 | + * Create the SparkleEffectExample | ||
| 70 | + * @param[in] application The DALi application instance | ||
| 71 | + */ | ||
| 72 | + SparkleEffectExample( Application& application ) | ||
| 73 | + : mApplication( application ), | ||
| 74 | + mAnimationIndex( 0u ), | ||
| 75 | + mShaking( false ) | ||
| 76 | + { | ||
| 77 | + mApplication.InitSignal().Connect( this, &SparkleEffectExample::OnInit ); | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | +private: | ||
| 81 | + | ||
| 82 | + /** | ||
| 83 | + * Initialize the SparkleEffectExample | ||
| 84 | + * @param[in] application The DALi application instance | ||
| 85 | + */ | ||
| 86 | + void OnInit( Application& application ) | ||
| 87 | + { | ||
| 88 | + Stage stage = Stage::GetCurrent(); | ||
| 89 | + stage.KeyEventSignal().Connect(this, &SparkleEffectExample::OnKeyEvent); | ||
| 90 | + stage.SetBackgroundColor( BACKGROUND_COLOR ); | ||
| 91 | + | ||
| 92 | + mCircleBackground = ImageView::New( CIRCLE_BACKGROUND_IMAGE ); | ||
| 93 | + mCircleBackground.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 94 | + mCircleBackground.SetAnchorPoint( AnchorPoint::CENTER ); | ||
| 95 | + | ||
| 96 | + stage.Add( mCircleBackground ); | ||
| 97 | + | ||
| 98 | + mEffect = SparkleEffect::New(); | ||
| 99 | + | ||
| 100 | + mMeshActor = CreateMeshActor(); | ||
| 101 | + | ||
| 102 | + stage.Add( mMeshActor ); | ||
| 103 | + | ||
| 104 | + mMeshActor.SetPosition( ACTOR_POSITION ); | ||
| 105 | + mMeshActor.SetScale( ACTOR_SCALE ); | ||
| 106 | + | ||
| 107 | + mTapDetector = TapGestureDetector::New(); | ||
| 108 | + mTapDetector.Attach(mCircleBackground); | ||
| 109 | + mTapDetector.DetectedSignal().Connect( this, &SparkleEffectExample::OnTap ); | ||
| 110 | + | ||
| 111 | + mPanGestureDetector = PanGestureDetector::New(); | ||
| 112 | + mPanGestureDetector.DetectedSignal().Connect( this, &SparkleEffectExample::OnPan ); | ||
| 113 | + mPanGestureDetector.Attach( mCircleBackground ); | ||
| 114 | + | ||
| 115 | + PlayWanderAnimation( 35.f ); | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + /** | ||
| 119 | + * Create the mesh representing all the particles | ||
| 120 | + */ | ||
| 121 | + Actor CreateMeshActor() | ||
| 122 | + { | ||
| 123 | + // shuffling to assign the color in random order | ||
| 124 | + unsigned int* shuffleArray = new unsigned int[NUM_PARTICLE]; | ||
| 125 | + for( unsigned int i = 0; i<NUM_PARTICLE; i++ ) | ||
| 126 | + { | ||
| 127 | + shuffleArray[i] = i; | ||
| 128 | + } | ||
| 129 | + std::random_shuffle(&shuffleArray[0],&shuffleArray[NUM_PARTICLE]); | ||
| 130 | + | ||
| 131 | + // Create vertices | ||
| 132 | + | ||
| 133 | + std::vector< Vertex > vertices; | ||
| 134 | + std::vector< unsigned short > faces; | ||
| 135 | + | ||
| 136 | + for( unsigned int i = 0; i<NUM_PARTICLE; i++ ) | ||
| 137 | + { | ||
| 138 | + float colorIndex = GetColorIndex( shuffleArray[i] ); | ||
| 139 | + AddParticletoMesh( vertices, faces, PATHS[i], colorIndex ); | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + delete [] shuffleArray; | ||
| 143 | + | ||
| 144 | + Property::Map vertexFormat; | ||
| 145 | + vertexFormat["aTexCoord"] = Property::VECTOR2; | ||
| 146 | + vertexFormat["aParticlePath0"] = Property::VECTOR2; | ||
| 147 | + vertexFormat["aParticlePath1"] = Property::VECTOR2; | ||
| 148 | + vertexFormat["aParticlePath2"] = Property::VECTOR2; | ||
| 149 | + vertexFormat["aParticlePath3"] = Property::VECTOR2; | ||
| 150 | + vertexFormat["aParticlePath4"] = Property::VECTOR2; | ||
| 151 | + vertexFormat["aParticlePath5"] = Property::VECTOR2; | ||
| 152 | + | ||
| 153 | + PropertyBuffer propertyBuffer = PropertyBuffer::New( vertexFormat ); | ||
| 154 | + propertyBuffer.SetData( &vertices[0], vertices.size() ); | ||
| 155 | + | ||
| 156 | + Geometry geometry = Geometry::New(); | ||
| 157 | + geometry.AddVertexBuffer( propertyBuffer ); | ||
| 158 | + geometry.SetIndexBuffer( &faces[0], faces.size() ); | ||
| 159 | + geometry.SetType( Geometry::TRIANGLES ); | ||
| 160 | + | ||
| 161 | + Texture particleTexture = DemoHelper::LoadTexture( PARTICLE_IMAGE ); | ||
| 162 | + TextureSet textureSet = TextureSet::New(); | ||
| 163 | + textureSet.SetTexture( 0u, particleTexture ); | ||
| 164 | + | ||
| 165 | + Renderer renderer = Renderer::New( geometry, mEffect ); | ||
| 166 | + renderer.SetTextures( textureSet ); | ||
| 167 | + | ||
| 168 | + Actor meshActor = Actor::New(); | ||
| 169 | + meshActor.SetParentOrigin( ParentOrigin::CENTER ); | ||
| 170 | + meshActor.SetSize( 1, 1 ); | ||
| 171 | + meshActor.AddRenderer( renderer ); | ||
| 172 | + | ||
| 173 | + return meshActor; | ||
| 174 | + } | ||
| 175 | + | ||
| 176 | + /** | ||
| 177 | + * Defines a rule to assign particle with a color according to its index | ||
| 178 | + */ | ||
| 179 | + float GetColorIndex( unsigned int particleIndex ) | ||
| 180 | + { | ||
| 181 | + unsigned int thereshold = 0; | ||
| 182 | + for( unsigned int i = 0; i<NUM_COLOR; i++ ) | ||
| 183 | + { | ||
| 184 | + thereshold += PARTICLE_COLORS[i].numParticle; | ||
| 185 | + if( particleIndex < thereshold) | ||
| 186 | + { | ||
| 187 | + return i + Mix( PARTICLE_COLORS[i].AlphaRange, static_cast<float>(thereshold-particleIndex)/PARTICLE_COLORS[i].numParticle ); | ||
| 188 | + } | ||
| 189 | + } | ||
| 190 | + return NUM_COLOR-1; | ||
| 191 | + } | ||
| 192 | + | ||
| 193 | + /** | ||
| 194 | + * All a particle to the mesh by giving the moving path and color index | ||
| 195 | + * | ||
| 196 | + * Two triangles per particle | ||
| 197 | + * 0---------3 | ||
| 198 | + * |\ | | ||
| 199 | + * | \ | | ||
| 200 | + * | \ | | ||
| 201 | + * | \| | ||
| 202 | + * 1---------2 | ||
| 203 | + * | ||
| 204 | + * The information we need to pass in through attribute include: | ||
| 205 | + * | ||
| 206 | + * path which contains 12 integer | ||
| 207 | + * ---- passed in 6 Vector2 attributes | ||
| 208 | + * | ||
| 209 | + * color index, particle index and textureCoor( (0,0) or (1,0) or (0,1) or (1,1) ) | ||
| 210 | + * ---- package these info into texCood attribute as: (+-colorIndex, +-particleIndex) | ||
| 211 | + */ | ||
| 212 | + void AddParticletoMesh( std::vector< Vertex >& vertices, | ||
| 213 | + std::vector< unsigned short >& faces, | ||
| 214 | + MovingPath& movingPath, | ||
| 215 | + float colorIndex ) | ||
| 216 | + { | ||
| 217 | + unsigned int idx = vertices.size(); | ||
| 218 | + | ||
| 219 | + // store the path into position and normal, which would be decoded inside the shader | ||
| 220 | + Vector2 particlePath0( movingPath[0], movingPath[1] ); | ||
| 221 | + Vector2 particlePath1( movingPath[2], movingPath[3] ); | ||
| 222 | + Vector2 particlePath2( movingPath[4], movingPath[5] ); | ||
| 223 | + Vector2 particlePath3( movingPath[6], movingPath[7] ); | ||
| 224 | + Vector2 particlePath4( movingPath[8], movingPath[9] ); | ||
| 225 | + Vector2 particlePath5( movingPath[10], movingPath[11] ); | ||
| 226 | + | ||
| 227 | + float particleIdx = static_cast<float>(idx/4 + 1); // count from 1 | ||
| 228 | + float colorIdx = colorIndex+1.f; // count from 1 | ||
| 229 | + vertices.push_back( Vertex( Vector2(-colorIdx, -particleIdx), particlePath0, particlePath1, particlePath2, particlePath3, particlePath4, particlePath5 ) ); | ||
| 230 | + vertices.push_back( Vertex( Vector2(-colorIdx, particleIdx), particlePath0, particlePath1, particlePath2, particlePath3, particlePath4, particlePath5 ) ); | ||
| 231 | + vertices.push_back( Vertex( Vector2( colorIdx, particleIdx), particlePath0, particlePath1, particlePath2, particlePath3, particlePath4, particlePath5 ) ); | ||
| 232 | + vertices.push_back( Vertex( Vector2( colorIdx, -particleIdx), particlePath0, particlePath1, particlePath2, particlePath3, particlePath4, particlePath5 ) ); | ||
| 233 | + | ||
| 234 | + faces.push_back(idx); | ||
| 235 | + faces.push_back(idx+1); | ||
| 236 | + faces.push_back(idx+2); | ||
| 237 | + | ||
| 238 | + faces.push_back(idx); | ||
| 239 | + faces.push_back(idx+2); | ||
| 240 | + faces.push_back(idx+3); | ||
| 241 | + } | ||
| 242 | + | ||
| 243 | + /* | ||
| 244 | + * Main key event handler | ||
| 245 | + */ | ||
| 246 | + void OnKeyEvent(const KeyEvent& event) | ||
| 247 | + { | ||
| 248 | + if(event.state == KeyEvent::Down) | ||
| 249 | + { | ||
| 250 | + if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) | ||
| 251 | + { | ||
| 252 | + mApplication.Quit(); | ||
| 253 | + } | ||
| 254 | + } | ||
| 255 | + } | ||
| 256 | + | ||
| 257 | + /** | ||
| 258 | + * Callback of the TapGesture | ||
| 259 | + */ | ||
| 260 | + void OnTap( Actor actor, const TapGesture& tap ) | ||
| 261 | + { | ||
| 262 | + { | ||
| 263 | + PlayTapAnimation(5.f, tap.localPoint); | ||
| 264 | + } | ||
| 265 | + } | ||
| 266 | + | ||
| 267 | + /** | ||
| 268 | + * Callback of the PanGesture | ||
| 269 | + */ | ||
| 270 | + void OnPan( Actor actor, const PanGesture& gesture ) | ||
| 271 | + { | ||
| 272 | + if( gesture.state == Gesture::Finished ) | ||
| 273 | + { | ||
| 274 | + switch(mAnimationIndex) | ||
| 275 | + { | ||
| 276 | + case 0: | ||
| 277 | + { | ||
| 278 | + PlayParticleFadeAnimation(0, NUM_PARTICLE, 0.f, 3.f ); | ||
| 279 | + break; | ||
| 280 | + } | ||
| 281 | + case 1: | ||
| 282 | + { | ||
| 283 | + PlayBreakAnimation(2.0f); | ||
| 284 | + break; | ||
| 285 | + } | ||
| 286 | + case 2: | ||
| 287 | + { | ||
| 288 | + PlayShakeAnimation(0.5f, 2.5f); | ||
| 289 | + break; | ||
| 290 | + } | ||
| 291 | + default: | ||
| 292 | + { | ||
| 293 | + break; | ||
| 294 | + } | ||
| 295 | + } | ||
| 296 | + | ||
| 297 | + mAnimationIndex = (mAnimationIndex+1)%3; | ||
| 298 | + } | ||
| 299 | + } | ||
| 300 | + | ||
| 301 | + /** | ||
| 302 | + * Animate the particle position to make them wandering on the screen with 'seemingly' random fade in/out | ||
| 303 | + * @param[in] duration The duration for the particle to move a cycle on the path. the bigger this value the slower the floating movement. | ||
| 304 | + * @param[in] looping Infinite playing or not | ||
| 305 | + */ | ||
| 306 | + void PlayWanderAnimation( float duration, bool looping = true ) | ||
| 307 | + { | ||
| 308 | + Animation wanderAnimation= Animation::New(duration); | ||
| 309 | + wanderAnimation.AnimateTo( Property( mEffect, PERCENTAGE_UNIFORM_NAME ), 1.f ); | ||
| 310 | + wanderAnimation.SetLooping(looping); // infinite playing | ||
| 311 | + | ||
| 312 | + wanderAnimation.Play(); | ||
| 313 | + } | ||
| 314 | + | ||
| 315 | + /** | ||
| 316 | + * Accelerate the particle moving speed | ||
| 317 | + * @param[in] cycle How many extra cycles to move during the animation | ||
| 318 | + * @param[in] duration The duration for the animation | ||
| 319 | + */ | ||
| 320 | + void PlayShakeAnimation( float cycle, float duration ) | ||
| 321 | + { | ||
| 322 | + if( mShaking ) | ||
| 323 | + { | ||
| 324 | + return; | ||
| 325 | + } | ||
| 326 | + DestroyAnimation( mTapAnimationAux ); | ||
| 327 | + | ||
| 328 | + float accelaration = GetFloatUniformValue( ACCELARATION_UNIFORM_NAME ); | ||
| 329 | + mEffect.SetProperty( mEffect.GetPropertyIndex(ACCELARATION_UNIFORM_NAME), accelaration - int( accelaration) ); // Set the value as its fractional part | ||
| 330 | + Animation shakeAnimation = Animation::New(duration); | ||
| 331 | + shakeAnimation.AnimateBy( Property( mEffect, ACCELARATION_UNIFORM_NAME ), cycle, AlphaFunction::EASE_OUT ); | ||
| 332 | + shakeAnimation.FinishedSignal().Connect( this, &SparkleEffectExample::OnShakeAnimationFinished ); | ||
| 333 | + | ||
| 334 | + shakeAnimation.Play(); | ||
| 335 | + mShaking = true; | ||
| 336 | + } | ||
| 337 | + | ||
| 338 | + /** | ||
| 339 | + * Animate the particles to appear from center and spread all over around | ||
| 340 | + * @param[in] duration The duration for the animation | ||
| 341 | + */ | ||
| 342 | + void PlayBreakAnimation( float duration ) | ||
| 343 | + { | ||
| 344 | + if( GetFloatUniformValue(BREAK_UNIFORM_NAME) > 0.f ) | ||
| 345 | + { | ||
| 346 | + return; | ||
| 347 | + } | ||
| 348 | + | ||
| 349 | + // Stop the fading / tap animation before the breaking | ||
| 350 | + DestroyAnimation( mFadeAnimation); | ||
| 351 | + mTapIndices.x = mTapIndices.y; | ||
| 352 | + mEffect.SetProperty( mEffect.GetPropertyIndex( TAP_INDICES_UNIFORM_NAME ), mTapIndices ); | ||
| 353 | + mEffect.SetProperty( mEffect.GetPropertyIndex( ACCELARATION_UNIFORM_NAME ), 0.f ); | ||
| 354 | + | ||
| 355 | + // prepare the animation by setting the uniform to the required value | ||
| 356 | + mEffect.SetProperty( mEffect.GetPropertyIndex( BREAK_UNIFORM_NAME ), 1.f ); | ||
| 357 | + mMeshActor.SetScale(0.01f); | ||
| 358 | + mEffect.SetProperty( mEffect.GetPropertyIndex( "uScale" ), 0.01f ); | ||
| 359 | + mMeshActor.SetPosition( 0.f, 0.f, 1.f ); | ||
| 360 | + | ||
| 361 | + Animation breakAnimation = Animation::New(duration*1.5f); | ||
| 362 | + breakAnimation.AnimateTo( Property(mMeshActor, Actor::Property::SCALE), Vector3(ACTOR_SCALE,ACTOR_SCALE,ACTOR_SCALE), EaseOutSquare); | ||
| 363 | + breakAnimation.AnimateTo( Property( mEffect, "uScale" ), ACTOR_SCALE, EaseOutSquare); | ||
| 364 | + breakAnimation.AnimateTo( Property(mMeshActor, Actor::Property::POSITION), ACTOR_POSITION, EaseOutSquare); | ||
| 365 | + breakAnimation.FinishedSignal().Connect( this, &SparkleEffectExample::OnBreakAnimationFinished ); | ||
| 366 | + | ||
| 367 | + float timeUnit = duration/ (NUM_PARTICLE+1) /(NUM_PARTICLE+1) ; | ||
| 368 | + std::ostringstream oss; | ||
| 369 | + for(unsigned int i = 0; i<NUM_PARTICLE; i++) | ||
| 370 | + { | ||
| 371 | + oss.str(""); | ||
| 372 | + oss<< OPACITY_UNIFORM_NAME<< i << "]"; | ||
| 373 | + mEffect.SetProperty( mEffect.GetPropertyIndex( oss.str() ), 0.01f); | ||
| 374 | + float timeSlice = timeUnit*i*i; | ||
| 375 | + breakAnimation.AnimateTo( Property( mEffect, oss.str() ), 1.f, AlphaFunction::EASE_IN_OUT_SINE, TimePeriod( timeSlice*0.5f, timeSlice ) ); | ||
| 376 | + } | ||
| 377 | + | ||
| 378 | + breakAnimation.Play(); | ||
| 379 | + } | ||
| 380 | + | ||
| 381 | + /** | ||
| 382 | + * Animate the particle opacity | ||
| 383 | + * Particles with index between startIndex ~ startIndex+numParticle-1 fade to the target opacity one after another | ||
| 384 | + * @param[in] startIndex The index of the first particle | ||
| 385 | + * @param[in] numParticle The number of particle to change opacity | ||
| 386 | + * @param[in] targetValue The final opacity | ||
| 387 | + * @param[in] duration The duration for the animation | ||
| 388 | + */ | ||
| 389 | + void PlayParticleFadeAnimation( unsigned int startIndex, unsigned int numParticle, float targetValue, float duration ) | ||
| 390 | + { | ||
| 391 | + if( GetFloatUniformValue(BREAK_UNIFORM_NAME) > 0.f ) | ||
| 392 | + { | ||
| 393 | + return; | ||
| 394 | + } | ||
| 395 | + | ||
| 396 | + // start the opacity animation one particle after another gradually | ||
| 397 | + float timeSlice = duration / (numParticle+1); | ||
| 398 | + float fadeDuration = timeSlice>0.5f ? timeSlice : 0.5f; | ||
| 399 | + | ||
| 400 | + Animation fadeAnimation= Animation::New(duration+fadeDuration*2.f); | ||
| 401 | + std::ostringstream oss; | ||
| 402 | + for(unsigned int i = startIndex; i<numParticle; i++) | ||
| 403 | + { | ||
| 404 | + if( i>=NUM_PARTICLE ) break; // out of bound | ||
| 405 | + | ||
| 406 | + oss.str(""); | ||
| 407 | + oss<< OPACITY_UNIFORM_NAME<< i << "]"; | ||
| 408 | + fadeAnimation.AnimateTo(Property( mEffect, oss.str()), targetValue, TimePeriod( timeSlice*i, fadeDuration*2.f )); | ||
| 409 | + } | ||
| 410 | + | ||
| 411 | + fadeAnimation.Play(); | ||
| 412 | + mFadeAnimation = fadeAnimation; | ||
| 413 | + mFadeAnimation.FinishedSignal().Connect( this, &SparkleEffectExample::OnFadeAnimationFinished ); | ||
| 414 | + } | ||
| 415 | + | ||
| 416 | + /** | ||
| 417 | + * Push the particles to the edge all around the circle then bounce back | ||
| 418 | + * @param[in] duration The duration for the animation | ||
| 419 | + * @param[in] tapPoint The position of the tap point | ||
| 420 | + */ | ||
| 421 | + void PlayTapAnimation(float duration, const Vector2& tapPoint ) | ||
| 422 | + { | ||
| 423 | + if( mTapIndices.y > mTapIndices.x && mTapAnimation.GetCurrentProgress() < 0.2f) | ||
| 424 | + { | ||
| 425 | + return; | ||
| 426 | + } | ||
| 427 | + | ||
| 428 | + Animation animation= Animation::New(duration); | ||
| 429 | + int idx = int(mTapIndices.y)%MAXIMUM_ANIMATION_COUNT; | ||
| 430 | + mTapIndices.y += 1.f; | ||
| 431 | + | ||
| 432 | + std::ostringstream oss; | ||
| 433 | + oss<< TAP_OFFSET_UNIFORM_NAME<< idx << "]"; | ||
| 434 | + mEffect.SetProperty( mEffect.GetPropertyIndex( oss.str() ), 0.f); | ||
| 435 | + animation.AnimateTo( Property( mEffect, oss.str() ), 0.75f, CustomBounce); | ||
| 436 | + | ||
| 437 | + oss.str(""); | ||
| 438 | + oss<< TAP_POINT_UNIFORM_NAME<< idx << "]"; | ||
| 439 | + mEffect.SetProperty( mEffect.GetPropertyIndex( oss.str() ), tapPoint/ACTOR_SCALE); | ||
| 440 | + | ||
| 441 | + mEffect.SetProperty( mEffect.GetPropertyIndex( TAP_INDICES_UNIFORM_NAME ), mTapIndices); | ||
| 442 | + | ||
| 443 | + if(!mShaking) | ||
| 444 | + { | ||
| 445 | + mTapAnimationAux = Animation::New(duration*0.2f); | ||
| 446 | + mTapAnimationAux.AnimateBy( Property( mEffect, ACCELARATION_UNIFORM_NAME ), 0.15f, AlphaFunction::EASE_IN_OUT ); | ||
| 447 | + mTapAnimationAux.Play(); | ||
| 448 | + } | ||
| 449 | + animation.Play(); | ||
| 450 | + mTapAnimationIndexPair[animation] = static_cast<int>(mTapIndices.y -1.f); | ||
| 451 | + animation.FinishedSignal().Connect( this, &SparkleEffectExample::OnTapAnimationFinished ); | ||
| 452 | + mTapAnimation = animation; | ||
| 453 | + } | ||
| 454 | + | ||
| 455 | + /** | ||
| 456 | + * Callback of the animation finished signal | ||
| 457 | + */ | ||
| 458 | + void OnShakeAnimationFinished( Animation& animation) | ||
| 459 | + { | ||
| 460 | + mShaking = false; | ||
| 461 | + } | ||
| 462 | + | ||
| 463 | + /** | ||
| 464 | + * Callback of the animation finished signal | ||
| 465 | + */ | ||
| 466 | + void OnFadeAnimationFinished( Animation& animation) | ||
| 467 | + { | ||
| 468 | + mFadeAnimation.Clear(); | ||
| 469 | + mFadeAnimation.Reset(); | ||
| 470 | + } | ||
| 471 | + | ||
| 472 | + /** | ||
| 473 | + * Callback of the animation finished signal | ||
| 474 | + */ | ||
| 475 | + void OnBreakAnimationFinished( Animation& animation) | ||
| 476 | + { | ||
| 477 | + mEffect.SetProperty( mEffect.GetPropertyIndex( BREAK_UNIFORM_NAME ), 0.f ); | ||
| 478 | + } | ||
| 479 | + | ||
| 480 | + /** | ||
| 481 | + * Callback of the animation finished signal | ||
| 482 | + */ | ||
| 483 | + void OnTapAnimationFinished( Animation& animation ) | ||
| 484 | + { | ||
| 485 | + if( mTapAnimationIndexPair[animation] == static_cast<int>(mTapIndices.x) ) | ||
| 486 | + { | ||
| 487 | + mTapIndices.x += 1.f; | ||
| 488 | + if( mTapIndices.x >= mTapIndices.y ) | ||
| 489 | + { | ||
| 490 | + mTapIndices = Vector2::ZERO; | ||
| 491 | + } | ||
| 492 | + mEffect.SetProperty( mEffect.GetPropertyIndex( TAP_INDICES_UNIFORM_NAME ), mTapIndices); | ||
| 493 | + } | ||
| 494 | + | ||
| 495 | + mTapAnimationIndexPair.erase( animation ); | ||
| 496 | + if( mTapAnimationIndexPair.size() < 1 && mTapIndices != Vector2::ZERO) | ||
| 497 | + { | ||
| 498 | + mTapIndices = Vector2::ZERO; | ||
| 499 | + mEffect.SetProperty( mEffect.GetPropertyIndex( TAP_INDICES_UNIFORM_NAME ), mTapIndices); | ||
| 500 | + } | ||
| 501 | + | ||
| 502 | + animation.Clear(); | ||
| 503 | + animation.Reset(); | ||
| 504 | + } | ||
| 505 | + | ||
| 506 | + /** | ||
| 507 | + * Helper retrieve a uniform value from the Sparkle effect shader | ||
| 508 | + * @param[in] uniformName The uniform | ||
| 509 | + * @return The float value | ||
| 510 | + */ | ||
| 511 | + float GetFloatUniformValue( const std::string& uniformName ) | ||
| 512 | + { | ||
| 513 | + float value; | ||
| 514 | + mEffect.GetProperty(mEffect.GetPropertyIndex(uniformName)).Get(value); | ||
| 515 | + return value; | ||
| 516 | + } | ||
| 517 | + | ||
| 518 | + /** | ||
| 519 | + * Terminate the given animation | ||
| 520 | + */ | ||
| 521 | + void DestroyAnimation( Animation& animation ) | ||
| 522 | + { | ||
| 523 | + if( animation ) | ||
| 524 | + { | ||
| 525 | + animation.Clear(); | ||
| 526 | + animation.Reset(); | ||
| 527 | + } | ||
| 528 | + } | ||
| 529 | + | ||
| 530 | +private: | ||
| 531 | + | ||
| 532 | + Application& mApplication; | ||
| 533 | + Shader mEffect; | ||
| 534 | + ImageView mCircleBackground; | ||
| 535 | + Actor mMeshActor; | ||
| 536 | + | ||
| 537 | + PanGestureDetector mPanGestureDetector; | ||
| 538 | + TapGestureDetector mTapDetector; | ||
| 539 | + | ||
| 540 | + Animation mFadeAnimation; | ||
| 541 | + Animation mTapAnimation; | ||
| 542 | + Animation mTapAnimationAux; | ||
| 543 | + | ||
| 544 | + Vector2 mTapIndices; | ||
| 545 | + unsigned int mAnimationIndex; | ||
| 546 | + bool mShaking; | ||
| 547 | + | ||
| 548 | + std::map< Animation, int > mTapAnimationIndexPair; | ||
| 549 | +}; | ||
| 550 | + | ||
| 551 | +void RunTest( Application& application ) | ||
| 552 | +{ | ||
| 553 | + SparkleEffectExample theApp( application ); | ||
| 554 | + | ||
| 555 | + application.MainLoop(); | ||
| 556 | +} | ||
| 557 | + | ||
| 558 | +// Entry point for Linux & Tizen applications | ||
| 559 | +// | ||
| 560 | +int DALI_EXPORT_API main( int argc, char **argv ) | ||
| 561 | +{ | ||
| 562 | + Application application = Application::New( &argc, &argv ); | ||
| 563 | + | ||
| 564 | + RunTest( application ); | ||
| 565 | + | ||
| 566 | + return 0; | ||
| 567 | +} | ||
| 568 | + |
examples/sparkle/sparkle-effect.h
0 → 100644
| 1 | +#ifndef DALI_SPARKLE_EFFECT_H | ||
| 2 | +#define DALI_SPARKLE_EFFECT_H | ||
| 3 | + | ||
| 4 | +/* | ||
| 5 | + * Copyright (c) 2016 Samsung Electronics Co., Ltd. | ||
| 6 | + * | ||
| 7 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
| 8 | + * you may not use this file except in compliance with the License. | ||
| 9 | + * You may obtain a copy of the License at | ||
| 10 | + * | ||
| 11 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
| 12 | + * | ||
| 13 | + * Unless required by applicable law or agreed to in writing, software | ||
| 14 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
| 15 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| 16 | + * See the License for the specific language governing permissions and | ||
| 17 | + * limitations under the License. | ||
| 18 | + * | ||
| 19 | + */ | ||
| 20 | + | ||
| 21 | +#include <dali/dali.h> | ||
| 22 | +#include <dali-toolkit/dali-toolkit.h> | ||
| 23 | + | ||
| 24 | +using namespace Dali; | ||
| 25 | +using Dali::Toolkit::ImageView; | ||
| 26 | + | ||
| 27 | +/************************************************************/ | ||
| 28 | +/* Custom sparkle effect shader******************************/ | ||
| 29 | +/************************************************************/ | ||
| 30 | + | ||
| 31 | +namespace SparkleEffect | ||
| 32 | +{ | ||
| 33 | + // uniform which controls the position of particle on the path | ||
| 34 | + const std::string PERCENTAGE_UNIFORM_NAME( "uPercentage" ); | ||
| 35 | + // uniform array of particle color, set their value as the PARTICLE_COLORS given below | ||
| 36 | + const std::string PARTICLE_COLOR_UNIFORM_NAME("uParticleColors["); | ||
| 37 | + // uniform array of particle opacity | ||
| 38 | + const std::string OPACITY_UNIFORM_NAME("uOpacity["); | ||
| 39 | + // uniform which offsets the path control point, with this values >=0, the paths are squeezed towards the GatheringPoint | ||
| 40 | + const std::string ACCELARATION_UNIFORM_NAME("uAcceleration"); | ||
| 41 | + // uniform which indicates the ongoing tap animations | ||
| 42 | + const std::string TAP_INDICES_UNIFORM_NAME("uTapIndices"); | ||
| 43 | + // uniform which controls how much the offset of the midpoints relative to the start/end points of the cubic bezier curve when the path is squeezed for tap animation | ||
| 44 | + const std::string TAP_OFFSET_UNIFORM_NAME("uTapOffset["); | ||
| 45 | + // uniform which gives the position of the tapping, in this way the particles will be pushed away from this point | ||
| 46 | + const std::string TAP_POINT_UNIFORM_NAME("uTapPoint["); | ||
| 47 | + // uniform which trigger the break animation, set to 1.0 when break animation is playing, otherwise set to 0.0 | ||
| 48 | + const std::string BREAK_UNIFORM_NAME("uBreak"); | ||
| 49 | + | ||
| 50 | + /****************particle colors******************/ | ||
| 51 | + | ||
| 52 | + struct ParticleColor | ||
| 53 | + { | ||
| 54 | + Vector3 RGB; | ||
| 55 | + Vector2 AlphaRange; | ||
| 56 | + unsigned int numParticle; | ||
| 57 | + }; | ||
| 58 | + | ||
| 59 | + ParticleColor PARTICLE_COLORS[]= | ||
| 60 | + { | ||
| 61 | + { Vector3( 0.f, 240.f, 255.f )/255.f, Vector2( 0.2f, 1.f ), 22 }, // 00f0ff, opacity 20%~100% | ||
| 62 | + { Vector3( 89.f, 151.f, 239.f )/255.f, Vector2( 0.2f, 0.5f ), 12 }, // 5997ef, opacity 20%~50% | ||
| 63 | + { Vector3( 181.f, 181.f, 207.f )/255.f, Vector2( 0.5f, 1.f ), 22 }, // b5b5cf, opacity 50%~100% | ||
| 64 | + { Vector3( 147.f, 147.f, 170.f )/255.f, Vector2( 0.5f, 0.5f ), 22 }, // 9393aa, opacity 50%~50% | ||
| 65 | + { Vector3( 145.f, 145.f, 201.f )/255.f, Vector2( 1.f, 1.f ), 12 }, // 91bdc9, opacity 100%~100% | ||
| 66 | + { Vector3( 145.f, 145.f, 201.f )/255.f, Vector2( 0.2f, 0.2f ), 21 } // 91bdc9, opacity 20%~20% | ||
| 67 | + }; | ||
| 68 | + const unsigned int NUM_COLOR( sizeof( PARTICLE_COLORS ) / sizeof( PARTICLE_COLORS[0] ) ); | ||
| 69 | + | ||
| 70 | + /***************particle moving paths********************/ | ||
| 71 | + | ||
| 72 | + typedef int MovingPath[12]; | ||
| 73 | + | ||
| 74 | + // these paths are defined inside the circle which has the center at (250, 250) and the radius as 250 | ||
| 75 | + MovingPath PATHS[]= | ||
| 76 | + { // each path is composed of two cubic b-curves: (p0, p1, p2, p3) & (p3, p4, p5, p0) | ||
| 77 | + // p0 p1 p2 p3 p4 p5 | ||
| 78 | + { 280,273, 386,41, 489,141, 491,199, 494,256, 230,394 }, | ||
| 79 | + { 129,226, 357,120, 150,491, 291,406, 433,320, 47,283 }, | ||
| 80 | + { 96,264, 356,133, 446,196, 370,297, 294,399, -169,384 }, | ||
| 81 | + { 345,110, 359,186, 14,393, 4,247, -6,101, 321,-28 }, | ||
| 82 | + { 166,161, 128,353, 566,200, 487,304, 413,403, 203,-32 }, | ||
| 83 | + { 193,286, 106,331, 206,569, 334,477, 462,385, 279,240 }, | ||
| 84 | + { 336,247, 293,232, 301,465, 346,479, 390,493, 374,261 }, | ||
| 85 | + { 250,72, 314,72, 332,495, 250,497, 168,499, 161,72 }, | ||
| 86 | + { 48,387, 32,241, 452,558, 433,358, 411,121, 62,523 }, | ||
| 87 | + { 300,32, 159,27, 442,568, 186,492, -70,415, 551,41 }, | ||
| 88 | + { 479,150, 503,203, 216,403, 163,298, 110,193, 448,78 }, | ||
| 89 | + { 346,75, 311,97, 336,196, 389,160, 442,123, 383,51 }, | ||
| 90 | + { 90,61, 54,96, 218,373, 294,300, 370,227, 141,11 }, | ||
| 91 | + { 126,225, 240,280, 378,29, 221,16, 64,4, 11,170 }, | ||
| 92 | + { 308,101, 243,22, -10,271, 22,352, 49,422, 396,208 }, | ||
| 93 | + { 193,188, 174,302, 502,389, 500,250, 498,111, 212,72 }, | ||
| 94 | + { 227,3, 16,35, 577,309, 428,423, 279,537, 438,-28 }, | ||
| 95 | + { 410,58, 387,18, 22,179, 154,277, 286,374, 459,142 }, | ||
| 96 | + { 178,272, 109,299, 144,429, 218,396, 293,362, 221,254 }, | ||
| 97 | + { 247,46, 98,5, -91,357, 160,431, 412,505, 397,88 }, | ||
| 98 | + { 41,112, 22,144, 123,273, 158,187, 192,101, 75,56 }, | ||
| 99 | + { 8,300, 23,340, 267,294, 238,218, 209,142, -20,226 }, | ||
| 100 | + { 112,256, 24,270, -1,470, 154,433, 308,396, 201,242 }, | ||
| 101 | + { 212,277, 267,346, 509,202, 452,103, 398,8, 150,199 }, | ||
| 102 | + { 154,205, 146,287, 496,282, 492,194, 488,107, 160,140 }, | ||
| 103 | + { 281,350, 365,318, 415,476, 332,482, 248,489, 204,379 }, | ||
| 104 | + { 327,23, 346,81, 154,319, 123,207, 92,95, 313,-21 }, | ||
| 105 | + { 323,233, 283,307, 454,420, 478,354, 501,288, 374,136 }, | ||
| 106 | + { 318,186, 311,252, 488,248, 481,168, 474,87, 328,76 }, | ||
| 107 | + { 7,192, -10,270, 249,398, 269,307, 290,216, 25,111 }, | ||
| 108 | + { 148,22, 98,22, 25,458, 125,458, 225,458, 198,22 }, | ||
| 109 | + { 349,32, 307,39, 492,416, 399,446, 305,477, 460,16 }, | ||
| 110 | + { 147,474, 222,554, 392,154, 486,240, 581,325, 73,394 }, | ||
| 111 | + { 57,186, 13,200, 51,398, 114,374, 178,349, 97,174 }, | ||
| 112 | + { 257,192, 198,188, 162,345, 240,349, 319,354, 316,197 }, | ||
| 113 | + { 242,4, 283,21, 30,172, 81,215, 133,257, 209,-10 }, | ||
| 114 | + { 149,408, 165,442, 472,340, 444,275, 416,210, 120,348 }, | ||
| 115 | + { 106,271, 136,359, 483,370, 422,186, 360,2, 76,186 }, | ||
| 116 | + { 120,146, 29,224, 469,262, 346,390, 222,518, 393,-87 }, | ||
| 117 | + { 318,265, 415,280, 398,537, 247,491, 96,446, 222,249 }, | ||
| 118 | + { 171,275, 207,246, 274,469, 237,497, 199,525, 139,300 }, | ||
| 119 | + { 196,84, 135,105, 256,510, 334,486, 412,462, 280,55 }, | ||
| 120 | + { 485,314, 452,170, 158,606, 111,411, 55,179, 515,446 }, | ||
| 121 | + { 134,54, 266,4, 175,607, 392,451, 609,296, -100,144 }, | ||
| 122 | + { 3,229, -1,287, 334,383, 350,267, 366,150, 10,151 }, | ||
| 123 | + { 105,115, 146,125, 154,227, 92,209, 30,192, 62,105 }, | ||
| 124 | + { 343,20, 388,42, 323,357, 228,313, 132,269, 278,-10 }, | ||
| 125 | + { 362,186, 271,274, 60,82, 204,19, 349,-44, 453,97 }, | ||
| 126 | + { 145,128, 181,32, 501,185, 498,272, 495,347, 97,257 }, | ||
| 127 | + { 286,172, 342,274, 59,463, 16,331, -27,198, 231,69 }, | ||
| 128 | + { 194,7, 404,-32, -38,410, 140,469, 317,528, -16,45 }, | ||
| 129 | + { 39,120, 48,74, 445,109, 352,244, 259,379, 20,215 }, | ||
| 130 | + { 328,247, 402,250, 411,384, 330,377, 248,370, 281,244 }, | ||
| 131 | + { 189,56, 317,-31, 610,240, 396,392, 183,543, 61,144 }, | ||
| 132 | + { 402,53, 430,77, 376,231, 315,161, 255,91, 351,10 }, | ||
| 133 | + { 496,218, 494,260, 249,296, 251,214, 254,133, 498,139 }, | ||
| 134 | + { 381,210, 469,195, 557,376, 399,391, 241,407, 292,226 }, | ||
| 135 | + { 297,263, 267,346, -8,289, 14,176, 35,69, 331,168 }, | ||
| 136 | + { 329,187, 363,263, 30,371, 5,287, -19,203, 302,128 }, | ||
| 137 | + { 257,354, 168,351, 171,516, 252,496, 333,475, 340,356 }, | ||
| 138 | + { 106,60, 107,121, 366,284, 359,168, 352,52, 105,14 }, | ||
| 139 | + { 178,257, 240,314, 115,476, 71,421, 28,367, 98,182 }, | ||
| 140 | + { 163,213, 191,273, 22,327, 3,248, -17,170, 118,113 }, | ||
| 141 | + { 459,117, 500,185, 297,390, 248,311, 199,232, 416,46 }, | ||
| 142 | + { 270,3, 317,-14, 528,375, 434,407, 339,440, 223,19 }, | ||
| 143 | + { 88,76, 130,68, 78,485, 176,483, 274,482, -22,96 }, | ||
| 144 | + { 422,428, 378,528, 88,205, 26,317, -36,428, 467,328 }, | ||
| 145 | + { 414,127, 460,125, 489,325, 421,322, 353,320, 372,128 }, | ||
| 146 | + { 227,197, 281,174, 367,311, 294,340, 221,370, 173,220 }, | ||
| 147 | + { 180,14, 147,44, 436,104, 401,161, 366,219, 207,-10 }, | ||
| 148 | + { 400,367, 395,404, 71,406, 77,336, 82,265, 407,300 }, | ||
| 149 | + { 396,222, 396,316, 71,439, 70,245, 68,51, 396,132 }, | ||
| 150 | + { 342,109, 454,153, 49,332, 208,413, 367,494, 8,-23 }, | ||
| 151 | + { 147,167, 222,137, 266,169, 231,199, 197,229, 129,178 }, | ||
| 152 | + { 227,272, 310,243, 277,313, 322,266, 367,219, 207,313 }, | ||
| 153 | + { 279,192, 339,233, 396,211, 367,182, 338,152, 228,194 }, | ||
| 154 | + { 236,20, 283,75, 346,26, 338,71, 330,116, 207,17 }, | ||
| 155 | + { 129,83, 164,23, 158,14, 179,11, 200,8, 91,78 }, | ||
| 156 | + { 86,231, 129,293, 164,421, 104,348, 44,275, 66,200 }, | ||
| 157 | + { 193,328, 197,278, 240,348, 276,305, 311,263, 199,354 }, | ||
| 158 | + { 231,364, 241,209, 309,104, 326,236, 342,367, 225,424 }, | ||
| 159 | + { 414,230, 398,328, 446,445, 467,363, 489,281, 373,254 }, | ||
| 160 | + { 289,122, 332,123, 348,161, 322,158, 297,156, 275,125 }, | ||
| 161 | + { 142,235, 199,308, 402,229, 283,218, 164,206, 130,206 }, | ||
| 162 | + { 174,396, 210,387, 328,501, 246,455, 165,409, 138,394 }, | ||
| 163 | + { 288,388, 366,357, 372,458, 393,400, 414,343, 249,431 }, | ||
| 164 | + { 351,278, 409,369, 497,316, 437,288, 376,260, 351,243 }, | ||
| 165 | + { 87,134, 181,77, 311,121, 206,140, 101,160, 61,159 }, | ||
| 166 | + { 95,195, 126,208, 133,258, 110,236, 88,215, 95,195 }, | ||
| 167 | + { 140,293, 158,330, 169,275, 184,299, 198,323, 126,313 }, | ||
| 168 | + { 336,319, 383,357, 388,278, 393,333, 397,388, 311,325 }, | ||
| 169 | + { 338,107, 434,209, -37,469, 151,287, 338,104, 285,50 }, | ||
| 170 | + { 403,134, 446,182, 378,318, 386,233, 393,149, 360,98 }, | ||
| 171 | + { 366,82, 413,93, 416,158, 390,118, 364,78, 336,75 }, | ||
| 172 | + { 448,188, 448,230, 465,269, 470,225, 474,181, 448,177 }, | ||
| 173 | + { 121,398, 142,418, 126,475, 111,436, 96,396, 100,382 }, | ||
| 174 | + { 40,296, 90,352, 170,310, 143,350, 116,391, 7,300 }, | ||
| 175 | + { 25,203, 45,241, 70,204, 45,248, 19,293, 4,204 }, | ||
| 176 | + { 243,222, 225,275, 345,256, 296,237, 247,218, 249,199 }, | ||
| 177 | + { 159,149, 282,133, 284,199, 226,191, 169,184, 147,160 }, | ||
| 178 | + { 149,257, 290,322, 151,374, 166,338, 182,302, 116,263 }, | ||
| 179 | + { 255,285, 354,327, 234,287, 279,327, 323,367, 193,290 }, | ||
| 180 | + { 188,220, 353,190, 290,354, 348,293, 407,231, 152,248 }, | ||
| 181 | + { 305,122, 382,174, 402,229, 366,198, 329,167, 297,127 }, | ||
| 182 | + { 378,260, 406,267, 390,330, 384,293, 377,257, 366,263 }, | ||
| 183 | + { 178,396, 357,365, 273,461, 248,431, 223,401, 157,412 }, | ||
| 184 | + { 180,89, 258,88, 302,94, 255,115, 207,136, 166,96 }, | ||
| 185 | + { 81,197, 139,232, 39,257, 94,259, 150,261, 58,200 }, | ||
| 186 | + { 314,89, 378,40, 383,38, 389,42, 395,45, 267,90 }, | ||
| 187 | + { 371,141, 482,233, 508,244, 498,272, 488,299, 307,157 }, | ||
| 188 | + { 339,348, 361,465, 382,477, 406,442, 430,406, 269,369 } | ||
| 189 | + }; | ||
| 190 | + const unsigned int NUM_PARTICLE( sizeof( PATHS ) / sizeof( PATHS[0] ) ); | ||
| 191 | + | ||
| 192 | + const float PARTICLE_SIZE = 13.f; | ||
| 193 | + | ||
| 194 | + const float ACTOR_SCALE = 0.704f; // resize 500*500 to 352*352, a bit smaller than 360*360 | ||
| 195 | + const Vector3 ACTOR_POSITION( -176.f, -176.f, 1.f); | ||
| 196 | + | ||
| 197 | + const int MAXIMUM_ANIMATION_COUNT = 30; | ||
| 198 | + | ||
| 199 | + // Geometry format used by the SparkeEffect | ||
| 200 | + struct Vertex | ||
| 201 | + { | ||
| 202 | + Vertex( const Vector2& texCoord, | ||
| 203 | + const Vector2& aParticlePath0, | ||
| 204 | + const Vector2& aParticlePath1, | ||
| 205 | + const Vector2& aParticlePath2, | ||
| 206 | + const Vector2& aParticlePath3, | ||
| 207 | + const Vector2& aParticlePath4, | ||
| 208 | + const Vector2& aParticlePath5 ) | ||
| 209 | + : aTexCoord( texCoord ), | ||
| 210 | + aParticlePath0( aParticlePath0 ), | ||
| 211 | + aParticlePath1( aParticlePath1 ), | ||
| 212 | + aParticlePath2( aParticlePath2 ), | ||
| 213 | + aParticlePath3( aParticlePath3 ), | ||
| 214 | + aParticlePath4( aParticlePath4 ), | ||
| 215 | + aParticlePath5( aParticlePath5 ) | ||
| 216 | + { | ||
| 217 | + } | ||
| 218 | + | ||
| 219 | + Vector2 aTexCoord; | ||
| 220 | + Vector2 aParticlePath0; | ||
| 221 | + Vector2 aParticlePath1; | ||
| 222 | + Vector2 aParticlePath2; | ||
| 223 | + Vector2 aParticlePath3; | ||
| 224 | + Vector2 aParticlePath4; | ||
| 225 | + Vector2 aParticlePath5; | ||
| 226 | + }; | ||
| 227 | + | ||
| 228 | + /** | ||
| 229 | + * Create a SparkleEffect object. | ||
| 230 | + * @return A handle to a newly allocated SparkleEffect | ||
| 231 | + */ | ||
| 232 | + Shader New() | ||
| 233 | + { | ||
| 234 | + std::string vertexShader = DALI_COMPOSE_SHADER( | ||
| 235 | + precision highp float;\n | ||
| 236 | + \n | ||
| 237 | + attribute vec2 aTexCoord;\n | ||
| 238 | + uniform mat4 uMvpMatrix;\n | ||
| 239 | + varying vec2 vTexCoord;\n | ||
| 240 | + \n | ||
| 241 | + attribute vec2 aParticlePath0;\n | ||
| 242 | + attribute vec2 aParticlePath1;\n | ||
| 243 | + attribute vec2 aParticlePath2;\n | ||
| 244 | + attribute vec2 aParticlePath3;\n | ||
| 245 | + attribute vec2 aParticlePath4;\n | ||
| 246 | + attribute vec2 aParticlePath5;\n | ||
| 247 | + \n | ||
| 248 | + uniform float uPercentage;\n | ||
| 249 | + uniform float uPercentageMarked;\n | ||
| 250 | + uniform vec3 uParticleColors[NUM_COLOR];\n | ||
| 251 | + uniform float uOpacity[NUM_PARTICLE];\n | ||
| 252 | + uniform vec2 uTapIndices; | ||
| 253 | + uniform float uTapOffset[MAXIMUM_ANIMATION_COUNT];\n | ||
| 254 | + uniform vec2 uTapPoint[MAXIMUM_ANIMATION_COUNT];\n | ||
| 255 | + uniform float uAcceleration;\n | ||
| 256 | + uniform float uRadius;\n | ||
| 257 | + uniform float uScale;\n | ||
| 258 | + uniform float uBreak;\n | ||
| 259 | + \n | ||
| 260 | + varying lowp vec4 vColor;\n | ||
| 261 | + \n | ||
| 262 | + void main()\n | ||
| 263 | + {\n | ||
| 264 | + // we store the particle index inside texCoord attribute | ||
| 265 | + float idx = abs(aTexCoord.y)-1.0;\n | ||
| 266 | + \n | ||
| 267 | + // early out if the particle is invisible | ||
| 268 | + if(uOpacity[int(idx)]<1e-5)\n | ||
| 269 | + {\n | ||
| 270 | + gl_Position = vec4(0.0);\n | ||
| 271 | + vColor = vec4(0.0);\n | ||
| 272 | + return;\n | ||
| 273 | + }\n | ||
| 274 | + \n | ||
| 275 | + // As the movement along the b-curve has nonuniform speed with a uniform increasing parameter 'uPercentage' | ||
| 276 | + // we give different particles the different 'percentage' to make them looks more random | ||
| 277 | + float increment = idx / float(NUM_PARTICLE)*5.0; | ||
| 278 | + float percentage = mod(uPercentage +uAcceleration+increment, 1.0); | ||
| 279 | + \n | ||
| 280 | + vec2 p0; vec2 p1; vec2 p2; vec2 p3; | ||
| 281 | + // calculate the particle position by using the cubic b-curve equation | ||
| 282 | + if(percentage<0.5)\n // particle on the first b-curve | ||
| 283 | + {\n | ||
| 284 | + p0 = aParticlePath0;\n | ||
| 285 | + p1 = aParticlePath1;\n | ||
| 286 | + p2 = aParticlePath2;\n | ||
| 287 | + p3 = aParticlePath3;\n | ||
| 288 | + }\n | ||
| 289 | + else\n | ||
| 290 | + {\n | ||
| 291 | + p0 = aParticlePath3;\n | ||
| 292 | + p1 = aParticlePath4;\n | ||
| 293 | + p2 = aParticlePath5;\n | ||
| 294 | + p3 = aParticlePath0;\n | ||
| 295 | + }\n | ||
| 296 | + float t = mod( percentage*2.0, 1.0);\n | ||
| 297 | + vec2 position = (1.0-t)*(1.0-t)*(1.0-t)*p0 + 3.0*(1.0-t)*(1.0-t)*t*p1+3.0*(1.0-t)*t*t*p2 + t*t*t*p3;\n | ||
| 298 | + \n | ||
| 299 | + vec2 referencePoint = mix(p0,p3,0.5);\n | ||
| 300 | + float maxAnimationCount = float(MAXIMUM_ANIMATION_COUNT);\n | ||
| 301 | + \n | ||
| 302 | + for( float i=uTapIndices.x; i<uTapIndices.y; i+=1.0 )\n | ||
| 303 | + { | ||
| 304 | + int id = int( mod(i+0.5,maxAnimationCount ) );\n | ||
| 305 | + vec2 edgePoint = normalize(referencePoint-uTapPoint[id])*uRadius+vec2(uRadius);\n | ||
| 306 | + position = mix( position, edgePoint, uTapOffset[id] ) ;\n | ||
| 307 | + }\n | ||
| 308 | + \n | ||
| 309 | + position = mix( position, vec2( 250.0,250.0 ),uBreak*(1.0-uOpacity[int(idx)]) ) ; | ||
| 310 | + \n | ||
| 311 | + // vertex position on the mesh: (sign(aTexCoord.x), sign(aTexCoord.y))*PARTICLE_HALF_SIZE | ||
| 312 | + gl_Position = uMvpMatrix * vec4( position.x+sign(aTexCoord.x)*PARTICLE_HALF_SIZE/uScale, | ||
| 313 | + position.y+sign(aTexCoord.y)*PARTICLE_HALF_SIZE/uScale, | ||
| 314 | + 0.0, 1.0 );\n | ||
| 315 | + \n | ||
| 316 | + // we store the color index inside texCoord attribute | ||
| 317 | + float colorIndex = abs(aTexCoord.x); | ||
| 318 | + vColor.rgb = uParticleColors[int(colorIndex)-1];\n | ||
| 319 | + vColor.a = fract(colorIndex) * uOpacity[int(idx)];\n | ||
| 320 | + \n | ||
| 321 | + // produce a 'seemingly' random fade in/out | ||
| 322 | + percentage = mod(uPercentage+increment+0.15, 1.0);\n | ||
| 323 | + float ramdomOpacity = (min(percentage, 0.25)-0.15+0.9-max(percentage,0.9))*10.0;\n | ||
| 324 | + vColor.a *=ramdomOpacity;\n | ||
| 325 | + \n | ||
| 326 | + vTexCoord = clamp(aTexCoord, 0.0, 1.0);\n | ||
| 327 | + }\n | ||
| 328 | + ); | ||
| 329 | + | ||
| 330 | + std::string fragmentShader = DALI_COMPOSE_SHADER( | ||
| 331 | + precision highp float;\n | ||
| 332 | + uniform sampler2D sTexture;\n | ||
| 333 | + varying vec2 vTexCoord;\n | ||
| 334 | + \n | ||
| 335 | + varying lowp vec4 vColor;\n | ||
| 336 | + \n | ||
| 337 | + void main()\n | ||
| 338 | + {\n | ||
| 339 | + gl_FragColor = vColor;\n | ||
| 340 | + gl_FragColor.a *= texture2D(sTexture, vTexCoord).a;\n | ||
| 341 | + }\n | ||
| 342 | + ); | ||
| 343 | + | ||
| 344 | + std::ostringstream vertexShaderStringStream; | ||
| 345 | + vertexShaderStringStream<< "#define NUM_COLOR "<< NUM_COLOR << "\n" | ||
| 346 | + << "#define NUM_PARTICLE "<< NUM_PARTICLE << "\n" | ||
| 347 | + << "#define PARTICLE_HALF_SIZE "<< PARTICLE_SIZE*ACTOR_SCALE/2.f << "\n" | ||
| 348 | + << "#define MAXIMUM_ANIMATION_COUNT "<<MAXIMUM_ANIMATION_COUNT<<"\n" | ||
| 349 | + << vertexShader; | ||
| 350 | + | ||
| 351 | + Shader handle = Shader::New( vertexShaderStringStream.str(), fragmentShader ); | ||
| 352 | + | ||
| 353 | + // set the particle colors | ||
| 354 | + std::ostringstream oss; | ||
| 355 | + for( unsigned int i = 0; i < NUM_COLOR; i++ ) | ||
| 356 | + { | ||
| 357 | + oss.str(""); | ||
| 358 | + oss<< PARTICLE_COLOR_UNIFORM_NAME<< i << "]"; | ||
| 359 | + handle.RegisterProperty(oss.str(), PARTICLE_COLORS[i].RGB); | ||
| 360 | + } | ||
| 361 | + handle.RegisterProperty( "uRadius", 250.f ); | ||
| 362 | + handle.RegisterProperty( "uScale", ACTOR_SCALE ); | ||
| 363 | + | ||
| 364 | + // set the initial uniform values | ||
| 365 | + | ||
| 366 | + for( unsigned int i = 0; i < NUM_PARTICLE; i++ ) | ||
| 367 | + { | ||
| 368 | + oss.str(""); | ||
| 369 | + oss<< OPACITY_UNIFORM_NAME << i << "]"; | ||
| 370 | + handle.RegisterProperty(oss.str(), 1.f); | ||
| 371 | + } | ||
| 372 | + handle.RegisterProperty( PERCENTAGE_UNIFORM_NAME, 0.f ); | ||
| 373 | + handle.RegisterProperty( ACCELARATION_UNIFORM_NAME, 0.f ); | ||
| 374 | + handle.RegisterProperty( BREAK_UNIFORM_NAME, 0.f); | ||
| 375 | + handle.RegisterProperty( TAP_INDICES_UNIFORM_NAME, Vector2::ZERO); | ||
| 376 | + | ||
| 377 | + for( int i = 0; i < MAXIMUM_ANIMATION_COUNT; i++ ) | ||
| 378 | + { | ||
| 379 | + oss.str(""); | ||
| 380 | + oss<< TAP_OFFSET_UNIFORM_NAME << i << "]"; | ||
| 381 | + handle.RegisterProperty(oss.str(), 0.f); | ||
| 382 | + | ||
| 383 | + oss.str(""); | ||
| 384 | + oss<< TAP_POINT_UNIFORM_NAME << i << "]"; | ||
| 385 | + handle.RegisterProperty(oss.str(), Vector2( 250.0f,250.0f )); | ||
| 386 | + } | ||
| 387 | + | ||
| 388 | + return handle; | ||
| 389 | + } | ||
| 390 | + | ||
| 391 | +}; // namespace SparkleEffect | ||
| 392 | + | ||
| 393 | +#endif // DALI_SPARKLE_EFFECT_H |
packaging/com.samsung.dali-demo.spec
| @@ -2,7 +2,7 @@ | @@ -2,7 +2,7 @@ | ||
| 2 | 2 | ||
| 3 | Name: com.samsung.dali-demo | 3 | Name: com.samsung.dali-demo |
| 4 | Summary: The OpenGLES Canvas Core Demo | 4 | Summary: The OpenGLES Canvas Core Demo |
| 5 | -Version: 1.2.4 | 5 | +Version: 1.2.5 |
| 6 | Release: 1 | 6 | Release: 1 |
| 7 | Group: System/Libraries | 7 | Group: System/Libraries |
| 8 | License: Apache-2.0 | 8 | License: Apache-2.0 |
resources/images/sparkle_normal_background.png
0 → 100755
31.5 KB
resources/images/sparkle_particle.png
0 → 100755
1.07 KB
resources/po/as.po
| @@ -88,6 +88,9 @@ msgstr "পৃষ্ঠা লেআউট" | @@ -88,6 +88,9 @@ msgstr "পৃষ্ঠা লেআউট" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "পোপা মেনু" | 89 | msgstr "পোপা মেনু" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "অগ্রগতি বার" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "অংশ্যমান অৰ্কিড" | 95 | msgstr "অংশ্যমান অৰ্কিড" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "লিপি" | @@ -106,6 +109,9 @@ msgstr "লিপি" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "স্ক্ৰ'ল কৰক" | 110 | msgstr "স্ক্ৰ'ল কৰক" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "তাৰকা" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "শৈলী" | 116 | msgstr "শৈলী" |
| 111 | 117 |
resources/po/de.po
| @@ -88,6 +88,9 @@ msgstr "Seite wechseln" | @@ -88,6 +88,9 @@ msgstr "Seite wechseln" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "Popup-Menü" | 89 | msgstr "Popup-Menü" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "Fortschrittsanzeige" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "Grundformen" | 95 | msgstr "Grundformen" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "Scripting" | @@ -106,6 +109,9 @@ msgstr "Scripting" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "Scroll-Ansicht" | 110 | msgstr "Scroll-Ansicht" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "Funkeln" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "Styling" | 116 | msgstr "Styling" |
| 111 | 117 |
resources/po/en_GB.po
| @@ -88,6 +88,9 @@ msgstr "Page Turn View" | @@ -88,6 +88,9 @@ msgstr "Page Turn View" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "Popup" | 89 | msgstr "Popup" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "Progress Bar" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "Primitive Shapes" | 95 | msgstr "Primitive Shapes" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "Script-based UI" | @@ -106,6 +109,9 @@ msgstr "Script-based UI" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "Scroll View" | 110 | msgstr "Scroll View" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "Sparkle" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "Styling" | 116 | msgstr "Styling" |
| 111 | 117 |
resources/po/en_US.po
| @@ -88,6 +88,9 @@ msgstr "Page Turn View" | @@ -88,6 +88,9 @@ msgstr "Page Turn View" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "Popup" | 89 | msgstr "Popup" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "Progress Bar" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "Primitive Shapes" | 95 | msgstr "Primitive Shapes" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "Script-based UI" | @@ -106,6 +109,9 @@ msgstr "Script-based UI" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "Scroll View" | 110 | msgstr "Scroll View" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "Sparkle" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "Styling" | 116 | msgstr "Styling" |
| 111 | 117 |
resources/po/es.po
| @@ -88,6 +88,9 @@ msgstr "Vista de páginas" | @@ -88,6 +88,9 @@ msgstr "Vista de páginas" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "Popup" | 89 | msgstr "Popup" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "Barra de progreso" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "Primitvas 3D" | 95 | msgstr "Primitvas 3D" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "Interfaz definida por Script" | @@ -106,6 +109,9 @@ msgstr "Interfaz definida por Script" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "Vista de desplazamiento" | 110 | msgstr "Vista de desplazamiento" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "Brillar" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "Estilo" | 116 | msgstr "Estilo" |
| 111 | 117 |
resources/po/ko.po
| @@ -88,6 +88,9 @@ msgstr "책장 넘기기" | @@ -88,6 +88,9 @@ msgstr "책장 넘기기" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "팝업" | 89 | msgstr "팝업" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "진행률 표시 줄" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "기본 모양" | 95 | msgstr "기본 모양" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "스크립팅" | @@ -106,6 +109,9 @@ msgstr "스크립팅" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "스크롤 뷰" | 110 | msgstr "스크롤 뷰" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "불꽃" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "스타일링" | 116 | msgstr "스타일링" |
| 111 | 117 |
resources/po/ml.po
| @@ -88,6 +88,9 @@ msgstr "പേജ് ലേഔട്ട്" | @@ -88,6 +88,9 @@ msgstr "പേജ് ലേഔട്ട്" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "പോപപ്പ് മെനുവിൽ" | 89 | msgstr "പോപപ്പ് മെനുവിൽ" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "പ്രോഗ്രസ് ബാർ" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "അടിസ്ഥാന രൂപങ്ങൾ" | 95 | msgstr "അടിസ്ഥാന രൂപങ്ങൾ" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "സ്ക്രിപ്റ്റ്" | @@ -106,6 +109,9 @@ msgstr "സ്ക്രിപ്റ്റ്" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "സ്ക്രോള്ചെയ്യുക കാഴ്ച" | 110 | msgstr "സ്ക്രോള്ചെയ്യുക കാഴ്ച" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "നക്ഷത്ര" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "ശൈലി" | 116 | msgstr "ശൈലി" |
| 111 | 117 | ||
| @@ -131,4 +137,4 @@ msgid "DALI_DEMO_STR_TITLE_TEXT_SCROLLING" | @@ -131,4 +137,4 @@ msgid "DALI_DEMO_STR_TITLE_TEXT_SCROLLING" | ||
| 131 | msgstr "ടെക്സ്റ്റ് സ്ക്രോളിംഗ്" | 137 | msgstr "ടെക്സ്റ്റ് സ്ക്രോളിംഗ്" |
| 132 | 138 | ||
| 133 | msgid "DALI_DEMO_STR_TITLE_TILT_SENSOR" | 139 | msgid "DALI_DEMO_STR_TITLE_TILT_SENSOR" |
| 134 | -msgstr "ചെരിവ് സെൻസർ" | ||
| 135 | \ No newline at end of file | 140 | \ No newline at end of file |
| 141 | +msgstr "ചെരിവ് സെൻസർ" |
resources/po/ur.po
| @@ -88,6 +88,9 @@ msgstr "کتاب" | @@ -88,6 +88,9 @@ msgstr "کتاب" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "پاپ اپ" | 89 | msgstr "پاپ اپ" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "ترقی بار" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "سادہ ماڈلیے" | 95 | msgstr "سادہ ماڈلیے" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "سکرپٹ" | @@ -106,6 +109,9 @@ msgstr "سکرپٹ" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "سکرول ویو" | 110 | msgstr "سکرول ویو" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "سٹار" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "سٹائل" | 116 | msgstr "سٹائل" |
| 111 | 117 |
resources/po/zn_CH.po
| @@ -88,6 +88,9 @@ msgstr "翻页" | @@ -88,6 +88,9 @@ msgstr "翻页" | ||
| 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" | 88 | msgid "DALI_DEMO_STR_TITLE_POPUP" |
| 89 | msgstr "弹窗" | 89 | msgstr "弹窗" |
| 90 | 90 | ||
| 91 | +msgid "DALI_DEMO_STR_TITLE_PROGRESS_BAR" | ||
| 92 | +msgstr "进度条" | ||
| 93 | + | ||
| 91 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" | 94 | msgid "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES" |
| 92 | msgstr "基本形状" | 95 | msgstr "基本形状" |
| 93 | 96 | ||
| @@ -106,6 +109,9 @@ msgstr "脚本用户界面" | @@ -106,6 +109,9 @@ msgstr "脚本用户界面" | ||
| 106 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" | 109 | msgid "DALI_DEMO_STR_TITLE_SCROLL_VIEW" |
| 107 | msgstr "滚动视图" | 110 | msgstr "滚动视图" |
| 108 | 111 | ||
| 112 | +msgid "DALI_DEMO_STR_TITLE_SPARKLE" | ||
| 113 | +msgstr "火花" | ||
| 114 | + | ||
| 109 | msgid "DALI_DEMO_STR_TITLE_STYLING" | 115 | msgid "DALI_DEMO_STR_TITLE_STYLING" |
| 110 | msgstr "样式" | 116 | msgstr "样式" |
| 111 | 117 | ||
| @@ -131,4 +137,4 @@ msgid "DALI_DEMO_STR_TITLE_TEXT_SCROLLING" | @@ -131,4 +137,4 @@ msgid "DALI_DEMO_STR_TITLE_TEXT_SCROLLING" | ||
| 131 | msgstr "滚动文字" | 137 | msgstr "滚动文字" |
| 132 | 138 | ||
| 133 | msgid "DALI_DEMO_STR_TITLE_TILT_SENSOR" | 139 | msgid "DALI_DEMO_STR_TITLE_TILT_SENSOR" |
| 134 | -msgstr "倾斜传感器" | ||
| 135 | \ No newline at end of file | 140 | \ No newline at end of file |
| 141 | +msgstr "倾斜传感器" |
shared/dali-demo-strings.h
| @@ -16,8 +16,8 @@ | @@ -16,8 +16,8 @@ | ||
| 16 | */ | 16 | */ |
| 17 | 17 | ||
| 18 | /* This header file includes all multi language strings which need display */ | 18 | /* This header file includes all multi language strings which need display */ |
| 19 | -#ifndef __DALI_DEMO_STRINGS_H__ | ||
| 20 | -#define __DALI_DEMO_STRINGS_H__ | 19 | +#ifndef DALI_DEMO_STRINGS_H |
| 20 | +#define DALI_DEMO_STRINGS_H | ||
| 21 | 21 | ||
| 22 | #include <libintl.h> | 22 | #include <libintl.h> |
| 23 | 23 | ||
| @@ -62,12 +62,13 @@ extern "C" | @@ -62,12 +62,13 @@ extern "C" | ||
| 62 | #define DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE") | 62 | #define DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_NEGOTIATE_SIZE") |
| 63 | #define DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW") | 63 | #define DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW") |
| 64 | #define DALI_DEMO_STR_TITLE_POPUP dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_POPUP") | 64 | #define DALI_DEMO_STR_TITLE_POPUP dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_POPUP") |
| 65 | +#define DALI_DEMO_STR_TITLE_PROGRESS_BAR dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PROGRESS_BAR") | ||
| 65 | #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES") | 66 | #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES") |
| 66 | -#define DALI_DEMO_STR_TITLE_RADIAL_MENU dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RADIAL_MENU") | ||
| 67 | #define DALI_DEMO_STR_TITLE_REFRACTION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_REFRACTION") | 67 | #define DALI_DEMO_STR_TITLE_REFRACTION dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_REFRACTION") |
| 68 | #define DALI_DEMO_STR_TITLE_RENDERER_STENCIL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RENDERER_STENCIL") | 68 | #define DALI_DEMO_STR_TITLE_RENDERER_STENCIL dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_RENDERER_STENCIL") |
| 69 | #define DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI") | 69 | #define DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI") |
| 70 | #define DALI_DEMO_STR_TITLE_SCROLL_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCROLL_VIEW") | 70 | #define DALI_DEMO_STR_TITLE_SCROLL_VIEW dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SCROLL_VIEW") |
| 71 | +#define DALI_DEMO_STR_TITLE_SPARKLE dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SPARKLE") | ||
| 71 | #define DALI_DEMO_STR_TITLE_STYLING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_STYLING") | 72 | #define DALI_DEMO_STR_TITLE_STYLING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_STYLING") |
| 72 | #define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM") | 73 | #define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM") |
| 73 | #define DALI_DEMO_STR_TITLE_TEXTURED_MESH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXTURED_MESH") | 74 | #define DALI_DEMO_STR_TITLE_TEXTURED_MESH dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXTURED_MESH") |
| @@ -111,11 +112,11 @@ extern "C" | @@ -111,11 +112,11 @@ extern "C" | ||
| 111 | #define DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW "Page Turn View" | 112 | #define DALI_DEMO_STR_TITLE_PAGE_TURN_VIEW "Page Turn View" |
| 112 | #define DALI_DEMO_STR_TITLE_POPUP "Popup" | 113 | #define DALI_DEMO_STR_TITLE_POPUP "Popup" |
| 113 | #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES "Primitive Shapes" | 114 | #define DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES "Primitive Shapes" |
| 114 | -#define DALI_DEMO_STR_TITLE_RADIAL_MENU "Radial Menu" | ||
| 115 | #define DALI_DEMO_STR_TITLE_REFRACTION "Refract Effect" | 115 | #define DALI_DEMO_STR_TITLE_REFRACTION "Refract Effect" |
| 116 | #define DALI_DEMO_STR_TITLE_RENDERER_STENCIL "Renderer Stencils" | 116 | #define DALI_DEMO_STR_TITLE_RENDERER_STENCIL "Renderer Stencils" |
| 117 | #define DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI "Script Based UI" | 117 | #define DALI_DEMO_STR_TITLE_SCRIPT_BASED_UI "Script Based UI" |
| 118 | #define DALI_DEMO_STR_TITLE_SCROLL_VIEW "Scroll View" | 118 | #define DALI_DEMO_STR_TITLE_SCROLL_VIEW "Scroll View" |
| 119 | +#define DALI_DEMO_STR_TITLE_SPARKLE "Sparkle" | ||
| 119 | #define DALI_DEMO_STR_TITLE_STYLING "Styling" | 120 | #define DALI_DEMO_STR_TITLE_STYLING "Styling" |
| 120 | #define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM "Super Blur and Bloom" | 121 | #define DALI_DEMO_STR_TITLE_SUPER_BLUR_BLOOM "Super Blur and Bloom" |
| 121 | #define DALI_DEMO_STR_TITLE_TEXTURED_MESH "Mesh Texture" | 122 | #define DALI_DEMO_STR_TITLE_TEXTURED_MESH "Mesh Texture" |
| @@ -125,6 +126,7 @@ extern "C" | @@ -125,6 +126,7 @@ extern "C" | ||
| 125 | #define DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE "Text Scripts" | 126 | #define DALI_DEMO_STR_TITLE_TEXT_LABEL_MULTI_LANGUAGE "Text Scripts" |
| 126 | #define DALI_DEMO_STR_TITLE_TEXT_SCROLLING "Text Scrolling" | 127 | #define DALI_DEMO_STR_TITLE_TEXT_SCROLLING "Text Scrolling" |
| 127 | #define DALI_DEMO_STR_TITLE_TILT_SENSOR "Tilt Sensor" | 128 | #define DALI_DEMO_STR_TITLE_TILT_SENSOR "Tilt Sensor" |
| 129 | +#define DALI_DEMO_STR_TITLE_PROGRESS_BAR "Progress Bar" | ||
| 128 | 130 | ||
| 129 | #endif | 131 | #endif |
| 130 | 132 | ||
| @@ -132,4 +134,4 @@ extern "C" | @@ -132,4 +134,4 @@ extern "C" | ||
| 132 | } | 134 | } |
| 133 | #endif // __cplusplus | 135 | #endif // __cplusplus |
| 134 | 136 | ||
| 135 | -#endif // __DALI_DEMO_STRINGS_H__ | 137 | +#endif // DALI_DEMO_STRINGS_H |