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=73b12e020c40444c078e042a07c58a70baf7ef29;hp=ddd7506590ba2356090ac38158c497dd625c3a41;hb=bd38905697b8025824ae614445759eb7c030dea7;hpb=4365dab5fd64788ab0c1215ac6f14619cfb9a67d diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index ddd7506..73b12e0 100644 --- 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) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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,76 @@ */ // 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 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::ResourceObserver +class Control::Impl : public ConnectionTracker, public Visual::EventObserver { + friend class Toolkit::DevelControl::AccessibleImpl; 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 own this implementation + * @param[in] controlImpl The control which owns this implementation */ - Impl( Control& controlImpl ); + Impl(Control& controlImpl); /** * @brief Destructor. @@ -123,76 +126,94 @@ public: /** * @brief Called when a resource is ready. * @param[in] object The visual whose resources are ready - * @note Overriding method in Visual::ResourceObserver. + * @note Overriding method in Visual::EventObserver. + */ + void ResourceReady(Visual::Base& object) override; + + /** + * @brief Called when an event occurs. + * @param[in] object The visual whose events occur + * @param[in] signalId The signal to emit. See Visual to find supported signals + * @note Overriding method in Visual::EventObserver. */ - virtual void ResourceReady( Visual::Base& object ); + void NotifyVisualEvent(Visual::Base& object, Property::Index signalId) 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 + * can be set to a New animation if createAnimation is true + * @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); /** * @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); /** * @brief Function used to set control properties. @@ -200,7 +221,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. @@ -208,21 +229,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. @@ -230,28 +251,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. @@ -263,7 +284,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 @@ -272,15 +293,15 @@ public: bool IsResourceReady() const; /** - * @copydoc CustomActorImpl::OnStageDisconnection() + * @copydoc CustomActorImpl::OnSceneDisconnection() */ - void OnStageDisconnection(); + void OnSceneDisconnection(); /** * @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 @@ -292,7 +313,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 @@ -300,9 +321,107 @@ public: */ Extents GetPadding() const; -private: + /** + * @brief Set the input method context. + * @param[in] inputMethodContext The input method context. + */ + 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); + + /** + * @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() + */ + DevelControl::VisualEventSignalType& VisualEventSignal(); + + /** + * @brief Sets the shadow with a property map. + * @param[in] map The shadow property map + */ + void SetShadow(const Property::Map& map); + + /** + * @brief Clear the shadow. + */ + void ClearShadow(); /** + * @copydoc DevelControl::GetVisualProperty() + */ + Dali::Property GetVisualProperty(Dali::Property::Index index, Dali::Property::Key visualPropertyKey); + + /** + * @brief Make visual transition from source control to this control about specific Property::Index + * If both of source and this control have Property::Index property, than create animation between them. + * + * @param[in] animation Return animation from source to this control. + * @param[in] source Source control to be used property animation. + * @param[in] visualIndex Property::Index to make animation. + * @param[in] alphaFunction alpha function of the animation. + * @param[in] timePeriod time period of the animation. + */ + void MakeVisualTransition(Dali::Animation& animation, Dali::Toolkit::Control source, Dali::Property::Index visualIndex, AlphaFunction alphaFunction, TimePeriod timePeriod); + + /** + * @brief Gets the current control's accessible object. + * + * @return The handle to Accessible object + */ + Dali::Accessibility::Accessible* GetAccessibilityObject(); + + /** + * @brief Gets Accessible object handle. + * + * The method acquires Accessible handle from Actor object + * @param actor Actor object + * @return The handle to Accessible object + */ + static Dali::Accessibility::Accessible* GetAccessibilityObject(Dali::Actor actor); + +private: + /** * Used as an alternative to boolean so that it is obvious whether a visual is enabled/disabled. */ struct VisualState @@ -310,7 +429,7 @@ private: enum Type { DISABLED = 0, ///< Visual disabled. - ENABLED = 1 ///< Visual enabled. + ENABLED = 1 ///< Visual enabled. }; }; @@ -322,7 +441,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. }; }; @@ -337,44 +456,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(); + + /** + * @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(); - Control& mControlImpl; +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. + + 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; + + // 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; + bool mAccessibilityNameSet = false; + bool mAccessibilityDescriptionSet = false; + bool mAccessibilityTranslationDomainSet = false; + + bool mAccessibilityHighlightable = false; + bool mAccessibilityHighlightableSet = false; + + Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN; + + std::vector> mAccessibilityRelations; + std::function(Actor)> mAccessibilityConstructor; + std::unique_ptr mAccessibilityObject; // Gesture Detection - PinchGestureDetector mPinchGestureDetector; - PanGestureDetector mPanGestureDetector; - TapGestureDetector mTapGestureDetector; + PinchGestureDetector mPinchGestureDetector; + PanGestureDetector mPanGestureDetector; + TapGestureDetector mTapGestureDetector; LongPressGestureDetector mLongPressGestureDetector; // Tooltip TooltipPtr mTooltip; - 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. + 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. + bool mIsEmittingResourceReadySignal : 1; ///< True during ResourceReady(). + bool mNeedToEmitResourceReady : 1; ///< True if need to emit the resource ready signal again. - RegisteredVisualContainer mRemoveVisuals; ///< List of visuals that are being replaced by another visual once ready + 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; @@ -391,8 +569,21 @@ public: static const PropertyRegistration PROPERTY_12; 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; +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