X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ffocus-manager%2Fkeyboard-focus-manager-impl.h;h=4ab0ea35a81b081e785d1c30de06c6a54dfaed36;hp=32a039025c2e39229064c931686085f0906329b6;hb=ef15505c94dffeb0639c91d9d3cd374918c21c4f;hpb=44bb6ae11e1c189104d9a8c9881bd5e524b398c0 diff --git a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h index 32a0390..4ab0ea3 100644 --- a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h +++ b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h @@ -1,8 +1,8 @@ -#ifndef __DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H__ -#define __DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H__ +#ifndef DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H +#define DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -20,16 +20,24 @@ // EXTERNAL INCLUDES #include -#include +#include #include // INTERNAL INCLUDES #include #include +#include namespace Dali { +namespace Integration +{ + +class SceneHolder; + +} // namespace Integration + namespace Toolkit { @@ -39,12 +47,31 @@ namespace Internal /** * @copydoc Toolkit::KeyboardFocusManager */ -class KeyboardFocusManager : public Dali::BaseObject +class KeyboardFocusManager : public Dali::BaseObject, public ConnectionTracker { public: typedef Toolkit::DevelKeyboardFocusManager::CustomAlgorithmInterface CustomAlgorithmInterface; + enum FocusIndicatorState + { + UNKNOWN = -1, ///< Unknown state + HIDE = 0, ///< FocusIndicator is hidden + SHOW = 1, ///< FocusIndicator is shown + }; + + enum EnableFocusedIndicatorState + { + DISABLE = 0, ///< FocusIndicator is disable + ENABLE = 1, ///< FocusIndicator is enable + }; + + enum FocusedIndicatorModeState + { + NONE = 0, ///< Set nothing + ALWAYS_SHOW = 1, ///< FocusIndicator is always shown + }; + /** * @copydoc Toolkit::KeyboardFocusManager::Get */ @@ -120,6 +147,16 @@ public: */ void SetCustomAlgorithm(CustomAlgorithmInterface& interface); + /** + * @copydoc Toolkit::DevelKeyboardFocusManager::UseFocusIndicator + */ + void EnableFocusIndicator(bool enable); + + /** + * @copydoc Toolkit::DevelKeyboardFocusManager::UseFocusIndicator + */ + bool IsFocusIndicatorEnabled() const; + public: /** @@ -166,6 +203,17 @@ private: typedef FocusStack::iterator FocusStackIterator; ///< Define FocusStack::Iterator as FocusStackIterator to navigate FocusStack /** + * This will be called when the adaptor is initialized + */ + void OnAdaptorInit(); + + /** + * This will be called when a new scene holder is created + * @param sceneHolder The new scene holder + */ + void OnSceneHolderCreated( Dali::Integration::SceneHolder& sceneHolder ); + + /** * Get configuration from StyleManager. */ void GetConfigurationFromStyleManger(); @@ -232,14 +280,26 @@ private: * Callback for the key event when no actor in the stage has gained the key input focus * @param[in] event The KeyEvent event. */ - void OnKeyEvent(const KeyEvent& event); + void OnKeyEvent( const KeyEvent& event ); /** * Callback for the touch event when the screen is touched and when the touch ends * (i.e. the down & up touch events only). * @param[in] touch The touch information */ - void OnTouch( const TouchData& touch ); + void OnTouch( const TouchEvent& touch ); + + /** + * Called when the window focus is changed. + * @param[in] window The window whose focus is changed + * @param[in] focusIn Whether the focus is in/out + */ + void OnWindowFocusChanged( Window window, bool focusIn ); + + /** + * Get the focus Actor from current window + */ + Actor GetFocusActorFromCurrentWindow(); private: @@ -259,20 +319,29 @@ private: Actor mFocusIndicatorActor; ///< The focus indicator actor shared by all the keyboard focusable actors for highlight - int mIsFocusIndicatorEnabled; ///< Whether indicator should be shown / hidden when getting focus. It could be enabled when keyboard focus feature is enabled and navigation keys or 'Tab' key are pressed. + FocusStack mFocusHistory; ///< Stack to contain pre-focused actor's BaseObject* - bool mFocusGroupLoopEnabled:1; ///< Whether the focus movement is looped within the same focus group + SlotDelegate< KeyboardFocusManager > mSlotDelegate; - bool mIsWaitingKeyboardFocusChangeCommit:1; /// A flag to indicate PreFocusChangeSignal emitted but the proposed focus actor is not commited by the application yet. + CustomAlgorithmInterface* mCustomAlgorithmInterface; ///< The user's (application / toolkit) implementation of CustomAlgorithmInterface - bool mClearFocusOnTouch:1; ///< Whether clear focus on touch. + typedef std::vector< std::pair< WeakHandle< Layer >, WeakHandle< Actor > > > FocusActorContainer; - FocusStack mFocusHistory; ///< Stack to contain pre-focused actor's BaseObject* + FocusActorContainer mCurrentFocusActors; ///< A container of focused actors - SlotDelegate< KeyboardFocusManager > mSlotDelegate; + WeakHandle< Layer > mCurrentFocusedWindow; ///< A weak handle to the current focused window's root layer - CustomAlgorithmInterface* mCustomAlgorithmInterface; ///< The user's (application / toolkit) implementation of CustomAlgorithmInterface + FocusIndicatorState mIsFocusIndicatorShown; ///< Whether indicator should be shown / hidden when getting focus. It could be enabled when keyboard focus feature is enabled and navigation keys or 'Tab' key are pressed. + + EnableFocusedIndicatorState mEnableFocusIndicator; ///< Whether use focus indicator + FocusedIndicatorModeState mAlwaysShowIndicator; ///< Whether always show indicator. If true, the indicator would be directly shown when focused + + bool mFocusGroupLoopEnabled:1; ///< Whether the focus movement is looped within the same focus group + + bool mIsWaitingKeyboardFocusChangeCommit:1; /// A flag to indicate PreFocusChangeSignal emitted but the proposed focus actor is not commited by the application yet. + + bool mClearFocusOnTouch:1; ///< Whether clear focus on touch. }; } // namespace Internal @@ -299,4 +368,4 @@ inline const Internal::KeyboardFocusManager& GetImpl(const Dali::Toolkit::Keyboa } // namespace Dali -#endif // __DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H__ +#endif // DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H