[AT-SPI] Try auto-scrolling in GrabHighlight
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / scrollable / scroll-view / scroll-view-impl.cpp
index 4f75190..c0943dc 100644 (file)
@@ -20,6 +20,7 @@
 
 // EXTERNAL INCLUDES
 #include <cstring> // for strcmp
+#include <dali/devel-api/actors/actor-devel.h>
 #include <dali/public-api/animation/constraints.h>
 #include <dali/devel-api/common/stage.h>
 #include <dali/public-api/events/wheel-event.h>
@@ -629,7 +630,7 @@ Dali::Toolkit::ScrollView ScrollView::New()
 }
 
 ScrollView::ScrollView()
-: ScrollBase( ControlBehaviour( REQUIRES_WHEEL_EVENTS | DISABLE_STYLE_CHANGE_SIGNALS ) ),   // Enable size negotiation
+: ScrollBase( ControlBehaviour( DISABLE_STYLE_CHANGE_SIGNALS ) ),   // Enable size negotiation
   mTouchDownTime(0u),
   mGestureStackDepth(0),
   mScrollStateFlags(0),
@@ -690,7 +691,7 @@ void ScrollView::OnInitialize()
   mGestureStackDepth = 0;
 
   self.TouchedSignal().Connect( this, &ScrollView::OnTouch );
-  EnableGestureDetection( Gesture::Type( Gesture::Pan ) );
+  EnableGestureDetection( GestureType::Value( GestureType::PAN ) );
 
   // By default we'll allow the user to freely drag the scroll view,
   // while disabling the other rulers.
@@ -703,6 +704,14 @@ void ScrollView::OnInitialize()
 
   UpdatePropertyDomain();
   SetInternalConstraints();
+
+  // Connect wheel event
+  self.WheelEventSignal().Connect( this, &ScrollView::OnWheelEvent );
+
+  DevelControl::SetAccessibilityConstructor( Self(), []( Dali::Actor actor ) {
+    return std::unique_ptr< Dali::Accessibility::Accessible >(
+      new AccessibleImpl( actor, Dali::Accessibility::Role::SCROLL_PANE ) );
+  } );
 }
 
 void ScrollView::OnSceneConnection( int depth )
@@ -1003,7 +1012,7 @@ void ScrollView::SetScrollSensitive(bool sensitive)
     // while the scroll view is panning, the state needs to be reset.
     if ( mPanning )
     {
-      PanGesture cancelGesture = DevelPanGesture::New( Gesture::Cancelled );
+      PanGesture cancelGesture = DevelPanGesture::New( GestureState::CANCELLED );
       OnPan( cancelGesture );
     }
 
@@ -1825,6 +1834,12 @@ Toolkit::ScrollView::SnapStartedSignalType& ScrollView::SnapStartedSignal()
   return mSnapStartedSignal;
 }
 
+void ScrollView::AccessibleImpl::EnsureChildVisible(Actor child)
+{
+  auto scrollView = Dali::Toolkit::ScrollView::DownCast(self);
+  scrollView.ScrollTo(child);
+}
+
 void ScrollView::FindAndUnbindActor(Actor child)
 {
   UnbindActor(child);
@@ -2129,7 +2144,7 @@ bool ScrollView::OnTouch( Actor actor, const TouchEvent& touch )
   return false;
 }
 
