Updated demos to use DALi clang-format
[platform/core/uifw/dali-demo.git] / examples / visual-transitions / beat-control-impl.h
1 #ifndef DALI_DEMO_INTERNAL_BEAT_CONTROL_IMPL_H
2 #define DALI_DEMO_INTERNAL_BEAT_CONTROL_IMPL_H
3
4 /*
5  * Copyright (c) 2020 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 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
21 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
22 #include <dali-toolkit/public-api/align-enumerations.h>
23 #include <dali-toolkit/public-api/controls/control-impl.h>
24 #include <dali/public-api/animation/animation.h>
25 #include "beat-control.h"
26
27 namespace Demo
28 {
29 namespace Internal // To use TypeRegistry, handle and body classes need the same name
30 {
31 class BeatControl : public Dali::Toolkit::Internal::Control
32 {
33 public:
34   /**
35    * Instantiate a new BeatControl object
36    */
37   static Demo::BeatControl New();
38   BeatControl();
39   ~BeatControl();
40
41 public: // API
42   void StartBounceAnimation();
43
44   void StartXAnimation();
45
46   void StartYAnimation();
47
48   void StartFadeAnimation();
49
50 public: // Properties
51   /**
52    * Called when a property of an object of this type is set.
53    * @param[in] object The object whose property is set.
54    * @param[in] index The property index.
55    * @param[in] value The new property value.
56    */
57   static void SetProperty(Dali::BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value);
58
59   /**
60    * Called to retrieve a property of an object of this type.
61    * @param[in] object The object whose property is to be retrieved.
62    * @param[in] index The property index.
63    * @return The current value of the property.
64    */
65   static Dali::Property::Value GetProperty(Dali::BaseObject* object, Dali::Property::Index propertyIndex);
66
67 private: // From Control
68   /**
69    * @copydoc Toolkit::Control::OnInitialize()
70    */
71   virtual void OnInitialize();
72
73   /**
74    * @copydoc Toolkit::Control::OnSceneConnection()
75    */
76   virtual void OnSceneConnection(int depth);
77
78   /**
79    * @copydoc Toolkit::Control::OnSceneDisconnection()
80    */
81   virtual void OnSceneDisconnection();
82
83   /**
84    * @copydoc Toolkit::Control::OnSizeSet()
85    */
86   virtual void OnSizeSet(const Dali::Vector3& targetSize);
87
88   /**
89    * @copydoc Toolkit::Control::OnRelayout()
90    */
91   virtual void OnRelayout(const Dali::Vector2& targetSize, Dali::RelayoutContainer& container);
92   /**
93    * @copydoc Toolkit::Control::GetNaturalSize
94    */
95   virtual Dali::Vector3 GetNaturalSize();
96
97   /**
98    * @copydoc Toolkit::Control::OnStyleChange
99    */
100   virtual void OnStyleChange(Dali::Toolkit::StyleManager styleManager, Dali::StyleChange::Type change);
101
102 private:
103   void OnBounceAnimationFinished(Dali::Animation& handle);
104   void OnXAnimationFinished(Dali::Animation& src);
105   void OnYAnimationFinished(Dali::Animation& src);
106   void OnFadeAnimationFinished(Dali::Animation& src);
107
108   /**
109    * Relayout the visuals as a result of size negotiation
110    */
111   void RelayoutVisuals(const Dali::Vector2& targetSize);
112
113 private:
114   //undefined
115   BeatControl(const BeatControl&);
116   BeatControl& operator=(const BeatControl&);
117
118 private:
119   // Implementation details
120   Dali::Toolkit::Visual::Base   mVisual;
121   Dali::Toolkit::TransitionData mBounceTransition;
122   Dali::Toolkit::TransitionData mLeftTransition;
123   Dali::Toolkit::TransitionData mUpTransition;
124   Dali::Toolkit::TransitionData mFadeTransition;
125   Dali::Animation               mAnimation;
126   Dali::Animation               mXAnimation;
127   Dali::Animation               mYAnimation;
128   Dali::Animation               mFadeAnimation;
129   Dali::Vector2                 mTransformSize;
130   Dali::Toolkit::Align::Type    mTransformOrigin;
131   Dali::Toolkit::Align::Type    mTransformAnchorPoint;
132   int                           mAnimationPlaying;
133 };
134
135 } // namespace Internal
136
137 inline Internal::BeatControl& GetImpl(Demo::BeatControl& handle)
138 {
139   DALI_ASSERT_ALWAYS(handle);
140   Dali::RefObject& object = handle.GetImplementation();
141   return static_cast<Internal::BeatControl&>(object);
142 }
143
144 inline const Internal::BeatControl& GetImpl(const Demo::BeatControl& handle)
145 {
146   DALI_ASSERT_ALWAYS(handle);
147   const Dali::RefObject& object = handle.GetImplementation();
148   return static_cast<const Internal::BeatControl&>(object);
149 }
150
151 } // namespace Demo
152
153 #endif //  DALI_DEMO_BEAT_CONTROL_IMPL_H