Fix SVACE error caused by recent ATSPI change
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / control / control-data-impl.h
index d944114..73b12e0 100644 (file)
@@ -69,6 +69,8 @@ typedef Dali::OwnerContainer<RegisteredVisual*> RegisteredVisualContainer;
  */
 class Control::Impl : public ConnectionTracker, public Visual::EventObserver
 {
+  friend class Toolkit::DevelControl::AccessibleImpl;
+
 public:
   /**
    * @brief Retrieves the implementation of the internal control class.
@@ -340,8 +342,7 @@ public:
    * Attribute is added if not existed previously or updated
    * if existed.
    */
-  void AppendAccessibilityAttribute(const std::string& key,
-                                    const std::string  value);
+  void AppendAccessibilityAttribute(const std::string& key, const std::string value);
 
   /**
    * @brief Removes accessibility attribute
@@ -391,6 +392,34 @@ public:
    */
   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.
@@ -439,6 +468,21 @@ private:
    */
   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;
@@ -450,17 +494,19 @@ public:
   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;
+  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;
@@ -473,12 +519,10 @@ public:
   Toolkit::DevelControl::AccessibilityDoGestureSignalType      mAccessibilityDoGestureSignal;
 
   std::string mAccessibilityName;
-  bool        mAccessibilityNameSet = false;
-
   std::string mAccessibilityDescription;
-  bool        mAccessibilityDescriptionSet = false;
-
   std::string mAccessibilityTranslationDomain;
+  bool        mAccessibilityNameSet              = false;
+  bool        mAccessibilityDescriptionSet       = false;
   bool        mAccessibilityTranslationDomainSet = false;
 
   bool mAccessibilityHighlightable    = false;
@@ -486,8 +530,9 @@ public:
 
   Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN;
 
-  std::vector<std::vector<Accessibility::Address>> mAccessibilityRelations;
-  bool                                             mAccessibilityAnimated = false;
+  std::vector<std::vector<Accessibility::Address>>                       mAccessibilityRelations;
+  std::function<std::unique_ptr<Dali::Accessibility::Accessible>(Actor)> mAccessibilityConstructor;
+  std::unique_ptr<Dali::Accessibility::Accessible>                       mAccessibilityObject;
 
   // Gesture Detection
   PinchGestureDetector     mPinchGestureDetector;
@@ -533,69 +578,11 @@ public:
   static const PropertyRegistration PROPERTY_21;
   static const PropertyRegistration PROPERTY_22;
 
-  /**
-   * The method acquires Accessible handle from Actor object
-   * @param  actor Actor object
-   * @return       handle to Accessible object
-   */
-  static Dali::Accessibility::Accessible* GetAccessibilityObject(Dali::Actor actor);
-  Dali::Accessibility::Accessible*        GetAccessibilityObject();
-
-  void AccessibilityRegister();
-  void AccessibilityDeregister();
-
-  struct AccessibleImpl : public virtual Dali::Accessibility::Accessible,
-                          public virtual Dali::Accessibility::Component,
-                          public virtual Dali::Accessibility::Collection,
-                          public virtual Dali::Accessibility::Action
-  {
-    Dali::Actor self;
-    bool        modal = false, root = false;
-
-    AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
-
-    std::string                         GetName() override;
-    virtual std::string                 GetNameRaw();
-    std::string                         GetDescription() override;
-    virtual std::string                 GetDescriptionRaw();
-    Dali::Accessibility::Accessible*    GetParent() override;
-    size_t                              GetChildCount() override;
-    Dali::Accessibility::Accessible*    GetChildAtIndex(size_t index) override;
-    size_t                              GetIndexInParent() override;
-    Dali::Accessibility::Role           GetRole() override;
-    Dali::Accessibility::States         GetStates() override;
-    Dali::Accessibility::Attributes     GetAttributes() override;
-    Dali::Rect<>                        GetExtents(Dali::Accessibility::CoordType ctype) override;
-    Dali::Accessibility::ComponentLayer GetLayer() override;
-    int16_t                             GetMdiZOrder() override;
-    bool                                GrabFocus() override;
-    double                              GetAlpha() override;
-    bool                                GrabHighlight() override;
-    bool                                ClearHighlight() override;
-
-    std::string                                GetActionName(size_t index) override;
-    std::string                                GetLocalizedActionName(size_t index) override;
-    std::string                                GetActionDescription(size_t index) override;
-    size_t                                     GetActionCount() override;
-    std::string                                GetActionKeyBinding(size_t index) override;
-    bool                                       DoAction(size_t index) override;
-    bool                                       DoAction(const std::string& name) override;
-    bool                                       DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
-    std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
-
-    virtual Dali::Accessibility::States CalculateStates();
-    virtual void                        EnsureChildVisible(Actor child);
-    virtual void                        EnsureSelfVisible();
-    virtual Property::Index             GetNamePropertyIndex();
-    virtual Property::Index             GetDescriptionPropertyIndex();
-  };
-
-  std::function<std::unique_ptr<Dali::Accessibility::Accessible>(Actor)> accessibilityConstructor;
-  std::unique_ptr<Dali::Accessibility::Accessible>                       accessibilityObject;
-  Dali::PropertyNotification                                             accessibilityNotificationPosition, accessibilityNotificationSize, accessibilityNotificationCulled;
-  bool                                                                   accessibilityNotificationSet = false;
-  static void                                                            PositionOrSizeChangedCallback(PropertyNotification&);
-  static void                                                            CulledChangedCallback(PropertyNotification&);
+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