2 * Copyright (c) 2020 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
20 #include <dali/devel-api/adaptor-framework/accessibility.h>
21 #include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
24 #include "control-devel-wrap.h"
26 using namespace Dali::Toolkit::DevelControl;
33 SWIGEXPORT int SWIGSTDCALL CSharp_Dali_View_Property_DISPATCH_KEY_EVENTS_get() {
34 return (int)Dali::Toolkit::DevelControl::Property::DISPATCH_KEY_EVENTS;
38 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityActivateSignal(void *arg1) {
39 Dali::Toolkit::DevelControl::AccessibilityActivateSignalType *result = nullptr;
40 GUARD_ON_NULL_RET0(arg1);
42 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
43 result = &(AccessibilityActivateSignal(*control));
48 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityReadingSkippedSignal(void* arg1) {
49 Dali::Toolkit::DevelControl::AccessibilityReadingSkippedSignalType *result = nullptr;
50 GUARD_ON_NULL_RET0(arg1);
52 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
53 result = &(AccessibilityReadingSkippedSignal(*control));
58 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityReadingPausedSignal(void *arg1) {
59 Dali::Toolkit::DevelControl::AccessibilityReadingPausedSignalType *result = nullptr;
60 GUARD_ON_NULL_RET0(arg1);
62 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
63 result = &(AccessibilityReadingPausedSignal(*control));
68 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityReadingResumedSignal(void *arg1) {
69 Dali::Toolkit::DevelControl::AccessibilityReadingResumedSignalType *result = nullptr;
70 GUARD_ON_NULL_RET0(arg1);
72 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
73 result = &(AccessibilityReadingResumedSignal(*control));
78 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityReadingCancelledSignal(void *arg1) {
79 Dali::Toolkit::DevelControl::AccessibilityReadingCancelledSignalType *result = nullptr;
80 GUARD_ON_NULL_RET0(arg1);
82 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
83 result = &(AccessibilityReadingCancelledSignal(*control));
88 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityReadingStoppedSignal(void *arg1) {
89 Dali::Toolkit::DevelControl::AccessibilityReadingStoppedSignalType *result = nullptr;
90 GUARD_ON_NULL_RET0(arg1);
92 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
93 result = &(AccessibilityReadingStoppedSignal(*control));
98 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityGetNameSignal(void *arg1) {
99 Dali::Toolkit::DevelControl::AccessibilityGetNameSignalType *result = nullptr;
100 GUARD_ON_NULL_RET0(arg1);
102 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
103 result = &(AccessibilityGetNameSignal(*control));
105 return (void*)result;
108 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityGetDescriptionSignal(void *arg1) {
109 Dali::Toolkit::DevelControl::AccessibilityGetDescriptionSignalType *result = nullptr;
110 GUARD_ON_NULL_RET0(arg1);
112 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
113 result = &(AccessibilityGetDescriptionSignal(*control));
115 return (void*)result;
118 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AccessibilityDoGestureSignal(void *arg1) {
119 Dali::Toolkit::DevelControl::AccessibilityDoGestureSignalType *result = nullptr;
120 GUARD_ON_NULL_RET0(arg1);
122 Dali::Toolkit::Control* control = (Dali::Toolkit::Control*) arg1;
123 result = &(AccessibilityDoGestureSignal(*control));
125 return (void*)result;
128 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AppendAccessibilityRelation(void *arg1, void *arg2, int arg3) {
129 GUARD_ON_NULL_RET(arg1);
130 GUARD_ON_NULL_RET(arg2);
132 auto *control = (Dali::Toolkit::Control*)arg1;
133 auto *destination = (Dali::Actor*)arg2;
134 auto relation = (Dali::Accessibility::RelationType)arg3;
135 AppendAccessibilityRelation(*control, *destination, relation);
139 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_RemoveAccessibilityRelation(void *arg1, void *arg2, int arg3) {
140 GUARD_ON_NULL_RET(arg1);
141 GUARD_ON_NULL_RET(arg2);
143 auto *control = (Dali::Toolkit::Control*)arg1;
144 auto *destination = (Dali::Actor*)arg2;
145 auto relation = (Dali::Accessibility::RelationType)arg3;
146 RemoveAccessibilityRelation(*control, *destination, relation);
150 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_GetAccessibilityRelations(void* arg1_control, void (*arg2_callback)(int, void*, void*), void* arg3_userData) {
151 using namespace Dali::Accessibility;
153 GUARD_ON_NULL_RET(arg1_control);
154 GUARD_ON_NULL_RET(arg2_callback);
157 auto* control = static_cast<Dali::Toolkit::Control*>(arg1_control);
158 std::vector<Relation> relations = GetAccessibilityRelations(*control);
160 for(Relation& relation : relations) {
161 for(Accessible* target : relation.mTargets) {
162 // NUI is unaware of Accessible objects, so we only report those convertible to Control.
163 // Note that it is currently impossible to make a relation with anything other than Control (View)
164 // using NUI API, so there should not be any loss of information for typical NUI applications.
165 auto targetControl = Dali::Toolkit::Control::DownCast(target->GetInternalActor());
168 arg2_callback(static_cast<int>(relation.mRelationType), static_cast<void*>(new Dali::Actor(targetControl)), arg3_userData);
175 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_ClearAccessibilityRelations(void *arg1) {
176 GUARD_ON_NULL_RET(arg1);
178 auto *control = (Dali::Toolkit::Control*)arg1;
179 ClearAccessibilityRelations(*control);
183 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_AppendAccessibilityAttribute(void *arg1, char *arg2, char *arg3) {
184 GUARD_ON_NULL_RET(arg1);
185 GUARD_ON_NULL_RET(arg2);
186 GUARD_ON_NULL_RET(arg3);
188 auto *control = (Dali::Toolkit::Control*)arg1;
189 const std::string key(arg2);
190 const std::string value(arg3);
191 AppendAccessibilityAttribute(*control, key, value);
195 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_RemoveAccessibilityAttribute(void *arg1, char *arg2) {
196 GUARD_ON_NULL_RET(arg1);
197 GUARD_ON_NULL_RET(arg2);
199 auto *control = (Dali::Toolkit::Control*)arg1;
200 const std::string key(arg2);
201 RemoveAccessibilityAttribute(*control, key);
205 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_ClearAccessibilityAttributes(void *arg1) {
206 GUARD_ON_NULL_RET(arg1);
208 auto *control = (Dali::Toolkit::Control*)arg1;
209 ClearAccessibilityAttributes(*control);
213 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_SetAccessibilityReadingInfoType2(void *arg1, int arg2) {
214 using namespace Dali::Accessibility;
215 static_assert(static_cast<int>(ReadingInfoType::NAME) == 0
216 && static_cast<int>(ReadingInfoType::ROLE) == 1
217 && static_cast<int>(ReadingInfoType::DESCRIPTION) == 2
218 && static_cast<int>(ReadingInfoType::STATE) == 3, "C++ and C# bindings does not match");
220 GUARD_ON_NULL_RET(arg1);
222 auto *control = (Dali::Toolkit::Control*)arg1;
223 SetAccessibilityReadingInfoType(*control, ReadingInfoTypes{static_cast<std::uint32_t>(arg2)});
227 SWIGEXPORT int SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_GetAccessibilityReadingInfoType2(void *arg1) {
229 GUARD_ON_NULL_RET0(arg1);
231 auto *control = (Dali::Toolkit::Control*)arg1;
232 auto readingInfo = GetAccessibilityReadingInfoType(*control);
233 result = readingInfo.GetRawData()[0];
238 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_ClearAccessibilityHighlight(void *arg1) {
240 GUARD_ON_NULL_RET0(arg1);
242 auto *control = (Dali::Toolkit::Control*)arg1;
243 result = ClearAccessibilityHighlight(*control);
248 SWIGEXPORT unsigned int SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_GrabAccessibilityHighlight(void *arg1) {
250 GUARD_ON_NULL_RET0(arg1);
252 auto *control = (Dali::Toolkit::Control*)arg1;
253 result = GrabAccessibilityHighlight(*control);
258 SWIGEXPORT uint64_t SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_GetAccessibilityStates(void *arg1) {
260 GUARD_ON_NULL_RET0(arg1);
262 auto *control = (Dali::Toolkit::Control*)arg1;
263 auto states = GetAccessibilityStates(*control);
264 result = states.GetRawData64();
269 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Toolkit_DevelControl_NotifyAccessibilityStateChange(void *arg1, uint64_t arg2, int arg3) {
270 GUARD_ON_NULL_RET(arg1);
272 Dali::Accessibility::States states(arg2);
273 auto *control = (Dali::Toolkit::Control*)arg1;
274 NotifyAccessibilityStateChange(*control, states, static_cast<bool>(arg3));
278 /***********************************************
279 **************** Accessibility ****************
280 ***********************************************/
282 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_EmitAccessibilityEvent(void *arg1, int arg2_event) {
283 GUARD_ON_NULL_RET(arg1);
285 Dali::Actor *control = (Dali::Actor*) arg1;
286 auto accessible = Dali::Accessibility::Accessible::Get(*control);
288 accessible->Emit((Dali::Accessibility::ObjectPropertyChangeEvent)arg2_event);
290 SWIG_CSharpException(SWIG_RuntimeError, "Actor does not have accessible object.");
294 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_EmitAccessibilityStateChangedEvent(void *arg1, int arg2_state, int arg3) {
295 GUARD_ON_NULL_RET(arg1);
297 auto state = static_cast<Dali::Accessibility::State>(arg2_state);
299 Dali::Actor *control = (Dali::Actor*) arg1;
300 auto accessible = Dali::Accessibility::Accessible::Get(*control);
302 accessible->EmitStateChanged(state, arg3);
304 SWIG_CSharpException(SWIG_RuntimeError, "Actor does not have accessible object.");
308 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_EmitTextInsertedEvent(void *arg1, int arg2_position, int arg3_length, char *arg4_content) {
309 GUARD_ON_NULL_RET(arg1);
311 Dali::Actor *control = (Dali::Actor*) arg1;
312 auto accessible = Dali::Accessibility::Accessible::Get(*control);
313 std::string content(arg4_content ? arg4_content : "");
315 accessible->EmitTextInserted(arg2_position, arg3_length, content);
317 SWIG_CSharpException(SWIG_RuntimeError, "Actor does not have accessible object.");
321 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_EmitTextDeletedEvent(void *arg1, int arg2_position, int arg3_length, char *arg4_content) {
322 GUARD_ON_NULL_RET(arg1);
324 Dali::Actor *control = (Dali::Actor*) arg1;
325 auto accessible = Dali::Accessibility::Accessible::Get(*control);
326 std::string content(arg4_content ? arg4_content : "");
328 accessible->EmitTextDeleted(arg2_position, arg3_length, content);
330 SWIG_CSharpException(SWIG_RuntimeError, "Actor does not have accessible object.");
334 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_EmitTextCursorMovedEvent(void *arg1, int arg2_position) {
335 GUARD_ON_NULL_RET(arg1);
337 Dali::Actor *control = (Dali::Actor*) arg1;
338 auto accessible = Dali::Accessibility::Accessible::Get(*control);
340 accessible->EmitTextCursorMoved(arg2_position);
342 SWIG_CSharpException(SWIG_RuntimeError, "Actor does not have accessible object.");
346 SWIGEXPORT bool SWIGSTDCALL CSharp_Dali_Accessibility_IsSuppressedEvent(void *arg1, int32_t atspiEvent) {
348 GUARD_ON_NULL_RET0(arg1);
350 Dali::Actor *control = (Dali::Actor*) arg1;
351 auto accessible = Dali::Accessibility::Accessible::Get(*control);
353 result = accessible->GetSuppressedEvents()[static_cast<Dali::Accessibility::AtspiEvent>(atspiEvent)];
359 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_SetSuppressedEvent(void *arg1, int32_t atspiEvent, bool isSuppressed) {
360 GUARD_ON_NULL_RET(arg1);
362 Dali::Actor *control = (Dali::Actor*) arg1;
363 auto accessible = Dali::Accessibility::Accessible::Get(*control);
365 accessible->GetSuppressedEvents()[static_cast<Dali::Accessibility::AtspiEvent>(atspiEvent)] = isSuppressed;
370 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Accessibility_new_Range(int arg1_start, int arg2_end, char *arg3_content) {
371 Dali::Accessibility::Range *result = nullptr;
373 result = new Dali::Accessibility::Range(arg1_start, arg2_end, arg3_content);
375 return (void*)result;
378 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_delete_Range(void *arg1_range) {
380 delete static_cast<Dali::Accessibility::Range*>(arg1_range);
384 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_Bridge_RegisterDefaultLabel(void *arg1_actor) {
385 GUARD_ON_NULL_RET(arg1_actor);
387 Dali::Actor *actor = (Dali::Actor*) arg1_actor;
388 auto accessible = Dali::Accessibility::Accessible::Get(*actor);
389 auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge();
392 SWIG_CSharpException(SWIG_RuntimeError, "No accessible object bind with actor.");
396 bridge->RegisterDefaultLabel(accessible);
400 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_Bridge_UnregisterDefaultLabel(void *arg1_actor) {
401 GUARD_ON_NULL_RET(arg1_actor);
403 Dali::Actor *actor = (Dali::Actor*) arg1_actor;
404 auto accessible = Dali::Accessibility::Accessible::Get(*actor);
405 auto bridge = Dali::Accessibility::Bridge::GetCurrentBridge();
408 SWIG_CSharpException(SWIG_RuntimeError, "No accessible object bind with actor.");
412 bridge->UnregisterDefaultLabel(accessible);
416 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Accessibility_Accessible_GetCurrentlyHighlightedActor() {
417 Dali::Actor *result = NULL;
419 Dali::Actor actor = Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor();
421 result = new Dali::Actor(actor);
426 SWIGEXPORT void* SWIGSTDCALL CSharp_Dali_Accessibility_Accessible_GetHighlightActor() {
427 Dali::Actor *result = NULL;
429 Dali::Actor actor = Dali::Accessibility::Accessible::GetHighlightActor();
431 result = new Dali::Actor(actor);
436 SWIGEXPORT void SWIGSTDCALL CSharp_Dali_Accessibility_Accessible_SetHighlightActor(void *arg1_actor) {
437 // Passing nullptr as actor is used to remove custom highlight,
438 // what leads to the restoration of default highlight starting
439 // from next call to GrabHighlight()
441 Dali::Actor actor = arg1_actor ? *((Dali::Actor*) arg1_actor) : Dali::Actor();
442 Dali::Accessibility::Accessible::SetHighlightActor(actor);