[dali_1.0.1] Merge branch 'tizen'
[platform/core/uifw/dali-toolkit.git] / capi / dali-toolkit / public-api / controls / scrollable / scroll-view / scroll-view-page-spiral-effect.h
1 #ifndef __DALI_TOOLKIT_SCROLL_VIEW_PAGE_SPIRAL_EFFECT_H__
2 #define __DALI_TOOLKIT_SCROLL_VIEW_PAGE_SPIRAL_EFFECT_H__
3
4 /*
5  * Copyright (c) 2014 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 /**
22  * @addtogroup CAPI_DALI_TOOLKIT_SCROLL_VIEW_MODULE
23  * @{
24  */
25
26 // INTERNAL INCLUDES
27 #include <dali-toolkit/public-api/controls/scrollable/scroll-view/scroll-view-effect.h>
28
29 namespace Dali DALI_IMPORT_API
30 {
31
32 class Actor;
33
34 namespace Toolkit
35 {
36
37 namespace Internal DALI_INTERNAL
38 {
39 class ScrollViewPageSpiralEffect;
40 }
41
42 /**
43  * @brief This effect cause each page in a scroll-view to move along a spiral.
44  *
45  * It should be used on the following Actor hierarchy:
46  *
47  * ScrollView
48  * |
49  * Page (1..n)
50  *
51  * You should ensure ScrollView's default constraints have been removed,
52  * by calling ScrollView::RemoveConstraintsFromChildren() before applying
53  * this effect to ScrollView.
54  *
55  * Manual operation:
56  * ApplyToPage(...) method should be called on every page.
57  *
58  * Automatic operation:
59  * not implemented.
60  */
61 class ScrollViewPageSpiralEffect : public ScrollViewEffect
62 {
63
64 public:
65
66   /**
67    * @brief Create an initialized ScrollViewPageSpiralEffect.
68    *
69    * @return A handle to a newly allocated Dali resource.
70    */
71   static ScrollViewPageSpiralEffect New();
72
73   /**
74    * @brief Create an uninitialized ScrollViewPageSpiralEffect; this can be initialized with ScrollViewPageSpiralEffect::New().
75    *
76    * Calling member functions with an uninitialized Toolkit::ScrollViewPageSpiralEffect is not allowed.
77    */
78   ScrollViewPageSpiralEffect();
79
80   /**
81    * @brief Downcast an Object handle to ScrollViewPageSpiralEffect.
82    *
83    * If handle points to a ScrollViewPageSpiralEffect the
84    * downcast produces valid handle. If not the returned handle is left uninitialized.
85    * @param[in] handle Handle to an object
86    * @return handle to a ScrollViewPageSpiralEffect or an uninitialized handle
87    */
88   static ScrollViewPageSpiralEffect DownCast( BaseHandle handle );
89
90   /**
91    * @brief Manually apply effect to a page in the scroll-view.
92    *
93    * @param[in] page The page to be affected by this effect.
94    * @param[in] spiralAngle The spirald angle (in radians).
95    *
96    * @note If the wrap mode of the scroll view is changed, then this needs to be called for every
97    * page again after removing the previous constraints.
98    */
99   void ApplyToPage( Actor page, const Vector2& spiralAngle );
100
101 protected:
102
103   /**
104    * @brief This constructor is used by Dali New() methods.
105    *
106    * @param [in] impl A pointer to a newly allocated Dali resource
107    */
108   ScrollViewPageSpiralEffect( Internal::ScrollViewPageSpiralEffect *impl );
109
110 };
111
112 } // namespace Toolkit
113
114 } // namespace Dali
115
116 /**
117  * @}
118  */
119 #endif // __DALI_TOOLKIT_SCROLL_VIEW_PAGE_SPIRAL_EFFECT_H__