/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
AccessibilityManager::AccessibilityManager()
: mCurrentFocusActor(FocusIDPair(0, 0)),
- mFocusIndicatorActor(Actor()),
+ mFocusIndicatorActor(),
mRecursiveFocusMoveCounter(0),
mIsWrapped(false),
mIsFocusWithinGroup(false),
void AccessibilityManager::Initialise()
{
- CreateDefaultFocusIndicatorActor();
-
AccessibilityAdaptor adaptor = AccessibilityAdaptor::Get();
adaptor.SetActionHandler(*this);
adaptor.SetGestureHandler(*this);
if(actorVisible && actorFocusable && actorOpaque)
{
// Draw the focus indicator upon the focused actor
- if(mIsFocusIndicatorEnabled && mFocusIndicatorActor)
+ if( mIsFocusIndicatorEnabled )
{
- actor.Add(mFocusIndicatorActor);
+ actor.Add( GetFocusIndicatorActor() );
}
// Send notification for the change of focus actor
void AccessibilityManager::ClearFocus()
{
Actor actor = GetCurrentFocusActor();
- if(actor)
+ if( actor && mFocusIndicatorActor )
{
- actor.Remove(mFocusIndicatorActor);
+ actor.Remove( mFocusIndicatorActor );
}
mCurrentFocusActor = FocusIDPair(0, 0);
void AccessibilityManager::SetFocusIndicatorActor(Actor indicator)
{
- mFocusIndicatorActor = indicator;
+ if( mFocusIndicatorActor != indicator )
+ {
+ Actor currentFocusActor = GetCurrentFocusActor();
+ if( currentFocusActor )
+ {
+ // The new focus indicator should be added to the current focused actor immediately
+ if( mFocusIndicatorActor )
+ {
+ currentFocusActor.Remove( mFocusIndicatorActor );
+ }
+
+ if( indicator )
+ {
+ currentFocusActor.Add( indicator );
+ }
+ }
+
+ mFocusIndicatorActor = indicator;
+ }
}
Actor AccessibilityManager::GetFocusIndicatorActor()
{
+ if( ! mFocusIndicatorActor )
+ {
+ // Create the default if it hasn't been set and one that's shared by all the keyboard focusable actors
+ mFocusIndicatorActor = Toolkit::ImageView::New( FOCUS_BORDER_IMAGE_PATH );
+ mFocusIndicatorActor.SetParentOrigin( ParentOrigin::CENTER );
+ mFocusIndicatorActor.SetZ( 1.0f );
+
+ // Apply size constraint to the focus indicator
+ mFocusIndicatorActor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
+ }
+
return mFocusIndicatorActor;
}
}
}
-void AccessibilityManager::CreateDefaultFocusIndicatorActor()
-{
- // Create a focus indicator actor shared by all the focusable actors
- Toolkit::ImageView focusIndicator = Toolkit::ImageView::New(FOCUS_BORDER_IMAGE_PATH);
- focusIndicator.SetParentOrigin( ParentOrigin::CENTER );
- focusIndicator.SetPosition(Vector3(0.0f, 0.0f, 1.0f));
-
- // Apply size constraint to the focus indicator
- focusIndicator.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
-
- SetFocusIndicatorActor(focusIndicator);
-}
-
bool AccessibilityManager::ChangeAccessibilityStatus()
{
AccessibilityAdaptor adaptor = AccessibilityAdaptor::Get();
Actor actor = GetCurrentFocusActor();
if(actor)
{
- if(mFocusIndicatorActor)
- {
- actor.Add(mFocusIndicatorActor);
- }
+ actor.Add( GetFocusIndicatorActor() );
}
mIsFocusIndicatorEnabled = true;
{
// Hide indicator when tts turned off
Actor actor = GetCurrentFocusActor();
- if(actor)
+ if( actor && mFocusIndicatorActor )
{
- actor.Remove(mFocusIndicatorActor);
+ actor.Remove( mFocusIndicatorActor );
}
mIsFocusIndicatorEnabled = false;
if(!mCurrentGesturedActor)
{
- DALI_LOG_ERROR("Gesture detected, but no hit actor");
+ DALI_LOG_ERROR("Gesture detected, but no hit actor\n");
}
}
if(!mCurrentGesturedActor)
{
- DALI_LOG_ERROR("no more gestured actor");
+ DALI_LOG_ERROR("no more gestured actor\n");
}
}
else
return mFocusedActorActivatedSignal;
}
-bool AccessibilityManager::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
-{
- Dali::BaseHandle handle( object );
-
- bool connected( true );
- AccessibilityManager* manager = dynamic_cast<AccessibilityManager*>( object );
-
- if( 0 == strcmp( signalName.c_str(), SIGNAL_FOCUS_CHANGED ) )
- {
- manager->FocusChangedSignal().Connect( tracker, functor );
- }
- else if( 0 == strcmp( signalName.c_str(), SIGNAL_FOCUS_OVERSHOT ) )
- {
- manager->FocusOvershotSignal().Connect( tracker, functor );
- }
- else if( 0 == strcmp( signalName.c_str(), SIGNAL_FOCUSED_ACTOR_ACTIVATED ) )
- {
- manager->FocusedActorActivatedSignal().Connect( tracker, functor );
- }
- else
- {
- // signalName does not match any signal
- connected = false;
- }
-
- return connected;
-}
-
} // namespace Internal
} // namespace Toolkit