X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fcontrol%2Fcontrol-data-impl.h;h=46cc97ba377eb078076097286e6a888c42221542;hp=43cab6948f5bca8dc833a2da88c5ae37be8f2674;hb=6da98d4f526029d51c8404964dd954afe9752401;hpb=73e02f6f3ea83cbdf3d894a7d067c4dafc0ac54d diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h old mode 100755 new mode 100644 index 43cab69..46cc97b --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_CONTROL_DATA_IMPL_H /* - * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 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. @@ -19,73 +19,78 @@ */ // EXTERNAL INCLUDES -#include #include +#include +#include +#include #include // INTERNAL INCLUDES -#include -#include -#include #include -#include -#include #include +#include +#include +#include +#include #include +#include +#include +#include +#include +#include namespace Dali { - namespace Toolkit { - namespace Internal { - - /** +/** * Struct used to store Visual within the control, index is a unique key for each visual. */ struct RegisteredVisual { - Property::Index index; + Property::Index index; Toolkit::Visual::Base visual; - bool enabled : 1; - bool pending : 1; - - RegisteredVisual( Property::Index aIndex, Toolkit::Visual::Base &aVisual, bool aEnabled, bool aPendingReplacement ) - : index(aIndex), visual(aVisual), enabled(aEnabled), pending( aPendingReplacement ) + bool enabled : 1; + bool pending : 1; + + RegisteredVisual(Property::Index aIndex, Toolkit::Visual::Base& aVisual, bool aEnabled, bool aPendingReplacement) + : index(aIndex), + visual(aVisual), + enabled(aEnabled), + pending(aPendingReplacement) { } }; -typedef Dali::OwnerContainer< RegisteredVisual* > RegisteredVisualContainer; - +typedef Dali::OwnerContainer RegisteredVisualContainer; /** * @brief Holds the Implementation for the internal control class */ class Control::Impl : public ConnectionTracker, public Visual::EventObserver { + friend class Toolkit::DevelControl::ControlAccessible; public: - /** * @brief Retrieves the implementation of the internal control class. * @param[in] internalControl A ref to the control whose internal implementation is required * @return The internal implementation */ - static Control::Impl& Get( Internal::Control& internalControl ); + static Control::Impl& Get(Internal::Control& internalControl); /** * @copydoc Get( Internal::Control& ) */ - static const Control::Impl& Get( const Internal::Control& internalControl ); + static const Control::Impl& Get(const Internal::Control& internalControl); /** * @brief Constructor. * @param[in] controlImpl The control which owns this implementation */ - Impl( Control& controlImpl ); + Impl(Control& controlImpl); /** * @brief Destructor. @@ -125,7 +130,7 @@ public: * @param[in] object The visual whose resources are ready * @note Overriding method in Visual::EventObserver. */ - void ResourceReady( Visual::Base& object ) override; + void ResourceReady(Visual::Base& object) override; /** * @brief Called when an event occurs. @@ -133,64 +138,70 @@ public: * @param[in] signalId The signal to emit. See Visual to find supported signals * @note Overriding method in Visual::EventObserver. */ - void NotifyVisualEvent( Visual::Base& object, Property::Index signalId ) override; + void NotifyVisualEvent(Visual::Base& object, Property::Index signalId) override; + + /** + * @brief Called when the visual needs relayout request. + * @param[in] object The visual who requests relayout + */ + void RelayoutRequest(Visual::Base& object) override; /** * @copydoc Dali::Toolkit::DevelControl::RegisterVisual() */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual); /** * @copydoc Dali::Toolkit::DevelControl::RegisterVisual() */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual, int depthIndex ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, int depthIndex); /** * @copydoc Dali::Toolkit::DevelControl::RegisterVisual() */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual, bool enabled ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, bool enabled); /** * @copydoc Dali::Toolkit::DevelControl::RegisterVisual() */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual, bool enabled, int depthIndex ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, bool enabled, int depthIndex); /** * @copydoc Dali::Toolkit::DevelControl::UnregisterVisual() */ - void UnregisterVisual( Property::Index index ); + void UnregisterVisual(Property::Index index); /** * @copydoc Dali::Toolkit::DevelControl::GetVisual() */ - Toolkit::Visual::Base GetVisual( Property::Index index ) const; + Toolkit::Visual::Base GetVisual(Property::Index index) const; /** * @copydoc Dali::Toolkit::DevelControl::EnableVisual() */ - void EnableVisual( Property::Index index, bool enable ); + void EnableVisual(Property::Index index, bool enable); /** * @copydoc Dali::Toolkit::DevelControl::IsVisualEnabled() */ - bool IsVisualEnabled( Property::Index index ) const; + bool IsVisualEnabled(Property::Index index) const; /** * @brief Stops observing the given visual. * @param[in] visual The visual to stop observing */ - void StopObservingVisual( Toolkit::Visual::Base& visual ); + void StopObservingVisual(Toolkit::Visual::Base& visual); /** * @brief Starts observing the given visual. * @param[in] visual The visual to start observing */ - void StartObservingVisual( Toolkit::Visual::Base& visual); + void StartObservingVisual(Toolkit::Visual::Base& visual); /** * @copydoc Dali::Toolkit::DevelControl::GetVisualResourceStatus() */ - Toolkit::Visual::ResourceStatus GetVisualResourceStatus( Property::Index index ) const; + Toolkit::Visual::ResourceStatus GetVisualResourceStatus(Property::Index index) const; /** * @param[in,out] animation Handle to existing animation, or an empty handle that @@ -198,19 +209,24 @@ public: * @param[in] transitionData The transition data describing the animation * @param[in] createAnimation True if the animation should be created */ - void AddTransitions( Dali::Animation& animation, - const Toolkit::TransitionData& transitionData, - bool createAnimation = false ); + void AddTransitions(Dali::Animation& animation, + const Toolkit::TransitionData& transitionData, + bool createAnimation = false); /** * @copydoc Dali::Toolkit::DevelControl::CreateTransition() */ - Dali::Animation CreateTransition( const Toolkit::TransitionData& transitionData ); + Dali::Animation CreateTransition(const Toolkit::TransitionData& transitionData); /** * @copydoc Dali::Toolkit::DevelControl::DoAction() */ - void DoAction( Dali::Property::Index visualIndex, Dali::Property::Index actionId, const Dali::Property::Value attributes ); + void DoAction(Dali::Property::Index visualIndex, Dali::Property::Index actionId, const Dali::Property::Value attributes); + + /** + * @copydoc Dali::Toolkit::DevelControl::DoActionExtension() + */ + void DoActionExtension(Dali::Property::Index visualIndex, Dali::Property::Index actionId, Dali::Any attributes); /** * @brief Function used to set control properties. @@ -218,7 +234,7 @@ public: * @param[in] index The index of the property to set * @param[in] value The value of the property to set */ - static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ); + static void SetProperty(BaseObject* object, Property::Index index, const Property::Value& value); /** * @brief Function used to retrieve the value of control properties. @@ -226,21 +242,21 @@ public: * @param[in] index The index of the property to get * @return The value of the property */ - static Property::Value GetProperty( BaseObject* object, Property::Index index ); + static Property::Value GetProperty(BaseObject* object, Property::Index index); /** * @brief Sets the state of the control. * @param[in] newState The state to set * @param[in] withTransitions Whether to show a transition when changing to the new state */ - void SetState( DevelControl::State newState, bool withTransitions=true ); + void SetState(DevelControl::State newState, bool withTransitions = true); /** * @brief Sets the sub-state of the control. * @param[in] newState The sub-state to set * @param[in] withTransitions Whether to show a transition when changing to the new sub-state */ - void SetSubState( const std::string& subStateName, bool withTransitions=true ); + void SetSubState(const std::string& subStateName, bool withTransitions = true); /** * @brief Replaces visuals and properties from the old state to the new state. @@ -248,28 +264,28 @@ public: * @param[in] newState The new state * @param[in] subState The current sub state */ - void ReplaceStateVisualsAndProperties( const StylePtr oldState, const StylePtr newState, const std::string& subState ); + void ReplaceStateVisualsAndProperties(const StylePtr oldState, const StylePtr newState, const std::string& subState); /** * @brief Removes a visual from the control's container. * @param[in] visuals The container of visuals * @param[in] visualName The name of the visual to remove */ - void RemoveVisual( RegisteredVisualContainer& visuals, const std::string& visualName ); + void RemoveVisual(RegisteredVisualContainer& visuals, const std::string& visualName); /** * @brief Removes several visuals from the control's container. * @param[in] visuals The container of visuals * @param[in] removeVisuals The visuals to remove */ - void RemoveVisuals( RegisteredVisualContainer& visuals, DictionaryKeys& removeVisuals ); + void RemoveVisuals(RegisteredVisualContainer& visuals, DictionaryKeys& removeVisuals); /** * @brief Copies the visual properties that are specific to the control instance into the instancedProperties container. * @param[in] visuals The control's visual container * @param[out] instancedProperties The instanced properties are added to this container */ - void CopyInstancedProperties( RegisteredVisualContainer& visuals, Dictionary& instancedProperties ); + void CopyInstancedProperties(RegisteredVisualContainer& visuals, Dictionary& instancedProperties); /** * @brief On state change, ensures visuals are moved or created appropriately. @@ -281,7 +297,7 @@ public: * @param[in] stateVisualsToChange The visuals to change * @param[in] instancedProperties The instanced properties @see CopyInstancedProperties */ - void RecreateChangedVisuals( Dictionary& stateVisualsToChange, Dictionary& instancedProperties ); + void RecreateChangedVisuals(Dictionary& stateVisualsToChange, Dictionary& instancedProperties); /** * @brief Whether the resource is ready @@ -298,7 +314,7 @@ public: * @brief Sets the margin. * @param[in] margin Margin is a collections of extent ( start, end, top, bottom ) */ - void SetMargin( Extents margin ); + void SetMargin(Extents margin); /** * @brief Returns the value of margin @@ -310,7 +326,7 @@ public: * @brief Sets the padding. * @param[in] padding Padding is a collections of extent ( start, end, top, bottom ). */ - void SetPadding( Extents padding ); + void SetPadding(Extents padding); /** * @brief Returns the value of padding @@ -322,14 +338,51 @@ public: * @brief Set the input method context. * @param[in] inputMethodContext The input method context. */ - void SetInputMethodContext( InputMethodContext& inputMethodContext ); + void SetInputMethodContext(InputMethodContext& inputMethodContext); /** * @brief Filter an key event. * @param[in] event The key to be filtered. * @return True if the key handled, otherwise false. */ - bool FilterKeyEvent( const KeyEvent& event ); + bool FilterKeyEvent(const KeyEvent& event); + + /** + * @brief Adds accessibility attribute + * @param[in] key Attribute name to set + * @param[in] value Attribute value to set + * + * Attribute is added if not existed previously or updated + * if existed. + */ + void AppendAccessibilityAttribute(const std::string& key, const std::string value); + + /** + * @brief Removes accessibility attribute + * @param[in] key Attribute name to remove + * + * Function does nothing if attribute doesn't exist. + */ + void RemoveAccessibilityAttribute(const std::string& key); + + /** + * @brief Removes all accessibility attributes + */ + void ClearAccessibilityAttributes(); + + /** + * @brief Sets reading info type attributes + * @param[in] types info type attributes to set + * + * This function sets, which part of object will be read out + * by screen-reader. + */ + void SetAccessibilityReadingInfoType(const Dali::Accessibility::ReadingInfoTypes types); + + /** + * @brief Gets currently active reading info type attributes + */ + Dali::Accessibility::ReadingInfoTypes GetAccessibilityReadingInfoType() const; /** * @copydoc DevelControl::VisualEventSignal() @@ -347,8 +400,46 @@ public: */ void ClearShadow(); -private: + /** + * @copydoc DevelControl::GetVisualProperty() + */ + Dali::Property GetVisualProperty(Dali::Property::Index index, Dali::Property::Key visualPropertyKey); + + /** + * @brief Retrieves source and destination visual properties for the Transition of this Control. + * The properties of this Control will be transitioned from the propeties of source Control to that of destination control. + * If a property value is different between source and destination Control, + * the property information of each Control will be included in sourceProperties and destinationProperties. + * + * @param[out] sourceProperties Source property list to be applied on this Control. + * @param[out] destinationProperties Destination property list to be applied on this Control. + * @param[in] source Source control of the animation. + * @param[in] destination Destination control of the animation. + * + * @note This method do not handle Actor properties. + * And the size and order of the sourceProperties and destinationProperties must be synchronized. + * + * This method triggers Control::OnCreateTransition(). + */ + void CreateTransitions(std::vector>& sourceProperties, + std::vector>& destinationProperties, + Dali::Toolkit::Control source, + Dali::Toolkit::Control destination); + + /** + * @brief Update visual properties. + * @param[in] properties Property list to be used to update visual properties of this Control. + * + * @note This method triggers Control::OnUpdateVisualProperties(). + */ + void UpdateVisualProperties(const std::vector>& properties); + + /** + * @copydoc Dali::Toolkit::Internal::Control::GetAccessibleObject() + */ + Toolkit::DevelControl::ControlAccessible* GetAccessibleObject(); +private: /** * Used as an alternative to boolean so that it is obvious whether a visual is enabled/disabled. */ @@ -357,7 +448,7 @@ private: enum Type { DISABLED = 0, ///< Visual disabled. - ENABLED = 1 ///< Visual enabled. + ENABLED = 1 ///< Visual enabled. }; }; @@ -369,7 +460,7 @@ private: enum Type { NOT_SET = 0, ///< Visual depth value not set by caller. - SET = 1 ///< Visual depth value set by caller. + SET = 1 ///< Visual depth value set by caller. }; }; @@ -384,48 +475,103 @@ private: * @note Registering a visual with an index that already has a registered visual will replace it. The replacement will * occur once the replacement visual is ready (loaded). */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual, VisualState::Type enabled, DepthIndexValue::Type depthIndexValueSet, int depthIndex = 0 ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, VisualState::Type enabled, DepthIndexValue::Type depthIndexValueSet, int depthIndex = 0); -public: + /** + * @brief Emits the resource ready signal. + */ + void EmitResourceReadySignal(); - Control& mControlImpl; + /** + * @brief Callbacks called on idle. + */ + void OnIdleCallback(); + + /** + * @brief Checks highlighted object geometry if it is showing or not + */ + void CheckHighlightedObjectGeometry(); + + /** + * @brief Register property notification to check highlighted object position + */ + void RegisterAccessibilityPositionPropertyNotification(); + + /** + * @brief Remove property notification added by RegisterPropertyNotification + */ + void UnregisterAccessibilityPositionPropertyNotification(); + +public: + Control& mControlImpl; DevelControl::State mState; - std::string mSubStateName; - - int mLeftFocusableActorId; ///< Actor ID of Left focusable control. - int mRightFocusableActorId; ///< Actor ID of Right focusable control. - int mUpFocusableActorId; ///< Actor ID of Up focusable control. - int mDownFocusableActorId; ///< Actor ID of Down focusable control. - - RegisteredVisualContainer mVisuals; ///< Stores visuals needed by the control, non trivial type so std::vector used. - std::string mStyleName; - Vector4 mBackgroundColor; ///< The color of the background visual - Vector3* mStartingPinchScale; ///< The scale when a pinch gesture starts, TODO: consider removing this - Extents mMargin; ///< The margin values - Extents mPadding; ///< The padding values - Toolkit::Control::KeyEventSignalType mKeyEventSignal; + std::string mSubStateName; + Property::Map mAccessibilityAttributes; + + int mLeftFocusableActorId; ///< Actor ID of Left focusable control. + int mRightFocusableActorId; ///< Actor ID of Right focusable control. + int mUpFocusableActorId; ///< Actor ID of Up focusable control. + int mDownFocusableActorId; ///< Actor ID of Down focusable control. + int mClockwiseFocusableActorId; ///< Actor ID of Clockwise focusable control. + int mCounterClockwiseFocusableActorId; ///< Actor ID of Counter clockwise focusable control. + + RegisteredVisualContainer mVisuals; ///< Stores visuals needed by the control, non trivial type so std::vector used. + std::string mStyleName; + Vector4 mBackgroundColor; ///< The color of the background visual + Vector3* mStartingPinchScale; ///< The scale when a pinch gesture starts, TODO: consider removing this + Extents mMargin; ///< The margin values + Extents mPadding; ///< The padding values + Toolkit::Control::KeyEventSignalType mKeyEventSignal; Toolkit::Control::KeyInputFocusSignalType mKeyInputFocusGainedSignal; Toolkit::Control::KeyInputFocusSignalType mKeyInputFocusLostSignal; Toolkit::Control::ResourceReadySignalType mResourceReadySignal; - DevelControl::VisualEventSignalType mVisualEventSignal; + DevelControl::VisualEventSignalType mVisualEventSignal; + + // Accessibility + Toolkit::DevelControl::AccessibilityActivateSignalType mAccessibilityActivateSignal; + Toolkit::DevelControl::AccessibilityReadingSkippedSignalType mAccessibilityReadingSkippedSignal; + Toolkit::DevelControl::AccessibilityReadingPausedSignalType mAccessibilityReadingPausedSignal; + Toolkit::DevelControl::AccessibilityReadingResumedSignalType mAccessibilityReadingResumedSignal; + Toolkit::DevelControl::AccessibilityReadingCancelledSignalType mAccessibilityReadingCancelledSignal; + Toolkit::DevelControl::AccessibilityReadingStoppedSignalType mAccessibilityReadingStoppedSignal; + + Toolkit::DevelControl::AccessibilityGetNameSignalType mAccessibilityGetNameSignal; + Toolkit::DevelControl::AccessibilityGetDescriptionSignalType mAccessibilityGetDescriptionSignal; + Toolkit::DevelControl::AccessibilityDoGestureSignalType mAccessibilityDoGestureSignal; + + std::string mAccessibilityName; + std::string mAccessibilityDescription; + std::string mAccessibilityTranslationDomain; + std::string mAutomationId; + + bool mAccessibilityHighlightable = false; + bool mAccessibilityHidden = false; + + Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN; + + std::map> mAccessibilityRelations; + std::unique_ptr mAccessibleObject; // Gesture Detection - PinchGestureDetector mPinchGestureDetector; - PanGestureDetector mPanGestureDetector; - TapGestureDetector mTapGestureDetector; + PinchGestureDetector mPinchGestureDetector; + PanGestureDetector mPanGestureDetector; + TapGestureDetector mTapGestureDetector; LongPressGestureDetector mLongPressGestureDetector; // Tooltip TooltipPtr mTooltip; InputMethodContext mInputMethodContext; + CallbackBase* mIdleCallback; ///< The idle callback to emit the resource ready signal. - ControlBehaviour mFlags : CONTROL_BEHAVIOUR_FLAG_COUNT; ///< Flags passed in from constructor. - bool mIsKeyboardNavigationSupported :1; ///< Stores whether keyboard navigation is supported by the control. - bool mIsKeyboardFocusGroup :1; ///< Stores whether the control is a focus group. - - RegisteredVisualContainer mRemoveVisuals; ///< List of visuals that are being replaced by another visual once ready + ControlBehaviour mFlags : CONTROL_BEHAVIOUR_FLAG_COUNT; ///< Flags passed in from constructor. + bool mIsKeyboardNavigationSupported : 1; ///< Stores whether keyboard navigation is supported by the control. + bool mIsKeyboardFocusGroup : 1; ///< Stores whether the control is a focus group. + bool mIsEmittingResourceReadySignal : 1; ///< True during ResourceReady(). + bool mNeedToEmitResourceReady : 1; ///< True if need to emit the resource ready signal again. + bool mDispatchKeyEvents : 1; ///< Whether the actor emits key event signals + RegisteredVisualContainer mRemoveVisuals; ///< List of visuals that are being replaced by another visual once ready // Properties - these need to be members of Internal::Control::Impl as they access private methods/data of Internal::Control and Internal::Control::Impl. static const PropertyRegistration PROPERTY_1; @@ -443,8 +589,24 @@ public: static const PropertyRegistration PROPERTY_13; static const PropertyRegistration PROPERTY_14; static const PropertyRegistration PROPERTY_15; -}; + static const PropertyRegistration PROPERTY_16; + static const PropertyRegistration PROPERTY_17; + static const PropertyRegistration PROPERTY_18; + static const PropertyRegistration PROPERTY_19; + static const PropertyRegistration PROPERTY_20; + static const PropertyRegistration PROPERTY_21; + static const PropertyRegistration PROPERTY_22; + static const PropertyRegistration PROPERTY_23; + static const PropertyRegistration PROPERTY_24; + static const PropertyRegistration PROPERTY_25; + static const PropertyRegistration PROPERTY_26; +private: + // Accessibility - notification for highlighted object to check if it is showing. + bool mIsAccessibilityPositionPropertyNotificationSet{false}; + Dali::PropertyNotification mAccessibilityPositionNotification; + Dali::Accessibility::ScreenRelativeMoveType mAccessibilityLastScreenRelativeMoveType{Accessibility::ScreenRelativeMoveType::OUTSIDE}; +}; } // namespace Internal