From: Artur Świgoń Date: Thu, 10 Sep 2020 17:10:35 +0000 (+0200) Subject: [AT-SPI] Try auto-scrolling in GrabHighlight X-Git-Tag: dali_2.0.0~6^2~29 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=2bd13b0e87ffbe66fafc837ddffb6d2e491c1a63 [AT-SPI] Try auto-scrolling in GrabHighlight Change-Id: I6530c55d3107d1199a5e96619d26af3b00029a34 --- diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index b498259..7c6aa9a 100755 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -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 Control::Impl::AccessibleImpl::GetRel return ret; } +void Control::Impl::AccessibleImpl::EnsureChildVisible(Actor child) +{ +} + +void Control::Impl::AccessibleImpl::EnsureSelfVisible() +{ + auto parent = dynamic_cast(GetParent()); + if (parent) + { + parent->EnsureChildVisible(self); + } +} + void Control::Impl::PositionOrSizeChangedCallback( PropertyNotification &p ) { auto self = Dali::Actor::DownCast(p.GetTarget()); diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 93bf89b..abbd0ee 100755 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -586,6 +586,8 @@ public: std::vector 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; diff --git a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp index 19d7373..b8b8baf 100644 --- a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp +++ b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.cpp @@ -22,7 +22,7 @@ #include // for strcmp #include #include - +#include #include #include #include @@ -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(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; diff --git a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h index 07cb9d5..0af85fc 100755 --- a/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h +++ b/dali-toolkit/internal/controls/scrollable/item-view/item-view-impl.h @@ -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. 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 01c5731..c0943dc 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 @@ -20,6 +20,7 @@ // EXTERNAL INCLUDES #include // for strcmp +#include #include #include #include @@ -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); diff --git a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h index 2bda8c8..8724033 100644 --- a/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h +++ b/dali-toolkit/internal/controls/scrollable/scroll-view/scroll-view-impl.h @@ -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.