[AT-SPI] Introduce AtspiEvents
[platform/core/uifw/dali-adaptor.git] / dali / devel-api / adaptor-framework / accessibility.h
1 #ifndef DALI_ATSPI_ACCESSIBILITY_H\r
2 #define DALI_ATSPI_ACCESSIBILITY_H\r
3 /*\r
4  * Copyright (c) 2021 Samsung Electronics Co., Ltd.\r
5  *\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
9  *\r
10  * http://www.apache.org/licenses/LICENSE-2.0\r
11  *\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
17  *\r
18  */\r
19 \r
20 // EXTERNAL INCLUDES\r
21 #include <string>\r
22 #include <unordered_map>\r
23 #include <vector>\r
24 \r
25 // INTERNAL INCLUDES\r
26 #include <dali/devel-api/adaptor-framework/accessibility-bitset.h>\r
27 #include <dali/public-api/dali-adaptor-common.h>\r
28 \r
29 namespace Dali\r
30 {\r
31 namespace Accessibility\r
32 {\r
33 /**\r
34  * @brief Enumeration describing type of object move relative to the screen. Only outgoing moves are signalled to AT-clients.\r
35  */\r
36 enum class ScreenRelativeMoveType\r
37 {\r
38   OUTSIDE               = 0, ///< Object moves outside of the screen\r
39   OUTGOING_TOP_LEFT     = 1, ///< Object moves out through the top(or left) side of the screen. Maps to: ATSPI_MOVE_OUTED_TOP_LEFT\r
40   OUTGOING_BOTTOM_RIGHT = 2, ///< Object moves out through the bottom(or right) side of the screen. Maps to: ATSPI_MOVE_OUTED_BOTTOM_RIGHT\r
41   INSIDE                     ///< Object moves into the screen or moves inside the screen\r
42 };\r
43 \r
44 /**\r
45  * @brief Enumeration describing a relation between accessible objects\r
46  * 1 to 0..N relation model is supported. By default relation is not symmetrical.\r
47  * Symmetry must be explicitly maintained.\r
48  */\r
49 enum class RelationType : uint32_t\r
50 {\r
51   NULL_OF,          ///< Null Relation.\r
52   LABEL_FOR,        ///< Label For.\r
53   LABELLED_BY,      ///< Labelled By.\r
54   CONTROLLER_FOR,   ///< Controller For.\r
55   CONTROLLED_BY,    ///< Controlled By.\r
56   MEMBER_OF,        ///< Member Of.\r
57   TOOLTIP_FOR,      ///< ToolTip For.\r
58   NODE_CHILD_OF,    ///< Node Child Of.\r
59   NODE_PARENT_OF,   ///< Node Parent Of.\r
60   EXTENDED,         ///< Extended.\r
61   FLOWS_TO,         ///< Flows To.\r
62   FLOWS_FROM,       ///< Flows From.\r
63   SUBWINDOW_OF,     ///< Sub Window Of.\r
64   EMBEDS,           ///< Embeds.\r
65   EMBEDDED_BY,      ///< Embedded By.\r
66   POPUP_FOR,        ///< Popup For\r
67   PARENT_WINDOW_OF, ///< Parent Window Of.\r
68   DESCRIPTION_FOR,  ///< Description For.\r
69   DESCRIBED_BY,     ///< Described By.\r
70   DETAILS,          ///< Details.\r
71   DETAILS_FOR,      ///< Details For.\r
72   ERROR_MESSAGE,    ///< Error Message.\r
73   ERROR_FOR,        ///< Error For.\r
74   MAX_COUNT\r
75 };\r
76 \r
77 /**\r
78  * @brief Enumeration describing if coordinates are relative to screen or window\r
79  * @see Accessibility::Component::GetExtents\r
80  * @see Accessibility::Component::IsAccessibleContainingPoint\r
81  */\r
82 enum class CoordinateType\r
83 {\r
84   SCREEN, ///< Screen.\r
85   WINDOW  ///< Window.\r
86 };\r
87 \r
88 /**\r
89  * @brief Enumeration indicating relative stacking order\r
90  * ComponentLayer allows to describe visibility of all parts of UI\r
91  * basing on the concrete stacking order\r
92  * @see Accessibility::Component::GetLayer\r
93  * @note currently only ComponentLayer::Window is supported\r
94  */\r
95 enum class ComponentLayer\r
96 {\r
97   INVALID,    ///< Invalid.\r
98   BACKGROUND, ///< Background.\r
99   CANVAS,     ///< Canvas.\r
100   WIDGET,     ///< Widget.\r
101   MDI,        ///< MDI.\r
102   POPUP,      ///< Popup.\r
103   OVERLAY,    ///< Overlay.\r
104   WINDOW,     ///< Window.\r
105   MAX_COUNT\r
106 };\r
107 \r
108 /**\r
109  * @brief Enumeration describing role of the Accessibility object\r
110  * Object can be described by only one role.\r
111  * @see Accessibility::Accessible::GetRole\r
112  */\r
113 enum class Role : uint32_t\r
114 {\r
115   INVALID,\r
116   ACCELERATOR_LABEL,\r
117   ALERT,\r
118   ANIMATION,\r
119   ARROW,\r
120   CALENDAR,\r
121   CANVAS,\r
122   CHECK_BOX,\r
123   CHECK_MENU_ITEM,\r
124   COLOR_CHOOSER,\r
125   COLUMN_HEADER,\r
126   COMBO_BOX,\r
127   DATE_EDITOR,\r
128   DESKTOP_ICON,\r
129   DESKTOP_FRAME,\r
130   DIAL,\r
131   DIALOG,\r
132   DIRECTORY_PANE,\r
133   DRAWING_AREA,\r
134   FILE_CHOOSER,\r
135   FILLER,\r
136   FOCUS_TRAVERSABLE,\r
137   FONT_CHOOSER,\r
138   FRAME,\r
139   GLASS_PANE,\r
140   HTML_CONTAINER,\r
141   ICON,\r
142   IMAGE,\r
143   INTERNAL_FRAME,\r
144   LABEL,\r
145   LAYERED_PANE,\r
146   LIST,\r
147   LIST_ITEM,\r
148   MENU,\r
149   MENU_BAR,\r
150   MENU_ITEM,\r
151   OPTION_PANE,\r
152   PAGE_TAB,\r
153   PAGE_TAB_LIST,\r
154   PANEL,\r
155   PASSWORD_TEXT,\r
156   POPUP_MENU,\r
157   PROGRESS_BAR,\r
158   PUSH_BUTTON,\r
159   RADIO_BUTTON,\r
160   RADIO_MENU_ITEM,\r
161   ROOT_PANE,\r
162   ROW_HEADER,\r
163   SCROLL_BAR,\r
164   SCROLL_PANE,\r
165   SEPARATOR,\r
166   SLIDER,\r
167   SPIN_BUTTON,\r
168   SPLIT_PANE,\r
169   STATUS_BAR,\r
170   TABLE,\r
171   TABLE_CELL,\r
172   TABLE_COLUMN_HEADER,\r
173   TABLE_ROW_HEADER,\r
174   TEAROFF_MENU_ITEM,\r
175   TERMINAL,\r
176   TEXT,\r
177   TOGGLE_BUTTON,\r
178   TOOL_BAR,\r
179   TOOL_TIP,\r
180   TREE,\r
181   TREE_TABLE,\r
182   UNKNOWN,\r
183   VIEWPORT,\r
184   WINDOW,\r
185   EXTENDED,\r
186   HEADER,\r
187   FOOTER,\r
188   PARAGRAPH,\r
189   RULER,\r
190   APPLICATION,\r
191   AUTOCOMPLETE,\r
192   EDITBAR,\r
193   EMBEDDED,\r
194   ENTRY,\r
195   CHART,\r
196   CAPTION,\r
197   DOCUMENT_FRAME,\r
198   HEADING,\r
199   PAGE,\r
200   SECTION,\r
201   REDUNDANT_OBJECT,\r
202   FORM,\r
203   LINK,\r
204   INPUT_METHOD_WINDOW,\r
205   TABLE_ROW,\r
206   TREE_ITEM,\r
207   DOCUMENT_SPREADSHEET,\r
208   DOCUMENT_PRESENTATION,\r
209   DOCUMENT_TEXT,\r
210   DOCUMENT_WEB,\r
211   DOCUMENT_EMAIL,\r
212   COMMENT,\r
213   LIST_BOX,\r
214   GROUPING,\r
215   IMAGE_MAP,\r
216   NOTIFICATION,\r
217   INFO_BAR,\r
218   LEVEL_BAR,\r
219   TITLE_BAR,\r
220   BLOCK_QUOTE,\r
221   AUDIO,\r
222   VIDEO,\r
223   DEFINITION,\r
224   ARTICLE,\r
225   LANDMARK,\r
226   LOG,\r
227   MARQUEE,\r
228   MATH,\r
229   RATING,\r
230   TIMER,\r
231   STATIC,\r
232   MATH_FRACTION,\r
233   MATH_ROOT,\r
234   SUBSCRIPT,\r
235   SUPERSCRIPT,\r
236   MAX_COUNT\r
237 };\r
238 \r
239 /**\r
240  * @brief Enumeration describing states of the Accessibility object\r
241  * Object can be in many states at the same time.\r
242  * @see Accessibility::Accessible::GetStates\r
243  */\r
244 enum class State : uint32_t\r
245 {\r
246   INVALID,\r
247   ACTIVE,\r
248   ARMED,\r
249   BUSY,\r
250   CHECKED,\r
251   COLLAPSED,\r
252   DEFUNCT,\r
253   EDITABLE,\r
254   ENABLED,\r
255   EXPANDABLE,\r
256   EXPANDED,\r
257   FOCUSABLE,\r
258   FOCUSED,\r
259   HAS_TOOLTIP,\r
260   HORIZONTAL,\r
261   ICONIFIED,\r
262   MODAL,\r
263   MULTI_LINE,\r
264   MULTI_SELECTABLE,\r
265   OPAQUE,\r
266   PRESSED,\r
267   RESIZEABLE,\r
268   SELECTABLE,\r
269   SELECTED,\r
270   SENSITIVE,\r
271   SHOWING,\r
272   SINGLE_LINE,\r
273   STALE,\r
274   TRANSIENT,\r
275   VERTICAL,\r
276   VISIBLE,\r
277   MANAGES_DESCENDANTS,\r
278   INDETERMINATE,\r
279   REQUIRED,\r
280   TRUNCATED,\r
281   ANIMATED,\r
282   INVALID_ENTRY,\r
283   SUPPORTS_AUTOCOMPLETION,\r
284   SELECTABLE_TEXT,\r
285   IS_DEFAULT,\r
286   VISITED,\r
287   CHECKABLE,\r
288   HAS_POPUP,\r
289   READ_ONLY,\r
290   HIGHLIGHTED,\r
291   HIGHLIGHTABLE,\r
292   MAX_COUNT\r
293 };\r
294 \r
295 /**\r
296  * @brief Enumeration describing change of text object\r
297  */\r
298 enum class TextChangedState : uint32_t\r
299 {\r
300   INSERTED,\r
301   DELETED,\r
302   MAX_COUNT\r
303 };\r
304 \r
305 /**\r
306  * @brief Enumeration describing change of object property\r
307  */\r
308 enum class ObjectPropertyChangeEvent\r
309 {\r
310   NAME,\r
311   DESCRIPTION,\r
312   VALUE,\r
313   ROLE,\r
314   PARENT,\r
315 };\r
316 \r
317 /**\r
318  * @brief Enumeration describing change of window object\r
319  * @see Accessibility::Accessible::Emit\r
320  */\r
321 enum class WindowEvent\r
322 {\r
323   PROPERTY_CHANGE,\r
324   MINIMIZE,\r
325   MAXIMIZE,\r
326   RESTORE,\r
327   CLOSE,\r
328   CREATE,\r
329   REPARENT,\r
330   DESKTOP_CREATE,\r
331   DESKTOP_DESTROY,\r
332   DESTROY,\r
333   ACTIVATE,\r
334   DEACTIVATE,\r
335   RAISE,\r
336   LOWER,\r
337   MOVE,\r
338   RESIZE,\r
339   SHADE,\r
340   UU_SHADE,\r
341   RESTYLE,\r
342 };\r
343 \r
344 /**\r
345  * @brief Enumeration used to acquire bounded text from accessible object having textual content.\r
346  * @see Accessibility::Text::GetTextAtOffset\r
347  * @note Currently only TextBoundary::Character is supported\r
348  */\r
349 enum class TextBoundary : uint32_t\r
350 {\r
351   CHARACTER, ///> Only one character is acquired.\r
352   WORD,      ///> Not supported.\r
353   SENTENCE,  ///> Not supported.\r
354   LINE,      ///> Not supported.\r
355   PARAGRAPH, ///> Not supported.\r
356   MAX_COUNT\r
357 };\r
358 \r
359 /**\r
360  * @brief Enumeration describing type of gesture\r
361  * @see Accessibility::Accessible::DoGesture\r
362  */\r
363 enum class Gesture : int32_t\r
364 {\r
365   ONE_FINGER_HOVER,\r
366   TWO_FINGER_HOVER,\r
367   THREE_FINGER_HOVER,\r
368   ONE_FINGER_FLICK_LEFT,\r
369   ONE_FINGER_FLICK_RIGHT,\r
370   ONE_FINGER_FLICK_UP,\r
371   ONE_FINGER_FLICK_DOWN,\r
372   TWO_FINGERS_FLICK_LEFT,\r
373   TWO_FINGERS_FLICK_RIGHT,\r
374   TWO_FINGERS_FLICK_UP,\r
375   TWO_FINGERS_FLICK_DOWN,\r
376   THREE_FINGERS_FLICK_LEFT,\r
377   THREE_FINGERS_FLICK_RIGHT,\r
378   THREE_FINGERS_FLICK_UP,\r
379   THREE_FINGERS_FLICK_DOWN,\r
380   ONE_FINGER_SINGLE_TAP,\r
381   ONE_FINGER_DOUBLE_TAP,\r
382   ONE_FINGER_TRIPLE_TAP,\r
383   TWO_FINGERS_SINGLE_TAP,\r
384   TWO_FINGERS_DOUBLE_TAP,\r
385   TWO_FINGERS_TRIPLE_TAP,\r
386   THREE_FINGERS_SINGLE_TAP,\r
387   THREE_FINGERS_DOUBLE_TAP,\r
388   THREE_FINGERS_TRIPLE_TAP,\r
389   ONE_FINGER_FLICK_LEFT_RETURN,\r
390   ONE_FINGER_FLICK_RIGHT_RETURN,\r
391   ONE_FINGER_FLICK_UP_RETURN,\r
392   ONE_FINGER_FLICK_DOWN_RETURN,\r
393   TWO_FINGERS_FLICK_LEFT_RETURN,\r
394   TWO_FINGERS_FLICK_RIGHT_RETURN,\r
395   TWO_FINGERS_FLICK_UP_RETURN,\r
396   TWO_FINGERS_FLICK_DOWN_RETURN,\r
397   THREE_FINGERS_FLICK_LEFT_RETURN,\r
398   THREE_FINGERS_FLICK_RIGHT_RETURN,\r
399   THREE_FINGERS_FLICK_UP_RETURN,\r
400   THREE_FINGERS_FLICK_DOWN_RETURN,\r
401   ONE_FINGER_DOUBLE_TAP_N_HOLD,\r
402   TWO_FINGERS_DOUBLE_TAP_N_HOLD,\r
403   THREE_FINGERS_DOUBLE_TAP_N_HOLD,\r
404   MAX_COUNT\r
405 };\r
406 \r
407 /**\r
408  * @brief Enumeration indicating current state of gesture\r
409  * @see Dali::Accessibility::GestureInfo\r
410  */\r
411 enum class GestureState : int32_t\r
412 {\r
413   BEGIN,\r
414   ONGOING,\r
415   ENDED,\r
416   ABORTED\r
417 };\r
418 \r
419 /**\r
420  * @brief Enumeration of ReadingInfoType\r
421  */\r
422 enum class ReadingInfoType\r
423 {\r
424   NAME,\r
425   ROLE,\r
426   DESCRIPTION,\r
427   STATE,\r
428   MAX_COUNT\r
429 };\r
430 \r
431 /**\r
432  * @brief Enumeration of all AT-SPI interfaces.\r
433  *\r
434  * @see Dali::Accessibility::Accessible::GetInterfaceName()\r
435  * @see Dali::Accessibility::AtspiInterfaceType\r
436  */\r
437 enum class AtspiInterface\r
438 {\r
439   ACCESSIBLE,\r
440   ACTION,\r
441   APPLICATION,\r
442   CACHE,\r
443   COLLECTION,\r
444   COMPONENT,\r
445   DEVICE_EVENT_CONTROLLER,\r
446   DEVICE_EVENT_LISTENER,\r
447   DOCUMENT,\r
448   EDITABLE_TEXT,\r
449   EVENT_DOCUMENT,\r
450   EVENT_FOCUS,\r
451   EVENT_KEYBOARD,\r
452   EVENT_MOUSE,\r
453   EVENT_OBJECT,\r
454   EVENT_TERMINAL,\r
455   EVENT_WINDOW,\r
456   HYPERLINK,\r
457   HYPERTEXT,\r
458   IMAGE,\r
459   REGISTRY,\r
460   SELECTION,\r
461   SOCKET,\r
462   TABLE,\r
463   TABLE_CELL,\r
464   TEXT,\r
465   VALUE,\r
466   MAX_COUNT\r
467 };\r
468 \r
469 /**\r
470  * @brief Enumeration of all AT-SPI events.\r
471  */\r
472 enum class AtspiEvent\r
473 {\r
474   PROPERTY_CHANGED,\r
475   BOUNDS_CHANGED,\r
476   LINK_SELECTED,\r
477   STATE_CHANGED,\r
478   CHILDREN_CHANGED,\r
479   VISIBLE_DATA_CHANGED,\r
480   SELECTION_CHANGED,\r
481   MODEL_CHANGED,\r
482   ACTIVE_DESCENDANT_CHANGED,\r
483   ROW_INSERTED,\r
484   ROW_REORDERED,\r
485   ROW_DELETED,\r
486   COLUMN_INSERTED,\r
487   COLUMN_REORDERED,\r
488   COLUMN_DELETED,\r
489   TEXT_BOUNDS_CHANGED,\r
490   TEXT_SELECTION_CHANGED,\r
491   TEXT_CHANGED,\r
492   TEXT_ATTRIBUTES_CHANGED,\r
493   TEXT_CARET_MOVED,\r
494   ATTRIBUTES_CHANGED,\r
495   MOVED_OUT,\r
496   WINDOW_CHANGED,\r
497   MAX_COUNT\r
498 };\r
499 \r
500 using AtspiInterfaces   = EnumBitSet<AtspiInterface, AtspiInterface::MAX_COUNT>;\r
501 using AtspiEvents       = EnumBitSet<AtspiEvent, AtspiEvent::MAX_COUNT>;\r
502 using ReadingInfoTypes  = EnumBitSet<ReadingInfoType, ReadingInfoType::MAX_COUNT>;\r
503 using States            = EnumBitSet<State, State::MAX_COUNT>;\r
504 using Attributes        = std::unordered_map<std::string, std::string>;\r
505 \r
506 namespace Internal\r
507 {\r
508 /*\r
509  * AT-SPI interfaces exposed as native C++ types should specialize this like so:\r
510  *\r
511  * template<>\r
512  * struct AtspiInterfaceTypeHelper<AtspiInterface::ACCESSIBLE>\r
513  * {\r
514  *   using Type = Dali::Accessibility::Accessible;\r
515  * };\r
516  */\r
517 template<AtspiInterface I>\r
518 struct AtspiInterfaceTypeHelper; // no default definition\r
519 \r
520 } // namespace Internal\r
521 \r
522 /**\r
523  * @brief Resolves to the native C++ type that represents the given AT-SPI interface.\r
524  *\r
525  * For example, @code AtspiInterfaceType<AtspiInterface::ACCESSIBLE> @endcode is the same as\r
526  * @code Dali::Accessibility::Accessible @endcode. Not all AT-SPI interfaces have native C++\r
527  * representations (in which case, such an expression will not compile).\r
528  *\r
529  * @tparam I Enumeration value indicating the requested AT-SPI interface.\r
530  */\r
531 template<AtspiInterface I>\r
532 using AtspiInterfaceType = typename Internal::AtspiInterfaceTypeHelper<I>::Type;\r
533 \r
534 /**\r
535  * @brief Class representing unique object address on accessibility bus\r
536  * @see Dali::Accessibility::Accessible::GetAddress\r
537  */\r
538 class DALI_ADAPTOR_API Address\r
539 {\r
540 public:\r
541   Address() = default;\r
542 \r
543   Address(std::string bus, std::string path)\r
544   : mBus(std::move(bus)),\r
545     mPath(std::move(path))\r
546   {\r
547   }\r
548 \r
549   explicit operator bool() const\r
550   {\r
551     return !mPath.empty();\r
552   }\r
553 \r
554   std::string ToString() const\r
555   {\r
556     return *this ? mBus + ":" + mPath : "::null";\r
557   }\r
558 \r
559   const std::string& GetBus() const;\r
560 \r
561   const std::string& GetPath() const\r
562   {\r
563     return mPath;\r
564   }\r
565 \r
566   bool operator==(const Address& a) const\r
567   {\r
568     return mBus == a.mBus && mPath == a.mPath;\r
569   }\r
570 \r
571   bool operator!=(const Address& a) const\r
572   {\r
573     return !(*this == a);\r
574   }\r
575 \r
576 private:\r
577   mutable std::string mBus, mPath;\r
578 };\r
579 \r
580 /**\r
581  * @brief Enumeration describing type of key event\r
582  * @see Adaptor::AccessibilityObserver::OnAccessibleKeyEvent\r
583  */\r
584 enum class KeyEventType\r
585 {\r
586   KEY_PRESSED,\r
587   KEY_RELEASED,\r
588 };\r
589 \r
590 /**\r
591  * @brief Enumeration with human readable values describing state of event\r
592  * @see Dali::Accessibility::Bridge::Emit\r
593  */\r
594 enum class Consumed\r
595 {\r
596   NO,\r
597   YES\r
598 };\r
599 \r
600 /**\r
601  * @brief Helper class representing two dimensional point with integer coordinates\r
602  */\r
603 struct DALI_ADAPTOR_API Point\r
604 {\r
605   int x = 0;\r
606   int y = 0;\r
607 \r
608   Point() = default;\r
609 \r
610   Point(int x, int y)\r
611   : x(x),\r
612     y(y)\r
613   {\r
614   }\r
615 \r
616   bool operator==(Point p) const\r
617   {\r
618     return x == p.x && y == p.y;\r
619   }\r
620   bool operator!=(Point p) const\r
621   {\r
622     return !(*this == p);\r
623   }\r
624 };\r
625 \r
626 /**\r
627 * @brief Helper class representing size of rectangle object with usage of two integer values\r
628 */\r
629 struct DALI_ADAPTOR_API Size\r
630 {\r
631   int width  = 0;\r
632   int height = 0;\r
633 \r
634   Size() = default;\r
635 \r
636   Size(int w, int h)\r
637   : width(w),\r
638     height(h)\r
639   {\r
640   }\r
641 \r
642   bool operator==(Size p) const\r
643   {\r
644     return width == p.width && height == p.height;\r
645   }\r
646 \r
647   bool operator!=(Size p) const\r
648   {\r
649     return !(*this == p);\r
650   }\r
651 };\r
652 \r
653 /**\r
654  * @brief Helper class used to store data related with Accessibility::Text interface\r
655  * @see Dali::Accessibility::Text::GetTextAtOffset\r
656  * @see Dali::Accessibility::Text::GetRangeOfSelection\r
657  */\r
658 struct DALI_ADAPTOR_API Range\r
659 {\r
660   int32_t     startOffset = 0;\r
661   int32_t     endOffset   = 0;\r
662   std::string content;\r
663 \r
664   Range() = default;\r
665 \r
666   Range(size_t start, size_t end)\r
667   : startOffset(start),\r
668     endOffset(end)\r
669   {\r
670   }\r
671 \r
672   Range(size_t start, size_t end, std::string content)\r
673   : startOffset(start),\r
674     endOffset(end),\r
675     content(content)\r
676   {\r
677   }\r
678 };\r
679 \r
680 /**\r
681  * @brief Structure containing all values needed to invoke Accessible::DoGesture\r
682  * type : numerated gesture type\r
683  * startPositionX, startPositionY : point where gesture begins\r
684  * endPositionX, endPositionY : point where gesture ends\r
685  * state : enumerated state of gesture\r
686  * eventTime : time when event occured\r
687  * @see Dali::Accessibility::Accessible::DoGesture\r
688  */\r
689 struct DALI_ADAPTOR_API GestureInfo\r
690 {\r
691   GestureInfo() = default;\r
692   GestureInfo(Gesture type, int32_t startPositionX, int32_t endPositionX, int32_t startPositionY, int32_t endPositionY, GestureState state, uint32_t eventTime)\r
693   : type(type),\r
694     startPointX(startPositionX),\r
695     endPointX(endPositionX),\r
696     startPointY(startPositionY),\r
697     endPointY(endPositionY),\r
698     state(state),\r
699     eventTime(eventTime)\r
700   {\r
701   }\r
702 \r
703   Gesture      type{};\r
704   int32_t      startPointX{};\r
705   int32_t      endPointX{};\r
706   int32_t      startPointY{};\r
707   int32_t      endPointY{};\r
708   GestureState state{};\r
709   uint32_t     eventTime{};\r
710 };\r
711 \r
712 /**\r
713  * @brief Class representing accessibility relations\r
714  * Class connecting one source object with multiple target objects with usage\r
715  * of specific relation type.\r
716  * @note std::string representing source and targets are string values of Accessibility::Address\r
717  * @see Dali::Accessibility::Accessible::Address\r
718  * @see Dali::Accessibility::Accessible::RelationType\r
719  */\r
720 struct DALI_ADAPTOR_API Relation\r
721 {\r
722   Relation(RelationType relationType, std::vector<Address> targets)\r
723   : relationType(relationType),\r
724     targets(targets)\r
725   {\r
726   }\r
727 \r
728   RelationType         relationType;\r
729   std::vector<Address> targets;\r
730 };\r
731 \r
732 } // namespace Accessibility\r
733 } // namespace Dali\r
734 \r
735 #endif // DALI_ATSPI_ACCESSIBILITY_H\r