2 // Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
17 #include <dali-toolkit/internal/controls/scrollable/scroll-view/scroll-base-impl.h>
30 ///////////////////////////////////////////////////////////////////////////////////////////////////
32 ///////////////////////////////////////////////////////////////////////////////////////////////////
34 const std::string ScrollBase::SCROLL_DOMAIN_OFFSET_PROPERTY_NAME( "domain-offset" );
36 ScrollBase::ScrollBase()
39 mPropertyTime(Property::INVALID_INDEX),
40 mPropertyX(Property::INVALID_INDEX),
41 mPropertyY(Property::INVALID_INDEX),
42 mPropertyPrePosition(Property::INVALID_INDEX),
43 mPropertyPosition(Property::INVALID_INDEX),
44 mPropertyScale(Property::INVALID_INDEX),
45 mPropertyOvershootX(Property::INVALID_INDEX),
46 mPropertyOvershootY(Property::INVALID_INDEX),
47 mPropertyWrap(Property::INVALID_INDEX),
48 mPropertyPanning(Property::INVALID_INDEX),
49 mPropertyScrolling(Property::INVALID_INDEX),
50 mPropertyFinal(Property::INVALID_INDEX),
51 mPropertyDomainOffset(Property::INVALID_INDEX),
52 mPropertyPositionDelta(Property::INVALID_INDEX),
53 mPropertyScrollStartPagePosition(Property::INVALID_INDEX),
58 void ScrollBase::SetParent(ScrollBase *parent)
63 void ScrollBase::RegisterProperties()
67 // Register common properties
68 RegisterCommonProperties();
70 // Register Scroll Properties.
71 mPropertyTime = self.RegisterProperty(Toolkit::ScrollView::SCROLL_TIME_PROPERTY_NAME, 0.0f);
72 mPropertyPrePosition = self.RegisterProperty(Toolkit::ScrollView::SCROLL_PRE_POSITION_PROPERTY_NAME, Vector3::ZERO);
73 mPropertyPosition = self.RegisterProperty(Toolkit::ScrollView::SCROLL_POSITION_PROPERTY_NAME, Vector3::ZERO);
74 mPropertyOvershootX = self.RegisterProperty(Toolkit::ScrollView::SCROLL_OVERSHOOT_X_PROPERTY_NAME, 0.0f);
75 mPropertyOvershootY = self.RegisterProperty(Toolkit::ScrollView::SCROLL_OVERSHOOT_Y_PROPERTY_NAME, 0.0f);
76 mPropertyFinal = self.RegisterProperty(Toolkit::ScrollView::SCROLL_FINAL_PROPERTY_NAME, Vector3::ZERO);
77 mPropertyX = self.RegisterProperty(Toolkit::ScrollView::SCROLL_X_PROPERTY_NAME, 0.0f);
78 mPropertyY = self.RegisterProperty(Toolkit::ScrollView::SCROLL_Y_PROPERTY_NAME, 0.0f);
79 mPropertyScale = self.RegisterProperty(Toolkit::ScrollView::SCROLL_SCALE_PROPERTY_NAME, Vector3::ONE);
80 mPropertyWrap = self.RegisterProperty(Toolkit::ScrollView::SCROLL_WRAP_PROPERTY_NAME, false);
81 mPropertyPanning = self.RegisterProperty(Toolkit::ScrollView::SCROLL_PANNING_PROPERTY_NAME, false);
82 mPropertyScrolling = self.RegisterProperty(Toolkit::ScrollView::SCROLL_SCROLLING_PROPERTY_NAME, false);
83 mPropertyDomainOffset = self.RegisterProperty(SCROLL_DOMAIN_OFFSET_PROPERTY_NAME, Vector3::ZERO);
84 mPropertyPositionDelta = self.RegisterProperty(Toolkit::ScrollView::SCROLL_POSITION_DELTA_PROPERTY_NAME, Vector3::ZERO);
85 mPropertyScrollStartPagePosition = self.RegisterProperty(Toolkit::ScrollView::SCROLL_START_PAGE_POSITION_PROPERTY_NAME, Vector3::ZERO);
88 void ScrollBase::BindActor(Actor child)
90 FindAndUnbindActor(child);
92 ActorInfoPtr actorInfo(new ActorInfo(child));
93 mBoundActors.push_back(actorInfo);
95 // Apply all our constraints to this new child.
96 ConstraintStack::iterator i;
98 for(i = mConstraintStack.begin();i!=mConstraintStack.end();i++)
100 actorInfo->ApplyConstraint(*i);
104 void ScrollBase::UnbindActor(Actor child)
106 // Find the child in mBoundActors, and unparent it
107 for (ActorInfoIter iter = mBoundActors.begin(); iter != mBoundActors.end(); ++iter)
109 ActorInfoPtr actorInfo = *iter;
111 if( actorInfo->mActor == child )
113 mBoundActors.erase(iter);
119 void ScrollBase::FindAndUnbindActor(Actor child)
121 // Since we don't know if and where child may have been bound
122 // (as we cannot store such information inside the Actor), we
123 // perform a search on all associated ScrollBases
124 // This is done by recursively calling the parent of this ScrollBase
125 // until reaching the top (at which point implementation may be
126 // different as this is virtual)
128 if(mParent) // continuously ascend until reaches root ScrollBase.
130 mParent->FindAndUnbindActor(child);
134 void ScrollBase::ApplyConstraintToBoundActors(Constraint constraint)
136 mConstraintStack.push_back(constraint);
138 for(ActorInfoIter i = mBoundActors.begin();i != mBoundActors.end(); ++i)
140 (*i)->ApplyConstraint(constraint);
144 void ScrollBase::RemoveConstraintsFromBoundActors()
146 mConstraintStack.clear();
148 for(ActorInfoIter i = mBoundActors.begin();i != mBoundActors.end(); ++i)
150 (*i)->RemoveConstraints();
154 } // namespace Internal
156 } // namespace Toolkit