From 95afb515eab9557a404015e26a210c07889f53b9 Mon Sep 17 00:00:00 2001 From: Paul Wisbey Date: Tue, 28 Feb 2017 19:24:19 +0000 Subject: [PATCH 1/1] Initially show scroll indicator for a brief period Change-Id: Ib19586c964d7f62aa78b89c791f7ff0067c729d0 --- .../src/dali-toolkit/utc-Dali-ScrollBar.cpp | 302 +++++++++++++++++++++ build/tizen/dali-toolkit/Makefile.am | 2 + .../controls/scroll-bar/scroll-bar-devel.h | 78 ++++++ dali-toolkit/devel-api/file.list | 3 + .../controls/scroll-bar/scroll-bar-impl.cpp | 98 ++++++- .../internal/controls/scroll-bar/scroll-bar-impl.h | 17 +- .../scrollable/scroll-view/scroll-view-impl.cpp | 7 +- .../1920x1080/dali-toolkit-default-theme.json | 3 +- .../styles/480x800/dali-toolkit-default-theme.json | 3 +- .../720x1280/dali-toolkit-default-theme.json | 3 +- 10 files changed, 498 insertions(+), 18 deletions(-) create mode 100644 dali-toolkit/devel-api/controls/scroll-bar/scroll-bar-devel.h diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ScrollBar.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ScrollBar.cpp index ded233f..95b784d 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ScrollBar.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ScrollBar.cpp @@ -21,6 +21,7 @@ #include #include #include +#include using namespace Dali; using namespace Toolkit; @@ -1388,6 +1389,307 @@ int UtcDaliToolkitScrollBarHideIndicatorN(void) END_TEST; } +int UtcDaliToolkitScrollBarActionShowIndicator(void) +{ + ToolkitTestApplication application; + + // Create a scroll bar + ScrollBar scrollBar = ScrollBar::New(); + DALI_TEST_CHECK( scrollBar ); + + Stage::GetCurrent().Add( scrollBar ); + + Actor indicator = scrollBar.GetScrollIndicator(); + DALI_TEST_CHECK( indicator ); + + // Get the default duration to hide the indicator + float duration = scrollBar.GetProperty( ScrollBar::Property::INDICATOR_SHOW_DURATION ); + + // Check that the default duration is greater than 0 + DALI_TEST_CHECK( duration > 0.0f ); + + // Make the indicator invisible + indicator.SetOpacity(0.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is invisible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 0.0f, TEST_LOCATION ); + + // Do the "ShowIndicator" action + Property::Map emptyMap; + scrollBar.DoAction( "ShowIndicator", emptyMap ); + + // Wait for the specified duration + Wait(application, duration * 1000); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now visible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 1.0f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollBarActionHideIndicator(void) +{ + ToolkitTestApplication application; + + // Create a scroll bar + ScrollBar scrollBar = ScrollBar::New(); + DALI_TEST_CHECK( scrollBar ); + + Stage::GetCurrent().Add( scrollBar ); + + Actor indicator = scrollBar.GetScrollIndicator(); + DALI_TEST_CHECK( indicator ); + + // Get the default duration to hide the indicator + float duration = scrollBar.GetProperty( ScrollBar::Property::INDICATOR_HIDE_DURATION ); + + // Check that the default duration is greater than 0 + DALI_TEST_CHECK( duration > 0.0f ); + + // Make the indicator visible + indicator.SetOpacity(1.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is visible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 1.0f, TEST_LOCATION ); + + // Do the "HideIndicator" action + Property::Map emptyMap; + scrollBar.DoAction( "HideIndicator", emptyMap ); + + // Wait for the specified duration + Wait(application, duration * 1000); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now invisible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 0.0f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollBarActionShowTransientIndicator(void) +{ + ToolkitTestApplication application; + + // Create a scroll bar + ScrollBar scrollBar = ScrollBar::New(); + DALI_TEST_CHECK( scrollBar ); + + Stage::GetCurrent().Add( scrollBar ); + + Actor indicator = scrollBar.GetScrollIndicator(); + DALI_TEST_CHECK( indicator ); + + // Get the default duration to hide the indicator + float duration = scrollBar.GetProperty( ScrollBar::Property::INDICATOR_SHOW_DURATION ); + + // Check that the default duration is greater than 0 + DALI_TEST_CHECK( duration > 0.0f ); + + // Make the indicator invisible + indicator.SetOpacity(0.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is invisible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 0.0f, TEST_LOCATION ); + + // Do the "ShowIndicator" action + Property::Map emptyMap; + scrollBar.DoAction( "ShowTransientIndicator", emptyMap ); + + // Wait for the specified duration + Wait(application, duration * 1000); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now visible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 1.0f, TEST_LOCATION ); + + // Get the default duration to hide the indicator + float hideDuration = scrollBar.GetProperty( ScrollBar::Property::INDICATOR_HIDE_DURATION ); + float transientDuration = scrollBar.GetProperty( DevelScrollBar::Property::INDICATOR_TRANSIENT_DURATION ); + float totalVisibleDuration = hideDuration + transientDuration; + + // Check that the default duration is greater than 0 + DALI_TEST_CHECK( totalVisibleDuration > 0.0f ); + + // Wait for the specified duration + Wait(application, totalVisibleDuration * 1000); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now invisible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 0.0f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollBarActionShowTransientIndicatorImmediate(void) +{ + ToolkitTestApplication application; + + // Create a scroll bar + ScrollBar scrollBar = ScrollBar::New(); + DALI_TEST_CHECK( scrollBar ); + + Stage::GetCurrent().Add( scrollBar ); + + Actor indicator = scrollBar.GetScrollIndicator(); + DALI_TEST_CHECK( indicator ); + + // Make the indicator invisible + indicator.SetOpacity(0.0f); + + // Don't use a show animation; the indicator should appear immediately + scrollBar.SetProperty( ScrollBar::Property::INDICATOR_SHOW_DURATION, 0.0f ); + float duration = scrollBar.GetProperty( ScrollBar::Property::INDICATOR_SHOW_DURATION ); + DALI_TEST_EQUALS( duration, 0.0f, TEST_LOCATION ); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Do the "ShowIndicator" action + Property::Map emptyMap; + scrollBar.DoAction( "ShowTransientIndicator", emptyMap ); + + // Wait for the specified duration + Wait(application); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now visible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 1.0f, TEST_LOCATION ); + + // Get the default duration to hide the indicator + float hideDuration = scrollBar.GetProperty( ScrollBar::Property::INDICATOR_HIDE_DURATION ); + float transientDuration = scrollBar.GetProperty( DevelScrollBar::Property::INDICATOR_TRANSIENT_DURATION ); + float totalVisibleDuration = hideDuration + transientDuration; + + // Check that the default duration is greater than 0 + DALI_TEST_CHECK( totalVisibleDuration > 0.0f ); + + // Wait for the specified duration + Wait(application, totalVisibleDuration * 1000); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now invisible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 0.0f, TEST_LOCATION ); + + END_TEST; +} + +int UtcDaliToolkitScrollBarActionShowTransientIndicatorDuringHide(void) +{ + ToolkitTestApplication application; + + // Create a scroll bar + ScrollBar scrollBar = ScrollBar::New(); + DALI_TEST_CHECK( scrollBar ); + + Stage::GetCurrent().Add( scrollBar ); + + Actor indicator = scrollBar.GetScrollIndicator(); + DALI_TEST_CHECK( indicator ); + + // Get the default duration to hide the indicator + float duration = scrollBar.GetIndicatorHideDuration(); + + // Check that the default duration is greater than 0 + DALI_TEST_CHECK( duration > 0.0f ); + + // Make the indicator visible + indicator.SetOpacity(1.0f); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is visible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 1.0f, TEST_LOCATION ); + + // Hide the indicator + scrollBar.HideIndicator(); + + // Wait for half the specified duration + Wait(application, duration * 0.5f * 1000); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now partially hidden + DALI_TEST_CHECK( indicator.GetCurrentOpacity() < 1.0f ); + + // Now interrupt the Hide with a DoAction( "ShowTransientIndicator" ) + + // Get the default duration to hide the indicator + duration = scrollBar.GetProperty( ScrollBar::Property::INDICATOR_SHOW_DURATION ); + + // Check that the default duration is greater than 0 + DALI_TEST_CHECK( duration > 0.0f ); + + // Do the "ShowIndicator" action + Property::Map emptyMap; + scrollBar.DoAction( "ShowTransientIndicator", emptyMap ); + + // Wait for the specified duration + Wait(application, duration * 1000); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now visible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 1.0f, TEST_LOCATION ); + + // Get the default duration to hide the indicator + float hideDuration = scrollBar.GetProperty( ScrollBar::Property::INDICATOR_HIDE_DURATION ); + float transientDuration = scrollBar.GetProperty( DevelScrollBar::Property::INDICATOR_TRANSIENT_DURATION ); + float totalVisibleDuration = hideDuration + transientDuration; + + // Check that the default duration is greater than 0 + DALI_TEST_CHECK( totalVisibleDuration > 0.0f ); + + // Wait for the specified duration + Wait(application, totalVisibleDuration * 1000); + + // Render and notify + application.SendNotification(); + application.Render(); + + // Check that the indicator is now invisible + DALI_TEST_EQUALS( indicator.GetCurrentOpacity(), 0.0f, TEST_LOCATION ); + + END_TEST; +} + int UtcDaliToolkitScrollBarPanFinishedSignalP(void) { ToolkitTestApplication application; diff --git a/build/tizen/dali-toolkit/Makefile.am b/build/tizen/dali-toolkit/Makefile.am index 67b723c..7127db2 100644 --- a/build/tizen/dali-toolkit/Makefile.am +++ b/build/tizen/dali-toolkit/Makefile.am @@ -106,6 +106,7 @@ develapieffectsviewdir = $(develapicontrolsdir)/effects-view develapigaussianblurviewdir = $(develapicontrolsdir)/gaussian-blur-view develapimagnifierdir = $(develapicontrolsdir)/magnifier develapiitemviewdir = $(develapicontrolsdir)/scrollable/item-view +develapiscrollbardir = $(develapicontrolsdir)/scroll-bar develapinavigationviewdir = $(develapicontrolsdir)/navigation-view develapipageturnviewdir = $(develapicontrolsdir)/page-turn-view develapipopupdir = $(develapicontrolsdir)/popup @@ -135,6 +136,7 @@ develapifocusmanager_HEADERS = $(devel_api_focus_manager_header_files) develapigaussianblurview_HEADERS = $(devel_api_gaussian_blur_view_header_files) develapiimageloader_HEADERS = $(devel_api_image_loader_header_files) develapiitemview_HEADERS = $(devel_api_item_view_header_files) +develapiscrollbar_HEADERS = $(devel_api_scroll_bar_header_files) develapimagnifier_HEADERS = $(devel_api_magnifier_header_files) develapinavigationview_HEADERS = $(devel_api_navigation_view_header_files) develapipageturnview_HEADERS = $(devel_api_page_turn_view_header_files) diff --git a/dali-toolkit/devel-api/controls/scroll-bar/scroll-bar-devel.h b/dali-toolkit/devel-api/controls/scroll-bar/scroll-bar-devel.h new file mode 100644 index 0000000..7d16c75 --- /dev/null +++ b/dali-toolkit/devel-api/controls/scroll-bar/scroll-bar-devel.h @@ -0,0 +1,78 @@ +#ifndef DALI_TOOLKIT_SCROLL_BAR_DEVEL_H +#define DALI_TOOLKIT_SCROLL_BAR_DEVEL_H + +/* + * Copyright (c) 2017 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. + * + */ + +// INTERNAL INCLUDES +#include + +namespace Dali +{ + +namespace Toolkit +{ + +namespace DevelScrollBar +{ + +namespace Property +{ + +/** + * @brief ScrollBar is a UI component that can be linked to the scrollable objects + * indicating the current scroll position of the scrollable object. + * + * Actions + * | %Action Name | Attributes | Description | + * |------------------------|-------------------------|-------------------------------------------| + * | ShowIndicator | Doesn't have attributes | Shows the scroll-indicator | + * | HideIndicator | Doesn't have attributes | Hides the scroll-indicator | + * | ShowTransientIndicator | Doesn't have attributes | Shows the scroll-indicator for short time | + */ + +/** + * @brief Enumeration for the instance of properties belonging to the ScrollBar class. + */ +enum +{ + SCROLL_DIRECTION = Dali::Toolkit::ScrollBar::Property::SCROLL_DIRECTION, + INDICATOR_HEIGHT_POLICY = Dali::Toolkit::ScrollBar::Property::INDICATOR_HEIGHT_POLICY, + INDICATOR_FIXED_HEIGHT = Dali::Toolkit::ScrollBar::Property::INDICATOR_FIXED_HEIGHT, + INDICATOR_SHOW_DURATION = Dali::Toolkit::ScrollBar::Property::INDICATOR_SHOW_DURATION, + INDICATOR_HIDE_DURATION = Dali::Toolkit::ScrollBar::Property::INDICATOR_HIDE_DURATION, + SCROLL_POSITION_INTERVALS = Dali::Toolkit::ScrollBar::Property::SCROLL_POSITION_INTERVALS, + INDICATOR_MINIMUM_HEIGHT = Dali::Toolkit::ScrollBar::Property::INDICATOR_MINIMUM_HEIGHT, + INDICATOR_START_PADDING = Dali::Toolkit::ScrollBar::Property::INDICATOR_START_PADDING, + INDICATOR_END_PADDING = Dali::Toolkit::ScrollBar::Property::INDICATOR_END_PADDING, + + /** + * @brief The duration that transient indicators will remain fully visible. + * @details name "indicatorTransientDuration", type float. + */ + INDICATOR_TRANSIENT_DURATION = INDICATOR_END_PADDING + 1 +}; + +} // namespace Property + +} // namespace DevelScrollBar + +} // namespace Toolkit + +} // namespace Dali + +#endif // DALI_TOOLKIT_SCROLL_BAR_DEVEL_H diff --git a/dali-toolkit/devel-api/file.list b/dali-toolkit/devel-api/file.list index 3108cc3..7702ef4 100755 --- a/dali-toolkit/devel-api/file.list +++ b/dali-toolkit/devel-api/file.list @@ -69,6 +69,9 @@ devel_api_item_view_header_files = \ $(devel_api_src_dir)/controls/scrollable/item-view/default-item-layout-property.h \ $(devel_api_src_dir)/controls/scrollable/item-view/item-view-devel.h +devel_api_scroll_bar_header_files = \ + $(devel_api_src_dir)/controls/scroll-bar/scroll-bar-devel.h + devel_api_magnifier_header_files = \ $(devel_api_src_dir)/controls/magnifier/magnifier.h diff --git a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp index 7612185..5adc065 100755 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp @@ -27,10 +27,12 @@ #include #include #include +#include // INTERNAL INCLUDES #include #include +#include using namespace Dali; @@ -46,6 +48,7 @@ const float DEFAULT_INDICATOR_FIXED_HEIGHT(80.0f); const float DEFAULT_INDICATOR_MINIMUM_HEIGHT(0.0f); const float DEFAULT_INDICATOR_START_PADDING(0.0f); const float DEFAULT_INDICATOR_END_PADDING(0.0f); +const float DEFAULT_INDICATOR_TRANSIENT_DURATION(1.0f); /** * Indicator size constraint @@ -154,19 +157,25 @@ BaseHandle Create() // Setup properties, signals and actions using the type-registry. DALI_TYPE_REGISTRATION_BEGIN( Toolkit::ScrollBar, Toolkit::Control, Create ); -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "scrollDirection", STRING, SCROLL_DIRECTION ) -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorHeightPolicy", STRING, INDICATOR_HEIGHT_POLICY ) -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorFixedHeight", FLOAT, INDICATOR_FIXED_HEIGHT ) -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorShowDuration", FLOAT, INDICATOR_SHOW_DURATION ) -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorHideDuration", FLOAT, INDICATOR_HIDE_DURATION ) -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "scrollPositionIntervals", ARRAY, SCROLL_POSITION_INTERVALS ) -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorMinimumHeight", FLOAT, INDICATOR_MINIMUM_HEIGHT ) -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorStartPadding", FLOAT, INDICATOR_START_PADDING ) -DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorEndPadding", FLOAT, INDICATOR_END_PADDING ) - -DALI_SIGNAL_REGISTRATION( Toolkit, ScrollBar, "panFinished", PAN_FINISHED_SIGNAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "scrollDirection", STRING, SCROLL_DIRECTION ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorHeightPolicy", STRING, INDICATOR_HEIGHT_POLICY ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorFixedHeight", FLOAT, INDICATOR_FIXED_HEIGHT ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorShowDuration", FLOAT, INDICATOR_SHOW_DURATION ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorHideDuration", FLOAT, INDICATOR_HIDE_DURATION ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "scrollPositionIntervals", ARRAY, SCROLL_POSITION_INTERVALS ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorMinimumHeight", FLOAT, INDICATOR_MINIMUM_HEIGHT ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorStartPadding", FLOAT, INDICATOR_START_PADDING ) +DALI_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorEndPadding", FLOAT, INDICATOR_END_PADDING ) + +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, ScrollBar, "indicatorTransientDuration", FLOAT, INDICATOR_TRANSIENT_DURATION ) + +DALI_SIGNAL_REGISTRATION( Toolkit, ScrollBar, "panFinished", PAN_FINISHED_SIGNAL ) DALI_SIGNAL_REGISTRATION( Toolkit, ScrollBar, "scrollPositionIntervalReached", SCROLL_POSITION_INTERVAL_REACHED_SIGNAL ) +DALI_ACTION_REGISTRATION( Toolkit, ScrollBar, "ShowIndicator", ACTION_SHOW_INDICATOR ) +DALI_ACTION_REGISTRATION( Toolkit, ScrollBar, "HideIndicator", ACTION_HIDE_INDICATOR ) +DALI_ACTION_REGISTRATION( Toolkit, ScrollBar, "ShowTransientIndicator", ACTION_SHOW_TRANSIENT_INDICATOR ) + DALI_TYPE_REGISTRATION_END() const char* SCROLL_DIRECTION_NAME[] = {"Vertical", "Horizontal"}; @@ -185,6 +194,7 @@ ScrollBar::ScrollBar(Toolkit::ScrollBar::Direction direction) mPropertyScrollContentSize(Property::INVALID_INDEX), mIndicatorShowDuration(DEFAULT_INDICATOR_SHOW_DURATION), mIndicatorHideDuration(DEFAULT_INDICATOR_HIDE_DURATION), + mTransientIndicatorDuration(DEFAULT_INDICATOR_TRANSIENT_DURATION), mScrollStart(0.0f), mCurrentScrollPosition(0.0f), mIndicatorHeightPolicy(Toolkit::ScrollBar::Variable), @@ -404,6 +414,30 @@ void ScrollBar::HideIndicator() } } +void ScrollBar::ShowTransientIndicator() +{ + // Cancel any animation + if(mAnimation) + { + mAnimation.Clear(); + mAnimation.Reset(); + } + + mAnimation = Animation::New( mIndicatorShowDuration + mTransientIndicatorDuration + mIndicatorHideDuration ); + if(mIndicatorShowDuration > 0.0f) + { + mAnimation.AnimateTo( Property( mIndicator, Actor::Property::COLOR_ALPHA ), + mIndicatorShowAlpha, AlphaFunction::EASE_IN, TimePeriod(0, mIndicatorShowDuration) ); + } + else + { + mIndicator.SetOpacity(mIndicatorShowAlpha); + } + mAnimation.AnimateTo( Property( mIndicator, Actor::Property::COLOR_ALPHA ), + 0.0f, AlphaFunction::EASE_IN, TimePeriod((mIndicatorShowDuration + mTransientIndicatorDuration), mIndicatorHideDuration) ); + mAnimation.Play(); +} + bool ScrollBar::OnPanGestureProcessTick() { // Update the scroll position property. @@ -688,6 +722,11 @@ void ScrollBar::SetProperty( BaseObject* object, Property::Index index, const Pr scrollBarImpl.ApplyConstraints(); break; } + case Toolkit::DevelScrollBar::Property::INDICATOR_TRANSIENT_DURATION: + { + scrollBarImpl.mTransientIndicatorDuration = value.Get(); + break; + } } } } @@ -759,11 +798,48 @@ Property::Value ScrollBar::GetProperty( BaseObject* object, Property::Index inde value = scrollBarImpl.mIndicatorEndPadding; break; } + case Toolkit::DevelScrollBar::Property::INDICATOR_TRANSIENT_DURATION: + { + value = scrollBarImpl.mTransientIndicatorDuration; + break; + } } } return value; } +bool ScrollBar::DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes ) +{ + bool ret = false; + + Dali::BaseHandle handle( object ); + + Toolkit::ScrollBar scrollBar = Toolkit::ScrollBar::DownCast( handle ); + + DALI_ASSERT_DEBUG( scrollBar ); + + if( scrollBar ) + { + if( 0 == strcmp( actionName.c_str(), ACTION_SHOW_INDICATOR ) ) + { + GetImpl( scrollBar ).ShowIndicator(); + ret = true; + } + else if( 0 == strcmp( actionName.c_str(), ACTION_HIDE_INDICATOR ) ) + { + GetImpl( scrollBar ).HideIndicator(); + ret = true; + } + else if( 0 == strcmp( actionName.c_str(), ACTION_SHOW_TRANSIENT_INDICATOR ) ) + { + GetImpl( scrollBar ).ShowTransientIndicator(); + ret = true; + } + } + + return ret; +} + Toolkit::ScrollBar ScrollBar::New(Toolkit::ScrollBar::Direction direction) { // Create the implementation, temporarily owned by this handle on stack diff --git a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h index 0826ef3..95b0901 100755 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h @@ -146,7 +146,12 @@ public: /** * @copydoc Toolkit::ScrollBar::HideIndicator() */ - void HideIndicator(); + void HideIndicator(); + + /** + * @brief Shows indicator until the transient duration has expired + */ + void ShowTransientIndicator(); /** * @copydoc Toolkit::ScrollBar::PanFinishedSignal() @@ -193,6 +198,15 @@ public: */ static Property::Value GetProperty( BaseObject* object, Property::Index index ); + /** + * Performs actions as requested using the action name. + * @param[in] object The object on which to perform the action. + * @param[in] actionName The action to perform. + * @param[in] attributes The attributes with which to perfrom this action. + * @return true if action has been accepted by this control + */ + static bool DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes ); + private: // from Control /** @@ -278,6 +292,7 @@ private: float mIndicatorShowDuration; ///< The duration of scroll indicator show animation float mIndicatorHideDuration; ///< The duration of scroll indicator hide animation + float mTransientIndicatorDuration; ///< The duration before hiding transient indicator float mScrollStart; ///< Scroll Start position (start of drag) Vector3 mGestureDisplacement; ///< Gesture Displacement. diff --git a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp index 069d5b6..3063cbc 100644 --- a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp @@ -26,6 +26,7 @@ #include #include #include +#include #include // INTERNAL INCLUDES @@ -1986,8 +1987,9 @@ void ScrollView::OnChildAdd(Actor& child) if( mTransientScrollBar ) { - scrollBar.SetVisible( false ); - scrollBar.HideIndicator(); + // Show the scroll-indicator for a brief period + Property::Map emptyMap; + scrollBar.DoAction( "ShowTransientIndicator", emptyMap ); } } else if(mAlterChild) @@ -2495,7 +2497,6 @@ void ScrollView::OnPan( const PanGesture& gesture ) if( ( rulerDomainX.max > size.width ) || ( rulerDomainY.max > size.height ) ) { - scrollBar.SetVisible( true ); scrollBar.ShowIndicator(); } } diff --git a/dali-toolkit/styles/1920x1080/dali-toolkit-default-theme.json b/dali-toolkit/styles/1920x1080/dali-toolkit-default-theme.json index ff865b0..bd48ca7 100644 --- a/dali-toolkit/styles/1920x1080/dali-toolkit-default-theme.json +++ b/dali-toolkit/styles/1920x1080/dali-toolkit-default-theme.json @@ -166,7 +166,8 @@ "TextSelectionScrollBar": { "indicatorShowDuration":0.25, - "indicatorHideDuration":0.25 + "indicatorHideDuration":0.25, + "indicatorTransientDuration":1.0 }, "TextSelectionScrollIndicator": { diff --git a/dali-toolkit/styles/480x800/dali-toolkit-default-theme.json b/dali-toolkit/styles/480x800/dali-toolkit-default-theme.json index 105b87b..43b99ea 100644 --- a/dali-toolkit/styles/480x800/dali-toolkit-default-theme.json +++ b/dali-toolkit/styles/480x800/dali-toolkit-default-theme.json @@ -165,7 +165,8 @@ "TextSelectionScrollBar": { "indicatorShowDuration":0.25, - "indicatorHideDuration":0.25 + "indicatorHideDuration":0.25, + "indicatorTransientDuration":1.0 }, "TextSelectionScrollIndicator": { diff --git a/dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json b/dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json index db96431..aa735b3 100644 --- a/dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json +++ b/dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json @@ -139,7 +139,8 @@ "TextSelectionScrollBar": { "indicatorShowDuration":0.25, - "indicatorHideDuration":0.25 + "indicatorHideDuration":0.25, + "indicatorTransientDuration":1.0 }, "TextSelectionScrollIndicator": { -- 2.7.4