diff --git a/examples/arc-visual/arc-visual-example.cpp b/examples/arc-visual/arc-visual-example.cpp index de4e9ac..4ae4e23 100644 --- a/examples/arc-visual/arc-visual-example.cpp +++ b/examples/arc-visual/arc-visual-example.cpp @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include using namespace Dali; @@ -43,6 +45,13 @@ const Property::Value BACKGROUND { DevelArcVisual::Property::THICKNESS, 20.0f } }; +const Property::Value TEXT_BACKGROUND +{ + { Visual::Property::TYPE, Visual::COLOR }, + { ColorVisual::Property::MIX_COLOR, Vector4( 0.8f, 0.8f, 0.8f, 1.0f ) }, + { DevelVisual::Property::CORNER_RADIUS, 10.0f } +}; + const Property::Value TRANSITION_ANIMATOR { { "timePeriod", Property::Map().Add( "duration", ANIMATION_DURATION ) } @@ -76,8 +85,7 @@ public: ArcVisualExample( Application& application ) : mApplication( application ), - mStartAngle( 0.0f ), - mSweepAngle( 0.0f ) + mSelectedPoperty( DevelArcVisual::Property::START_ANGLE ) { // Connect to the Application's Init signal mApplication.InitSignal().Connect( this, &ArcVisualExample::Create ); @@ -96,11 +104,65 @@ private: mControl = Control::New(); mControl.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); - mControl.SetProperty( Actor::Property::SIZE, Vector2( 200.0f, 200.0f ) ); + mControl.SetProperty( Actor::Property::SIZE, Vector2( 300.0f, 300.0f ) ); mControl.SetProperty( Control::Property::BACKGROUND, BACKGROUND ); - stage.Add( mControl ); + mStartAngleLabel = TextLabel::New( "1" ); + mStartAngleLabel.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + mStartAngleLabel.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_RIGHT ); + mStartAngleLabel.SetProperty( Actor::Property::POSITION, Vector2( -30.0f, -10.0f ) ); + mStartAngleLabel.SetProperty( Control::Property::BACKGROUND, TEXT_BACKGROUND ); + mStartAngleLabel.SetProperty( Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mStartAngleLabel.SetProperty( Actor::Property::HEIGHT_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mStartAngleLabel.SetProperty( Control::Property::PADDING, Extents( 20.0f, 20.0f, 10.0f, 10.0f ) ); + mStartAngleLabel.TouchSignal().Connect( this, &ArcVisualExample::OnButtonTouch ); + stage.Add( mStartAngleLabel ); + + mSweepAngleLabel = TextLabel::New( "2" ); + mSweepAngleLabel.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + mSweepAngleLabel.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER ); + mSweepAngleLabel.SetProperty( Actor::Property::POSITION, Vector2( 0.0f, -10.0f ) ); + mSweepAngleLabel.SetProperty( Control::Property::BACKGROUND, TEXT_BACKGROUND ); + mSweepAngleLabel.SetProperty( Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mSweepAngleLabel.SetProperty( Actor::Property::HEIGHT_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mSweepAngleLabel.SetProperty( Control::Property::PADDING, Extents( 20.0f, 20.0f, 10.0f, 10.0f ) ); + mSweepAngleLabel.TouchSignal().Connect( this, &ArcVisualExample::OnButtonTouch ); + stage.Add( mSweepAngleLabel ); + + mThicknessLabel = TextLabel::New( "3" ); + mThicknessLabel.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + mThicknessLabel.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_LEFT ); + mThicknessLabel.SetProperty( Actor::Property::POSITION, Vector2( 30.0f, -10.0f ) ); + mThicknessLabel.SetProperty( Control::Property::BACKGROUND, TEXT_BACKGROUND ); + mThicknessLabel.SetProperty( Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mThicknessLabel.SetProperty( Actor::Property::HEIGHT_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mThicknessLabel.SetProperty( Control::Property::PADDING, Extents( 20.0f, 20.0f, 10.0f, 10.0f ) ); + mThicknessLabel.TouchSignal().Connect( this, &ArcVisualExample::OnButtonTouch ); + stage.Add( mThicknessLabel ); + + mPlusTextLabel = TextLabel::New( "+" ); + mPlusTextLabel.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + mPlusTextLabel.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT ); + mPlusTextLabel.SetProperty( Actor::Property::POSITION, Vector2( 20.0f, 10.0f ) ); + mPlusTextLabel.SetProperty( Control::Property::BACKGROUND, TEXT_BACKGROUND ); + mPlusTextLabel.SetProperty( Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mPlusTextLabel.SetProperty( Actor::Property::HEIGHT_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mPlusTextLabel.SetProperty( Control::Property::PADDING, Extents( 20.0f, 20.0f, 10.0f, 10.0f ) ); + mPlusTextLabel.TouchSignal().Connect( this, &ArcVisualExample::OnButtonTouch ); + stage.Add( mPlusTextLabel ); + + mMinusTextLabel = TextLabel::New( "-" ); + mMinusTextLabel.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + mMinusTextLabel.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_RIGHT ); + mMinusTextLabel.SetProperty( Actor::Property::POSITION, Vector2( -20.0f, 10.0f ) ); + mMinusTextLabel.SetProperty( Control::Property::BACKGROUND, TEXT_BACKGROUND ); + mMinusTextLabel.SetProperty( Actor::Property::WIDTH_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mMinusTextLabel.SetProperty( Actor::Property::HEIGHT_RESIZE_POLICY, ResizePolicy::USE_NATURAL_SIZE ); + mMinusTextLabel.SetProperty( Control::Property::PADDING, Extents( 25.0f, 25.0f, 10.0f, 10.0f ) ); + mMinusTextLabel.TouchSignal().Connect( this, &ArcVisualExample::OnButtonTouch ); + stage.Add( mMinusTextLabel ); + // Respond to a click anywhere on the stage stage.GetRootLayer().TouchSignal().Connect( this, &ArcVisualExample::OnTouch ); @@ -108,6 +170,47 @@ private: stage.KeyEventSignal().Connect( this, &ArcVisualExample::OnKeyEvent ); } + bool OnButtonTouch( Actor actor, const TouchData& touch ) + { + if( touch.GetState( 0 ) == PointState::UP ) + { + Control control = Control::DownCast( actor ); + if( control == mStartAngleLabel ) + { + mSelectedPoperty = DevelArcVisual::Property::START_ANGLE; + } + else if( control == mSweepAngleLabel ) + { + mSelectedPoperty = DevelArcVisual::Property::SWEEP_ANGLE; + } + else if( control == mThicknessLabel ) + { + mSelectedPoperty = DevelArcVisual::Property::THICKNESS; + } + else if( control == mPlusTextLabel ) + { + Property::Map map = mControl.GetProperty< Property::Map >( Control::Property::BACKGROUND ); + Property::Value* value = map.Find( mSelectedPoperty ); + if( value ) + { + DevelControl::DoAction( mControl, Control::Property::BACKGROUND, DevelArcVisual::Action::UPDATE_PROPERTY, + Property::Map().Add( mSelectedPoperty, value->Get< float >() + 5.0f ) ); + } + } + else + { + Property::Map map = mControl.GetProperty< Property::Map >( Control::Property::BACKGROUND ); + Property::Value* value = map.Find( mSelectedPoperty ); + if( value ) + { + DevelControl::DoAction( mControl, Control::Property::BACKGROUND, DevelArcVisual::Action::UPDATE_PROPERTY, + Property::Map().Add( mSelectedPoperty, value->Get< float >() - 5.0f ) ); + } + } + } + return true; + } + bool OnTouch( Actor actor, const TouchData& touch ) { if( touch.GetState( 0 ) == PointState::UP ) @@ -125,9 +228,9 @@ private: void OnKeyEvent( const KeyEvent& event ) { - if( event.state == KeyEvent::Down ) + if( event.state == KeyEvent::Up ) { - if ( IsKey( event, Dali::DALI_KEY_ESCAPE ) || IsKey( event, Dali::DALI_KEY_BACK ) ) + if( IsKey( event, DALI_KEY_ESCAPE) || IsKey( event, DALI_KEY_BACK ) ) { mApplication.Quit(); } @@ -137,8 +240,12 @@ private: private: Application& mApplication; Control mControl; - float mStartAngle; - float mSweepAngle; + TextLabel mStartAngleLabel; + TextLabel mSweepAngleLabel; + TextLabel mThicknessLabel; + TextLabel mPlusTextLabel; + TextLabel mMinusTextLabel; + Property::Index mSelectedPoperty; }; int DALI_EXPORT_API main( int argc, char **argv )