1 #ifndef DALI_ATSPI_ACCESSIBILITY_H
\r
2 #define DALI_ATSPI_ACCESSIBILITY_H
\r
4 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
\r
6 * Licensed under the Apache License, Version 2.0 (the "License");
\r
7 * you may not use this file except in compliance with the License.
\r
8 * You may obtain a copy of the License at
\r
10 * http://www.apache.org/licenses/LICENSE-2.0
\r
12 * Unless required by applicable law or agreed to in writing, software
\r
13 * distributed under the License is distributed on an "AS IS" BASIS,
\r
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
15 * See the License for the specific language governing permissions and
\r
16 * limitations under the License.
\r
20 // EXTERNAL INCLUDES
\r
23 #include <unordered_map>
\r
26 // INTERNAL INCLUDES
\r
27 #include <dali/devel-api/adaptor-framework/accessibility-bitset.h>
\r
28 #include <dali/public-api/dali-adaptor-common.h>
\r
32 namespace Accessibility
\r
37 * @brief Enumeration describing type of object move relative to the screen. Only outgoing moves are signalled to AT-clients.
\r
39 enum class ScreenRelativeMoveType
\r
41 OUTSIDE = 0, ///< Object moves outside of the screen
\r
42 OUTGOING_TOP_LEFT = 1, ///< Object moves out through the top(or left) side of the screen. Maps to: ATSPI_MOVE_OUTED_TOP_LEFT
\r
43 OUTGOING_BOTTOM_RIGHT = 2, ///< Object moves out through the bottom(or right) side of the screen. Maps to: ATSPI_MOVE_OUTED_BOTTOM_RIGHT
\r
44 INSIDE ///< Object moves into the screen or moves inside the screen
\r
48 * @brief Enumeration describing a relation between accessible objects
\r
49 * 1 to 0..N relation model is supported. By default relation is not symmetrical.
\r
50 * Symmetry must be explicitly maintained.
\r
52 enum class RelationType : uint32_t
\r
54 NULL_OF, ///< Null Relation.
\r
55 LABEL_FOR, ///< Label For.
\r
56 LABELLED_BY, ///< Labelled By.
\r
57 CONTROLLER_FOR, ///< Controller For.
\r
58 CONTROLLED_BY, ///< Controlled By.
\r
59 MEMBER_OF, ///< Member Of.
\r
60 TOOLTIP_FOR, ///< ToolTip For.
\r
61 NODE_CHILD_OF, ///< Node Child Of.
\r
62 NODE_PARENT_OF, ///< Node Parent Of.
\r
63 EXTENDED, ///< Extended.
\r
64 FLOWS_TO, ///< Flows To.
\r
65 FLOWS_FROM, ///< Flows From.
\r
66 SUBWINDOW_OF, ///< Sub Window Of.
\r
67 EMBEDS, ///< Embeds.
\r
68 EMBEDDED_BY, ///< Embedded By.
\r
69 POPUP_FOR, ///< Popup For
\r
70 PARENT_WINDOW_OF, ///< Parent Window Of.
\r
71 DESCRIPTION_FOR, ///< Description For.
\r
72 DESCRIBED_BY, ///< Described By.
\r
73 DETAILS, ///< Details.
\r
74 DETAILS_FOR, ///< Details For.
\r
75 ERROR_MESSAGE, ///< Error Message.
\r
76 ERROR_FOR, ///< Error For.
\r
81 * @brief Enumeration describing if coordinates are relative to screen or window
\r
82 * @see Accessibility::Component::GetExtents
\r
83 * @see Accessibility::Component::IsAccessibleContainingPoint
\r
85 enum class CoordinateType
\r
87 SCREEN, ///< Screen.
\r
92 * @brief Enumeration indicating relative stacking order
\r
93 * ComponentLayer allows to describe visibility of all parts of UI
\r
94 * basing on the concrete stacking order
\r
95 * @see Accessibility::Component::GetLayer
\r
96 * @note currently only ComponentLayer::Window is supported
\r
98 enum class ComponentLayer
\r
100 INVALID, ///< Invalid.
\r
101 BACKGROUND, ///< Background.
\r
102 CANVAS, ///< Canvas.
\r
103 WIDGET, ///< Widget.
\r
106 OVERLAY, ///< Overlay.
\r
107 WINDOW, ///< Window.
\r
112 * @brief Enumeration describing role of the Accessibility object
\r
113 * Object can be described by only one role.
\r
114 * @see Accessibility::Accessible::GetRole
\r
116 enum class Role : uint32_t
\r
175 TABLE_COLUMN_HEADER,
\r
207 INPUT_METHOD_WINDOW,
\r
210 DOCUMENT_SPREADSHEET,
\r
211 DOCUMENT_PRESENTATION,
\r
243 * @brief Enumeration describing states of the Accessibility object
\r
244 * Object can be in many states at the same time.
\r
245 * @see Accessibility::Accessible::GetStates
\r
247 enum class State : uint32_t
\r
280 MANAGES_DESCENDANTS,
\r
286 SUPPORTS_AUTOCOMPLETION,
\r
299 * @brief Enumeration describing change of text object
\r
301 enum class TextChangedState : uint32_t
\r
309 * @brief Enumeration describing change of object property
\r
311 enum class ObjectPropertyChangeEvent
\r
321 * @brief Enumeration describing change of window object
\r
322 * @see Accessibility::Accessible::Emit
\r
324 enum class WindowEvent
\r
349 * @brief Restored window state
\r
350 * @see Accessibility::Accessible::Emit
\r
352 enum class WindowRestoreType
\r
354 RESTORE_FROM_ICONIFY, // The Window is Deiconified.
\r
355 RESTORE_FROM_MAXIMIZE // The Window is Unmaximized.
\r
359 * @brief Enumeration used to acquire bounded text from accessible object having textual content.
\r
360 * @see Accessibility::Text::GetTextAtOffset
\r
361 * @note Currently only TextBoundary::Character is supported
\r
363 enum class TextBoundary : uint32_t
\r
365 CHARACTER, ///> Only one character is acquired.
\r
366 WORD, ///> Not supported.
\r
367 SENTENCE, ///> Not supported.
\r
368 LINE, ///> Not supported.
\r
369 PARAGRAPH, ///> Not supported.
\r
374 * @brief Enumeration describing type of gesture
\r
375 * @see Accessibility::Accessible::DoGesture
\r
377 enum class Gesture : int32_t
\r
381 THREE_FINGER_HOVER,
\r
382 ONE_FINGER_FLICK_LEFT,
\r
383 ONE_FINGER_FLICK_RIGHT,
\r
384 ONE_FINGER_FLICK_UP,
\r
385 ONE_FINGER_FLICK_DOWN,
\r
386 TWO_FINGERS_FLICK_LEFT,
\r
387 TWO_FINGERS_FLICK_RIGHT,
\r
388 TWO_FINGERS_FLICK_UP,
\r
389 TWO_FINGERS_FLICK_DOWN,
\r
390 THREE_FINGERS_FLICK_LEFT,
\r
391 THREE_FINGERS_FLICK_RIGHT,
\r
392 THREE_FINGERS_FLICK_UP,
\r
393 THREE_FINGERS_FLICK_DOWN,
\r
394 ONE_FINGER_SINGLE_TAP,
\r
395 ONE_FINGER_DOUBLE_TAP,
\r
396 ONE_FINGER_TRIPLE_TAP,
\r
397 TWO_FINGERS_SINGLE_TAP,
\r
398 TWO_FINGERS_DOUBLE_TAP,
\r
399 TWO_FINGERS_TRIPLE_TAP,
\r
400 THREE_FINGERS_SINGLE_TAP,
\r
401 THREE_FINGERS_DOUBLE_TAP,
\r
402 THREE_FINGERS_TRIPLE_TAP,
\r
403 ONE_FINGER_FLICK_LEFT_RETURN,
\r
404 ONE_FINGER_FLICK_RIGHT_RETURN,
\r
405 ONE_FINGER_FLICK_UP_RETURN,
\r
406 ONE_FINGER_FLICK_DOWN_RETURN,
\r
407 TWO_FINGERS_FLICK_LEFT_RETURN,
\r
408 TWO_FINGERS_FLICK_RIGHT_RETURN,
\r
409 TWO_FINGERS_FLICK_UP_RETURN,
\r
410 TWO_FINGERS_FLICK_DOWN_RETURN,
\r
411 THREE_FINGERS_FLICK_LEFT_RETURN,
\r
412 THREE_FINGERS_FLICK_RIGHT_RETURN,
\r
413 THREE_FINGERS_FLICK_UP_RETURN,
\r
414 THREE_FINGERS_FLICK_DOWN_RETURN,
\r
415 ONE_FINGER_DOUBLE_TAP_N_HOLD,
\r
416 TWO_FINGERS_DOUBLE_TAP_N_HOLD,
\r
417 THREE_FINGERS_DOUBLE_TAP_N_HOLD,
\r
422 * @brief Enumeration indicating current state of gesture
\r
423 * @see Dali::Accessibility::GestureInfo
\r
425 enum class GestureState : int32_t
\r
434 * @brief Enumeration of ReadingInfoType
\r
436 enum class ReadingInfoType
\r
446 * @brief Enumeration of all AT-SPI interfaces.
\r
448 * @see Dali::Accessibility::Accessible::GetInterfaceName()
\r
449 * @see Dali::Accessibility::AtspiInterfaceType
\r
451 enum class AtspiInterface
\r
459 DEVICE_EVENT_CONTROLLER,
\r
460 DEVICE_EVENT_LISTENER,
\r
484 * @brief Enumeration of all AT-SPI events.
\r
486 enum class AtspiEvent
\r
493 VISIBLE_DATA_CHANGED,
\r
496 ACTIVE_DESCENDANT_CHANGED,
\r
503 TEXT_BOUNDS_CHANGED,
\r
504 TEXT_SELECTION_CHANGED,
\r
506 TEXT_ATTRIBUTES_CHANGED,
\r
508 ATTRIBUTES_CHANGED,
\r
516 using AtspiInterfaces = EnumBitSet<AtspiInterface, AtspiInterface::MAX_COUNT>;
\r
517 using AtspiEvents = EnumBitSet<AtspiEvent, AtspiEvent::MAX_COUNT>;
\r
518 using ReadingInfoTypes = EnumBitSet<ReadingInfoType, ReadingInfoType::MAX_COUNT>;
\r
519 using States = EnumBitSet<State, State::MAX_COUNT>;
\r
520 using Attributes = std::unordered_map<std::string, std::string>;
\r
525 * AT-SPI interfaces exposed as native C++ types should specialize this like so:
\r
528 * struct AtspiInterfaceTypeHelper<AtspiInterface::ACCESSIBLE>
\r
530 * using Type = Dali::Accessibility::Accessible;
\r
533 template<AtspiInterface I>
\r
534 struct AtspiInterfaceTypeHelper; // no default definition
\r
536 } // namespace Internal
\r
539 * @brief Resolves to the native C++ type that represents the given AT-SPI interface.
\r
541 * For example, @code AtspiInterfaceType<AtspiInterface::ACCESSIBLE> @endcode is the same as
\r
542 * @code Dali::Accessibility::Accessible @endcode. Not all AT-SPI interfaces have native C++
\r
543 * representations (in which case, such an expression will not compile).
\r
545 * @tparam I Enumeration value indicating the requested AT-SPI interface.
\r
547 template<AtspiInterface I>
\r
548 using AtspiInterfaceType = typename Internal::AtspiInterfaceTypeHelper<I>::Type;
\r
551 * @brief Class representing unique object address on accessibility bus
\r
552 * @see Dali::Accessibility::Accessible::GetAddress
\r
554 class DALI_ADAPTOR_API Address
\r
557 Address() = default;
\r
559 Address(std::string bus, std::string path)
\r
560 : mBus(std::move(bus)),
\r
561 mPath(std::move(path))
\r
565 explicit operator bool() const
\r
567 return !mPath.empty();
\r
570 std::string ToString() const
\r
572 return *this ? mBus + ":" + mPath : "::null";
\r
575 const std::string& GetBus() const;
\r
577 const std::string& GetPath() const
\r
582 bool operator==(const Address& a) const
\r
584 return mBus == a.mBus && mPath == a.mPath;
\r
587 bool operator!=(const Address& a) const
\r
589 return !(*this == a);
\r
593 mutable std::string mBus, mPath;
\r
597 * @brief Enumeration describing type of key event
\r
598 * @see Adaptor::AccessibilityObserver::OnAccessibleKeyEvent
\r
600 enum class KeyEventType
\r
607 * @brief Enumeration with human readable values describing state of event
\r
608 * @see Dali::Accessibility::Bridge::Emit
\r
610 enum class Consumed
\r
617 * @brief Helper class representing two dimensional point with integer coordinates
\r
619 struct DALI_ADAPTOR_API Point
\r
626 Point(int x, int y)
\r
632 bool operator==(Point p) const
\r
634 return x == p.x && y == p.y;
\r
636 bool operator!=(Point p) const
\r
638 return !(*this == p);
\r
643 * @brief Helper class representing size of rectangle object with usage of two integer values
\r
645 struct DALI_ADAPTOR_API Size
\r
658 bool operator==(Size p) const
\r
660 return width == p.width && height == p.height;
\r
663 bool operator!=(Size p) const
\r
665 return !(*this == p);
\r
670 * @brief Helper class used to store data related with Accessibility::Text interface
\r
671 * @see Dali::Accessibility::Text::GetTextAtOffset
\r
672 * @see Dali::Accessibility::Text::GetRangeOfSelection
\r
674 struct DALI_ADAPTOR_API Range
\r
676 int32_t startOffset = 0;
\r
677 int32_t endOffset = 0;
\r
678 std::string content;
\r
682 Range(size_t start, size_t end)
\r
683 : startOffset(start),
\r
688 Range(size_t start, size_t end, std::string content)
\r
689 : startOffset(start),
\r
697 * @brief Structure containing all values needed to invoke Accessible::DoGesture
\r
698 * type : numerated gesture type
\r
699 * startPositionX, startPositionY : point where gesture begins
\r
700 * endPositionX, endPositionY : point where gesture ends
\r
701 * state : enumerated state of gesture
\r
702 * eventTime : time when event occured
\r
703 * @see Dali::Accessibility::Accessible::DoGesture
\r
705 struct DALI_ADAPTOR_API GestureInfo
\r
707 GestureInfo() = default;
\r
708 GestureInfo(Gesture type, int32_t startPositionX, int32_t endPositionX, int32_t startPositionY, int32_t endPositionY, GestureState state, uint32_t eventTime)
\r
710 startPointX(startPositionX),
\r
711 endPointX(endPositionX),
\r
712 startPointY(startPositionY),
\r
713 endPointY(endPositionY),
\r
715 eventTime(eventTime)
\r
720 int32_t startPointX{};
\r
721 int32_t endPointX{};
\r
722 int32_t startPointY{};
\r
723 int32_t endPointY{};
\r
724 GestureState state{};
\r
725 uint32_t eventTime{};
\r
729 * @brief Class representing accessibility relations
\r
731 * Class connecting one source object with multiple target objects with usage
\r
732 * of specific relation type.
\r
734 * A remote target object (i.e. one belonging to a different process) can be
\r
735 * represented in terms of a ProxyAccessible.
\r
737 * @see Dali::Accessibility::Accessible::Accessible
\r
738 * @see Dali::Accessibility::Accessible::RelationType
\r
740 struct DALI_ADAPTOR_API Relation
\r
742 Relation(RelationType relationType, const std::vector<Accessible*>& targets)
\r
743 : mRelationType(relationType),
\r
748 RelationType mRelationType;
\r
749 std::vector<Accessible*> mTargets;
\r
752 } // namespace Accessibility
\r
753 } // namespace Dali
\r
755 #endif // DALI_ATSPI_ACCESSIBILITY_H
\r