X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Faccessibility-manager%2Faccessibility-manager-impl.cpp;h=e856ec26c66548c3fbcc22746c3aa31345d5be0a;hb=refs%2Ftags%2Fsubmit%2Ftizen_6.0%2F20230220.132938;hp=053cb9699d6315bd24d09820544d45c31a9ebace;hpb=0d21873fa0ed7e36f823b0fc541f231da674fe87;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/accessibility-manager/accessibility-manager-impl.cpp b/dali-toolkit/internal/accessibility-manager/accessibility-manager-impl.cpp index 053cb96..e856ec2 100644 --- a/dali-toolkit/internal/accessibility-manager/accessibility-manager-impl.cpp +++ b/dali-toolkit/internal/accessibility-manager/accessibility-manager-impl.cpp @@ -25,6 +25,7 @@ #include #include #include +#include #include // INTERNAL INCLUDES @@ -174,6 +175,15 @@ void AccessibilityManager::SetAccessibilityAttribute(Actor actor, Toolkit::Acces } } +void AccessibilityManager::DeleteAccessibilityAttribute(Actor actor) +{ + if(actor) + { + unsigned int actorID = actor.GetProperty< int >( Actor::Property::ID ); + mIDAdditionalInfoContainer.erase(actorID); + } +} + std::string AccessibilityManager::GetAccessibilityAttribute(Actor actor, Toolkit::AccessibilityManager::AccessibilityAttribute type) const { std::string text; @@ -350,6 +360,24 @@ bool AccessibilityManager::DoSetCurrentFocusActor(const unsigned int actorID) actor.Add( GetFocusIndicatorActor() ); } + auto adaptor = AccessibilityAdaptor::Get(); + Vector2 readPosition = adaptor.GetReadPosition(); + auto actorPosition = actor.GetCurrentProperty(Actor::Property::SCREEN_POSITION); + auto actorSize = actor.GetCurrentProperty(Actor::Property::SIZE); + Rect<> actorRect(actorPosition.x, actorPosition.y, actorSize.width, actorSize.height); + + if(actorRect.Contains(Rect<>(readPosition.x, readPosition.y, 0, 0))) + { + // If the last touched position is within the extents of the actor, + // then use that position. (The center may be covered by some other actor). + adaptor.SetFocusedActorPosition(readPosition); + } + else + { + // Otherwise, use the center point. + adaptor.SetFocusedActorPosition(actorPosition + actorSize / 2); + } + // Send notification for the change of focus actor mFocusChangedSignal.Emit( GetCurrentFocusActor(), actor ); @@ -557,6 +585,19 @@ Vector2 AccessibilityManager::GetReadPosition() const return adaptor.GetReadPosition(); } +void AccessibilityManager::EnableAccessibility(bool enabled) +{ + DALI_LOG_INFO( gLogFilter, Debug::General, "[%s:%d] Set Enabled Forcibly : %d \n", __FUNCTION__, __LINE__, enabled ); + AccessibilityAdaptor adaptor = AccessibilityAdaptor::Get(); + adaptor.EnableAccessibility(enabled); +} + +bool AccessibilityManager::IsEnabled() const +{ + AccessibilityAdaptor adaptor = AccessibilityAdaptor::Get(); + return adaptor.IsEnabled(); +} + void AccessibilityManager::SetGroupMode(bool enabled) { mIsFocusWithinGroup = enabled; @@ -714,6 +755,8 @@ bool AccessibilityManager::ChangeAccessibilityStatus() mIsAccessibilityTtsEnabled = adaptor.IsEnabled(); Dali::Toolkit::AccessibilityManager handle( this ); + DALI_LOG_INFO( gLogFilter, Debug::General, "[%s:%d] TtsEnabled : %d \n", __FUNCTION__, __LINE__, mIsAccessibilityTtsEnabled ); + if(mIsAccessibilityTtsEnabled) { // Show indicator when tts turned on if there is focused actor. @@ -1302,11 +1345,22 @@ bool AccessibilityManager::AccessibilityActionStartStop() return mIsAccessibilityTtsEnabled; } +bool AccessibilityManager::AccessibilityActionForwardToApp() +{ + Dali::Toolkit::AccessibilityManager handle( this ); + if( !mActionForwardSignal.Empty() ) + { + mActionForwardSignal.Emit( handle ); + } + + return mIsAccessibilityTtsEnabled; +} + bool AccessibilityManager::HandlePanGesture(const AccessibilityGestureEvent& panEvent) { bool handled = false; - if( panEvent.state == AccessibilityGestureEvent::Started ) + if( panEvent.state == AccessibilityGestureEvent::STARTED ) { // Find the focusable actor at the event position Dali::HitTestAlgorithm::Results results; @@ -1321,24 +1375,26 @@ bool AccessibilityManager::HandlePanGesture(const AccessibilityGestureEvent& pan } } - // Gesture::Finished (Up) events are delivered with previous (Motion) event position + // GestureState::FINISHED (Up) events are delivered with previous (Motion) event position // Use the real previous position; otherwise we may incorrectly get a ZERO velocity - if ( AccessibilityGestureEvent::Finished != panEvent.state ) + if ( AccessibilityGestureEvent::FINISHED != panEvent.state ) { - // Store the previous position for next Gesture::Finished iteration. + // Store the previous position for next GestureState::FINISHED iteration. mPreviousPosition = panEvent.previousPosition; } Actor rootActor = Stage::GetCurrent().GetRootLayer(); - Dali::PanGesture pan( static_cast(panEvent.state) ); - - pan.time = panEvent.time; - pan.numberOfTouches = panEvent.numberOfTouches; - pan.screenPosition = panEvent.currentPosition; - pan.screenDisplacement = mPreviousPosition - panEvent.currentPosition; - pan.screenVelocity.x = pan.screenDisplacement.x / panEvent.timeDelta; - pan.screenVelocity.y = pan.screenDisplacement.y / panEvent.timeDelta; + Dali::PanGesture pan = DevelPanGesture::New( static_cast(panEvent.state) ); + DevelPanGesture::SetTime( pan, panEvent.time ); + DevelPanGesture::SetNumberOfTouches( pan, panEvent.numberOfTouches ); + DevelPanGesture::SetScreenPosition( pan, panEvent.currentPosition ); + DevelPanGesture::SetScreenDisplacement( pan, mPreviousPosition - panEvent.currentPosition ); + // Avoid dividing by 0 + if(panEvent.timeDelta > 0) + { + DevelPanGesture::SetScreenVelocity( pan, Vector2( pan.GetScreenDisplacement().x / panEvent.timeDelta, pan.GetScreenDisplacement().y / panEvent.timeDelta ) ); + } // Only handle the pan gesture when the current focused actor is scrollable or within a scrollable actor while(mCurrentGesturedActor && mCurrentGesturedActor != rootActor && !handled) @@ -1348,14 +1404,17 @@ bool AccessibilityManager::HandlePanGesture(const AccessibilityGestureEvent& pan { Vector2 localCurrent; control.ScreenToLocal( localCurrent.x, localCurrent.y, panEvent.currentPosition.x, panEvent.currentPosition.y ); - pan.position = localCurrent; + DevelPanGesture::SetPosition( pan, localCurrent ); Vector2 localPrevious; control.ScreenToLocal( localPrevious.x, localPrevious.y, mPreviousPosition.x, mPreviousPosition.y ); - pan.displacement = localCurrent - localPrevious; - pan.velocity.x = pan.displacement.x / panEvent.timeDelta; - pan.velocity.y = pan.displacement.y / panEvent.timeDelta; + DevelPanGesture::SetDisplacement( pan, localCurrent - localPrevious ); + // Avoid dividing by 0 + if(panEvent.timeDelta > 0) + { + DevelPanGesture::SetVelocity( pan, Vector2( pan.GetDisplacement().x / panEvent.timeDelta, pan.GetDisplacement().y / panEvent.timeDelta )); + } handled = GetImplementation( control ).OnAccessibilityPan(pan); }