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