Update ATSPI code according to DALi coding rule
[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 \r
22 #include <string.h>\r
23 #include <array>\r
24 #include <atomic>\r
25 #include <bitset>\r
26 #include <cassert>\r
27 #include <exception>\r
28 #include <functional>\r
29 #include <list>\r
30 #include <map>\r
31 #include <memory>\r
32 #include <sstream>\r
33 #include <string>\r
34 #include <unordered_map>\r
35 #include <vector>\r
36 \r
37 // INTERNAL INCLUDES\r
38 #include <dali/public-api/dali-adaptor-common.h>\r
39 \r
40 namespace Dali\r
41 {\r
42 namespace Accessibility\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::IsAccessibleContainedAtPoint\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 };\r
429 \r
430 /**\r
431  * @brief Helper class for storing values treated as bit sets\r
432  * This class provides all bitset-like methods for bitset size larger, than long long int\r
433  * @see Dali::Accessibility::Accessible::GetStates\r
434  * @see Dali::Accessibility::Accessible::GetRoles\r
435  */\r
436 template<size_t I, typename S>\r
437 class BitSets\r
438 {\r
439   std::array<uint32_t, I> data;\r
440 \r
441   void Set()\r
442   {\r
443   }\r
444 \r
445   static constexpr bool Accepts()\r
446   {\r
447     return true;\r
448   }\r
449 \r
450   template<typename T>\r
451   static constexpr bool Accepts()\r
452   {\r
453     return std::is_enum<T>::value;\r
454   }\r
455 \r
456   template<typename T, typename T2, typename... ARGS>\r
457   static constexpr bool Accepts()\r
458   {\r
459     return std::is_enum<T>::value && Accepts<T2, ARGS...>();\r
460   }\r
461 \r
462   template<typename T, typename... ARGS>\r
463   void Set(T t, ARGS... args)\r
464   {\r
465     (*this)[t] = true;\r
466     Set(args...);\r
467   }\r
468 \r
469 public:\r
470   BitSets()\r
471   {\r
472     for(auto& u : data)\r
473     {\r
474       u = 0;\r
475     }\r
476   }\r
477   BitSets(const BitSets&) = default;\r
478   BitSets(BitSets&&)      = default;\r
479 \r
480   template<typename T, typename... ARGS, typename std::enable_if<Accepts<T, ARGS...>()>::type* = nullptr>\r
481   BitSets(T t, ARGS... args)\r
482   {\r
483     for(auto& u : data)\r
484       u = 0;\r
485     Set(t, args...);\r
486   }\r
487 \r
488   explicit BitSets(std::array<uint32_t, I> d)\r
489   {\r
490     for(auto i = 0u; i < I; ++i)\r
491     {\r
492       data[i] = d[i];\r
493     }\r
494   }\r
495 \r
496   explicit BitSets(std::array<int32_t, I> d)\r
497   {\r
498     for(auto i = 0u; i < I; ++i)\r
499     {\r
500       data[i] = static_cast<uint32_t>(d[i]);\r
501     }\r
502   }\r
503 \r
504   BitSets& operator=(const BitSets&) = default;\r
505   BitSets& operator=(BitSets&&) = default;\r
506 \r
507   struct reference\r
508   {\r
509     std::array<uint32_t, I>& data;\r
510     size_t                   pos;\r
511 \r
512     reference& operator=(reference r)\r
513     {\r
514       (*this) = static_cast<bool>(r);\r
515       return *this;\r
516     }\r
517 \r
518     reference& operator=(bool v)\r
519     {\r
520       if(v)\r
521       {\r
522         data[pos / 32] |= 1 << (pos & 31);\r
523       }\r
524       else\r
525       {\r
526         data[pos / 32] &= ~(1 << (pos & 31));\r
527       }\r
528       return *this;\r
529     }\r
530 \r
531     operator bool() const\r
532     {\r
533       auto i = static_cast<size_t>(pos);\r
534       return (data[i / 32] & (1 << (i & 31))) != 0;\r
535     }\r
536   };\r
537 \r
538   reference operator[](S index)\r
539   {\r
540     return {data, static_cast<size_t>(index)};\r
541   }\r
542 \r
543   bool operator[](S index) const\r
544   {\r
545     auto i = static_cast<size_t>(index);\r
546     return (data[i / 32] & (1 << (i & 31))) != 0;\r
547   }\r
548 \r
549   std::array<uint32_t, I> GetRawData() const\r
550   {\r
551     return data;\r
552   }\r
553 \r
554   BitSets operator|(BitSets b) const\r
555   {\r
556     BitSets r;\r
557     for(auto i = 0u; i < I; ++i)\r
558     {\r
559       r.data[i] = data[i] | b.data[i];\r
560     }\r
561     return r;\r
562   }\r
563 \r
564   BitSets operator^(BitSets b) const\r
565   {\r
566     BitSets r;\r
567     for(auto i = 0u; i < I; ++i)\r
568     {\r
569       r.data[i] = data[i] ^ b.data[i];\r
570     }\r
571     return r;\r
572   }\r
573 \r
574   BitSets operator&(BitSets b) const\r
575   {\r
576     BitSets r;\r
577     for(auto i = 0u; i < I; ++i)\r
578     {\r
579       r.data[i] = data[i] & b.data[i];\r
580     }\r
581     return r;\r
582   }\r
583 \r
584   bool operator==(BitSets b) const\r
585   {\r
586     for(auto i = 0u; i < I; ++i)\r
587     {\r
588       if(data[i] != b.data[i])\r
589       {\r
590         return false;\r
591       }\r
592     }\r
593     return true;\r
594   }\r
595 \r
596   bool operator!=(BitSets b) const\r
597   {\r
598     return !((*this) == b);\r
599   }\r
600 \r
601   explicit operator bool() const\r
602   {\r
603     for(auto& u : data)\r
604     {\r
605       if(u)\r
606       {\r
607         return true;\r
608       }\r
609     }\r
610     return false;\r
611   }\r
612 \r
613   size_t size() const\r
614   {\r
615     return I;\r
616   }\r
617 };\r
618 \r
619 using ReadingInfoTypes = BitSets<1, ReadingInfoType>;\r
620 using States           = BitSets<2, State>;\r
621 using Attributes       = std::unordered_map<std::string, std::string>;\r
622 \r
623 /**\r
624  * @brief Class representing unique object address on accessibility bus\r
625  * @see Dali::Accessibility::Accessible::GetAddress\r
626  */\r
627 class DALI_ADAPTOR_API Address\r
628 {\r
629 public:\r
630   Address() = default;\r
631 \r
632   Address(std::string bus, std::string path)\r
633   : mBus(std::move(bus)),\r
634     mPath(std::move(path))\r
635   {\r
636   }\r
637 \r
638   explicit operator bool() const\r
639   {\r
640     return !mPath.empty();\r
641   }\r
642 \r
643   std::string ToString() const\r
644   {\r
645     return *this ? mBus + ":" + mPath : "::null";\r
646   }\r
647 \r
648   const std::string& GetBus() const;\r
649 \r
650   const std::string& GetPath() const\r
651   {\r
652     return mPath;\r
653   }\r
654 \r
655   bool operator==(const Address& a) const\r
656   {\r
657     return mBus == a.mBus && mPath == a.mPath;\r
658   }\r
659 \r
660   bool operator!=(const Address& a) const\r
661   {\r
662     return !(*this == a);\r
663   }\r
664 \r
665 private:\r
666   mutable std::string mBus, mPath;\r
667 };\r
668 \r
669 /**\r
670  * @brief Enumeration describing type of key event\r
671  * @see Adaptor::AccessibilityObserver::OnAccessibleKeyEvent\r
672  */\r
673 enum class KeyEventType\r
674 {\r
675   KEY_PRESSED,\r
676   KEY_RELEASED,\r
677 };\r
678 \r
679 /**\r
680  * @brief Enumeration with human readable values describing state of event\r
681  * @see Dali::Accessibility::Bridge::Emit\r
682  */\r
683 enum class Consumed\r
684 {\r
685   NO,\r
686   YES\r
687 };\r
688 \r
689 /**\r
690  * @brief Helper class representing two dimensional point with integer coordinates\r
691  */\r
692 struct DALI_ADAPTOR_API Point\r
693 {\r
694   int x = 0;\r
695   int y = 0;\r
696 \r
697   Point() = default;\r
698 \r
699   Point(int x, int y)\r
700   : x(x),\r
701     y(y)\r
702   {\r
703   }\r
704 \r
705   bool operator==(Point p) const\r
706   {\r
707     return x == p.x && y == p.y;\r
708   }\r
709   bool operator!=(Point p) const\r
710   {\r
711     return !(*this == p);\r
712   }\r
713 };\r
714 \r
715 /**\r
716 * @brief Helper class representing size of rectangle object with usage of two integer values\r
717 */\r
718 struct DALI_ADAPTOR_API Size\r
719 {\r
720   int width  = 0;\r
721   int height = 0;\r
722 \r
723   Size() = default;\r
724 \r
725   Size(int w, int h)\r
726   : width(w),\r
727     height(h)\r
728   {\r
729   }\r
730 \r
731   bool operator==(Size p) const\r
732   {\r
733     return width == p.width && height == p.height;\r
734   }\r
735 \r
736   bool operator!=(Size p) const\r
737   {\r
738     return !(*this == p);\r
739   }\r
740 };\r
741 \r
742 /**\r
743  * @brief Helper class used to store data related with Accessibility::Text interface\r
744  * @see Dali::Accessibility::Text::GetTextAtOffset\r
745  * @see Dali::Accessibility::Text::GetRangeOfSelection\r
746  */\r
747 struct DALI_ADAPTOR_API Range\r
748 {\r
749   int32_t     startOffset = 0;\r
750   int32_t     endOffset   = 0;\r
751   std::string content;\r
752 \r
753   Range() = default;\r
754 \r
755   Range(size_t start, size_t end)\r
756   : startOffset(start),\r
757     endOffset(end)\r
758   {\r
759   }\r
760 \r
761   Range(size_t start, size_t end, std::string content)\r
762   : startOffset(start),\r
763     endOffset(end),\r
764     content(content)\r
765   {\r
766   }\r
767 };\r
768 \r
769 /**\r
770  * @brief Structure containing all values needed to invoke Accessible::DoGesture\r
771  * type : numerated gesture type\r
772  * xBeg, yBeg : point where gesture begins\r
773  * xEnd, yEnd : point where gesture ends\r
774  * state : enumerated state of gesture\r
775  * eventTime : time when event occured\r
776  * @see Dali::Accessibility::Accessible::DoGesture\r
777  */\r
778 struct DALI_ADAPTOR_API GestureInfo\r
779 {\r
780   GestureInfo() = default;\r
781   GestureInfo(Gesture type, int32_t xBeg, int32_t xEnd, int32_t yBeg, int32_t yEnd, GestureState state, uint32_t eventTime)\r
782   : type(type),\r
783     xBeg(xBeg),\r
784     xEnd(xEnd),\r
785     yBeg(yBeg),\r
786     yEnd(yEnd),\r
787     state(state),\r
788     eventTime(eventTime)\r
789   {\r
790   }\r
791 \r
792   Gesture      type{};\r
793   int32_t      xBeg{};\r
794   int32_t      xEnd{};\r
795   int32_t      yBeg{};\r
796   int32_t      yEnd{};\r
797   GestureState state{};\r
798   uint32_t     eventTime{};\r
799 };\r
800 \r
801 /**\r
802  * @brief Class representing accessibility relations\r
803  * Class connecting one source object with multiple target objects with usage\r
804  * of specific relation type.\r
805  * @note std::string representing source and targets are string values of Accessibility::Address\r
806  * @see Dali::Accessibility::Accessible::Address\r
807  * @see Dali::Accessibility::Accessible::RelationType\r
808  */\r
809 struct DALI_ADAPTOR_API Relation\r
810 {\r
811   Relation(RelationType relationType, std::vector<Address> targets)\r
812   : relationType(relationType),\r
813     targets(targets)\r
814   {\r
815   }\r
816 \r
817   RelationType         relationType;\r
818   std::vector<Address> targets;\r
819 };\r
820 \r
821 } // namespace Accessibility\r
822 } // namespace Dali\r
823 \r
824 #endif // DALI_ATSPI_ACCESSIBILITY_H\r