[ATSPI] Blocking unwanted emission of "MoveOuted" signal
[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::IsAccessibleContainedAtPoint\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> data;\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 : data)\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 : data)\r
495       u = 0;\r
496     Set(t, args...);\r
497   }\r
498 \r
499   explicit BitSets(std::array<uint32_t, I> d)\r
500   {\r
501     for(auto i = 0u; i < I; ++i)\r
502     {\r
503       data[i] = d[i];\r
504     }\r
505   }\r
506 \r
507   explicit BitSets(std::array<int32_t, I> d)\r
508   {\r
509     for(auto i = 0u; i < I; ++i)\r
510     {\r
511       data[i] = static_cast<uint32_t>(d[i]);\r
512     }\r
513   }\r
514 \r
515   BitSets& operator=(const BitSets&) = default;\r
516   BitSets& operator=(BitSets&&) = default;\r
517 \r
518   struct reference\r
519   {\r
520     std::array<uint32_t, I>& data;\r
521     size_t                   pos;\r
522 \r
523     reference& operator=(reference r)\r
524     {\r
525       (*this) = static_cast<bool>(r);\r
526       return *this;\r
527     }\r
528 \r
529     reference& operator=(bool v)\r
530     {\r
531       if(v)\r
532       {\r
533         data[pos / 32] |= 1 << (pos & 31);\r
534       }\r
535       else\r
536       {\r
537         data[pos / 32] &= ~(1 << (pos & 31));\r
538       }\r
539       return *this;\r
540     }\r
541 \r
542     operator bool() const\r
543     {\r
544       auto i = static_cast<size_t>(pos);\r
545       return (data[i / 32] & (1 << (i & 31))) != 0;\r
546     }\r
547   };\r
548 \r
549   reference operator[](S index)\r
550   {\r
551     return {data, static_cast<size_t>(index)};\r
552   }\r
553 \r
554   bool operator[](S index) const\r
555   {\r
556     auto i = static_cast<size_t>(index);\r
557     return (data[i / 32] & (1 << (i & 31))) != 0;\r
558   }\r
559 \r
560   std::array<uint32_t, I> GetRawData() const\r
561   {\r
562     return data;\r
563   }\r
564 \r
565   BitSets operator|(BitSets b) const\r
566   {\r
567     BitSets r;\r
568     for(auto i = 0u; i < I; ++i)\r
569     {\r
570       r.data[i] = data[i] | b.data[i];\r
571     }\r
572     return r;\r
573   }\r
574 \r
575   BitSets operator^(BitSets b) const\r
576   {\r
577     BitSets r;\r
578     for(auto i = 0u; i < I; ++i)\r
579     {\r
580       r.data[i] = data[i] ^ b.data[i];\r
581     }\r
582     return r;\r
583   }\r
584 \r
585   BitSets operator&(BitSets b) const\r
586   {\r
587     BitSets r;\r
588     for(auto i = 0u; i < I; ++i)\r
589     {\r
590       r.data[i] = data[i] & b.data[i];\r
591     }\r
592     return r;\r
593   }\r
594 \r
595   bool operator==(BitSets b) const\r
596   {\r
597     for(auto i = 0u; i < I; ++i)\r
598     {\r
599       if(data[i] != b.data[i])\r
600       {\r
601         return false;\r
602       }\r
603     }\r
604     return true;\r
605   }\r
606 \r
607   bool operator!=(BitSets b) const\r
608   {\r
609     return !((*this) == b);\r
610   }\r
611 \r
612   explicit operator bool() const\r
613   {\r
614     for(auto& u : data)\r
615     {\r
616       if(u)\r
617       {\r
618         return true;\r
619       }\r
620     }\r
621     return false;\r
622   }\r
623 \r
624   size_t size() const\r
625   {\r
626     return I;\r
627   }\r
628 };\r
629 \r
630 using ReadingInfoTypes = BitSets<1, ReadingInfoType>;\r
631 using States           = BitSets<2, State>;\r
632 using Attributes       = std::unordered_map<std::string, std::string>;\r
633 \r
634 /**\r
635  * @brief Class representing unique object address on accessibility bus\r
636  * @see Dali::Accessibility::Accessible::GetAddress\r
637  */\r
638 class DALI_ADAPTOR_API Address\r
639 {\r
640 public:\r
641   Address() = default;\r
642 \r
643   Address(std::string bus, std::string path)\r
644   : mBus(std::move(bus)),\r
645     mPath(std::move(path))\r
646   {\r
647   }\r
648 \r
649   explicit operator bool() const\r
650   {\r
651     return !mPath.empty();\r
652   }\r
653 \r
654   std::string ToString() const\r
655   {\r
656     return *this ? mBus + ":" + mPath : "::null";\r
657   }\r
658 \r
659   const std::string& GetBus() const;\r
660 \r
661   const std::string& GetPath() const\r
662   {\r
663     return mPath;\r
664   }\r
665 \r
666   bool operator==(const Address& a) const\r
667   {\r
668     return mBus == a.mBus && mPath == a.mPath;\r
669   }\r
670 \r
671   bool operator!=(const Address& a) const\r
672   {\r
673     return !(*this == a);\r
674   }\r
675 \r
676 private:\r
677   mutable std::string mBus, mPath;\r
678 };\r
679 \r
680 /**\r
681  * @brief Enumeration describing type of key event\r
682  * @see Adaptor::AccessibilityObserver::OnAccessibleKeyEvent\r
683  */\r
684 enum class KeyEventType\r
685 {\r
686   KEY_PRESSED,\r
687   KEY_RELEASED,\r
688 };\r
689 \r
690 /**\r
691  * @brief Enumeration with human readable values describing state of event\r
692  * @see Dali::Accessibility::Bridge::Emit\r
693  */\r
694 enum class Consumed\r
695 {\r
696   NO,\r
697   YES\r
698 };\r
699 \r
700 /**\r
701  * @brief Helper class representing two dimensional point with integer coordinates\r
702  */\r
703 struct DALI_ADAPTOR_API Point\r
704 {\r
705   int x = 0;\r
706   int y = 0;\r
707 \r
708   Point() = default;\r
709 \r
710   Point(int x, int y)\r
711   : x(x),\r
712     y(y)\r
713   {\r
714   }\r
715 \r
716   bool operator==(Point p) const\r
717   {\r
718     return x == p.x && y == p.y;\r
719   }\r
720   bool operator!=(Point p) const\r
721   {\r
722     return !(*this == p);\r
723   }\r
724 };\r
725 \r
726 /**\r
727 * @brief Helper class representing size of rectangle object with usage of two integer values\r
728 */\r
729 struct DALI_ADAPTOR_API Size\r
730 {\r
731   int width  = 0;\r
732   int height = 0;\r
733 \r
734   Size() = default;\r
735 \r
736   Size(int w, int h)\r
737   : width(w),\r
738     height(h)\r
739   {\r
740   }\r
741 \r
742   bool operator==(Size p) const\r
743   {\r
744     return width == p.width && height == p.height;\r
745   }\r
746 \r
747   bool operator!=(Size p) const\r
748   {\r
749     return !(*this == p);\r
750   }\r
751 };\r
752 \r
753 /**\r
754  * @brief Helper class used to store data related with Accessibility::Text interface\r
755  * @see Dali::Accessibility::Text::GetTextAtOffset\r
756  * @see Dali::Accessibility::Text::GetRangeOfSelection\r
757  */\r
758 struct DALI_ADAPTOR_API Range\r
759 {\r
760   int32_t     startOffset = 0;\r
761   int32_t     endOffset   = 0;\r
762   std::string content;\r
763 \r
764   Range() = default;\r
765 \r
766   Range(size_t start, size_t end)\r
767   : startOffset(start),\r
768     endOffset(end)\r
769   {\r
770   }\r
771 \r
772   Range(size_t start, size_t end, std::string content)\r
773   : startOffset(start),\r
774     endOffset(end),\r
775     content(content)\r
776   {\r
777   }\r
778 };\r
779 \r
780 /**\r
781  * @brief Structure containing all values needed to invoke Accessible::DoGesture\r
782  * type : numerated gesture type\r
783  * xBeg, yBeg : point where gesture begins\r
784  * xEnd, yEnd : point where gesture ends\r
785  * state : enumerated state of gesture\r
786  * eventTime : time when event occured\r
787  * @see Dali::Accessibility::Accessible::DoGesture\r
788  */\r
789 struct DALI_ADAPTOR_API GestureInfo\r
790 {\r
791   GestureInfo() = default;\r
792   GestureInfo(Gesture type, int32_t xBeg, int32_t xEnd, int32_t yBeg, int32_t yEnd, GestureState state, uint32_t eventTime)\r
793   : type(type),\r
794     xBeg(xBeg),\r
795     xEnd(xEnd),\r
796     yBeg(yBeg),\r
797     yEnd(yEnd),\r
798     state(state),\r
799     eventTime(eventTime)\r
800   {\r
801   }\r
802 \r
803   Gesture      type{};\r
804   int32_t      xBeg{};\r
805   int32_t      xEnd{};\r
806   int32_t      yBeg{};\r
807   int32_t      yEnd{};\r
808   GestureState state{};\r
809   uint32_t     eventTime{};\r
810 };\r
811 \r
812 /**\r
813  * @brief Class representing accessibility relations\r
814  * Class connecting one source object with multiple target objects with usage\r
815  * of specific relation type.\r
816  * @note std::string representing source and targets are string values of Accessibility::Address\r
817  * @see Dali::Accessibility::Accessible::Address\r
818  * @see Dali::Accessibility::Accessible::RelationType\r
819  */\r
820 struct DALI_ADAPTOR_API Relation\r
821 {\r
822   Relation(RelationType relationType, std::vector<Address> targets)\r
823   : relationType(relationType),\r
824     targets(targets)\r
825   {\r
826   }\r
827 \r
828   RelationType         relationType;\r
829   std::vector<Address> targets;\r
830 };\r
831 \r
832 } // namespace Accessibility\r
833 } // namespace Dali\r
834 \r
835 #endif // DALI_ATSPI_ACCESSIBILITY_H\r