2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @file transition-application.cpp
19 * @brief Application class for showing stylable transitions
23 #include "transition-application.h"
26 #include <dali-toolkit/dali-toolkit.h>
27 #include "beat-control.h"
30 #include <dali-toolkit/devel-api/controls/table-view/table-view.h>
35 using namespace Dali::Toolkit;
40 void SetLabelText( Button button, const char* label )
42 button.SetProperty( Toolkit::Button::Property::LABEL, label );
50 const char* TransitionApplication::DEMO_THEME_ONE_PATH( DEMO_STYLE_DIR "style-example-theme-one.json" );
51 const char* DALI_LOGO_PATH( DEMO_IMAGE_DIR "Logo-for-demo.png" );
52 const char* DALI_ROBOT_MODEL_PATH( DEMO_MODEL_DIR "ToyRobot-Metal.obj" );
53 const char* DALI_ROBOT_MATERIAL_PATH( DEMO_MODEL_DIR "ToyRobot-Metal.mtl" );
55 TransitionApplication::TransitionApplication( Application& application )
56 : mApplication( application ),
60 mVisualIndex( Property::INVALID_INDEX ),
61 mActionIndex( Property::INVALID_INDEX )
63 application.InitSignal().Connect( this, &TransitionApplication::Create );
66 TransitionApplication::~TransitionApplication()
70 void TransitionApplication::Create( Application& application )
72 Stage stage = Stage::GetCurrent();
73 stage.KeyEventSignal().Connect(this, &TransitionApplication::OnKeyEvent);
74 stage.SetBackgroundColor( Vector4( 0.1f, 0.1f, 0.1f, 1.0f ) );
76 // Hide the indicator bar
77 application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE );
80 TableView contentLayout = TableView::New( 4, 1 );
81 contentLayout.SetProperty( Dali::Actor::Property::NAME,"ContentLayout");
82 contentLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
83 contentLayout.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
84 contentLayout.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
85 contentLayout.SetCellPadding( Vector2( 0.0f, 5.0f ) );
87 // Assign all rows the size negotiation property of fitting to children
89 stage.Add( contentLayout );
91 mTitle = TextLabel::New( "Custom Control Transition Example" );
92 mTitle.SetProperty( Dali::Actor::Property::NAME, "Title" );
93 mTitle.SetStyleName("Title");
94 mTitle.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
95 mTitle.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
96 mTitle.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
97 contentLayout.Add( mTitle );
98 contentLayout.SetFitHeight(0); // Fill width
100 mBeatControl = BeatControl::New();
101 mBeatControl.SetProperty( Dali::Actor::Property::NAME,"BeatControl");
102 mBeatControl.SetProperty( BeatControl::Property::BEAT_VISUAL, Property::Map()
103 .Add( Visual::Property::TRANSFORM, Property::Map()
104 .Add( Visual::Transform::Property::SIZE, Vector2(0.5f, 0.5f) ) ) );
106 mBeatControl.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER );
107 mBeatControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
108 mBeatControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
109 contentLayout.Add( mBeatControl );
110 // beat control should fill the tableview cell, so no change to default parameters
112 TableView visualTypeLayout = TableView::New( 1, NUMBER_OF_VISUAL_BUTTONS );
113 visualTypeLayout.SetProperty( Dali::Actor::Property::NAME,"VisualTypeLayout");
114 visualTypeLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
115 visualTypeLayout.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
116 visualTypeLayout.SetFitHeight( 0 );
118 contentLayout.Add( visualTypeLayout );
119 contentLayout.SetFitHeight(2);
121 for( int i=0; i<NUMBER_OF_VISUAL_BUTTONS; ++i )
124 CreateVisualMap( i, map );
125 map.Add( Visual::Property::TRANSFORM, Property::Map()
126 .Add( Visual::Transform::Property::SIZE, Vector2(0.8f, 0.8f) ) );
127 mVisualButtons[i] = BeatControl::New();
128 mVisualButtons[i].SetProperty( BeatControl::Property::BEAT_VISUAL, map );
129 mVisualButtons[i].SetProperty( Dali::Actor::Property::NAME,"VisualButton");
130 mVisualButtons[i].SetStyleName("VisualButton");
131 mVisualButtons[i].SetProperty( Actor::Property::SIZE, Vector2(0, 50) );
132 mVisualButtons[i].SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
133 mVisualButtons[i].SetResizePolicy( ResizePolicy::FIXED, Dimension::HEIGHT );
134 mVisualIndex = mVisualButtons[i].RegisterProperty( "visualId", i, Property::READ_WRITE );
135 mVisualButtons[i].TouchSignal().Connect( this, &TransitionApplication::OnVisualButtonClicked );
136 visualTypeLayout.AddChild( mVisualButtons[i], TableView::CellPosition( 0, i ) );
139 TableView actionButtonLayout = TableView::New( 1, NUMBER_OF_ACTION_BUTTONS+1 );
140 actionButtonLayout.SetProperty( Dali::Actor::Property::NAME,"ThemeButtonsLayout");
141 actionButtonLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
142 actionButtonLayout.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
143 actionButtonLayout.SetFitHeight( 0 );
145 TextLabel label = TextLabel::New( "Action: ");
146 label.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
147 label.SetStyleName("ActionLabel");
148 actionButtonLayout.AddChild( label, TableView::CellPosition( 0, 0 ) );
149 actionButtonLayout.SetCellAlignment( TableView::CellPosition( 0, 0 ), HorizontalAlignment::LEFT, VerticalAlignment::CENTER );
151 for( int i=0; i<NUMBER_OF_ACTION_BUTTONS; ++i )
153 mActionButtons[i] = PushButton::New();
154 mActionButtons[i].SetProperty( Dali::Actor::Property::NAME,"ActionButton");
155 mActionButtons[i].SetStyleName("ActionButton");
156 mActionButtons[i].SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
157 mActionButtons[i].SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
158 mActionIndex = mActionButtons[i].RegisterProperty( "actionId", i, Property::READ_WRITE );
159 mActionButtons[i].ClickedSignal().Connect( this, &TransitionApplication::OnActionButtonClicked );
160 actionButtonLayout.AddChild( mActionButtons[i], TableView::CellPosition( 0, 1+i ) );
163 SetLabelText( mActionButtons[0], "Bounce" );
164 SetLabelText( mActionButtons[1], "X" );
165 SetLabelText( mActionButtons[2], "Y" );
166 SetLabelText( mActionButtons[3], "Fade" );
168 contentLayout.Add( actionButtonLayout );
169 contentLayout.SetFitHeight(3);
172 void TransitionApplication::CreateVisualMap( int index, Property::Map& map )
178 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
179 map[ ColorVisual::Property::MIX_COLOR ] = Color::YELLOW;
184 map[ Toolkit::Visual::Property::TYPE ] = Visual::BORDER;
185 map[ BorderVisual::Property::COLOR ] = Color::GREEN;
186 map[ BorderVisual::Property::SIZE ] = 5;
191 map[ Toolkit::Visual::Property::TYPE ] = Visual::GRADIENT;
193 Property::Array stopOffsets;
194 stopOffsets.PushBack( 0.0f );
195 stopOffsets.PushBack( 0.3f );
196 stopOffsets.PushBack( 0.6f );
197 stopOffsets.PushBack( 0.8f );
198 stopOffsets.PushBack( 1.0f );
199 map[ GradientVisual::Property::STOP_OFFSET ] = stopOffsets;
201 Property::Array stopColors;
202 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 255.f )/255.f );
203 stopColors.PushBack( Vector4( 196.f, 198.f, 71.f, 122.f )/255.f );
204 stopColors.PushBack( Vector4( 214.f, 37.f, 139.f, 191.f )/255.f );
205 stopColors.PushBack( Vector4( 129.f, 198.f, 193.f, 150.f )/255.f );
206 stopColors.PushBack( Color::YELLOW );
207 map[ GradientVisual::Property::STOP_COLOR ] = stopColors;
208 map[ GradientVisual::Property::START_POSITION ] = Vector2(-0.5f, -0.5f );
209 map[ GradientVisual::Property::END_POSITION ] = Vector2( 0.5f, 0.5f );
214 map[ Toolkit::Visual::Property::TYPE ] = Visual::IMAGE;
215 map[ ImageVisual::Property::URL ] = DALI_LOGO_PATH;
220 map[ Toolkit::Visual::Property::TYPE ] = Visual::IMAGE;
221 map[ ImageVisual::Property::URL ] = DEMO_IMAGE_DIR "preMultAlpha.png";
222 map[ Visual::Property::PREMULTIPLIED_ALPHA ] = true;
228 map[ Toolkit::Visual::Property::TYPE ] = Visual::MESH;
229 map[ MeshVisual::Property::OBJECT_URL ] = DALI_ROBOT_MODEL_PATH;
230 map[ MeshVisual::Property::MATERIAL_URL ] = DALI_ROBOT_MATERIAL_PATH;
231 map[ MeshVisual::Property::TEXTURES_PATH ] = DEMO_IMAGE_DIR;
232 map[ MeshVisual::Property::SHADING_MODE ] = MeshVisual::ShadingMode::TEXTURED_WITH_DETAILED_SPECULAR_LIGHTING;
238 map[ Toolkit::Visual::Property::TYPE ] = Visual::PRIMITIVE;
240 map[ PrimitiveVisual::Property::SHAPE ] = PrimitiveVisual::Shape::BEVELLED_CUBE;
241 map[ PrimitiveVisual::Property::BEVEL_PERCENTAGE ] = 0.3f;
242 map[ PrimitiveVisual::Property::BEVEL_SMOOTHNESS ] = 0.0f;
243 map[ PrimitiveVisual::Property::SCALE_DIMENSIONS ] = Vector3(1.0f,1.0f,0.3f);
244 map[ PrimitiveVisual::Property::MIX_COLOR ] = Vector4(0.7f, 0.5f, 0.05f, 1.0f);
252 map[ Toolkit::Visual::Property::TYPE ] = Visual::IMAGE;
253 map[ ImageVisual::Property::URL ] = DEMO_IMAGE_DIR "button-up-16.9.png";
259 map[ Toolkit::Visual::Property::TYPE ] = Visual::IMAGE;
260 map[ ImageVisual::Property::URL ] = DEMO_IMAGE_DIR "Kid1.svg";
266 map[ Toolkit::Visual::Property::TYPE ] = Visual::TEXT;
267 map[ TextVisual::Property::TEXT ] = "Text";
268 map[ TextVisual::Property::TEXT_COLOR ] = Color::CYAN;
269 map[ TextVisual::Property::POINT_SIZE ] = 10;
275 map[ Toolkit::Visual::Property::TYPE ] = Visual::COLOR;
276 map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
282 bool TransitionApplication::OnVisualButtonClicked( Actor actor, const TouchData& touchData )
284 if( touchData.GetState(0) == PointState::FINISHED )
286 int visual = actor.GetProperty<int>( mVisualIndex );
288 CreateVisualMap( visual, map );
289 map.Add( Visual::Property::TRANSFORM, Property::Map()
290 .Add( Visual::Transform::Property::SIZE, Vector2( 0.5f, 0.5f ) ) );
291 mBeatControl.SetProperty( BeatControl::Property::BEAT_VISUAL, map );
296 bool TransitionApplication::OnActionButtonClicked( Button button )
298 int action = button.GetProperty<int>( mActionIndex );
303 mBeatControl.StartBounceAnimation();
308 mBeatControl.StartXAnimation();
313 mBeatControl.StartYAnimation();
318 mBeatControl.StartFadeAnimation();
326 void TransitionApplication::OnKeyEvent( const KeyEvent& keyEvent )
328 static int keyPressed = 0;
330 if( keyEvent.state == KeyEvent::Down)
332 if( keyPressed == 0 ) // Is this the first down event?
334 printf("Key pressed: %s %d\n", keyEvent.keyPressedName.c_str(), keyEvent.keyCode );
336 if( IsKey( keyEvent, DALI_KEY_ESCAPE) || IsKey( keyEvent, DALI_KEY_BACK ) )
340 else if( keyEvent.keyPressedName.compare("Return") == 0 )
346 else if( keyEvent.state == KeyEvent::Up )