5089c7859c3864bd75905ffa7f0efd02325cb35f
[platform/core/uifw/dali-demo.git] / examples / radial-menu / radial-sweep-view-impl.h
1 #ifndef DALI_DEMO_RADIAL_SWEEP_VIEW_IMPL_H
2 #define DALI_DEMO_RADIAL_SWEEP_VIEW_IMPL_H
3
4 /*
5  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 #include <dali-toolkit/dali-toolkit.h>
22 #include "radial-sweep-view.h"
23
24
25 /********************************************************************************
26  * Class to implement a layer with a radial sweep stencil mask and an actor tree
27  */
28 class RadialSweepViewImpl : public Dali::Toolkit::Internal::Control
29 {
30 public:
31   static RadialSweepView New();
32
33   static RadialSweepView New( float duration,
34                               float diameter,
35                               Dali::Radian initialAngle,
36                               Dali::Radian finalAngle,
37                               Dali::Radian initialSector,
38                               Dali::Radian finalSector );
39
40   RadialSweepViewImpl( float duration,
41                        float diameter,
42                        Dali::Radian initialAngle,
43                        Dali::Radian finalAngle,
44                        Dali::Radian initialSector,
45                        Dali::Radian finalSector );
46
47   void SetDuration(float duration);
48   void SetEasingFunction( Dali::AlphaFunction easingFunction );
49
50   void SetDiameter(float diameter);
51   void SetInitialAngle( Dali::Radian initialAngle);
52   void SetFinalAngle( Dali::Radian finalAngle);
53   void SetInitialSector( Dali::Radian initialSector);
54   void SetFinalSector( Dali::Radian finalSector);
55   void SetInitialActorAngle( Dali::Radian initialAngle );
56   void SetFinalActorAngle( Dali::Radian finalAngle );
57
58   float GetDuration( );
59   float GetDiameter( );
60   Dali::Radian GetInitialAngle( );
61   Dali::Radian GetFinalAngle( );
62   Dali::Radian GetInitialSector( );
63   Dali::Radian GetFinalSector( );
64   Dali::Radian GetInitialActorAngle( );
65   Dali::Radian GetFinalActorAngle( );
66
67   void RotateActorsWithStencil(bool rotate);
68
69   void Add( Dali::Actor actor );
70
71   void Activate( Dali::Animation anim = Dali::Animation(), float offsetTime=0, float duration=2.0f );
72
73   void Deactivate();
74
75 private:
76
77   /**
78    * Create the stencil mask
79    */
80   void CreateStencil(Dali::Radian initialSector );
81
82 private:
83   Dali::Layer           mLayer;
84   Dali::Animation       mAnim;
85   float                 mDuration;
86   float                 mDiameter;
87   Dali::Radian          mInitialAngle;
88   Dali::Radian          mFinalAngle;
89   Dali::Radian          mInitialSector;
90   Dali::Radian          mFinalSector;
91   Dali::Radian          mInitialActorAngle;
92   Dali::Radian          mFinalActorAngle;
93   Dali::AlphaFunction   mEasingFunction;
94   Dali::Actor           mStencilActor;       ///< Stencil actor which generates mask
95   Dali::Property::Index mStartAngleIndex;    ///< Index of start-angle property
96   Dali::Property::Index mRotationAngleIndex; ///< Index of rotation-angle property
97   bool                  mRotateActorsWithStencil:1;
98   bool                  mRotateActors;
99 };
100
101
102 inline RadialSweepViewImpl& GetImpl( RadialSweepView& obj )
103 {
104   DALI_ASSERT_ALWAYS(obj);
105   Dali::RefObject& handle = obj.GetImplementation();
106   return static_cast<RadialSweepViewImpl&>(handle);
107 }
108
109 inline const RadialSweepViewImpl& GetImpl( const RadialSweepView& obj )
110 {
111   DALI_ASSERT_ALWAYS(obj);
112   const Dali::RefObject& handle = obj.GetImplementation();
113   return static_cast<const RadialSweepViewImpl&>(handle);
114 }
115
116
117
118 #endif // DALI_DEMO_RADIAL_SWEEP_VIEW_IMPL_H