3196176e4aea7ec94497b79d94bd74407ebf9e44
[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 signal that occurs when object moves out of screen.\r
46  */\r
47 enum class MovedOutOfScreenType\r
48 {\r
49   NONE,\r
50   TOP_LEFT,     ///< Object moves out of top(or left) side of screen\r
51   BOTTOM_RIGHT ///< Object moves out of bottom(or right) side of screen\r
52 };\r
53 \r
54 /**\r
55  * @brief Enumeration describing a relation between accessible objects\r
56  * 1 to 0..N relation model is supported. By default relation is not symmetrical.\r
57  * Symmetry must be explicitly maintained.\r
58  */\r
59 enum class RelationType : uint32_t\r
60 {\r
61   NULL_OF,          ///< Null Relation.\r
62   LABEL_FOR,        ///< Label For.\r
63   LABELLED_BY,      ///< Labelled By.\r
64   CONTROLLER_FOR,   ///< Controller For.\r
65   CONTROLLED_BY,    ///< Controlled By.\r
66   MEMBER_OF,        ///< Member Of.\r
67   TOOLTIP_FOR,      ///< ToolTip For.\r
68   NODE_CHILD_OF,    ///< Node Child Of.\r
69   NODE_PARENT_OF,   ///< Node Parent Of.\r
70   EXTENDED,         ///< Extended.\r
71   FLOWS_TO,         ///< Flows To.\r
72   FLOWS_FROM,       ///< Flows From.\r
73   SUBWINDOW_OF,     ///< Sub Window Of.\r
74   EMBEDS,           ///< Embeds.\r
75   EMBEDDED_BY,      ///< Embedded By.\r
76   POPUP_FOR,        ///< Popup For\r
77   PARENT_WINDOW_OF, ///< Parent Window Of.\r
78   DESCRIPTION_FOR,  ///< Description For.\r
79   DESCRIBED_BY,     ///< Described By.\r
80   DETAILS,          ///< Details.\r
81   DETAILS_FOR,      ///< Details For.\r
82   ERROR_MESSAGE,    ///< Error Message.\r
83   ERROR_FOR,        ///< Error For.\r
84   MAX_COUNT\r
85 };\r
86 \r
87 /**\r
88  * @brief Enumeration describing if coordinates are relative to screen or window\r
89  * @see Accessibility::Component::GetExtents\r
90  * @see Accessibility::Component::IsAccessibleContainedAtPoint\r
91  */\r
92 enum class CoordinateType\r
93 {\r
94   SCREEN, ///< Screen.\r
95   WINDOW  ///< Window.\r
96 };\r
97 \r
98 /**\r
99  * @brief Enumeration indicating relative stacking order\r
100  * ComponentLayer allows to describe visibility of all parts of UI\r
101  * basing on the concrete stacking order\r
102  * @see Accessibility::Component::GetLayer\r
103  * @note currently only ComponentLayer::Window is supported\r
104  */\r
105 enum class ComponentLayer\r
106 {\r
107   INVALID,    ///< Invalid.\r
108   BACKGROUND, ///< Background.\r
109   CANVAS,     ///< Canvas.\r
110   WIDGET,     ///< Widget.\r
111   MDI,        ///< MDI.\r
112   POPUP,      ///< Popup.\r
113   OVERLAY,    ///< Overlay.\r
114   WINDOW,     ///< Window.\r
115   MAX_COUNT\r
116 };\r
117 \r
118 /**\r
119  * @brief Enumeration describing role of the Accessibility object\r
120  * Object can be described by only one role.\r
121  * @see Accessibility::Accessible::GetRole\r
122  */\r
123 enum class Role : uint32_t\r
124 {\r
125   INVALID,\r
126   ACCELERATOR_LABEL,\r
127   ALERT,\r
128   ANIMATION,\r
129   ARROW,\r
130   CALENDAR,\r
131   CANVAS,\r
132   CHECK_BOX,\r
133   CHECK_MENU_ITEM,\r
134   COLOR_CHOOSER,\r
135   COLUMN_HEADER,\r
136   COMBO_BOX,\r
137   DATE_EDITOR,\r
138   DESKTOP_ICON,\r
139   DESKTOP_FRAME,\r
140   DIAL,\r
141   DIALOG,\r
142   DIRECTORY_PANE,\r
143   DRAWING_AREA,\r
144   FILE_CHOOSER,\r
145   FILLER,\r
146   FOCUS_TRAVERSABLE,\r
147   FONT_CHOOSER,\r
148   FRAME,\r
149   GLASS_PANE,\r
150   HTML_CONTAINER,\r
151   ICON,\r
152   IMAGE,\r
153   INTERNAL_FRAME,\r
154   LABEL,\r
155   LAYERED_PANE,\r
156   LIST,\r
157   LIST_ITEM,\r
158   MENU,\r
159   MENU_BAR,\r
160   MENU_ITEM,\r
161   OPTION_PANE,\r
162   PAGE_TAB,\r
163   PAGE_TAB_LIST,\r
164   PANEL,\r
165   PASSWORD_TEXT,\r
166   POPUP_MENU,\r
167   PROGRESS_BAR,\r
168   PUSH_BUTTON,\r
169   RADIO_BUTTON,\r
170   RADIO_MENU_ITEM,\r
171   ROOT_PANE,\r
172   ROW_HEADER,\r
173   SCROLL_BAR,\r
174   SCROLL_PANE,\r
175   SEPARATOR,\r
176   SLIDER,\r
177   SPIN_BUTTON,\r
178   SPLIT_PANE,\r
179   STATUS_BAR,\r
180   TABLE,\r
181   TABLE_CELL,\r
182   TABLE_COLUMN_HEADER,\r
183   TABLE_ROW_HEADER,\r
184   TEAROFF_MENU_ITEM,\r
185   TERMINAL,\r
186   TEXT,\r
187   TOGGLE_BUTTON,\r
188   TOOL_BAR,\r
189   TOOL_TIP,\r
190   TREE,\r
191   TREE_TABLE,\r
192   UNKNOWN,\r
193   VIEWPORT,\r
194   WINDOW,\r
195   EXTENDED,\r
196   HEADER,\r
197   FOOTER,\r
198   PARAGRAPH,\r
199   RULER,\r
200   APPLICATION,\r
201   AUTOCOMPLETE,\r
202   EDITBAR,\r
203   EMBEDDED,\r
204   ENTRY,\r
205   CHART,\r
206   CAPTION,\r
207   DOCUMENT_FRAME,\r
208   HEADING,\r
209   PAGE,\r
210   SECTION,\r
211   REDUNDANT_OBJECT,\r
212   FORM,\r
213   LINK,\r
214   INPUT_METHOD_WINDOW,\r
215   TABLE_ROW,\r
216   TREE_ITEM,\r
217   DOCUMENT_SPREADSHEET,\r
218   DOCUMENT_PRESENTATION,\r
219   DOCUMENT_TEXT,\r
220   DOCUMENT_WEB,\r
221   DOCUMENT_EMAIL,\r
222   COMMENT,\r
223   LIST_BOX,\r
224   GROUPING,\r
225   IMAGE_MAP,\r
226   NOTIFICATION,\r
227   INFO_BAR,\r
228   LEVEL_BAR,\r
229   TITLE_BAR,\r
230   BLOCK_QUOTE,\r
231   AUDIO,\r
232   VIDEO,\r
233   DEFINITION,\r
234   ARTICLE,\r
235   LANDMARK,\r
236   LOG,\r
237   MARQUEE,\r
238   MATH,\r
239   RATING,\r
240   TIMER,\r
241   STATIC,\r
242   MATH_FRACTION,\r
243   MATH_ROOT,\r
244   SUBSCRIPT,\r
245   SUPERSCRIPT,\r
246   MAX_COUNT\r
247 };\r
248 \r
249 /**\r
250  * @brief Enumeration describing states of the Accessibility object\r
251  * Object can be in many states at the same time.\r
252  * @see Accessibility::Accessible::GetStates\r
253  */\r
254 enum class State : uint32_t\r
255 {\r
256   INVALID,\r
257   ACTIVE,\r
258   ARMED,\r
259   BUSY,\r
260   CHECKED,\r
261   COLLAPSED,\r
262   DEFUNCT,\r
263   EDITABLE,\r
264   ENABLED,\r
265   EXPANDABLE,\r
266   EXPANDED,\r
267   FOCUSABLE,\r
268   FOCUSED,\r
269   HAS_TOOLTIP,\r
270   HORIZONTAL,\r
271   ICONIFIED,\r
272   MODAL,\r
273   MULTI_LINE,\r
274   MULTI_SELECTABLE,\r
275   OPAQUE,\r
276   PRESSED,\r
277   RESIZEABLE,\r
278   SELECTABLE,\r
279   SELECTED,\r
280   SENSITIVE,\r
281   SHOWING,\r
282   SINGLE_LINE,\r
283   STALE,\r
284   TRANSIENT,\r
285   VERTICAL,\r
286   VISIBLE,\r
287   MANAGES_DESCENDANTS,\r
288   INDETERMINATE,\r
289   REQUIRED,\r
290   TRUNCATED,\r
291   ANIMATED,\r
292   INVALID_ENTRY,\r
293   SUPPORTS_AUTOCOMPLETION,\r
294   SELECTABLE_TEXT,\r
295   IS_DEFAULT,\r
296   VISITED,\r
297   CHECKABLE,\r
298   HAS_POPUP,\r
299   READ_ONLY,\r
300   HIGHLIGHTED,\r
301   HIGHLIGHTABLE,\r
302   MAX_COUNT\r
303 };\r
304 \r
305 /**\r
306  * @brief Enumeration describing change of text object\r
307  */\r
308 enum class TextChangedState : uint32_t\r
309 {\r
310   INSERTED,\r
311   DELETED,\r
312   MAX_COUNT\r
313 };\r
314 \r
315 /**\r
316  * @brief Enumeration describing change of object property\r
317  */\r
318 enum class ObjectPropertyChangeEvent\r
319 {\r
320   NAME,\r
321   DESCRIPTION,\r
322   VALUE,\r
323   ROLE,\r
324   PARENT,\r
325 };\r
326 \r
327 /**\r
328  * @brief Enumeration describing change of window object\r
329  * @see Accessibility::Accessible::Emit\r
330  */\r
331 enum class WindowEvent\r
332 {\r
333   PROPERTY_CHANGE,\r
334   MINIMIZE,\r
335   MAXIMIZE,\r
336   RESTORE,\r
337   CLOSE,\r
338   CREATE,\r
339   REPARENT,\r
340   DESKTOP_CREATE,\r
341   DESKTOP_DESTROY,\r
342   DESTROY,\r
343   ACTIVATE,\r
344   DEACTIVATE,\r
345   RAISE,\r
346   LOWER,\r
347   MOVE,\r
348   RESIZE,\r
349   SHADE,\r
350   UU_SHADE,\r
351   RESTYLE,\r
352 };\r
353 \r
354 /**\r
355  * @brief Enumeration used to acquire bounded text from accessible object having textual content.\r
356  * @see Accessibility::Text::GetTextAtOffset\r
357  * @note Currently only TextBoundary::Character is supported\r
358  */\r
359 enum class TextBoundary : uint32_t\r
360 {\r
361   CHARACTER, ///> Only one character is acquired.\r
362   WORD,      ///> Not supported.\r
363   SENTENCE,  ///> Not supported.\r
364   LINE,      ///> Not supported.\r
365   PARAGRAPH, ///> Not supported.\r
366   MAX_COUNT\r
367 };\r
368 \r
369 /**\r
370  * @brief Enumeration describing type of gesture\r
371  * @see Accessibility::Accessible::DoGesture\r
372  */\r
373 enum class Gesture : int32_t\r
374 {\r
375   ONE_FINGER_HOVER,\r
376   TWO_FINGER_HOVER,\r
377   THREE_FINGER_HOVER,\r
378   ONE_FINGER_FLICK_LEFT,\r
379   ONE_FINGER_FLICK_RIGHT,\r
380   ONE_FINGER_FLICK_UP,\r
381   ONE_FINGER_FLICK_DOWN,\r
382   TWO_FINGERS_FLICK_LEFT,\r
383   TWO_FINGERS_FLICK_RIGHT,\r
384   TWO_FINGERS_FLICK_UP,\r
385   TWO_FINGERS_FLICK_DOWN,\r
386   THREE_FINGERS_FLICK_LEFT,\r
387   THREE_FINGERS_FLICK_RIGHT,\r
388   THREE_FINGERS_FLICK_UP,\r
389   THREE_FINGERS_FLICK_DOWN,\r
390   ONE_FINGER_SINGLE_TAP,\r
391   ONE_FINGER_DOUBLE_TAP,\r
392   ONE_FINGER_TRIPLE_TAP,\r
393   TWO_FINGERS_SINGLE_TAP,\r
394   TWO_FINGERS_DOUBLE_TAP,\r
395   TWO_FINGERS_TRIPLE_TAP,\r
396   THREE_FINGERS_SINGLE_TAP,\r
397   THREE_FINGERS_DOUBLE_TAP,\r
398   THREE_FINGERS_TRIPLE_TAP,\r
399   ONE_FINGER_FLICK_LEFT_RETURN,\r
400   ONE_FINGER_FLICK_RIGHT_RETURN,\r
401   ONE_FINGER_FLICK_UP_RETURN,\r
402   ONE_FINGER_FLICK_DOWN_RETURN,\r
403   TWO_FINGERS_FLICK_LEFT_RETURN,\r
404   TWO_FINGERS_FLICK_RIGHT_RETURN,\r
405   TWO_FINGERS_FLICK_UP_RETURN,\r
406   TWO_FINGERS_FLICK_DOWN_RETURN,\r
407   THREE_FINGERS_FLICK_LEFT_RETURN,\r
408   THREE_FINGERS_FLICK_RIGHT_RETURN,\r
409   THREE_FINGERS_FLICK_UP_RETURN,\r
410   THREE_FINGERS_FLICK_DOWN_RETURN,\r
411   ONE_FINGER_DOUBLE_TAP_N_HOLD,\r
412   TWO_FINGERS_DOUBLE_TAP_N_HOLD,\r
413   THREE_FINGERS_DOUBLE_TAP_N_HOLD,\r
414   MAX_COUNT\r
415 };\r
416 \r
417 /**\r
418  * @brief Enumeration indicating current state of gesture\r
419  * @see Dali::Accessibility::GestureInfo\r
420  */\r
421 enum class GestureState : int32_t\r
422 {\r
423   BEGIN,\r
424   ONGOING,\r
425   ENDED,\r
426   ABORTED\r
427 };\r
428 \r
429 /**\r
430  * @brief Enumeration of ReadingInfoType\r
431  */\r
432 enum class ReadingInfoType\r
433 {\r
434   NAME,\r
435   ROLE,\r
436   DESCRIPTION,\r
437   STATE\r
438 };\r
439 \r
440 /**\r
441  * @brief Helper class for storing values treated as bit sets\r
442  * This class provides all bitset-like methods for bitset size larger, than long long int\r
443  * @see Dali::Accessibility::Accessible::GetStates\r
444  * @see Dali::Accessibility::Accessible::GetRoles\r
445  */\r
446 template<size_t I, typename S>\r
447 class BitSets\r
448 {\r
449   std::array<uint32_t, I> data;\r
450 \r
451   void Set()\r
452   {\r
453   }\r
454 \r
455   static constexpr bool Accepts()\r
456   {\r
457     return true;\r
458   }\r
459 \r
460   template<typename T>\r
461   static constexpr bool Accepts()\r
462   {\r
463     return std::is_enum<T>::value;\r
464   }\r
465 \r
466   template<typename T, typename T2, typename... ARGS>\r
467   static constexpr bool Accepts()\r
468   {\r
469     return std::is_enum<T>::value && Accepts<T2, ARGS...>();\r
470   }\r
471 \r
472   template<typename T, typename... ARGS>\r
473   void Set(T t, ARGS... args)\r
474   {\r
475     (*this)[t] = true;\r
476     Set(args...);\r
477   }\r
478 \r
479 public:\r
480   BitSets()\r
481   {\r
482     for(auto& u : data)\r
483     {\r
484       u = 0;\r
485     }\r
486   }\r
487   BitSets(const BitSets&) = default;\r
488   BitSets(BitSets&&)      = default;\r
489 \r
490   template<typename T, typename... ARGS, typename std::enable_if<Accepts<T, ARGS...>()>::type* = nullptr>\r
491   BitSets(T t, ARGS... args)\r
492   {\r
493     for(auto& u : data)\r
494       u = 0;\r
495     Set(t, args...);\r
496   }\r
497 \r
498   explicit BitSets(std::array<uint32_t, I> d)\r
499   {\r
500     for(auto i = 0u; i < I; ++i)\r
501     {\r
502       data[i] = d[i];\r
503     }\r
504   }\r
505 \r
506   explicit BitSets(std::array<int32_t, I> d)\r
507   {\r
508     for(auto i = 0u; i < I; ++i)\r
509     {\r
510       data[i] = static_cast<uint32_t>(d[i]);\r
511     }\r
512   }\r
513 \r
514   BitSets& operator=(const BitSets&) = default;\r
515   BitSets& operator=(BitSets&&) = default;\r
516 \r
517   struct reference\r
518   {\r
519     std::array<uint32_t, I>& data;\r
520     size_t                   pos;\r
521 \r
522     reference& operator=(reference r)\r
523     {\r
524       (*this) = static_cast<bool>(r);\r
525       return *this;\r
526     }\r
527 \r
528     reference& operator=(bool v)\r
529     {\r
530       if(v)\r
531       {\r
532         data[pos / 32] |= 1 << (pos & 31);\r
533       }\r
534       else\r
535       {\r
536         data[pos / 32] &= ~(1 << (pos & 31));\r
537       }\r
538       return *this;\r
539     }\r
540 \r
541     operator bool() const\r
542     {\r
543       auto i = static_cast<size_t>(pos);\r
544       return (data[i / 32] & (1 << (i & 31))) != 0;\r
545     }\r
546   };\r
547 \r
548   reference operator[](S index)\r
549   {\r
550     return {data, static_cast<size_t>(index)};\r
551   }\r
552 \r
553   bool operator[](S index) const\r
554   {\r
555     auto i = static_cast<size_t>(index);\r
556     return (data[i / 32] & (1 << (i & 31))) != 0;\r
557   }\r
558 \r
559   std::array<uint32_t, I> GetRawData() const\r
560   {\r
561     return data;\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   BitSets operator&(BitSets b) const\r
585   {\r
586     BitSets r;\r
587     for(auto i = 0u; i < I; ++i)\r
588     {\r
589       r.data[i] = data[i] & b.data[i];\r
590     }\r
591     return r;\r
592   }\r
593 \r
594   bool operator==(BitSets b) const\r
595   {\r
596     for(auto i = 0u; i < I; ++i)\r
597     {\r
598       if(data[i] != b.data[i])\r
599       {\r
600         return false;\r
601       }\r
602     }\r
603     return true;\r
604   }\r
605 \r
606   bool operator!=(BitSets b) const\r
607   {\r
608     return !((*this) == b);\r
609   }\r
610 \r
611   explicit operator bool() const\r
612   {\r
613     for(auto& u : data)\r
614     {\r
615       if(u)\r
616       {\r
617         return true;\r
618       }\r
619     }\r
620     return false;\r
621   }\r
622 \r
623   size_t size() const\r
624   {\r
625     return I;\r
626   }\r
627 };\r
628 \r
629 using ReadingInfoTypes = BitSets<1, ReadingInfoType>;\r
630 using States           = BitSets<2, State>;\r
631 using Attributes       = std::unordered_map<std::string, std::string>;\r
632 \r
633 /**\r
634  * @brief Class representing unique object address on accessibility bus\r
635  * @see Dali::Accessibility::Accessible::GetAddress\r
636  */\r
637 class DALI_ADAPTOR_API Address\r
638 {\r
639 public:\r
640   Address() = default;\r
641 \r
642   Address(std::string bus, std::string path)\r
643   : mBus(std::move(bus)),\r
644     mPath(std::move(path))\r
645   {\r
646   }\r
647 \r
648   explicit operator bool() const\r
649   {\r
650     return !mPath.empty();\r
651   }\r
652 \r
653   std::string ToString() const\r
654   {\r
655     return *this ? mBus + ":" + mPath : "::null";\r
656   }\r
657 \r
658   const std::string& GetBus() const;\r
659 \r
660   const std::string& GetPath() const\r
661   {\r
662     return mPath;\r
663   }\r
664 \r
665   bool operator==(const Address& a) const\r
666   {\r
667     return mBus == a.mBus && mPath == a.mPath;\r
668   }\r
669 \r
670   bool operator!=(const Address& a) const\r
671   {\r
672     return !(*this == a);\r
673   }\r
674 \r
675 private:\r
676   mutable std::string mBus, mPath;\r
677 };\r
678 \r
679 /**\r
680  * @brief Enumeration describing type of key event\r
681  * @see Adaptor::AccessibilityObserver::OnAccessibleKeyEvent\r
682  */\r
683 enum class KeyEventType\r
684 {\r
685   KEY_PRESSED,\r
686   KEY_RELEASED,\r
687 };\r
688 \r
689 /**\r
690  * @brief Enumeration with human readable values describing state of event\r
691  * @see Dali::Accessibility::Bridge::Emit\r
692  */\r
693 enum class Consumed\r
694 {\r
695   NO,\r
696   YES\r
697 };\r
698 \r
699 /**\r
700  * @brief Helper class representing two dimensional point with integer coordinates\r
701  */\r
702 struct DALI_ADAPTOR_API Point\r
703 {\r
704   int x = 0;\r
705   int y = 0;\r
706 \r
707   Point() = default;\r
708 \r
709   Point(int x, int y)\r
710   : x(x),\r
711     y(y)\r
712   {\r
713   }\r
714 \r
715   bool operator==(Point p) const\r
716   {\r
717     return x == p.x && y == p.y;\r
718   }\r
719   bool operator!=(Point p) const\r
720   {\r
721     return !(*this == p);\r
722   }\r
723 };\r
724 \r
725 /**\r
726 * @brief Helper class representing size of rectangle object with usage of two integer values\r
727 */\r
728 struct DALI_ADAPTOR_API Size\r
729 {\r
730   int width  = 0;\r
731   int height = 0;\r
732 \r
733   Size() = default;\r
734 \r
735   Size(int w, int h)\r
736   : width(w),\r
737     height(h)\r
738   {\r
739   }\r
740 \r
741   bool operator==(Size p) const\r
742   {\r
743     return width == p.width && height == p.height;\r
744   }\r
745 \r
746   bool operator!=(Size p) const\r
747   {\r
748     return !(*this == p);\r
749   }\r
750 };\r
751 \r
752 /**\r
753  * @brief Helper class used to store data related with Accessibility::Text interface\r
754  * @see Dali::Accessibility::Text::GetTextAtOffset\r
755  * @see Dali::Accessibility::Text::GetRangeOfSelection\r
756  */\r
757 struct DALI_ADAPTOR_API Range\r
758 {\r
759   int32_t     startOffset = 0;\r
760   int32_t     endOffset   = 0;\r
761   std::string content;\r
762 \r
763   Range() = default;\r
764 \r
765   Range(size_t start, size_t end)\r
766   : startOffset(start),\r
767     endOffset(end)\r
768   {\r
769   }\r
770 \r
771   Range(size_t start, size_t end, std::string content)\r
772   : startOffset(start),\r
773     endOffset(end),\r
774     content(content)\r
775   {\r
776   }\r
777 };\r
778 \r
779 /**\r
780  * @brief Structure containing all values needed to invoke Accessible::DoGesture\r
781  * type : numerated gesture type\r
782  * xBeg, yBeg : point where gesture begins\r
783  * xEnd, yEnd : point where gesture ends\r
784  * state : enumerated state of gesture\r
785  * eventTime : time when event occured\r
786  * @see Dali::Accessibility::Accessible::DoGesture\r
787  */\r
788 struct DALI_ADAPTOR_API GestureInfo\r
789 {\r
790   GestureInfo() = default;\r
791   GestureInfo(Gesture type, int32_t xBeg, int32_t xEnd, int32_t yBeg, int32_t yEnd, GestureState state, uint32_t eventTime)\r
792   : type(type),\r
793     xBeg(xBeg),\r
794     xEnd(xEnd),\r
795     yBeg(yBeg),\r
796     yEnd(yEnd),\r
797     state(state),\r
798     eventTime(eventTime)\r
799   {\r
800   }\r
801 \r
802   Gesture      type{};\r
803   int32_t      xBeg{};\r
804   int32_t      xEnd{};\r
805   int32_t      yBeg{};\r
806   int32_t      yEnd{};\r
807   GestureState state{};\r
808   uint32_t     eventTime{};\r
809 };\r
810 \r
811 /**\r
812  * @brief Class representing accessibility relations\r
813  * Class connecting one source object with multiple target objects with usage\r
814  * of specific relation type.\r
815  * @note std::string representing source and targets are string values of Accessibility::Address\r
816  * @see Dali::Accessibility::Accessible::Address\r
817  * @see Dali::Accessibility::Accessible::RelationType\r
818  */\r
819 struct DALI_ADAPTOR_API Relation\r
820 {\r
821   Relation(RelationType relationType, std::vector<Address> targets)\r
822   : relationType(relationType),\r
823     targets(targets)\r
824   {\r
825   }\r
826 \r
827   RelationType         relationType;\r
828   std::vector<Address> targets;\r
829 };\r
830 \r
831 } // namespace Accessibility\r
832 } // namespace Dali\r
833 \r
834 #endif // DALI_ATSPI_ACCESSIBILITY_H\r