(Text Controls) Use scissor clipping instead of stencil
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / text-controls / text-selection-toolbar-impl.cpp
index 0cb62af..358ace6 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2018 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.
@@ -29,6 +29,7 @@
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
+#include <dali-toolkit/internal/helpers/color-conversion.h>
 
 namespace Dali
 {
@@ -198,6 +199,7 @@ const Dali::Vector2& TextSelectionToolbar::GetPopupMaxSize() const
 
 void TextSelectionToolbar::SetUpScrollView()
 {
+  mScrollView.SetName("TextSelectionScrollView");
   mScrollView.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS );
   mScrollView.SetParentOrigin( ParentOrigin::CENTER_LEFT );
   mScrollView.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
@@ -206,6 +208,7 @@ void TextSelectionToolbar::SetUpScrollView()
   mScrollView.SetAxisAutoLock( true );
   mScrollView.ScrollStartedSignal().Connect( this, &TextSelectionToolbar::OnScrollStarted );
   mScrollView.ScrollCompletedSignal().Connect( this, &TextSelectionToolbar::OnScrollCompleted );
+  mScrollView.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_TO_BOUNDING_BOX ); // In a new layer, so clip to scroll-view's bounding box
 
   mRulerX = new DefaultRuler();  // IntrusivePtr which is unreferenced when ScrollView is destroyed.
 
@@ -278,11 +281,16 @@ void TextSelectionToolbar::SetUpScrollBar( bool enable )
 
 void TextSelectionToolbar::OnScrollStarted( const Vector2& position )
 {
+  if( mFirstScrollEnd )
+  {
+    mScrollView.SetOvershootEnabled( true );
+  }
   mTableOfButtons.SetSensitive( false );
 }
 
 void TextSelectionToolbar::OnScrollCompleted( const Vector2& position )
 {
+  mFirstScrollEnd = true;
   mTableOfButtons.SetSensitive( true );
 }
 
@@ -325,6 +333,13 @@ void TextSelectionToolbar::SetScrollBarPadding( const Vector2& padding )
   RelayoutRequest();
 }
 
+void TextSelectionToolbar::ScrollTo( const Vector2& position )
+{
+  mFirstScrollEnd = false;
+  mScrollView.SetOvershootEnabled( false );
+  mScrollView.ScrollTo( position, 0.f );
+}
+
 void TextSelectionToolbar::ConfigureScrollview( const Property::Map& properties )
 {
   // Set any properties specified for the label by iterating through all property key-value pairs.
@@ -336,9 +351,21 @@ void TextSelectionToolbar::ConfigureScrollview( const Property::Map& properties
     Property::Index setPropertyIndex = mScrollView.GetPropertyIndex( propertyPair.first );
     if( setPropertyIndex != Property::INVALID_INDEX )
     {
-      // If the conversion worked, we have a valid property index,
-      // Set the property to the new value.
-      mScrollView.SetProperty( setPropertyIndex, propertyPair.second );
+      // Convert the string representation of a color into a Vector4
+      if( setPropertyIndex == Toolkit::Scrollable::Property::OVERSHOOT_EFFECT_COLOR )
+      {
+        Vector4 color;
+        if( ConvertPropertyToColor( propertyPair.second, color ) )
+        {
+          mScrollView.SetOvershootEffectColor( color );
+        }
+      }
+      else
+      {
+        // If the conversion worked, we have a valid property index,
+        // Set the property to the new value.
+        mScrollView.SetProperty( setPropertyIndex, propertyPair.second );
+      }
     }
   }
 
@@ -355,7 +382,8 @@ TextSelectionToolbar::TextSelectionToolbar()
   mMaxSize (),
   mScrollBarPadding( DEFAULT_SCROLL_BAR_PADDING ),
   mIndexInTable( 0 ),
-  mDividerIndexes()
+  mDividerIndexes(),
+  mFirstScrollEnd( false )
 {
 }