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