/builder/dali-builder
/examples/*.demo
/mo
+compile_commands.json
varying mediump vec2 vTexCoord;\n
uniform sampler2D sTexture;\n
uniform mediump vec4 uColor;\n
+ uniform mediump vec4 mixColor;\n
uniform mediump vec3 uChannels;\n
\n
void main()\n
{\n
- gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor * vec4(uChannels, 1.0) ;\n
+ gl_FragColor = texture2D( sTexture, vTexCoord ) * mixColor * uColor * vec4(uChannels, 1.0) ;\n
}\n
);
// 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 <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
+#include <dali-toolkit/devel-api/visuals/text-visual-properties.h>
#include "image-channel-control.h"
#include <cstdio>
#include <sstream>
mIcc1.SetSizeScalePolicy( SizeScalePolicy::FIT_WITH_ASPECT_RATIO );
mIcc1.SetParentOrigin( ParentOrigin::CENTER );
mIcc1.SetVisibility( true );
-
+
mImagePlacement.Add( mIcc1 );
mIcc2 = ImageChannelControl::New( BIG_IMAGE_2 );
// Todo: save / restore slider states per image
- if( button.GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>() )
+ if( button.GetProperty<bool>(Button::Property::SELECTED) )
{
ImageChannelControl prevIcc = mImageChannelControl;
- if( mRadioButtons[0].GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>() )
+ if( mRadioButtons[0].GetProperty<bool>(Button::Property::SELECTED) )
{
mImageChannelControl = mIcc1;
}
- else if( mRadioButtons[1].GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>() )
+ else if( mRadioButtons[1].GetProperty<bool>(Button::Property::SELECTED) )
{
mImageChannelControl = mIcc2;
}
- else if( mRadioButtons[2].GetProperty( Toolkit::Button::Property::SELECTED ).Get<bool>() )
+ else if( mRadioButtons[2].GetProperty<bool>(Button::Property::SELECTED) )
{
mImageChannelControl = mIcc3;
}
{
int channel = button.GetProperty<int>( index );
float value = mChannelSliders[channel].GetProperty<float>( Slider::Property::VALUE );
- if( !button.IsSelected() )
+ if( !button.GetProperty<bool>(Button::Property::SELECTED) )
{
// "Turn off" the channel's contribution
value = 0.0f;
if( index != Property::INVALID_INDEX )
{
int channel = slider.GetProperty<int>( index );
- if( mCheckButtons[channel].IsSelected() )
+ if( mCheckButtons[channel].GetProperty<bool>(Button::Property::SELECTED) )
{
Property::Index channelIndex = GetChannelProperty( channel );
mImageChannelControl.SetProperty(channelIndex, value/100.0f);
+++ /dev/null
-/*
- * 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
+++ /dev/null
-#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
+++ /dev/null
-/*
- * 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
+++ /dev/null
-#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
--- /dev/null
+/*
+ * Copyright (c) 2017 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 "shadow-button-impl.h"
+#include <dali-toolkit/dali-toolkit.h>
+#include <dali/public-api/object/type-registry-helper.h>
+#include <dali/devel-api/scripting/enum-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::ShadowButton::New();
+}
+
+DALI_TYPE_REGISTRATION_BEGIN( ShadowButton, Dali::Toolkit::Button, Create );
+
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "activeTransition", ARRAY, ACTIVE_TRANSITION );
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "inactiveTransition", ARRAY, INACTIVE_TRANSITION );
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "clickTransition", ARRAY, CLICK_TRANSITION );
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "backgroundVisual", MAP, BACKGROUND_VISUAL );
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "checkboxBgVisual", MAP, CHECKBOX_BG_VISUAL );
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "checkboxFgVisual", MAP, CHECKBOX_FG_VISUAL );
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "labelVisual", MAP, LABEL_VISUAL );
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "checkState", BOOLEAN, ACTIVE_STATE );
+DALI_PROPERTY_REGISTRATION( Demo, ShadowButton, "checkState", BOOLEAN, CHECK_STATE );
+
+DALI_TYPE_REGISTRATION_END();
+
+DALI_ENUM_TO_STRING_TABLE_BEGIN( VISUAL_PROPERTIES )
+{ "backgroundVisual", Demo::ShadowButton::Property::BACKGROUND_VISUAL },
+{ "checkboxBgVisual", Demo::ShadowButton::Property::CHECKBOX_BG_VISUAL},
+{ "checkboxFgVisual", Demo::ShadowButton::Property::CHECKBOX_FG_VISUAL},
+{ "labelVisual", Demo::ShadowButton::Property::LABEL_VISUAL}
+DALI_ENUM_TO_STRING_TABLE_END( VISUAL_PROPERTIES )
+
+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::ShadowButton::ShadowButton()
+: Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ),
+ mCheckState(false),
+ mActiveState(false)
+{
+}
+
+Internal::ShadowButton::~ShadowButton()
+{
+}
+
+Demo::ShadowButton Internal::ShadowButton::New()
+{
+ IntrusivePtr<Internal::ShadowButton> impl = new Internal::ShadowButton();
+ Demo::ShadowButton handle = Demo::ShadowButton( *impl );
+ impl->Initialize();
+ return handle;
+}
+
+void ShadowButton::SetActiveState( bool active )
+{
+ if( active != mActiveState )
+ {
+ mActiveState = active;
+ if( active )
+ {
+ StartTransition( Demo::ShadowButton::Property::ACTIVE_TRANSITION );
+ }
+ else
+ {
+ StartTransition( Demo::ShadowButton::Property::INACTIVE_TRANSITION );
+ }
+ }
+}
+
+bool ShadowButton::GetActiveState()
+{
+ return mActiveState;
+}
+
+void ShadowButton::SetCheckState( bool checkState )
+{
+ mCheckState = checkState;
+ EnableVisual( Demo::ShadowButton::Property::CHECKBOX_FG_VISUAL, mCheckState );
+ RelayoutRequest();
+}
+
+bool ShadowButton::GetCheckState()
+{
+ return mCheckState;
+}
+
+void ShadowButton::StartTransition( Property::Index transitionId )
+{
+ Transitions::iterator iter = FindTransition( transitionId );
+ if( iter != mTransitions.end() )
+ {
+ if( iter->mAnimation )
+ {
+ iter->mAnimation.Stop();
+ iter->mPlaying = false;
+
+ iter->mAnimation.FinishedSignal().Disconnect( this, &ShadowButton::OnTransitionFinished );
+ }
+
+ iter->mAnimation = CreateTransition( iter->mTransitionData );
+ StoreTargetLayouts( iter->mTransitionData );
+
+ iter->mAnimation.FinishedSignal().Connect( this, &ShadowButton::OnTransitionFinished );
+ iter->mAnimation.Play();
+ iter->mPlaying = true;
+ }
+}
+
+void ShadowButton::OnTransitionFinished( Animation& src )
+{
+ ShadowButton::Transitions::iterator iter = mTransitions.begin();
+ for( ; iter != mTransitions.end(); ++iter )
+ {
+ if( iter->mAnimation == src )
+ {
+ iter->mPlaying = false;
+ iter->mAnimation.Reset(); // Remove the animation when it's finished.
+ switch( iter->mTransitionId )
+ {
+ case Demo::ShadowButton::Property::ACTIVE_TRANSITION:
+ {
+ // Consider relayouting the text.
+ break;
+ }
+ case Demo::ShadowButton::Property::INACTIVE_TRANSITION:
+ {
+ // Consider relayouting the text.
+ break;
+ }
+ }
+ break;
+ }
+ }
+}
+
+void ShadowButton::OnInitialize()
+{
+ Actor self = Self();
+}
+
+void ShadowButton::OnStageConnection( int depth )
+{
+ Control::OnStageConnection( depth );
+}
+
+void ShadowButton::OnStageDisconnection()
+{
+ Control::OnStageDisconnection();
+}
+
+void ShadowButton::OnSizeSet( const Vector3& targetSize )
+{
+ Control::OnSizeSet( targetSize );
+ RelayoutVisuals( Vector2( targetSize ) );
+}
+
+void ShadowButton::OnRelayout( const Vector2& targetSize, RelayoutContainer& container )
+{
+ RelayoutVisuals( targetSize );
+}
+
+void ShadowButton::RelayoutVisuals( const Vector2& targetSize )
+{
+ bool transitioning = false;
+ ShadowButton::Transitions::iterator iter = mTransitions.begin();
+ for( ; iter != mTransitions.end(); ++iter )
+ {
+ if( iter->mPlaying == true )
+ {
+ transitioning = true;
+ break;
+ }
+ }
+
+ if( ! transitioning )
+ {
+ for( ShadowButton::Transforms::iterator iter = mTransforms.begin();
+ iter != mTransforms.end(); ++iter )
+ {
+ switch( iter->mTransformId )
+ {
+ case Demo::ShadowButton::Property::BACKGROUND_VISUAL:
+ {
+ mBackgroundVisual.SetTransformAndSize( iter->mTransform, targetSize );
+ break;
+ }
+ case Demo::ShadowButton::Property::CHECKBOX_BG_VISUAL:
+ {
+ mCheckboxBgVisual.SetTransformAndSize( iter->mTransform, targetSize );
+ break;
+ }
+ case Demo::ShadowButton::Property::CHECKBOX_FG_VISUAL:
+ {
+ mCheckboxFgVisual.SetTransformAndSize( iter->mTransform, targetSize );
+ break;
+ }
+ case Demo::ShadowButton::Property::LABEL_VISUAL:
+ {
+ mLabelVisual.SetTransformAndSize( iter->mTransform, targetSize );
+ break;
+ }
+ }
+ }
+ }
+}
+
+Vector3 ShadowButton::GetNaturalSize()
+{
+ int width;
+ int height;
+
+ Vector2 checkboxBgSize;
+ Vector2 checkboxFgSize;
+ Vector2 labelSize;
+ mCheckboxBgVisual.GetNaturalSize( checkboxBgSize );
+ mCheckboxFgVisual.GetNaturalSize( checkboxFgSize );
+ mLabelVisual.GetNaturalSize( labelSize );
+
+ width = std::max( checkboxBgSize.x, checkboxFgSize.x ) + labelSize.x;
+ height = std::max( std::max( checkboxFgSize.y, checkboxBgSize.y ), labelSize.y );
+
+ return Vector3( width, height, height );
+}
+
+void ShadowButton::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
+{
+ // Chain up.
+ Control::OnStyleChange( styleManager, change );
+}
+
+ShadowButton::Transitions::iterator ShadowButton::FindTransition( Property::Index index )
+{
+ bool found = false;
+ ShadowButton::Transitions::iterator iter = mTransitions.begin();
+ for( ; iter != mTransitions.end(); ++iter )
+ {
+ if( iter->mTransitionId == index )
+ {
+ found = true;
+ break;
+ }
+ }
+ if( ! found )
+ {
+ iter = mTransitions.end();
+ }
+ return iter;
+}
+
+ShadowButton::Transforms::iterator ShadowButton::FindTransform( Property::Index index )
+{
+ bool found = false;
+ ShadowButton::Transforms::iterator iter = mTransforms.begin();
+ for( ; iter != mTransforms.end(); ++iter )
+ {
+ if( iter->mTransformId == index )
+ {
+ found = true;
+ break;
+ }
+ }
+ if( ! found )
+ {
+ iter = mTransforms.end();
+ }
+ return iter;
+}
+
+void ShadowButton::ResetVisual(
+ Property::Index index,
+ Visual::Base& visual,
+ const Property::Value& value )
+{
+ if( visual )
+ {
+ // we are replacing an existing visual, so force relayout
+ RelayoutRequest();
+ }
+ Property::Map* map = value.GetMap();
+ if( map )
+ {
+ visual = Toolkit::VisualFactory::Get().CreateVisual( *map );
+ RegisterVisual( index, visual );
+
+ // Set the appropriate depth index.
+ // @todo Should be able to set this from the style sheet
+ switch( index )
+ {
+ case Demo::ShadowButton::Property::BACKGROUND_VISUAL:
+ {
+ visual.SetDepthIndex(0.0f);
+ break;
+ }
+ case Demo::ShadowButton::Property::CHECKBOX_BG_VISUAL:
+ {
+ visual.SetDepthIndex(1.0f);
+ break;
+ }
+ case Demo::ShadowButton::Property::CHECKBOX_FG_VISUAL:
+ {
+ visual.SetDepthIndex(2.0f);
+ break;
+ }
+ case Demo::ShadowButton::Property::LABEL_VISUAL:
+ {
+ visual.SetDepthIndex(1.0f);
+ break;
+ }
+ }
+
+ // Extract transform maps out of the visual definition and store them
+ Property::Value* value = map->Find( DevelVisual::Property::TRANSFORM, "transform");
+ if( value )
+ {
+ Property::Map* transformMap = value->GetMap();
+ if( transformMap )
+ {
+ ShadowButton::Transforms::iterator iter = FindTransform( index );
+ if( iter != mTransforms.end() )
+ {
+ iter->mTransform = *transformMap;
+ }
+ else
+ {
+ mTransforms.push_back( Transform( index, *transformMap ) );
+ }
+ }
+ }
+ }
+}
+
+bool IsTransformProperty( const std::string& property )
+{
+ const char* transformProperties[]= { "size", "offset", "origin", "anchorPoint", "offsetSizeMode" };
+ const int NUM_TRANSFORM_PROPERTIES = sizeof( transformProperties ) / sizeof( const char * );
+
+ bool found=false;
+ for( int i=0; i<NUM_TRANSFORM_PROPERTIES; ++i )
+ {
+ if( property == transformProperties[i] )
+ {
+ found = true;
+ break;
+ }
+ }
+ return found;
+}
+
+void ShadowButton::StoreTargetLayouts( TransitionData transitionData )
+{
+ // Pseudo code
+ // foreach animator in transitionData
+ // if animator{"property"} in [ "size", "offset", "origin", "anchorPoint", "offsetSizeMode" ]
+ // transforms{ animator{"target"} }->{animator{"property"}} = animator{"targetValue"}
+
+
+ for( unsigned int i=0; i < transitionData.Count(); ++i )
+ {
+ Property::Map animator = transitionData.GetAnimatorAt(i);
+ Property::Value* target = animator.Find( "target" );
+ if( target )
+ {
+ // Convert to index
+ Property::Index index;
+ if( Scripting::GetEnumerationProperty( *target, VISUAL_PROPERTIES_TABLE, VISUAL_PROPERTIES_TABLE_COUNT, index ) )
+ {
+ ShadowButton::Transforms::iterator iter = FindTransform( index );
+ if( iter != mTransforms.end() )
+ {
+ Property::Value* property = animator.Find( "property" );
+ if( property )
+ {
+ std::string propertyString;
+ property->Get(propertyString);
+ if( IsTransformProperty( propertyString ) )
+ {
+ Property::Value* targetValue = animator.Find( "targetValue" );
+ if( targetValue )
+ {
+ iter->mTransform[ propertyString ] = *targetValue;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+void ShadowButton::ResetTransition(
+ Property::Index index,
+ const Property::Value& value)
+{
+ ShadowButton::Transitions::iterator iter = FindTransition( index );
+ if( iter != mTransitions.end() )
+ {
+ // Already exists
+ iter->mTransitionData = ConvertPropertyToTransition( value );
+ iter->mAnimation.Stop();
+ iter->mAnimation.Clear();
+ }
+ else
+ {
+ mTransitions.push_back( Transition( index, ConvertPropertyToTransition( value ) ) );
+ }
+}
+
+
+void ShadowButton::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
+{
+ Demo::ShadowButton shadowButton = Demo::ShadowButton::DownCast( Dali::BaseHandle( object ) );
+
+ if( shadowButton )
+ {
+ ShadowButton& impl = GetImpl( shadowButton );
+ switch ( index )
+ {
+ case Demo::ShadowButton::Property::BACKGROUND_VISUAL:
+ {
+ impl.ResetVisual( index, impl.mBackgroundVisual, value );
+ break;
+ }
+ case Demo::ShadowButton::Property::CHECKBOX_BG_VISUAL:
+ {
+ impl.ResetVisual( index, impl.mCheckboxBgVisual, value );
+ break;
+ }
+ case Demo::ShadowButton::Property::CHECKBOX_FG_VISUAL:
+ {
+ impl.ResetVisual( index, impl.mCheckboxFgVisual, value );
+ impl.EnableVisual( Demo::ShadowButton::Property::CHECKBOX_FG_VISUAL, impl.mCheckState );
+ break;
+ }
+ case Demo::ShadowButton::Property::LABEL_VISUAL:
+ {
+ impl.ResetVisual( index, impl.mLabelVisual, value );
+ break;
+ }
+ case Demo::ShadowButton::Property::ACTIVE_TRANSITION:
+ case Demo::ShadowButton::Property::INACTIVE_TRANSITION:
+ case Demo::ShadowButton::Property::CLICK_TRANSITION:
+ {
+ impl.ResetTransition( index, value );
+ break;
+ }
+ }
+ }
+}
+
+Property::Value ShadowButton::GetProperty( BaseObject* object, Property::Index propertyIndex )
+{
+ Property::Value value;
+
+ Demo::ShadowButton shadowButton = Demo::ShadowButton::DownCast( Dali::BaseHandle( object ) );
+
+ if ( shadowButton )
+ {
+ ShadowButton& impl = GetImpl( shadowButton );
+ switch ( propertyIndex )
+ {
+ case Demo::ShadowButton::Property::BACKGROUND_VISUAL:
+ {
+ Property::Map map;
+ impl.mBackgroundVisual.CreatePropertyMap(map);
+ value = map;
+ break;
+ }
+ case Demo::ShadowButton::Property::CHECKBOX_BG_VISUAL:
+ {
+ Property::Map map;
+ impl.mCheckboxBgVisual.CreatePropertyMap(map);
+ value = map;
+ break;
+ }
+ case Demo::ShadowButton::Property::CHECKBOX_FG_VISUAL:
+ {
+ Property::Map map;
+ impl.mCheckboxFgVisual.CreatePropertyMap(map);
+ value = map;
+ break;
+ }
+ case Demo::ShadowButton::Property::LABEL_VISUAL:
+ {
+ Property::Map map;
+ impl.mLabelVisual.CreatePropertyMap(map);
+ value = map;
+ break;
+ }
+
+ default:
+ break;
+ }
+ }
+
+ return value;
+}
+
+
+} // Internal
+} // Demo
--- /dev/null
+#ifndef DALI_DEMO_INTERNAL_SHADOW_BUTTON_IMPL_H
+#define DALI_DEMO_INTERNAL_SHADOW_BUTTON_IMPL_H
+
+/*
+ * Copyright (c) 2017 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 "shadow-button.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 ShadowButton : public Dali::Toolkit::Internal::Control
+{
+public:
+ /**
+ * Instantiate a new ShadowButton object
+ */
+ static Demo::ShadowButton New();
+ ShadowButton();
+ ~ShadowButton();
+
+public: // API
+ /**
+ * @brief Set the button to be active or inactive.
+ *
+ * The button will perform a transition if there is a state change.
+ * @param[in] active The active state
+ */
+ void SetActiveState( bool active );
+
+ /**
+ * Get the active state
+ * @return the active state
+ */
+ bool GetActiveState();
+
+ /**
+ * Set the check state
+ * @param[in] checkState The state of the checkbox
+ */
+ void SetCheckState( bool checkState );
+
+ /**
+ * Get the check state
+ * @return the check state
+ */
+ bool GetCheckState();
+
+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::Button::OnInitialize()
+ */
+ virtual void OnInitialize();
+
+ /**
+ * @copydoc Toolkit::Button::OnStageConnect()
+ */
+ virtual void OnStageConnection( int depth );
+
+ /**
+ * @copydoc Toolkit::Button::OnStageDisconnection()
+ */
+ virtual void OnStageDisconnection();
+
+ /**
+ * @copydoc Toolkit::Button::OnSizeSet()
+ */
+ virtual void OnSizeSet( const Dali::Vector3& targetSize );
+
+ /**
+ * @copydoc Toolkit::Button::OnRelayout()
+ */
+ virtual void OnRelayout( const Dali::Vector2& targetSize, Dali::RelayoutContainer& container );
+ /**
+ * @copydoc Toolkit::Button::GetNaturalSize
+ */
+ virtual Dali::Vector3 GetNaturalSize();
+
+ /**
+ * @copydoc Toolkit::Button::OnStyleChange
+ */
+ virtual void OnStyleChange( Dali::Toolkit::StyleManager styleManager, Dali::StyleChange::Type change );
+
+private:
+ struct Transition
+ {
+ Dali::Property::Index mTransitionId;
+ Dali::Toolkit::TransitionData mTransitionData;
+ Dali::Animation mAnimation;
+ bool mPlaying;
+
+ Transition( Dali::Property::Index index, Dali::Toolkit::TransitionData transitionData )
+ : mTransitionId( index ),
+ mTransitionData( transitionData ),
+ mPlaying(false)
+ {
+ }
+ private:
+ Transition();
+ };
+
+ typedef std::vector<Transition> Transitions;
+
+ struct Transform
+ {
+ Dali::Property::Index mTransformId;
+ Dali::Property::Map mTransform;
+
+ Transform( Dali::Property::Index index, Dali::Property::Map& map )
+ : mTransformId(index),
+ mTransform( map )
+ {
+ }
+ };
+ typedef std::vector<Transform> Transforms;
+
+private:
+ void StartTransition( Dali::Property::Index transitionId );
+
+ void OnTransitionFinished( Dali::Animation& handle );
+
+ Transitions::iterator FindTransition( Dali::Property::Index index );
+
+ Transforms::iterator FindTransform( Dali::Property::Index index );
+
+ /**
+ * Relayout the visuals as a result of size negotiation using
+ * the transforms provided in the stylesheet
+ */
+ void RelayoutVisuals( const Dali::Vector2& targetSize );
+
+ /**
+ * Relayout the visuals as a result of size negotiation using
+ * programmatically generated transforms
+ */
+ void RelayoutVisualsManually( const Dali::Vector2& targetSize );
+
+ void ResetVisual( Dali::Property::Index index,
+ Dali::Toolkit::Visual::Base& visual,
+ const Dali::Property::Value& value );
+
+ void ResetTransition( Dali::Property::Index index,
+ const Dali::Property::Value& value );
+
+ void StoreTargetLayouts( Dali::Toolkit::TransitionData transitionData );
+
+private:
+ // undefined
+ ShadowButton( const ShadowButton& );
+ ShadowButton& operator=( const ShadowButton& );
+
+private:
+ // Data
+ Dali::Toolkit::Visual::Base mBackgroundVisual;
+ Dali::Toolkit::Visual::Base mCheckboxBgVisual;
+ Dali::Toolkit::Visual::Base mCheckboxFgVisual;
+ Dali::Toolkit::Visual::Base mLabelVisual;
+
+ Transitions mTransitions;
+ Transforms mTransforms;
+ bool mCheckState;
+ bool mActiveState;
+};
+
+} // Internal
+
+inline Internal::ShadowButton& GetImpl( Demo::ShadowButton& handle )
+{
+ DALI_ASSERT_ALWAYS( handle );
+ Dali::RefObject& object = handle.GetImplementation();
+ return static_cast<Internal::ShadowButton&>(object);
+}
+
+inline const Internal::ShadowButton& GetImpl( const Demo::ShadowButton& handle )
+{
+ DALI_ASSERT_ALWAYS( handle );
+ const Dali::RefObject& object = handle.GetImplementation();
+ return static_cast<const Internal::ShadowButton&>(object);
+}
+
+} // Demo
+
+#endif // DALI_DEMO_SHADOW_BUTTON_IMPL_H
--- /dev/null
+/*
+ * Copyright (c) 2017 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 "shadow-button.h"
+#include "shadow-button-impl.h"
+
+namespace Demo
+{
+
+ShadowButton::ShadowButton()
+{
+}
+
+ShadowButton::ShadowButton( const ShadowButton& control )
+: Control( control )
+{
+}
+
+ShadowButton& ShadowButton::operator= ( const ShadowButton& rhs )
+{
+ if( &rhs != this )
+ {
+ Control::operator=( rhs );
+ }
+ return *this;
+}
+
+ShadowButton::~ShadowButton()
+{
+}
+
+ShadowButton ShadowButton::New()
+{
+ ShadowButton control = Internal::ShadowButton::New();
+ return control;
+}
+
+ShadowButton ShadowButton::New( const std::string& url )
+{
+ ShadowButton control = Internal::ShadowButton::New();
+ return control;
+}
+
+ShadowButton ShadowButton::DownCast( BaseHandle handle )
+{
+ return Control::DownCast< ShadowButton, Internal::ShadowButton > ( handle );
+}
+
+void ShadowButton::SetActiveState( bool active )
+{
+ GetImpl(*this).SetActiveState( active );
+}
+
+bool ShadowButton::GetActiveState()
+{
+ return GetImpl(*this).GetActiveState();
+}
+
+void ShadowButton::SetCheckState( bool checkState )
+{
+ GetImpl(*this).SetCheckState( checkState );
+}
+
+bool ShadowButton::GetCheckState()
+{
+ return GetImpl(*this).GetCheckState();
+}
+
+ShadowButton::ShadowButton( Internal::ShadowButton& implementation )
+: Control( implementation )
+{
+}
+
+ShadowButton::ShadowButton( Dali::Internal::CustomActor* internal )
+: Control( internal )
+{
+ VerifyCustomActorPointer< Internal::ShadowButton >( internal ) ;
+}
+
+
+} //namespace Demo
--- /dev/null
+#ifndef DALI_DEMO_SHADOW_BUTTON_H
+#define DALI_DEMO_SHADOW_BUTTON_H
+
+/*
+ * Copyright (c) 2017 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
+{
+
+// All type registered controls need to have the same name for the body
+// and the handle
+namespace Internal
+{
+class ShadowButton;
+}
+
+/**
+ * Button that allows the RGB channels of an image to be altered.
+ */
+class ShadowButton : 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
+ {
+ ACTIVE_TRANSITION = PROPERTY_START_INDEX,
+ INACTIVE_TRANSITION,
+ CLICK_TRANSITION,
+ BACKGROUND_VISUAL,
+ CHECKBOX_BG_VISUAL,
+ CHECKBOX_FG_VISUAL,
+ LABEL_VISUAL,
+ ACTIVE_STATE,
+ CHECK_STATE,
+ };
+ };
+
+public: // Construction / destruction
+
+ /**
+ * Create an uninitialized handle
+ */
+ ShadowButton();
+
+ /**
+ * Create a new image channel button without an image. Use
+ * SetImage to give this button an image
+ */
+ static ShadowButton New();
+
+ /**
+ * Create a new image channel button from a given URL
+ */
+ static ShadowButton New( const std::string& url );
+
+ /**
+ * Destructor. This is non-virtual since derived Handle types must not
+ * contain data or virtual methods
+ */
+ ~ShadowButton();
+
+ /**
+ * Copy Constructor
+ */
+ ShadowButton( const ShadowButton& shadowButton );
+
+ /**
+ * Assignment Operator
+ */
+ ShadowButton& operator=( const ShadowButton& shadowButton );
+
+ /**
+ * Downcast
+ */
+ static ShadowButton DownCast( BaseHandle handle );
+
+public: // API
+
+ /**
+ * @brief Set the button to be active or inactive.
+ *
+ * The button will perform a transition if there is a state change.
+ * @param[in] active The active state
+ */
+ void SetActiveState( bool active );
+
+ /**
+ * @brief Get the button's active state
+ *
+ * @return The active state
+ */
+ bool GetActiveState();
+
+ /**
+ * Set the check state
+ * @param[in] checkState The state of the checkbox
+ */
+ void SetCheckState( bool checkState );
+
+ /**
+ * Get the check state
+ * @return the check state
+ */
+ bool GetCheckState();
+
+public: // Not for public use
+ /**
+ * Create a handle from an implementation
+ */
+ ShadowButton( Internal::ShadowButton& implementation );
+
+ /**
+ * Allow the creation of an ShadowButton handle from an internal CustomActor pointer
+ */
+ ShadowButton( Dali::Internal::CustomActor* internal );
+};
+
+} // namespace Demo
+
+#endif // DALI_DEMO_SHADOW_BUTTON_H
/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 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.
// External includes
#include <dali-toolkit/dali-toolkit.h>
-#include "beat-control.h"
+#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
+#include <dali-toolkit/devel-api/visuals/text-visual-properties.h>
+#include "shadow-button.h"
#include <cstdio>
#include <sstream>
using namespace Dali;
using namespace Dali::Toolkit;
+namespace
+{
+
+void SetLabelText( Button button, const char* label )
+{
+ button.SetProperty( Toolkit::Button::Property::LABEL, label );
+}
+
+}
+
namespace Demo
{
const char* TransitionApplication::DEMO_THEME_ONE_PATH( DEMO_STYLE_DIR "style-example-theme-one.json" );
+const char* TransitionApplication::DEMO_THEME_TWO_PATH( DEMO_STYLE_DIR "style-example-theme-two.json" );
TransitionApplication::TransitionApplication( Application& application )
: mApplication( application ),
mTitle(),
- mBeatControl(),
+ mShadowButton(),
mActionButtons(),
mActionIndex( Property::INVALID_INDEX )
{
contentLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
contentLayout.SetAnchorPoint( AnchorPoint::TOP_LEFT );
contentLayout.SetParentOrigin( ParentOrigin::TOP_LEFT );
- contentLayout.SetCellPadding( Size( 10, 10 ) );
-
+ contentLayout.SetCellPadding( Vector2( 0.0f, 5.0f ) );
+ contentLayout.SetBackgroundColor( Vector4(0.949, 0.949, 0.949, 1.0) );
// 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 );
+ contentLayout.SetFitHeight(0); // Fill width
+
+ // Provide some padding around the center cell
+ TableView buttonLayout = TableView::New( 3, 3 );
+ buttonLayout.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
+ buttonLayout.SetFixedHeight(1, 100 );
+ buttonLayout.SetFixedWidth(1, 350 );
+ contentLayout.Add( buttonLayout );
+
+ mShadowButton = ShadowButton::New();
+ mShadowButton.SetName("ShadowButton");
+ mShadowButton.SetActiveState( false );
+ mShadowButton.SetCheckState( false );
+ mShadowButton.SetAnchorPoint( AnchorPoint::CENTER );
+ mShadowButton.SetParentOrigin( ParentOrigin::CENTER );
+ mShadowButton.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
+ buttonLayout.AddChild( mShadowButton, TableView::CellPosition(1, 1) );
+
+ TableView actionButtonLayout = TableView::New( 1, NUMBER_OF_ACTION_BUTTONS+1 );
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 )
+ for( int i=0; i<NUMBER_OF_ACTION_BUTTONS; ++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].SetProperty( Toolkit::Button::Property::LABEL, "Bounce" );
- mActionButtons[1].SetProperty( Toolkit::Button::Property::LABEL, "X" );
- mActionButtons[2].SetProperty( Toolkit::Button::Property::LABEL, "Y" );
+ SetLabelText( mActionButtons[0], "Activate" );
+ SetLabelText( mActionButtons[1], "Check" );
contentLayout.Add( actionButtonLayout );
contentLayout.SetFitHeight(2);
}
-
bool TransitionApplication::OnActionButtonClicked( Button button )
{
int action = button.GetProperty<int>( mActionIndex );
{
case 0:
{
- mBeatControl.StartBounceAnimation();
+ bool activeState = mShadowButton.GetActiveState();
+ mShadowButton.SetActiveState( ! activeState );
+ if( activeState )
+ {
+ SetLabelText( button, "Activate" );
+ }
+ else
+ {
+ SetLabelText( button, "Deactivate" );
+ }
break;
}
case 1:
{
- mBeatControl.StartXAnimation();
+ bool checkState = mShadowButton.GetCheckState();
+ mShadowButton.SetCheckState( ! checkState );
break;
}
case 2:
{
- mBeatControl.StartYAnimation();
+ break;
+ }
+ case 3:
+ {
break;
}
}
#define DALI_DEMO_TRANSITION_APPLICATION_H
/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 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.
// 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 "shadow-button.h"
#include <cstdio>
#include <sstream>
class TransitionApplication : public ConnectionTracker
{
public:
+ static const int NUMBER_OF_ACTION_BUTTONS=2;
+
+public:
// Constructor
TransitionApplication( Application& application );
// Key event handler
void OnKeyEvent( const KeyEvent& event );
- bool OnActionButtonClicked(Button button);
+ bool OnActionButtonClicked( Button button );
static const char* DEMO_THEME_ONE_PATH;
+ static const char* DEMO_THEME_TWO_PATH;
private:
+
+ /** Create a visual map
+ *
+ * @param[in] index The index of the visual to create
+ * @param[out] map The map to generate
+ */
+
Application& mApplication;
TextLabel mTitle;
- BeatControl mBeatControl;
- PushButton mActionButtons[3];
+ ShadowButton mShadowButton;
+ PushButton mActionButtons[NUMBER_OF_ACTION_BUTTONS];
+ Property::Index mVisualIndex;
Property::Index mActionIndex;
};
/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 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.
{
+ "constants":
+ {
+ "STYLE_DIR":"{APPLICATION_RESOURCE_PATH}/style"
+ },
"styles":
{
"Title":{
[
{
"target":"imageVisual",
- "property":"colorAlpha",
- "initialValue":0,
- "targetValue":1,
+ "property":"mixColor",
+ "initialValue":[1,1,1,0],
+ "targetValue":[1,1,1,1],
"animator":
{
"alphaFunction":"EASE_IN_OUT",
},
{
"target":"imageVisual",
- "property":"scale",
- "targetValue":[1,1,1]
+ "property":"size",
+ "targetValue":[1,1]
}
],
"disableVisibilityTransition":
[
{
"target":"imageVisual",
- "property":"colorAlpha",
- "targetValue":0,
+ "property":"mixColor",
+ "targetValue":[1,1,1,0],
"animator":
{
"alphaFunction":"EASE_IN_OUT",
},
{
"target":"imageVisual",
- "property":"scale",
+ "property":"size",
"targetValue":[1,1,1]
}
]
},
- "BeatControl":
+ "ShadowButton":
{
- "beatVisual":{
+ "backgroundVisual":{
"visualType":"IMAGE",
- "url":"{APPLICATION_RESOURCE_PATH}/images/Logo-for-demo.png"
+ "url":"{STYLE_DIR}/images/shadowButtonBg.9.png",
+ "mixColor":[1,1,1,0]
},
-
- "bounceTransition":
+ "checkboxBgVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/CheckBg.png",
+ "transform":{
+ "size":[0.09, 0.28],
+ "offset":[30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_BEGIN",
+ "anchorPoint":"CENTER_BEGIN"
+ }
+ },
+ "checkboxFgVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/Tick.png",
+ "transform":{
+ "size":[0.09, 0.28],
+ "offset":[30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_BEGIN",
+ "anchorPoint":"CENTER_BEGIN"
+ }
+ },
+ "labelVisual":{
+ "visualType":"TEXT",
+ "text":"Don't show again",
+ "pointSize":8,
+ "horizontalAlignment":"END",
+ "verticalAlignment":"CENTER",
+ "textColor":[1,1,1,1],
+ "mixColor":[0.3, 0.3, 0.3, 1],
+ "transform":{
+ "size":[0.9, 0.9],
+ "offset":[-30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_END",
+ "anchorPoint":"CENTER_END"
+ }
+ },
+ "activeTransition":
[
{
- "target":"beatVisual",
+ "target":"checkboxBgVisual",
"property":"size",
- "initialValue":[0.5, 0.5],
- "targetValue":[0.75, 0.75],
+ "initialValue":[0.09, 0.28],
+ "targetValue":[0.12, 0.37],
"animator":
{
- "alphaFunction":"BOUNCE",
+ "alphaFunction":"EASE_OUT_BACK",
"timePeriod":
{
- "duration":0.5,
+ "duration":0.8,
"delay":0
}
}
- }
- ],
-
- "leftTransition":
- [
+ },
+ {
+ "target":"backgroundVisual",
+ "property":"mixColor",
+ "initialValue":[1,1,1,0],
+ "targetValue":[1,1,1,1],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"backgroundVisual",
+ "property":"size",
+ "initialValue":[0.9, 0.9],
+ "targetValue":[1, 1],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"checkboxFgVisual",
+ "property":"size",
+ "initialValue":[0.09, 0.28],
+ "targetValue":[0.12, 0.37],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
{
- "target":"beatVisual",
- "property":"offset",
- "initialValue":[0, 0],
- "targetValue":[0.25, 0],
+ "target":"labelVisual",
+ "property":"mixColor",
+ "initialValue":[0.2, 0.2, 0.2, 1.0],
+ "targetValue":[0, 0, 0, 1],
"animator":
{
- "alphaFunction":"BOUNCE",
+ "alphaFunction":"EASE_OUT_BACK",
"timePeriod":
{
- "duration":0.5,
+ "duration":0.8,
"delay":0
}
}
}
],
-
- "upTransition":
+ "inactiveTransition":
[
{
- "target":"beatVisual",
- "property":"offset",
- "initialValue":[0, 0],
- "targetValue":[0, 0.25],
+ "target":"checkboxBgVisual",
+ "property":"size",
+ "initialValue":[0.12, 0.37],
+ "targetValue":[0.09, 0.28],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"backgroundVisual",
+ "property":"mixColor",
+ "targetValue":[1,1,1,0],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"checkboxFgVisual",
+ "property":"size",
+ "initialValue":[0.12, 0.37],
+ "targetValue":[0.09, 0.28],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"labelVisual",
+ "property":"mixColor",
+ "targetValue":[0.4, 0.4, 0.4, 1.0],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"backgroundVisual",
+ "property":"size",
+ "targetValue":[0.9, 0.9],
"animator":
{
- "alphaFunction":"BOUNCE",
+ "alphaFunction":"EASE_OUT_BACK",
"timePeriod":
{
- "duration":0.5,
+ "duration":0.8,
"delay":0
}
}
[
{
"target":"imageVisual",
- "property":"scale",
- "initialValue":[0.1,0.1,0.1],
- "targetValue":[1,1,1],
+ "property":"size",
+ "initialValue":[0.1,0.1],
+ "targetValue":[1,1],
"animator":
{
"alphaFunction":"EASE_IN",
},
{
"target":"imageVisual",
- "property":"colorAlpha",
- "targetValue":1
+ "property":"mixColor",
+ "targetValue":[1,1,1,1]
}
],
"disableVisibilityTransition":
[
{
"target":"imageVisual",
- "property":"scale",
- "initialValue":[1,1,1],
- "targetValue":[0.1,0.1,0.1],
+ "property":"size",
+ "initialValue":[1,1],
+ "targetValue":[0.1,0.1],
"animator":
{
"alphaFunction":"EASE_OUT",
},
{
"target":"imageVisual",
- "property":"colorAlpha",
- "targetValue":0,
+ "property":"mixColor",
+ "targetValue":[1,1,1,0],
"animator":
{
"alphaFunction":"EASE_OUT",
// Change an icon size, see if it gets properly re-sized
"RadioButton":{
- "unselectedStateImage":"{STYLE_DIR}/images/radio-button-unselected.png",
- "selectedStateImage":"{STYLE_DIR}/images/radio-button-selected.png",
- "disabledStateImage":"{STYLE_DIR}/images/radio-button-unselected-disabled.png",
- "imageLabelGap":10,
+ "unselectedVisual":
+ {
+ "visualType": "IMAGE",
+ "url": "{STYLE_DIR}/images/radio-button-unselected.png"
+ },
+ "selectedVisual":
+ {
+ "visualType": "IMAGE",
+ "url": "{STYLE_DIR}/images/radio-button-selected.png"
+ },
"label":{
"textColor": [0.1,1,1,1]
}
[
{
"target":"imageVisual",
- "property":"colorAlpha",
- "initialValue":0,
- "targetValue":1,
+ "property":"mixColor",
+ "initialValue":[1,1,1,0],
+ "targetValue":[1,1,1,1],
"animator":
{
"alphaFunction":"EASE_IN_OUT",
"delay":0
}
}
+ },
+ {
+ "target":"imageVisual",
+ "property":"size",
+ "targetValue":[1,1]
}
],
"disableVisibilityTransition":
[
{
"target":"imageVisual",
- "property":"colorAlpha",
- "targetValue":0,
+ "property":"mixColor",
+ "targetValue":[1,1,1,0],
"animator":
{
"alphaFunction":"EASE_IN_OUT",
},
{
"target":"imageVisual",
- "property":"scale",
- "targetValue":[1,1,1]
+ "property":"size",
+ "targetValue":[1,1]
+ }
+ ]
+ },
+ "ShadowButton":
+ {
+ "backgroundVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/shadowButtonBg.9.png"
+ },
+ "checkboxBgVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/CheckBg.png",
+ "transform":{
+ "size":[0.09, 0.28],
+ "offset":[30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_BEGIN",
+ "anchorPoint":"CENTER_BEGIN"
+ }
+ },
+ "checkboxFgVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/Tick.png",
+ "transform":{
+ "size":[0.09, 0.28],
+ "offset":[30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_BEGIN",
+ "anchorPoint":"CENTER_BEGIN"
+ }
+ },
+ "labelVisual":{
+ "visualType":"TEXT",
+ "text":"Don't show again",
+ "pointSize":8,
+ "horizontalAlignment":"END",
+ "verticalAlignment":"CENTER",
+ "textColor":[1,1,1,1],
+ "mixColor":[0.3, 0.3, 0.3, 1],
+ "transform":{
+ "size":[0.9, 0.9],
+ "offset":[-30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_END",
+ "anchorPoint":"CENTER_END"
+ }
+ },
+ "activeTransition":
+ [
+ {
+ "target":"checkboxBgVisual",
+ "property":"size",
+ "initialValue":[0.09, 0.28],
+ "targetValue":[0.12, 0.37],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ }
+ ],
+ "inactiveTransition":
+ [
+ {
+ "target":"checkboxBgVisual",
+ "property":"size",
+ "initialValue":[0.12, 0.37],
+ "targetValue":[0.09, 0.28],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
}
]
}
{
+ "constants":
+ {
+ "STYLE_DIR":"{APPLICATION_RESOURCE_PATH}/style"
+ },
"styles":
{
"Title":{
[
{
"target":"imageVisual",
- "property":"colorAlpha",
- "initialValue":0,
- "targetValue":1,
+ "property":"mixColor",
+ "initialValue":[1,1,1,0],
+ "targetValue":[1,1,1,1],
"animator":
{
"alphaFunction":"EASE_IN_OUT",
},
{
"target":"imageVisual",
- "property":"scale",
- "targetValue":[1,1,1]
+ "property":"size",
+ "targetValue":[1,1]
}
],
"disableVisibilityTransition":
[
{
"target":"imageVisual",
- "property":"colorAlpha",
- "targetValue":0,
+ "property":"mixColor",
+ "targetValue":[1,1,1,0],
"animator":
{
"alphaFunction":"EASE_IN_OUT",
},
{
"target":"imageVisual",
- "property":"scale",
+ "property":"size",
"targetValue":[1,1,1]
}
]
},
- "BeatControl":
+ "ShadowButton":
{
- "beatVisual":{
+ "backgroundVisual":{
"visualType":"IMAGE",
- "url":"{APPLICATION_RESOURCE_PATH}/images/Logo-for-demo.png"
+ "url":"{STYLE_DIR}/images/shadowButtonBg.9.png",
+ "mixColor":[1,1,1,0]
},
-
- "bounceTransition":
+ "checkboxBgVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/CheckBg.png",
+ "transform":{
+ "size":[0.09, 0.28],
+ "offset":[30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_BEGIN",
+ "anchorPoint":"CENTER_BEGIN"
+ }
+ },
+ "checkboxFgVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/Tick.png",
+ "transform":{
+ "size":[0.09, 0.28],
+ "offset":[30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_BEGIN",
+ "anchorPoint":"CENTER_BEGIN"
+ }
+ },
+ "labelVisual":{
+ "visualType":"TEXT",
+ "text":"Don't show again",
+ "pointSize":20,
+ "horizontalAlignment":"END",
+ "verticalAlignment":"CENTER",
+ "textColor":[1,1,1,1],
+ "mixColor":[0.3, 0.3, 0.3, 1],
+ "transform":{
+ "size":[0.9, 0.9],
+ "offset":[-30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_END",
+ "anchorPoint":"CENTER_END"
+ }
+ },
+ "activeTransition":
[
{
- "target":"beatVisual",
+ "target":"checkboxBgVisual",
"property":"size",
- "initialValue":[0.5, 0.5],
- "targetValue":[0.75, 0.75],
+ "initialValue":[0.09, 0.28],
+ "targetValue":[0.12, 0.37],
"animator":
{
- "alphaFunction":"BOUNCE",
+ "alphaFunction":"EASE_OUT_BACK",
"timePeriod":
{
- "duration":0.5,
+ "duration":0.8,
"delay":0
}
}
- }
- ],
-
- "leftTransition":
- [
+ },
+ {
+ "target":"backgroundVisual",
+ "property":"mixColor",
+ "initialValue":[1,1,1,0],
+ "targetValue":[1,1,1,1],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"backgroundVisual",
+ "property":"size",
+ "initialValue":[0.9, 0.9],
+ "targetValue":[1, 1],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"checkboxFgVisual",
+ "property":"size",
+ "initialValue":[0.09, 0.28],
+ "targetValue":[0.12, 0.37],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
{
- "target":"beatVisual",
- "property":"offset",
- "initialValue":[0, 0],
- "targetValue":[0.25, 0],
+ "target":"labelVisual",
+ "property":"mixColor",
+ "initialValue":[0.2, 0.2, 0.2, 1.0],
+ "targetValue":[0, 0, 0, 1],
"animator":
{
- "alphaFunction":"BOUNCE",
+ "alphaFunction":"EASE_OUT_BACK",
"timePeriod":
{
- "duration":0.5,
+ "duration":0.8,
"delay":0
}
}
}
],
-
- "upTransition":
+ "inactiveTransition":
[
{
- "target":"beatVisual",
- "property":"offset",
- "initialValue":[0, 0],
- "targetValue":[0, 0.25],
+ "target":"checkboxBgVisual",
+ "property":"size",
+ "initialValue":[0.12, 0.37],
+ "targetValue":[0.09, 0.28],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"backgroundVisual",
+ "property":"mixColor",
+ "targetValue":[1,1,1,0],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"checkboxFgVisual",
+ "property":"size",
+ "initialValue":[0.12, 0.37],
+ "targetValue":[0.09, 0.28],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"labelVisual",
+ "property":"mixColor",
+ "targetValue":[0.4, 0.4, 0.4, 1.0],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ },
+ {
+ "target":"backgroundVisual",
+ "property":"size",
+ "targetValue":[0.9, 0.9],
"animator":
{
- "alphaFunction":"BOUNCE",
+ "alphaFunction":"EASE_OUT_BACK",
"timePeriod":
{
- "duration":0.5,
+ "duration":0.8,
"delay":0
}
}
[
{
"target":"imageVisual",
- "property":"scale",
- "initialValue":[0.1,0.1,0.1],
- "targetValue":[1,1,1],
+ "property":"size",
+ "initialValue":[0.1,0.1],
+ "targetValue":[1,1],
"animator":
{
"alphaFunction":"EASE_IN",
},
{
"target":"imageVisual",
- "property":"colorAlpha",
- "targetValue":1
+ "property":"mixColor",
+ "targetValue":[1,1,1,1]
}
],
"disableVisibilityTransition":
[
{
"target":"imageVisual",
- "property":"scale",
- "initialValue":[1,1,1],
- "targetValue":[0.1,0.1,0.1],
+ "property":"size",
+ "initialValue":[1,1],
+ "targetValue":[0.1,0.1],
"animator":
{
"alphaFunction":"EASE_OUT",
},
{
"target":"imageVisual",
- "property":"colorAlpha",
- "targetValue":0,
+ "property":"mixColor",
+ "targetValue":[1,1,1,0],
"animator":
{
"alphaFunction":"EASE_OUT",
[
{
"target":"imageVisual",
- "property":"colorAlpha",
- "initialValue":0,
- "targetValue":1,
+ "property":"mixColor",
+ "initialValue":[1,1,1,0],
+ "targetValue":[1,1,1,1],
"animator":
{
"alphaFunction":"EASE_IN_OUT",
},
{
"target":"imageVisual",
- "property":"scale",
- "targetValue":[1,1,1]
+ "property":"size",
+ "targetValue":[1,1]
}
],
"disableVisibilityTransition":
[
{
"target":"imageVisual",
- "property":"colorAlpha",
- "targetValue":0,
+ "property":"mixColor",
+ "targetValue":[1,1,1,0],
"animator":
{
"alphaFunction":"EASE_IN_OUT",
},
{
"target":"imageVisual",
- "property":"scale",
- "targetValue":[1,1,1]
+ "property":"size",
+ "targetValue":[1,1]
+ }
+ ]
+ },
+ "ShadowButton":
+ {
+ "backgroundVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/shadowButtonBg.9.png"
+ },
+ "checkboxBgVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/CheckBg.png",
+ "transform":{
+ "size":[0.09, 0.28],
+ "offset":[30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_BEGIN",
+ "anchorPoint":"CENTER_BEGIN"
+ }
+ },
+ "checkboxFgVisual":{
+ "visualType":"IMAGE",
+ "url":"{STYLE_DIR}/images/Tick.png",
+ "transform":{
+ "size":[0.09, 0.28],
+ "offset":[30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_BEGIN",
+ "anchorPoint":"CENTER_BEGIN"
+ }
+ },
+ "labelVisual":{
+ "visualType":"TEXT",
+ "text":"Don't show again",
+ "pointSize":20,
+ "horizontalAlignment":"END",
+ "verticalAlignment":"CENTER",
+ "textColor":[1,1,1,1],
+ "mixColor":[0.3, 0.3, 0.3, 1],
+ "transform":{
+ "size":[0.9, 0.9],
+ "offset":[-30,0],
+ "offsetSizeMode":[1,1,0,0],
+ "origin":"CENTER_END",
+ "anchorPoint":"CENTER_END"
+ }
+ },
+ "activeTransition":
+ [
+ {
+ "target":"checkboxBgVisual",
+ "property":"size",
+ "initialValue":[0.09, 0.28],
+ "targetValue":[0.12, 0.37],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
+ }
+ ],
+ "inactiveTransition":
+ [
+ {
+ "target":"checkboxBgVisual",
+ "property":"size",
+ "initialValue":[0.12, 0.37],
+ "targetValue":[0.09, 0.28],
+ "animator":
+ {
+ "alphaFunction":"EASE_OUT_BACK",
+ "timePeriod":
+ {
+ "duration":0.8,
+ "delay":0
+ }
+ }
}
]
}