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