-bool ScrollView::OnWheelEvent(const WheelEvent& event)
+bool ScrollView::OnWheelEvent( Actor actor, const WheelEvent& event)
 {
   if(!mSensitive)
   {
@@ -2448,7 +2463,7 @@ void ScrollView::GestureContinuing(const Vector2& panDelta)
   mPanDelta.y+= panDelta.y;
 
   // Save the velocity, there is a bug in PanGesture
-  // Whereby the Gesture::Finished's velocity is either:
+  // Whereby the GestureState::FINISHED's velocity is either:
   // NaN (due to time delta of zero between the last two events)
   // or 0 (due to position being the same between the last two events)
 
@@ -2461,7 +2476,7 @@ void ScrollView::GestureContinuing(const Vector2& panDelta)
 }
 
 // TODO: Upgrade to use a more powerful gesture detector (one that supports multiple touches on pan - so works as pan and flick gesture)
-// BUG: Gesture::Finished doesn't always return velocity on release (due to
+// BUG: GestureState::FINISHED doesn't always return velocity on release (due to
 // timeDelta between last two events being 0 sometimes, or posiiton being the same)
 void ScrollView::OnPan( const PanGesture& gesture )
 {
@@ -2481,7 +2496,7 @@ void ScrollView::OnPan( const PanGesture& gesture )
   // translate Gesture input to get useful data...
   switch(gesture.GetState())
   {
-    case Gesture::Started:
+    case GestureState::STARTED:
     {
       DALI_LOG_SCROLL_STATE("[0x%X] Pan Started", this);
       const Vector2& position = gesture.GetPosition();
@@ -2508,7 +2523,7 @@ void ScrollView::OnPan( const PanGesture& gesture )
       break;
     }
 
-    case Gesture::Continuing:
+    case GestureState::CONTINUING:
     {
       if ( mPanning )
       {
@@ -2523,12 +2538,12 @@ void ScrollView::OnPan( const PanGesture& gesture )
       break;
     }
 
-    case Gesture::Finished:
-    case Gesture::Cancelled:
+    case GestureState::FINISHED:
+    case GestureState::CANCELLED:
     {
       if ( mPanning )
       {
-        DALI_LOG_SCROLL_STATE("[0x%X] Pan %s", this, ( ( gesture.GetState() == Gesture::Finished ) ? "Finished" : "Cancelled" ) );
+        DALI_LOG_SCROLL_STATE("[0x%X] Pan %s", this, ( ( gesture.GetState() == GestureState::FINISHED ) ? "Finished" : "Cancelled" ) );
 
         UpdateLocalScrollProperties();
         mLastVelocity = gesture.GetVelocity();
@@ -2554,8 +2569,8 @@ void ScrollView::OnPan( const PanGesture& gesture )
       break;
     }
 
-    case Gesture::Possible:
-    case Gesture::Clear:
+    case GestureState::POSSIBLE:
+    case GestureState::CLEAR:
     {
       // Nothing to do, not needed.
       break;
@@ -2566,11 +2581,11 @@ void ScrollView::OnPan( const PanGesture& gesture )
   OnGestureEx(gesture.GetState());
 }
 
-void ScrollView::OnGestureEx(Gesture::State state)
+void ScrollView::OnGestureEx(GestureState state)
 {
   // call necessary signals for application developer
 
-  if(state == Gesture::Started)
+  if(state == GestureState::STARTED)
   {
     Vector2 currentScrollPosition = GetCurrentScrollPosition();
     Self().SetProperty(Toolkit::ScrollView::Property::SCROLLING, true);
@@ -2578,8 +2593,8 @@ void ScrollView::OnGestureEx(Gesture::State state)
     DALI_LOG_SCROLL_STATE("[0x%X] mScrollStartedSignal 2 [%.2f, %.2f]", this, currentScrollPosition.x, currentScrollPosition.y);
     mScrollStartedSignal.Emit( currentScrollPosition );
   }
-  else if( (state == Gesture::Finished) ||
-           (state == Gesture::Cancelled) ) // Finished/default
+  else if( (state == GestureState::FINISHED) ||
+           (state == GestureState::CANCELLED) ) // Finished/default
   {
     // when all the gestures have finished, we finish the transform.
     // so if a user decides to pan (1 gesture), and then pan+zoom (2 gestures)
@@ -2912,7 +2927,7 @@ void ScrollView::SetProperty( BaseObject* object, Property::Index index, const P
       }
       case Toolkit::ScrollView::Property::SCROLL_MODE:
       {
-        Property::Map* map = value.GetMap();
+        const Property::Map* map = value.GetMap();
         if( map )
         {
           scrollViewImpl.SetScrollMode( *map );