[AT-SPI] Try auto-scrolling in GrabHighlight 66/243866/22
authorArtur Świgoń <a.swigon@samsung.com>
Thu, 10 Sep 2020 17:10:35 +0000 (19:10 +0200)
committerArtur Świgoń <a.swigon@samsung.com>
Fri, 23 Oct 2020 13:07:00 +0000 (15:07 +0200)
Change-Id: I6530c55d3107d1199a5e96619d26af3b00029a34

dali-toolkit/internal/controls/control/control-data-impl.cpp
dali-toolkit/internal/controls/control/control-data-impl.h
dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp
dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.cpp
dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h

index b498259..7c6aa9a 100755 (executable)
@@ -2108,6 +2108,7 @@ bool Control::Impl::AccessibleImpl::GrabHighlight()
   highlight.SetProperty( Actor::Property::POSITION_Z, 1.0f );
   highlight.SetProperty( Actor::Property::POSITION, Vector2( 0.0f, 0.0f ));
 
+  EnsureSelfVisible();
   self.Add( highlight );
   SetCurrentlyHighlightedActor( self );
   EmitHighlighted( true );
@@ -2211,6 +2212,19 @@ std::vector<Dali::Accessibility::Relation> Control::Impl::AccessibleImpl::GetRel
   return ret;
 }
 
+void Control::Impl::AccessibleImpl::EnsureChildVisible(Actor child)
+{
+}
+
+void Control::Impl::AccessibleImpl::EnsureSelfVisible()
+{
+  auto parent = dynamic_cast<Control::Impl::AccessibleImpl*>(GetParent());
+  if (parent)
+  {
+    parent->EnsureChildVisible(self);
+  }
+}
+
 void Control::Impl::PositionOrSizeChangedCallback( PropertyNotification &p )
 {
   auto self = Dali::Actor::DownCast(p.GetTarget());
index 93bf89b..abbd0ee 100755 (executable)
@@ -586,6 +586,8 @@ public:
     std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
 
     virtual Dali::Accessibility::States CalculateStates();
+    virtual void EnsureChildVisible(Actor child);
+    virtual void EnsureSelfVisible();
   };
 
   std::function< std::unique_ptr< Dali::Accessibility::Accessible >( Actor ) > accessibilityConstructor;
index 19d7373..b8b8baf 100644 (file)
@@ -22,7 +22,7 @@
 #include <cstring> // for strcmp
 #include <algorithm>
 #include <dali/public-api/actors/layer.h>
-
+#include <dali/devel-api/actors/actor-devel.h>
 #include <dali/public-api/animation/constraint.h>
 #include <dali/public-api/animation/constraints.h>
 #include <dali/devel-api/common/stage.h>
@@ -379,6 +379,11 @@ void ItemView::OnInitialize()
 
   // Connect wheel event
   self.WheelEventSignal().Connect( this, &ItemView::OnWheelEvent );
+
+  DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor)
+  {
+    return std::unique_ptr<Dali::Accessibility::Accessible>(new AccessibleImpl(actor, Dali::Accessibility::Role::SCROLL_PANE));
+  });
 }
 
 ItemView::~ItemView()
@@ -1355,6 +1360,13 @@ void ItemView::OnKeyboardFocusChangeCommitted(Actor commitedFocusableActor)
   }
 }
 
+void ItemView::AccessibleImpl::EnsureChildVisible(Actor child)
+{
+  EnsureSelfVisible();
+  auto itemView = Dali::Toolkit::ItemView::DownCast(self);
+  Toolkit::GetImpl(itemView).OnKeyboardFocusChangeCommitted(child);
+}
+
 Animation ItemView::DoAnchoring()
 {
   Animation anchoringAnimation;
index 07cb9d5..0af85fc 100755 (executable)
@@ -442,6 +442,12 @@ private: // From Control
   void OnKeyboardFocusChangeCommitted(Actor commitedFocusableActor) override;
 
 protected:
+  struct AccessibleImpl : public Scrollable::AccessibleImpl
+  {
+    using Scrollable::AccessibleImpl::AccessibleImpl;
+
+    void EnsureChildVisible(Actor child) override;
+  };
 
   /**
    * Construct a new ItemView.
index 01c5731..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>
@@ -706,6 +707,11 @@ void ScrollView::OnInitialize()
 
   // 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 )
@@ -1828,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);
index 2bda8c8..8724033 100644 (file)
@@ -801,6 +801,12 @@ private:
   void SetInternalConstraints();
 
 protected:
+  struct AccessibleImpl : public Scrollable::AccessibleImpl
+  {
+    using Scrollable::AccessibleImpl::AccessibleImpl;
+
+    void EnsureChildVisible(Actor child) override;
+  };
 
   /**
    * Construct a new ScrollView.