2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0
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.
18 #include <dali-toolkit/internal/controls/scrollable/scroll-view/scroll-base-impl.h>
31 ///////////////////////////////////////////////////////////////////////////////////////////////////
33 ///////////////////////////////////////////////////////////////////////////////////////////////////
35 const std::string ScrollBase::SCROLL_DOMAIN_OFFSET_PROPERTY_NAME( "domain-offset" );
37 ScrollBase::ScrollBase()
40 mPropertyTime(Property::INVALID_INDEX),
41 mPropertyPrePosition(Property::INVALID_INDEX),
42 mPropertyPosition(Property::INVALID_INDEX),
43 mPropertyScale(Property::INVALID_INDEX),
44 mPropertyOvershootX(Property::INVALID_INDEX),
45 mPropertyOvershootY(Property::INVALID_INDEX),
46 mPropertyWrap(Property::INVALID_INDEX),
47 mPropertyPanning(Property::INVALID_INDEX),
48 mPropertyScrolling(Property::INVALID_INDEX),
49 mPropertyFinal(Property::INVALID_INDEX),
50 mPropertyDomainOffset(Property::INVALID_INDEX),
51 mPropertyPositionDelta(Property::INVALID_INDEX),
52 mPropertyScrollStartPagePosition(Property::INVALID_INDEX),
57 void ScrollBase::SetParent(ScrollBase *parent)
62 void ScrollBase::RegisterProperties()
66 // Register common properties
67 RegisterCommonProperties();
69 // Register Scroll Properties.
70 mPropertyTime = self.RegisterProperty(Toolkit::ScrollView::SCROLL_TIME_PROPERTY_NAME, 0.0f);
71 mPropertyPrePosition = self.RegisterProperty(Toolkit::ScrollView::SCROLL_PRE_POSITION_PROPERTY_NAME, Vector3::ZERO);
72 mPropertyPosition = self.RegisterProperty(Toolkit::ScrollView::SCROLL_POSITION_PROPERTY_NAME, Vector3::ZERO);
73 mPropertyOvershootX = self.RegisterProperty(Toolkit::ScrollView::SCROLL_OVERSHOOT_X_PROPERTY_NAME, 0.0f);
74 mPropertyOvershootY = self.RegisterProperty(Toolkit::ScrollView::SCROLL_OVERSHOOT_Y_PROPERTY_NAME, 0.0f);
75 mPropertyFinal = self.RegisterProperty(Toolkit::ScrollView::SCROLL_FINAL_PROPERTY_NAME, Vector3::ZERO);
76 mPropertyScale = self.RegisterProperty(Toolkit::ScrollView::SCROLL_SCALE_PROPERTY_NAME, Vector3::ONE);
77 mPropertyWrap = self.RegisterProperty(Toolkit::ScrollView::SCROLL_WRAP_PROPERTY_NAME, false);
78 mPropertyPanning = self.RegisterProperty(Toolkit::ScrollView::SCROLL_PANNING_PROPERTY_NAME, false);
79 mPropertyScrolling = self.RegisterProperty(Toolkit::ScrollView::SCROLL_SCROLLING_PROPERTY_NAME, false);
80 mPropertyDomainOffset = self.RegisterProperty(SCROLL_DOMAIN_OFFSET_PROPERTY_NAME, Vector3::ZERO);
81 mPropertyPositionDelta = self.RegisterProperty(Toolkit::ScrollView::SCROLL_POSITION_DELTA_PROPERTY_NAME, Vector3::ZERO);
82 mPropertyScrollStartPagePosition = self.RegisterProperty(Toolkit::ScrollView::SCROLL_START_PAGE_POSITION_PROPERTY_NAME, Vector3::ZERO);
85 void ScrollBase::BindActor(Actor child)
87 FindAndUnbindActor(child);
89 ActorInfoPtr actorInfo(new ActorInfo(child));
90 mBoundActors.push_back(actorInfo);
92 // Apply all our constraints to this new child.
93 ConstraintStack::iterator i;
95 for(i = mConstraintStack.begin();i!=mConstraintStack.end();i++)
97 actorInfo->ApplyConstraint(*i);
101 void ScrollBase::UnbindActor(Actor child)
103 // Find the child in mBoundActors, and unparent it
104 for (ActorInfoIter iter = mBoundActors.begin(); iter != mBoundActors.end(); ++iter)
106 ActorInfoPtr actorInfo = *iter;
108 if( actorInfo->mActor == child )
110 mBoundActors.erase(iter);
116 void ScrollBase::FindAndUnbindActor(Actor child)
118 // Since we don't know if and where child may have been bound
119 // (as we cannot store such information inside the Actor), we
120 // perform a search on all associated ScrollBases
121 // This is done by recursively calling the parent of this ScrollBase
122 // until reaching the top (at which point implementation may be
123 // different as this is virtual)
125 if(mParent) // continuously ascend until reaches root ScrollBase.
127 mParent->FindAndUnbindActor(child);
131 void ScrollBase::ApplyConstraintToBoundActors(Constraint constraint)
133 mConstraintStack.push_back(constraint);
135 for(ActorInfoIter i = mBoundActors.begin();i != mBoundActors.end(); ++i)
137 (*i)->ApplyConstraint(constraint);
141 void ScrollBase::RemoveConstraintsFromBoundActors()
143 mConstraintStack.clear();
145 for(ActorInfoIter i = mBoundActors.begin();i != mBoundActors.end(); ++i)
147 (*i)->RemoveConstraints();
151 } // namespace Internal
153 } // namespace Toolkit