summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--com.samsung.dali-demo.xml3
-rw-r--r--demo/dali-demo.cpp1
-rw-r--r--examples/styling/image-channel-control-impl.cpp2
-rw-r--r--examples/transitions/beat-control-impl.cpp280
-rw-r--r--examples/transitions/beat-control-impl.h145
-rw-r--r--examples/transitions/beat-control.cpp89
-rw-r--r--examples/transitions/beat-control.h121
-rw-r--r--examples/transitions/transition-application.cpp184
-rw-r--r--examples/transitions/transition-application.h70
-rw-r--r--examples/transitions/transition-example.cpp38
-rwxr-xr-xresources/po/en_GB.po3
-rwxr-xr-xresources/po/en_US.po3
-rw-r--r--resources/style/mobile/style-example-theme-one.json.in64
-rw-r--r--resources/style/style-example-theme-one.json.in64
-rw-r--r--shared/dali-demo-strings.h3
15 files changed, 1067 insertions, 3 deletions
diff --git a/com.samsung.dali-demo.xml b/com.samsung.dali-demo.xml
index 2a03e2a9..bf0b01c3 100644
--- a/com.samsung.dali-demo.xml
+++ b/com.samsung.dali-demo.xml
@@ -175,4 +175,7 @@
<ui-application appid="fpp-game.example" exec="/usr/apps/com.samsung.dali-demo/bin/fpp-game.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
<label>First Person Camera Game</label>
</ui-application>
+ <ui-application appid="transitions.example" exec="/usr/apps/com.samsung.dali-demo/bin/transitions.example" nodisplay="true" multiple="false" type="c++app" taskmanage="true">
+ <label>Visual Transitions</label>
+ </ui-application>
</manifest>
diff --git a/demo/dali-demo.cpp b/demo/dali-demo.cpp
index ab6b4b5f..d3bde9f5 100644
--- a/demo/dali-demo.cpp
+++ b/demo/dali-demo.cpp
@@ -82,6 +82,7 @@ int DALI_EXPORT_API main(int argc, char **argv)
demo.AddExample(Example("primitive-shapes.example", DALI_DEMO_STR_TITLE_PRIMITIVE_SHAPES));
demo.AddExample(Example("styling.example", DALI_DEMO_STR_TITLE_STYLING));
demo.AddExample(Example("sparkle.example", DALI_DEMO_STR_TITLE_SPARKLE));
+ demo.AddExample(Example("transitions.example", DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS));
demo.AddExample(Example("progress-bar.example", DALI_DEMO_STR_TITLE_PROGRESS_BAR));
demo.AddExample(Example("contact-cards.example", DALI_DEMO_STR_TITLE_CONTACT_CARDS));
demo.AddExample(Example("flex-container.example", DALI_DEMO_STR_TITLE_FLEXBOX_PLAYGROUND));
diff --git a/examples/styling/image-channel-control-impl.cpp b/examples/styling/image-channel-control-impl.cpp
index 8db5e399..a6b41c79 100644
--- a/examples/styling/image-channel-control-impl.cpp
+++ b/examples/styling/image-channel-control-impl.cpp
@@ -112,8 +112,6 @@ void ImageChannelControl::SetVisibility( bool visibility )
{
printf("ImageChannelControl %s: SetVisibility( %s )\n", Self().GetName().c_str(), visibility?"T":"F" );
- Animation animation;
-
if( mAnimation )
{
mAnimation.Stop();
diff --git a/examples/transitions/beat-control-impl.cpp b/examples/transitions/beat-control-impl.cpp
new file mode 100644
index 00000000..6b0f3e6b
--- /dev/null
+++ b/examples/transitions/beat-control-impl.cpp
@@ -0,0 +1,280 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "beat-control-impl.h"
+#include <dali-toolkit/dali-toolkit.h>
+#include <dali/public-api/object/type-registry-helper.h>
+#include <dali-toolkit/devel-api/align-enums.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
+
+#include <cstdio>
+
+using namespace Dali; // Needed for macros
+using namespace Dali::Toolkit;
+
+namespace Demo
+{
+namespace Internal
+{
+
+namespace
+{
+
+
+Dali::BaseHandle Create()
+{
+ return Demo::BeatControl::New();
+}
+
+DALI_TYPE_REGISTRATION_BEGIN( BeatControl, Dali::Toolkit::Control, Create );
+
+DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "bounceTransition", STRING, BOUNCE_TRANSITION );
+DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "leftTransition", STRING, LEFT_TRANSITION );
+DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "upTransition", STRING, UP_TRANSITION );
+DALI_PROPERTY_REGISTRATION( Demo, BeatControl, "beatVisual", MAP, BEAT_VISUAL );
+DALI_TYPE_REGISTRATION_END();
+
+
+Toolkit::TransitionData ConvertPropertyToTransition( const Property::Value& value )
+{
+ Toolkit::TransitionData transitionData;
+
+ if( value.GetType() == Property::ARRAY )
+ {
+ transitionData = Toolkit::TransitionData::New( *value.GetArray());
+ }
+ else if( value.GetType() == Property::MAP )
+ {
+ transitionData = Toolkit::TransitionData::New( *value.GetMap() );
+ }
+ return transitionData;
+}
+
+} // anonymous namespace
+
+
+Internal::BeatControl::BeatControl()
+: Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) )
+{
+}
+
+Internal::BeatControl::~BeatControl()
+{
+}
+
+Demo::BeatControl Internal::BeatControl::New()
+{
+ IntrusivePtr<Internal::BeatControl> impl = new Internal::BeatControl();
+ Demo::BeatControl handle = Demo::BeatControl( *impl );
+ impl->Initialize();
+ return handle;
+}
+
+
+void BeatControl::StartBounceAnimation()
+{
+ if( mAnimation )
+ {
+ mAnimation.Stop();
+ mAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnBounceAnimationFinished );
+ OnBounceAnimationFinished(mAnimation);
+ }
+
+ mAnimation = CreateTransition( mBounceTransition );
+ mAnimation.FinishedSignal().Connect( this, &BeatControl::OnBounceAnimationFinished );
+ mAnimation.Play();
+}
+
+
+void BeatControl::StartXAnimation()
+{
+ if( mXAnimation )
+ {
+ mXAnimation.Stop();
+ mXAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnXAnimationFinished );
+ OnXAnimationFinished(mXAnimation);
+ }
+
+ mXAnimation = CreateTransition( mLeftTransition );
+ mXAnimation.FinishedSignal().Connect( this, &BeatControl::OnXAnimationFinished );
+ mXAnimation.Play();
+}
+
+void BeatControl::StartYAnimation()
+{
+ if( mYAnimation )
+ {
+ mYAnimation.Stop();
+ mYAnimation.FinishedSignal().Disconnect( this, &BeatControl::OnYAnimationFinished );
+ OnYAnimationFinished(mYAnimation);
+ }
+
+ mYAnimation = CreateTransition( mUpTransition );
+ mYAnimation.FinishedSignal().Connect( this, &BeatControl::OnYAnimationFinished );
+ mYAnimation.Play();
+}
+
+
+void BeatControl::OnBounceAnimationFinished( Animation& src )
+{
+ // Do stuff
+}
+void BeatControl::OnXAnimationFinished( Animation& src )
+{
+ // Do stuff
+}
+void BeatControl::OnYAnimationFinished( Animation& src )
+{
+ // Do stuff
+}
+
+void BeatControl::OnInitialize()
+{
+ Actor self = Self();
+}
+
+void BeatControl::OnStageConnection( int depth )
+{
+ Control::OnStageConnection( depth );
+}
+
+void BeatControl::OnStageDisconnection()
+{
+ Control::OnStageDisconnection();
+}
+
+void BeatControl::OnSizeSet( const Vector3& targetSize )
+{
+ Control::OnSizeSet( targetSize );
+ RelayoutVisuals( Vector2( targetSize ) );
+}
+
+void BeatControl::OnRelayout( const Vector2& targetSize, RelayoutContainer& container )
+{
+ RelayoutVisuals( targetSize );
+}
+
+void BeatControl::RelayoutVisuals( const Vector2& targetSize )
+{
+ if( mVisual )
+ {
+ Vector2 size( targetSize );
+ Property::Map transformMap;
+ // Make the visual half the size of the control, but leave
+ // origin and anchor point at center, position is relative, but Zer0
+ transformMap[ DevelVisual::Transform::Property::SIZE ] = Vector2(0.5, 0.5);
+ mVisual.SetTransformAndSize( transformMap, size );
+
+ // @todo We must stop this clashing with a transform animation
+ }
+}
+
+Vector3 BeatControl::GetNaturalSize()
+{
+ if( mVisual )
+ {
+ Vector2 naturalSize;
+ mVisual.GetNaturalSize(naturalSize);
+ return Vector3(naturalSize);
+ }
+ return Vector3::ZERO;
+}
+
+void BeatControl::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
+{
+ // Chain up.
+ Control::OnStyleChange( styleManager, change );
+}
+
+
+///////////////////////////////////////////////////////////
+//
+// Properties
+//
+
+void BeatControl::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
+{
+ Demo::BeatControl beatControl = Demo::BeatControl::DownCast( Dali::BaseHandle( object ) );
+
+ if( beatControl )
+ {
+ BeatControl& impl = GetImpl( beatControl );
+ Actor self = impl.Self();
+ switch ( index )
+ {
+ case Demo::BeatControl::Property::BEAT_VISUAL:
+ {
+ Property::Map* map = value.GetMap();
+ if( map )
+ {
+ impl.mVisual = Toolkit::VisualFactory::Get().CreateVisual( *map );
+ impl.RegisterVisual( Demo::BeatControl::Property::BEAT_VISUAL, impl.mVisual );
+ }
+ break;
+ }
+ case Demo::BeatControl::Property::BOUNCE_TRANSITION:
+ {
+ impl.mBounceTransition = ConvertPropertyToTransition( value );
+ break;
+ }
+ case Demo::BeatControl::Property::LEFT_TRANSITION:
+ {
+ impl.mLeftTransition = ConvertPropertyToTransition( value );
+ break;
+ }
+ case Demo::BeatControl::Property::UP_TRANSITION:
+ {
+ impl.mUpTransition = ConvertPropertyToTransition( value );
+ break;
+ }
+ }
+ }
+}
+
+Property::Value BeatControl::GetProperty( BaseObject* object, Property::Index propertyIndex )
+{
+ Property::Value value;
+
+ Demo::BeatControl beatControl = Demo::BeatControl::DownCast( Dali::BaseHandle( object ) );
+
+ if ( beatControl )
+ {
+ BeatControl& impl = GetImpl( beatControl );
+ switch ( propertyIndex )
+ {
+ case Demo::BeatControl::Property::BEAT_VISUAL:
+ {
+ if( impl.mVisual )
+ {
+ Property::Map map;
+ impl.mVisual.CreatePropertyMap(map);
+ value = map;
+ }
+ break;
+ }
+ case Demo::BeatControl::Property::BOUNCE_TRANSITION:
+ default:
+ break;
+ }
+ }
+
+ return value;
+}
+
+
+} // Internal
+} // Demo
diff --git a/examples/transitions/beat-control-impl.h b/examples/transitions/beat-control-impl.h
new file mode 100644
index 00000000..e4f9a99e
--- /dev/null
+++ b/examples/transitions/beat-control-impl.h
@@ -0,0 +1,145 @@
+#ifndef DALI_DEMO_INTERNAL_BEAT_CONTROL_IMPL_H
+#define DALI_DEMO_INTERNAL_BEAT_CONTROL_IMPL_H
+
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "beat-control.h"
+#include <dali/public-api/animation/animation.h>
+#include <dali-toolkit/public-api/controls/control-impl.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-base.h>
+#include <dali-toolkit/devel-api/visual-factory/transition-data.h>
+
+namespace Demo
+{
+
+namespace Internal // To use TypeRegistry, handle and body classes need the same name
+{
+
+class BeatControl : public Dali::Toolkit::Internal::Control
+{
+public:
+ /**
+ * Instantiate a new BeatControl object
+ */
+ static Demo::BeatControl New();
+ BeatControl();
+ ~BeatControl();
+
+public: // API
+ void StartBounceAnimation();
+
+ void StartXAnimation();
+
+ void StartYAnimation();
+
+public: // Properties
+ /**
+ * Called when a property of an object of this type is set.
+ * @param[in] object The object whose property is set.
+ * @param[in] index The property index.
+ * @param[in] value The new property value.
+ */
+ static void SetProperty( Dali::BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value );
+
+ /**
+ * Called to retrieve a property of an object of this type.
+ * @param[in] object The object whose property is to be retrieved.
+ * @param[in] index The property index.
+ * @return The current value of the property.
+ */
+ static Dali::Property::Value GetProperty( Dali::BaseObject* object, Dali::Property::Index propertyIndex );
+
+private: // From Control
+ /**
+ * @copydoc Toolkit::Control::OnInitialize()
+ */
+ virtual void OnInitialize();
+
+ /**
+ * @copydoc Toolkit::Control::OnStageConnect()
+ */
+ virtual void OnStageConnection( int depth );
+
+ /**
+ * @copydoc Toolkit::Control::OnStageDisconnection()
+ */
+ virtual void OnStageDisconnection();
+
+ /**
+ * @copydoc Toolkit::Control::OnSizeSet()
+ */
+ virtual void OnSizeSet( const Dali::Vector3& targetSize );
+
+ /**
+ * @copydoc Toolkit::Control::OnRelayout()
+ */
+ virtual void OnRelayout( const Dali::Vector2& targetSize, Dali::RelayoutContainer& container );
+ /**
+ * @copydoc Toolkit::Control::GetNaturalSize
+ */
+ virtual Dali::Vector3 GetNaturalSize();
+
+ /**
+ * @copydoc Toolkit::Control::OnStyleChange
+ */
+ virtual void OnStyleChange( Dali::Toolkit::StyleManager styleManager, Dali::StyleChange::Type change );
+
+private:
+ void OnBounceAnimationFinished( Dali::Animation& handle );
+ void OnXAnimationFinished( Dali::Animation& src );
+ void OnYAnimationFinished( Dali::Animation& src );
+
+ /**
+ * Relayout the visuals as a result of size negotiation
+ */
+ void RelayoutVisuals( const Dali::Vector2& targetSize );
+
+private:
+ //undefined
+ BeatControl( const BeatControl& );
+ BeatControl& operator=( const BeatControl& );
+
+private:
+ // Implementation details
+ Dali::Toolkit::Visual::Base mVisual;
+ Dali::Toolkit::TransitionData mBounceTransition;
+ Dali::Toolkit::TransitionData mLeftTransition;
+ Dali::Toolkit::TransitionData mUpTransition;
+ Dali::Animation mAnimation;
+ Dali::Animation mXAnimation;
+ Dali::Animation mYAnimation;
+};
+
+} // Internal
+
+inline Internal::BeatControl& GetImpl( Demo::BeatControl& handle )
+{
+ DALI_ASSERT_ALWAYS( handle );
+ Dali::RefObject& object = handle.GetImplementation();
+ return static_cast<Internal::BeatControl&>(object);
+}
+
+inline const Internal::BeatControl& GetImpl( const Demo::BeatControl& handle )
+{
+ DALI_ASSERT_ALWAYS( handle );
+ const Dali::RefObject& object = handle.GetImplementation();
+ return static_cast<const Internal::BeatControl&>(object);
+}
+
+} // Demo
+
+#endif // DALI_DEMO_BEAT_CONTROL_IMPL_H
diff --git a/examples/transitions/beat-control.cpp b/examples/transitions/beat-control.cpp
new file mode 100644
index 00000000..c145b5e6
--- /dev/null
+++ b/examples/transitions/beat-control.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "beat-control.h"
+#include "beat-control-impl.h"
+
+namespace Demo
+{
+
+BeatControl::BeatControl()
+{
+}
+
+BeatControl::BeatControl( const BeatControl& beatControl )
+: Control( beatControl )
+{
+}
+
+BeatControl& BeatControl::operator= ( const BeatControl& rhs )
+{
+ if( &rhs != this )
+ {
+ Control::operator=( rhs );
+ }
+ return *this;
+}
+
+BeatControl::~BeatControl()
+{
+}
+
+BeatControl BeatControl::New()
+{
+ BeatControl beatControl = Internal::BeatControl::New();
+ return beatControl;
+}
+
+BeatControl BeatControl::New( const std::string& url )
+{
+ BeatControl beatControl = Internal::BeatControl::New();
+ return beatControl;
+}
+
+BeatControl BeatControl::DownCast( BaseHandle handle )
+{
+ return Control::DownCast< BeatControl, Internal::BeatControl > ( handle );
+}
+
+void BeatControl::StartBounceAnimation()
+{
+ GetImpl(*this).StartBounceAnimation();
+}
+
+void BeatControl::StartXAnimation()
+{
+ GetImpl(*this).StartXAnimation();
+}
+void BeatControl::StartYAnimation()
+{
+ GetImpl(*this).StartYAnimation();
+}
+
+
+BeatControl::BeatControl( Internal::BeatControl& implementation )
+: Control( implementation )
+{
+}
+
+BeatControl::BeatControl( Dali::Internal::CustomActor* internal )
+: Control( internal )
+{
+ VerifyCustomActorPointer< Internal::BeatControl >( internal ) ;
+}
+
+
+} //namespace Demo
diff --git a/examples/transitions/beat-control.h b/examples/transitions/beat-control.h
new file mode 100644
index 00000000..c424d891
--- /dev/null
+++ b/examples/transitions/beat-control.h
@@ -0,0 +1,121 @@
+#ifndef DALI_DEMO_BEAT_CONTROL_H
+#define DALI_DEMO_BEAT_CONTROL_H
+
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <dali-toolkit/dali-toolkit.h>
+#include <string>
+
+namespace Demo
+{
+
+namespace Internal
+{
+// All type registered types need to have the same name for the body and the handle
+class BeatControl;
+}
+
+/**
+ * Control that allows the RGB channels of an image to be altered.
+ */
+class BeatControl : public Dali::Toolkit::Control
+{
+public:
+ /**
+ * The start and end property ranges for this control
+ */
+ enum PropertyRange
+ {
+ PROPERTY_START_INDEX = Dali::Toolkit::Control::CONTROL_PROPERTY_END_INDEX + 1,
+ PROPERTY_END_INDEX = PROPERTY_START_INDEX + 1000,
+ ANIMATABLE_PROPERTY_START_INDEX = Dali::ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX,
+ ANIMATABLE_PROPERTY_END_INDEX = ANIMATABLE_PROPERTY_START_INDEX+1000
+ };
+
+ struct Property
+ {
+ enum
+ {
+ BOUNCE_TRANSITION = PROPERTY_START_INDEX,
+ LEFT_TRANSITION,
+ UP_TRANSITION,
+ BEAT_VISUAL
+ };
+ };
+
+public: // Construction / destruction
+
+ /**
+ * Create an uninitialized handle
+ */
+ BeatControl();
+
+ /**
+ * Create a new image channel control without an image. Use
+ * SetImage to give this control an image
+ */
+ static BeatControl New();
+
+ /**
+ * Create a new image channel control from a given URL
+ */
+ static BeatControl New( const std::string& url );
+
+ /**
+ * Destructor. This is non-virtual since derived Handle types must not
+ * contain data or virtual methods
+ */
+ ~BeatControl();
+
+ /**
+ * Copy Constructor
+ */
+ BeatControl( const BeatControl& beatControl );
+
+ /**
+ * Assignment Operator
+ */
+ BeatControl& operator=( const BeatControl& beatControl );
+
+ /**
+ * Downcast
+ */
+ static BeatControl DownCast( BaseHandle handle );
+
+public: // API
+
+ void StartBounceAnimation();
+
+ void StartXAnimation();
+
+ void StartYAnimation();
+
+public: // Not for public use
+ /**
+ * Create a handle from an implementation
+ */
+ BeatControl( Internal::BeatControl& implementation );
+
+ /**
+ * Allow the creation of an BeatControl handle from an internal CustomActor pointer
+ */
+ BeatControl( Dali::Internal::CustomActor* internal );
+};
+
+} // namespace Demo
+
+#endif // DALI_DEMO_BEAT_CONTROL_H
diff --git a/examples/transitions/transition-application.cpp b/examples/transitions/transition-application.cpp
new file mode 100644
index 00000000..8828530e
--- /dev/null
+++ b/examples/transitions/transition-application.cpp
@@ -0,0 +1,184 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file transition-application.cpp
+ * @brief Application class for showing stylable transitions
+ */
+
+// Class include
+#include "transition-application.h"
+
+// External includes
+#include <dali-toolkit/dali-toolkit.h>
+#include "beat-control.h"
+#include <cstdio>
+#include <sstream>
+
+// Internal includes
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+namespace Demo
+{
+
+const char* TransitionApplication::DEMO_THEME_ONE_PATH( DEMO_STYLE_DIR "style-example-theme-one.json" );
+
+
+TransitionApplication::TransitionApplication( Application& application )
+: mApplication( application )
+{
+ application.InitSignal().Connect( this, &TransitionApplication::Create );
+}
+
+TransitionApplication::~TransitionApplication()
+{
+}
+
+void TransitionApplication::Create( Application& application )
+{
+ Stage stage = Stage::GetCurrent();
+ stage.KeyEventSignal().Connect(this, &TransitionApplication::OnKeyEvent);
+ stage.SetBackgroundColor( Vector4( 0.1f, 0.1f, 0.1f, 1.0f ) );
+
+ // Hide the indicator bar
+ application.GetWindow().ShowIndicator( Dali::Window::INVISIBLE );
+
+ // Content panes:
+ TableView contentLayout = TableView::New( 3, 1 );
+ contentLayout.SetName("ContentLayout");
+ contentLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
+ contentLayout.SetAnchorPoint( AnchorPoint::TOP_LEFT );
+ contentLayout.SetParentOrigin( ParentOrigin::TOP_LEFT );
+ contentLayout.SetCellPadding( Size( 10, 10 ) );
+
+ // Assign all rows the size negotiation property of fitting to children
+
+ stage.Add( contentLayout );
+
+ mTitle = TextLabel::New( "Custom Control Transition Example" );
+ mTitle.SetName( "Title" );
+ mTitle.SetStyleName("Title");
+ mTitle.SetAnchorPoint( AnchorPoint::TOP_CENTER );
+ mTitle.SetParentOrigin( ParentOrigin::TOP_CENTER );
+ mTitle.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
+ mTitle.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
+ mTitle.SetProperty( TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+ contentLayout.Add( mTitle );
+ contentLayout.SetFitHeight(0);
+
+ mBeatControl = BeatControl::New();
+ mBeatControl.SetName("BeatControl");
+ mBeatControl.SetAnchorPoint( AnchorPoint::CENTER );
+ mBeatControl.SetParentOrigin( ParentOrigin::CENTER );
+ mBeatControl.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
+ contentLayout.Add( mBeatControl );
+ // beat control should fill the tableview cell, so no change to default parameters
+
+ TableView actionButtonLayout = TableView::New( 1, 4 );
+ actionButtonLayout.SetName("ThemeButtonsLayout");
+ actionButtonLayout.SetCellPadding( Vector2( 6.0f, 0.0f ) );
+
+ actionButtonLayout.SetAnchorPoint( AnchorPoint::CENTER );
+ actionButtonLayout.SetParentOrigin( ParentOrigin::CENTER );
+ actionButtonLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
+ actionButtonLayout.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::HEIGHT );
+ actionButtonLayout.SetCellPadding( Size( 10, 10 ) );
+ actionButtonLayout.SetFitHeight( 0 );
+
+ TextLabel label = TextLabel::New( "Action: ");
+ label.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
+ label.SetStyleName("ActionLabel");
+ label.SetAnchorPoint( AnchorPoint::TOP_CENTER );
+ label.SetParentOrigin( ParentOrigin::TOP_CENTER );
+ actionButtonLayout.AddChild( label, TableView::CellPosition( 0, 0 ) );
+ actionButtonLayout.SetCellAlignment( TableView::CellPosition( 0, 0 ), HorizontalAlignment::LEFT, VerticalAlignment::CENTER );
+
+ for( int i=0; i<3; ++i )
+ {
+ mActionButtons[i] = PushButton::New();
+ mActionButtons[i].SetName("ActionButton");
+ mActionButtons[i].SetStyleName("ActionButton");
+ mActionButtons[i].SetParentOrigin( ParentOrigin::CENTER );
+ mActionButtons[i].SetAnchorPoint( ParentOrigin::CENTER );
+ mActionButtons[i].SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH );
+ mActionButtons[i].SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::HEIGHT );
+ mActionIndex = mActionButtons[i].RegisterProperty( "actionId", i, Property::READ_WRITE );
+ mActionButtons[i].ClickedSignal().Connect( this, &TransitionApplication::OnActionButtonClicked );
+ actionButtonLayout.AddChild( mActionButtons[i], TableView::CellPosition( 0, 1+i ) );
+ }
+ mActionButtons[0].SetLabelText( "Bounce" );
+ mActionButtons[1].SetLabelText( "X" );
+ mActionButtons[2].SetLabelText( "Y" );
+
+ contentLayout.Add( actionButtonLayout );
+ contentLayout.SetFitHeight(2);
+}
+
+
+bool TransitionApplication::OnActionButtonClicked( Button button )
+{
+ int action = button.GetProperty<int>( mActionIndex );
+ switch( action )
+ {
+ case 0:
+ {
+ mBeatControl.StartBounceAnimation();
+ break;
+ }
+ case 1:
+ {
+ mBeatControl.StartXAnimation();
+ break;
+ }
+ case 2:
+ {
+ mBeatControl.StartYAnimation();
+ break;
+ }
+ }
+
+ return true;
+}
+
+void TransitionApplication::OnKeyEvent( const KeyEvent& keyEvent )
+{
+ static int keyPressed = 0;
+
+ if( keyEvent.state == KeyEvent::Down)
+ {
+ if( keyPressed == 0 ) // Is this the first down event?
+ {
+ printf("Key pressed: %s %d\n", keyEvent.keyPressedName.c_str(), keyEvent.keyCode );
+
+ if( IsKey( keyEvent, DALI_KEY_ESCAPE) || IsKey( keyEvent, DALI_KEY_BACK ) )
+ {
+ mApplication.Quit();
+ }
+ else if( keyEvent.keyPressedName.compare("Return") == 0 )
+ {
+ }
+ }
+ keyPressed = 1;
+ }
+ else if( keyEvent.state == KeyEvent::Up )
+ {
+ keyPressed = 0;
+ }
+}
+
+} // namespace Demo
diff --git a/examples/transitions/transition-application.h b/examples/transitions/transition-application.h
new file mode 100644
index 00000000..9d692db4
--- /dev/null
+++ b/examples/transitions/transition-application.h
@@ -0,0 +1,70 @@
+#ifndef DALI_DEMO_TRANSITION_APPLICATION_H
+#define DALI_DEMO_TRANSITION_APPLICATION_H
+
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+// External includes
+#include <dali-toolkit/dali-toolkit.h>
+//#include <dali-toolkit/devel-api/controls/slider/slider.h>
+#include <dali-toolkit/devel-api/controls/popup/popup.h>
+#include "beat-control.h"
+#include <cstdio>
+#include <sstream>
+
+// Internal includes
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+namespace Demo
+{
+
+class TransitionApplication : public ConnectionTracker
+{
+public:
+ // Constructor
+ TransitionApplication( Application& application );
+
+ // Destructor
+ ~TransitionApplication();
+
+ // Init signal handler
+ void Create( Application& application );
+
+ // Create the GUI components
+ Toolkit::TextLabel CreateTitle( std::string title );
+ Actor CreateContentPane();
+
+ // Key event handler
+ void OnKeyEvent( const KeyEvent& event );
+
+ bool OnActionButtonClicked(Button button);
+
+ static const char* DEMO_THEME_ONE_PATH;
+
+private:
+ Application& mApplication;
+ TextLabel mTitle;
+ BeatControl mBeatControl;
+ PushButton mActionButtons[3];
+ Property::Index mActionIndex;
+};
+
+} // Namespace Demo
+
+
+#endif // DALI_DEMO_TRANSITION_APPLICATION_H
diff --git a/examples/transitions/transition-example.cpp b/examples/transitions/transition-example.cpp
new file mode 100644
index 00000000..adc4563a
--- /dev/null
+++ b/examples/transitions/transition-example.cpp
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * @file transition-example.cpp
+ * @brief Example of stylable transitions.
+ */
+
+// External includes
+#include <dali/dali.h>
+
+// Internal includes
+#include "transition-application.h"
+
+
+/// Entry point for applications
+int DALI_EXPORT_API main( int argc, char** argv )
+{
+ const char* themeName = Demo::TransitionApplication::DEMO_THEME_ONE_PATH;
+
+ Application application = Application::New( &argc, &argv, themeName );
+ Demo::TransitionApplication transitionApplication( application );
+ application.MainLoop();
+ return 0;
+}
diff --git a/resources/po/en_GB.po b/resources/po/en_GB.po
index 330fcadb..ce12daa9 100755
--- a/resources/po/en_GB.po
+++ b/resources/po/en_GB.po
@@ -150,3 +150,6 @@ msgstr "Tilt Sensor"
msgid "DALI_DEMO_STR_TITLE_FPP_GAME"
msgstr "FPP Game"
+
+msgid "DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS"
+msgstr "Visual Transitions"
diff --git a/resources/po/en_US.po b/resources/po/en_US.po
index ee0921f3..19ca05cf 100755
--- a/resources/po/en_US.po
+++ b/resources/po/en_US.po
@@ -150,3 +150,6 @@ msgstr "Tilt Sensor"
msgid "DALI_DEMO_STR_TITLE_FPP_GAME"
msgstr "FPP Game"
+
+msgid "DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS"
+msgstr "Visual Transitions"
diff --git a/resources/style/mobile/style-example-theme-one.json.in b/resources/style/mobile/style-example-theme-one.json.in
index 8d185892..20ef793e 100644
--- a/resources/style/mobile/style-example-theme-one.json.in
+++ b/resources/style/mobile/style-example-theme-one.json.in
@@ -110,6 +110,70 @@
"targetValue":[1,1,1]
}
]
+ },
+ "BeatControl":
+ {
+ "beatVisual":{
+ "visualType":"IMAGE",
+ "url":"{APPLICATION_RESOURCE_PATH}/images/Logo-for-demo.png"
+ },
+
+ "bounceTransition":
+ [
+ {
+ "target":"beatVisual",
+ "property":"size",
+ "initialValue":[0.5, 0.5],
+ "targetValue":[0.75, 0.75],
+ "animator":
+ {
+ "alphaFunction":"BOUNCE",
+ "timePeriod":
+ {
+ "duration":0.5,
+ "delay":0
+ }
+ }
+ }
+ ],
+
+ "leftTransition":
+ [
+ {
+ "target":"beatVisual",
+ "property":"offset",
+ "initialValue":[0, 0],
+ "targetValue":[0.25, 0],
+ "animator":
+ {
+ "alphaFunction":"BOUNCE",
+ "timePeriod":
+ {
+ "duration":0.5,
+ "delay":0
+ }
+ }
+ }
+ ],
+
+ "upTransition":
+ [
+ {
+ "target":"beatVisual",
+ "property":"offset",
+ "initialValue":[0, 0],
+ "targetValue":[0, 0.25],
+ "animator":
+ {
+ "alphaFunction":"BOUNCE",
+ "timePeriod":
+ {
+ "duration":0.5,
+ "delay":0
+ }
+ }
+ }
+ ]
}
}
}
diff --git a/resources/style/style-example-theme-one.json.in b/resources/style/style-example-theme-one.json.in
index 8d185892..20ef793e 100644
--- a/resources/style/style-example-theme-one.json.in
+++ b/resources/style/style-example-theme-one.json.in
@@ -110,6 +110,70 @@
"targetValue":[1,1,1]
}
]
+ },
+ "BeatControl":
+ {
+ "beatVisual":{
+ "visualType":"IMAGE",
+ "url":"{APPLICATION_RESOURCE_PATH}/images/Logo-for-demo.png"
+ },
+
+ "bounceTransition":
+ [
+ {
+ "target":"beatVisual",
+ "property":"size",
+ "initialValue":[0.5, 0.5],
+ "targetValue":[0.75, 0.75],
+ "animator":
+ {
+ "alphaFunction":"BOUNCE",
+ "timePeriod":
+ {
+ "duration":0.5,
+ "delay":0
+ }
+ }
+ }
+ ],
+
+ "leftTransition":
+ [
+ {
+ "target":"beatVisual",
+ "property":"offset",
+ "initialValue":[0, 0],
+ "targetValue":[0.25, 0],
+ "animator":
+ {
+ "alphaFunction":"BOUNCE",
+ "timePeriod":
+ {
+ "duration":0.5,
+ "delay":0
+ }
+ }
+ }
+ ],
+
+ "upTransition":
+ [
+ {
+ "target":"beatVisual",
+ "property":"offset",
+ "initialValue":[0, 0],
+ "targetValue":[0, 0.25],
+ "animator":
+ {
+ "alphaFunction":"BOUNCE",
+ "timePeriod":
+ {
+ "duration":0.5,
+ "delay":0
+ }
+ }
+ }
+ ]
}
}
}
diff --git a/shared/dali-demo-strings.h b/shared/dali-demo-strings.h
index da304a86..5370c179 100644
--- a/shared/dali-demo-strings.h
+++ b/shared/dali-demo-strings.h
@@ -82,6 +82,7 @@ extern "C"
#define DALI_DEMO_STR_TITLE_TEXT_SCROLLING dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TEXT_SCROLLING")
#define DALI_DEMO_STR_TITLE_TILT_SENSOR dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_TILT_SENSOR")
#define DALI_DEMO_STR_TITLE_FPP_GAME dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_FPP_GAME")
+#define DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS dgettext(DALI_DEMO_DOMAIN_LOCAL, "DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS")
#else // !INTERNATIONALIZATION_ENABLED
@@ -135,7 +136,7 @@ extern "C"
#define DALI_DEMO_STR_TITLE_TILT_SENSOR "Tilt Sensor"
#define DALI_DEMO_STR_TITLE_PROGRESS_BAR "Progress Bar"
#define DALI_DEMO_STR_TITLE_FPP_GAME "First Person Game"
-
+#define DALI_DEMO_STR_TITLE_VISUAL_TRANSITIONS "Visual Transitions"
#endif
#ifdef __cplusplus