#include <dali/devel-api/adaptor-framework/sound-player.h>
#include <dali/public-api/animation/constraints.h>
#include <dali/devel-api/events/hit-test-algorithm.h>
+#include <dali/devel-api/events/pan-gesture-devel.h>
#include <dali/integration-api/debug.h>
// INTERNAL INCLUDES
}
}
+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;
actor.Add( GetFocusIndicatorActor() );
}
+ auto adaptor = AccessibilityAdaptor::Get();
+ Vector2 readPosition = adaptor.GetReadPosition();
+ auto actorPosition = actor.GetCurrentProperty<Vector2>(Actor::Property::SCREEN_POSITION);
+ auto actorSize = actor.GetCurrentProperty<Vector2>(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 );
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;
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.
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;
}
}
- // 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<Dali::Gesture::State>(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<Dali::GestureState>(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)
{
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);
}