-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Flora License, Version 1.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://floralicense.org/license/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
+/*
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
#include <dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h>
#include <dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h>
const Vector4 DEFAULT_INDICATOR_NINE_PATCH_BORDER(4.0f, 9.0f, 7.0f, 11.0f);
const float MINIMUM_INDICATOR_HEIGHT(20.0f); // The minimum indicator height for the nine patch border
const float DEFAULT_SLIDER_DEPTH(1.0f);
-const float INDICATOR_SHOW_TIME(0.5f);
-const float INDICATOR_HIDE_TIME(0.5f);
+const float DEFAULT_INDICATOR_SHOW_DURATION(0.5f);
+const float DEFAULT_INDICATOR_HIDE_DURATION(0.5f);
const float DEFAULT_PAN_GESTURE_PROCESS_TIME(16.7f); // 16.7 milliseconds, i.e. one frame
const float DEFAULT_INDICATOR_FIXED_HEIGHT(80.0f);
const Property::Index ScrollBar::PROPERTY_INDICATOR_HEIGHT_POLICY( Internal::ScrollBar::SCROLLBAR_PROPERTY_START_INDEX );
const Property::Index ScrollBar::PROPERTY_INDICATOR_FIXED_HEIGHT( Internal::ScrollBar::SCROLLBAR_PROPERTY_START_INDEX + 1 );
+const Property::Index ScrollBar::PROPERTY_INDICATOR_SHOW_DURATION( Internal::ScrollBar::SCROLLBAR_PROPERTY_START_INDEX + 2 );
+const Property::Index ScrollBar::PROPERTY_INDICATOR_HIDE_DURATION( Internal::ScrollBar::SCROLLBAR_PROPERTY_START_INDEX + 3 );
namespace Internal
{
PropertyRegistration property1( typeRegistration, "indicator-height-policy", Toolkit::ScrollBar::PROPERTY_INDICATOR_HEIGHT_POLICY, Property::STRING, &ScrollBar::SetProperty, &ScrollBar::GetProperty );
PropertyRegistration property2( typeRegistration, "indicator-fixed-height", Toolkit::ScrollBar::PROPERTY_INDICATOR_FIXED_HEIGHT, Property::FLOAT, &ScrollBar::SetProperty, &ScrollBar::GetProperty );
+PropertyRegistration property3( typeRegistration, "indicator-show-duration", Toolkit::ScrollBar::PROPERTY_INDICATOR_SHOW_DURATION, Property::FLOAT, &ScrollBar::SetProperty, &ScrollBar::GetProperty );
+PropertyRegistration property4( typeRegistration, "indicator-hide-duration", Toolkit::ScrollBar::PROPERTY_INDICATOR_HIDE_DURATION, Property::FLOAT, &ScrollBar::SetProperty, &ScrollBar::GetProperty );
}
ScrollBar::ScrollBar()
-: mScrollStart(0.0f),
+: mIndicatorShowDuration(DEFAULT_INDICATOR_SHOW_DURATION),
+ mIndicatorHideDuration(DEFAULT_INDICATOR_HIDE_DURATION),
+ mScrollStart(0.0f),
mIsPanning(false),
mCurrentScrollPosition(0.0f),
mIndicatorHeightPolicy(Toolkit::ScrollBar::Variable),
}
}
-void ScrollBar::SetBackgroundImage( Image image, const Vector4& border )
-{
- if (!mBackground )
- {
- mBackground = ImageActor::New( image );
- mBackground.SetParentOrigin( ParentOrigin::TOP_LEFT );
- mBackground.SetAnchorPoint( AnchorPoint::TOP_LEFT );
- Self().Add(mBackground);
- }
- else
- {
- mBackground.SetImage(image);
- }
-
- mBackground.SetNinePatchBorder( border );
- mBackground.SetStyle( ImageActor::STYLE_NINE_PATCH );
-}
-
-void ScrollBar::SetIndicatorImage( Image image, const Vector4& border )
+void ScrollBar::SetIndicatorImage( Image image )
{
mIndicator.SetImage(image);
- mIndicator.SetNinePatchBorder( border );
- mIndicator.SetStyle( ImageActor::STYLE_NINE_PATCH );
}
Actor ScrollBar::GetScrollIndicator()
void ScrollBar::OnScrollPositionNotified(PropertyNotification& source)
{
// Emit the signal to notify the scroll position crossing
- mScrollPositionNotifiedSignal.Emit(mScrollPositionObject.GetProperty<float>( Toolkit::ScrollConnector::SCROLL_POSITION ));
+ mScrollPositionNotifiedSignal.Emit(mScrollConnector.GetScrollPosition());
}
void ScrollBar::Show()
mAnimation.Reset();
}
- mAnimation = Animation::New( INDICATOR_SHOW_TIME );
- mAnimation.OpacityTo( Self(), 1.0f, AlphaFunctions::EaseIn );
- mAnimation.Play();
+ if(mIndicatorShowDuration > 0.0f)
+ {
+ mAnimation = Animation::New( mIndicatorShowDuration );
+ mAnimation.OpacityTo( Self(), 1.0f, AlphaFunctions::EaseIn );
+ mAnimation.Play();
+ }
+ else
+ {
+ Self().SetOpacity(1.0f);
+ }
}
void ScrollBar::Hide()
mAnimation.Reset();
}
- mAnimation = Animation::New( INDICATOR_HIDE_TIME );
- mAnimation.OpacityTo( Self(), 0.0f, AlphaFunctions::EaseIn );
- mAnimation.Play();
+ if(mIndicatorHideDuration > 0.0f)
+ {
+ mAnimation = Animation::New( mIndicatorHideDuration );
+ mAnimation.OpacityTo( Self(), 0.0f, AlphaFunctions::EaseIn );
+ mAnimation.Play();
+ }
+ else
+ {
+ Self().SetOpacity(0.0f);
+ }
}
bool ScrollBar::OnPanGestureProcessTick()
{
// Update the scroll position property.
- mScrollPositionObject.SetProperty( Toolkit::ScrollConnector::SCROLL_POSITION, mCurrentScrollPosition );
-
- Dali::Toolkit::ItemView itemView = Dali::Toolkit::ItemView::DownCast(Self().GetParent());
- if(itemView)
+ if( mScrollConnector )
{
- // Refresh ItemView immediately when the scroll position is changed.
- GetImpl(itemView).DoRefresh(mCurrentScrollPosition, false); // No need to cache extra items.
+ mScrollConnector.SetScrollPosition(mCurrentScrollPosition);
}
return true;
void ScrollBar::OnPan( PanGesture gesture )
{
- if(mScrollPositionObject)
+ if(mScrollConnector)
{
+ Dali::Toolkit::ItemView itemView = Dali::Toolkit::ItemView::DownCast(Self().GetParent());
+
switch(gesture.state)
{
case Gesture::Started:
}
Show();
- mScrollStart = mScrollPositionObject.GetProperty<float>( Toolkit::ScrollConnector::SCROLL_POSITION );
+ mScrollStart = mScrollConnector.GetScrollPosition();
mGestureDisplacement = Vector3::ZERO;
mIsPanning = true;
mTimer.Reset();
}
+ if(itemView)
+ {
+ // Refresh the ItemView cache with extra items
+ GetImpl(itemView).DoRefresh(mCurrentScrollPosition, true);
+ }
+
break;
}
}
- Dali::Toolkit::ItemView itemView = Dali::Toolkit::ItemView::DownCast(Self().GetParent());
if(itemView)
{
// Disable automatic refresh in ItemView during fast scrolling
return mIndicatorFixedHeight;
}
+void ScrollBar::SetIndicatorShowDuration( float durationSeconds )
+{
+ mIndicatorShowDuration = durationSeconds;
+}
+
+float ScrollBar::GetIndicatorShowDuration()
+{
+ return mIndicatorShowDuration;
+}
+
+void ScrollBar::SetIndicatorHideDuration( float durationSeconds )
+{
+ mIndicatorHideDuration = durationSeconds;
+}
+
+float ScrollBar::GetIndicatorHideDuration()
+{
+ return mIndicatorHideDuration;
+}
+
void ScrollBar::OnIndicatorHeightPolicyPropertySet( Property::Value propertyValue )
{
std::string policyName( propertyValue.Get<std::string>() );
scrollBarImpl.SetIndicatorFixedHeight(value.Get<float>());
break;
}
+ case Toolkit::ScrollBar::PROPERTY_INDICATOR_SHOW_DURATION:
+ {
+ scrollBarImpl.SetIndicatorShowDuration(value.Get<float>());
+ break;
+ }
+ case Toolkit::ScrollBar::PROPERTY_INDICATOR_HIDE_DURATION:
+ {
+ scrollBarImpl.SetIndicatorHideDuration(value.Get<float>());
+ break;
+ }
}
}
}
value = scrollBarImpl.GetIndicatorFixedHeight();
break;
}
+ case Toolkit::ScrollBar::PROPERTY_INDICATOR_SHOW_DURATION:
+ {
+ value = scrollBarImpl.GetIndicatorShowDuration();
+ break;
+ }
+ case Toolkit::ScrollBar::PROPERTY_INDICATOR_HIDE_DURATION:
+ {
+ value = scrollBarImpl.GetIndicatorHideDuration();
+ break;
+ }
}
}
return value;