Release 4.0.0-preview1-00051
[platform/core/csapi/tizenfx.git] / src / Tizen.Uix.InputMethod / Interop / Interop.InputMethod.cs
1 /*
2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17
18 using System;
19 using System.Runtime.InteropServices;
20 using Tizen.Uix.InputMethod;
21
22 /// <summary>
23 /// Partial Interop Class
24 /// </summary>
25 internal static partial class Interop
26 {
27     /// <summary>
28     /// InputMethod Interop Class
29     /// </summary>
30     internal static class InputMethod
31     {
32         internal static string LogTag = "Tizen.Uix.InputMethod";
33
34         private const int ErrorInputMethod = -0x02F20000;
35
36         internal enum ErrorCode
37         {
38             None = Tizen.Internals.Errors.ErrorCode.None,                           /**< Successful */
39             InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,   /**< Invalid parameter */
40             PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,   /**< Permission denied */
41             NoCallbackFunction = ErrorInputMethod | 0x0001,                         /**< Necessary callback function is not set */
42             NotRunning = ErrorInputMethod | 0x0002,                                 /**< IME main loop isn't started yet */
43             OperationFailed = ErrorInputMethod | 0x0010,                            /**< Operation failed  */
44             OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory              /**< out of memory */
45         };
46
47         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
48         internal struct ImeCallbackStruct
49         {
50             [MarshalAs(UnmanagedType.FunctionPtr)]
51             internal ImeCreateCb create;
52             [MarshalAs(UnmanagedType.FunctionPtr)]
53             internal ImeTerminateCb terminate;
54             [MarshalAs(UnmanagedType.FunctionPtr)]
55             internal ImeShowCb show;
56             [MarshalAs(UnmanagedType.FunctionPtr)]
57             internal ImeHideCb hide;
58         };
59
60         [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
61         internal struct ImePreEditAttributeStruct
62         {
63             internal uint start;
64             internal uint length;
65             internal int type;
66             internal uint value;
67         };
68
69         internal sealed class ImeCallbackStructGCHandle : IDisposable
70         {
71             internal ImeCallbackStruct _imeCallbackStruct;
72             internal GCHandle _imeCallbackStructHandle;
73             public ImeCallbackStructGCHandle()
74             {
75                 _imeCallbackStruct = new ImeCallbackStruct();
76                 _imeCallbackStructHandle = GCHandle.Alloc(_imeCallbackStruct);
77             }
78
79             #region IDisposable Support
80             private bool disposedValue = false;
81
82             void Dispose(bool disposing)
83             {
84                 Tizen.Log.Info(LogTag, "In Dispose");
85                 if (!disposedValue)
86                 {
87                     if (disposing)
88                     {
89                         Tizen.Log.Info(LogTag, "In Dispose free called");
90                         _imeCallbackStructHandle.Free();
91                     }
92
93                     disposedValue = true;
94                 }
95             }
96
97             public void Dispose()
98             {
99                 Dispose(true);
100             }
101             #endregion
102         }
103
104         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
105         internal delegate void ImeRunCb();
106
107         [DllImport(Libraries.InputMethod, EntryPoint = "ime_run")]
108         internal static extern ErrorCode ImeRun(ref ImeCallbackStruct basicCB, IntPtr userData);
109
110         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_in_cb")]
111         internal static extern ErrorCode ImeEventSetFocusedInCb(ImeFocusedInCb callbackFunction, IntPtr userData);
112
113         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_out_cb")]
114         internal static extern ErrorCode ImeEventSetFocusedOutCb(ImeFocusedOutCb callbackFunction, IntPtr userData);
115
116         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_surrounding_text_updated_cb")]
117         internal static extern ErrorCode ImeEventSetSurroundingTextUpdatedCb(ImeSurroundingTextUpdatedCb callbackFunction, IntPtr userData);
118
119         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_input_context_reset_cb")]
120         internal static extern ErrorCode ImeEventSetInputContextResetCb(ImeInputContextResetCb callbackFunction, IntPtr userData);
121
122         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_cursor_position_updated_cb")]
123         internal static extern ErrorCode ImeEventSetCursorPositionitionUpdatedCb(ImeCursorPositionitionUpdatedCb callbackFunction, IntPtr userData);
124
125         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_requested_cb")]
126         internal static extern ErrorCode ImeEventSetLanguageRequestedCallbackCb(ImeLanguageRequestedCb callbackFunction, IntPtr userData);
127
128         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_set_cb")]
129         internal static extern ErrorCode ImeEventSetLanguageSetCb(ImeLanguageSetCb callbackFunction, IntPtr userData);
130
131         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_set_cb")]
132         internal static extern ErrorCode ImeEventSetImdataSetCb(ImeImdataSetCb callbackFunction, IntPtr userData);
133
134         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_requested_cb")]
135         internal static extern ErrorCode ImeEventSetImdataRequestedCb(ImeImdataRequestedCb callbackFunction, IntPtr userData);
136
137         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_layout_set_cb")]
138         internal static extern ErrorCode ImeEventSetLayoutSetCb(ImeLayoutSetCb callbackFunction, IntPtr userData);
139
140         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_type_set_cb")]
141         internal static extern ErrorCode ImeEventSetReturnKeySetCb(ImeReturnKeySetCb callbackFunction, IntPtr userData);
142
143         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_state_set_cb")]
144         internal static extern ErrorCode ImeEventSetReturnKeyStateSetCb(ImeReturnKeyStateSetCb callbackFunction, IntPtr userData);
145
146         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_geometry_requested_cb")]
147         internal static extern ErrorCode ImeEventSetGeometryRequestedCallbackCb(ImeGeometryRequestedCb callbackFunction, IntPtr userData);
148
149         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_process_key_event_cb")]
150         internal static extern ErrorCode ImeEventSetProcessKeyEventCb(ImeProcessKeyEventCb callbackFunction, IntPtr userData);
151
152         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_display_language_changed_cb")]
153         internal static extern ErrorCode ImeEventSetDisplayLanguageChangedCb(ImeDisplayLanguageChangedCb callbackFunction, IntPtr userData);
154
155         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_rotation_degree_changed_cb")]
156         internal static extern ErrorCode ImeEventSetRotationChangedCb(ImeRotationChangedCb callbackFunction, IntPtr userData);
157
158         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_accessibility_state_changed_cb")]
159         internal static extern ErrorCode ImeEventSetAccessibilityStateChangedCb(ImeAccessibilityStateChangedCb callbackFunction, IntPtr userData);
160
161         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_option_window_created_cb")]
162         internal static extern ErrorCode ImeEventSetOptionWindowCreatedCb(ImeOptionWindowCreatedCb callbackFunction, IntPtr userData);
163
164         [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_option_window_destroyed_cb")]
165         internal static extern ErrorCode ImeEventSetOptionWindowDestroyedCb(ImeOptionWindowDestroyedCb callbackFunction, IntPtr userData);
166
167         [DllImport(Libraries.InputMethod, EntryPoint = "ime_send_key_event")]
168         internal static extern ErrorCode ImeSendKeyEvent(KeyCode keycode, KeyMask keymask, bool forwardKey);
169
170         [DllImport(Libraries.InputMethod, EntryPoint = "ime_commit_string")]
171         internal static extern ErrorCode ImeCommitString(string str);
172
173         [DllImport(Libraries.InputMethod, EntryPoint = "ime_show_preedit_string")]
174         internal static extern ErrorCode ImeShowPreeditString();
175
176         [DllImport(Libraries.InputMethod, EntryPoint = "ime_hide_preedit_string")]
177         internal static extern ErrorCode ImeHidePreeditString();
178
179         [DllImport(Libraries.InputMethod, EntryPoint = "ime_update_preedit_string")]
180         internal static extern ErrorCode ImeUpdatePreeditString(string str, IntPtr attrs);
181
182         [DllImport(Libraries.InputMethod, EntryPoint = "ime_request_surrounding_text")]
183         internal static extern ErrorCode ImeRequestSurroundingText(int maxlenBefore, int maxlenAfter);
184
185         [DllImport(Libraries.InputMethod, EntryPoint = "ime_delete_surrounding_text")]
186         internal static extern ErrorCode ImeDeleteSurroundingText(int offset, int len);
187
188         [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_surrounding_text")]
189         internal static extern ErrorCode ImeGetSurroundingText(int maxlenBefore, int maxlenAfter, out IntPtr text, out int cursorPos);
190
191         [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_selection")]
192         internal static extern ErrorCode ImeSetSelection(int start, int end);
193
194         [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_main_window")]
195         internal static extern IntPtr ImeGetMainWindow();
196
197         [DllImport(Libraries.InputMethod, EntryPoint = "ime_prepare")]
198         internal static extern ErrorCode ImePrepare();
199
200         [DllImport(Libraries.InputMethod, EntryPoint = "ime_initialize")]
201         internal static extern ErrorCode ImeInitialize();
202
203         [DllImport(Libraries.InputMethod, EntryPoint = "ime_finalize")]
204         internal static extern ErrorCode ImeFinalize();
205
206         [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_size")]
207         internal static extern ErrorCode ImeSetSize(int portraitWidth, int portraitHeight, int landscapeWidth, int landscapeHeight);
208
209         [DllImport(Libraries.InputMethod, EntryPoint = "ime_create_option_window")]
210         internal static extern ErrorCode ImeCreateOptionWindow();
211
212         [DllImport(Libraries.InputMethod, EntryPoint = "ime_destroy_option_window")]
213         internal static extern ErrorCode ImeDestroyOptionWindow(IntPtr window);
214
215         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout")]
216         internal static extern ErrorCode ImeContextGetLayout(IntPtr context, out InputPanelLayout layout);
217
218         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout_variation")]
219         internal static extern ErrorCode ImeContextGetLayoutVariation(IntPtr context, out LayoutVariation layoutVariation);
220
221         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_cursor_position")]
222         internal static extern ErrorCode ImeContextGetCursorPositionition(IntPtr context, out int cursorPos);
223
224         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_autocapital_type")]
225         internal static extern ErrorCode ImeContextGetAutocapitalType(IntPtr context, out AutoCapitalization autocapitalType);
226
227         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_type")]
228         internal static extern ErrorCode ImeContextGetReturnKey(IntPtr context, out InputPanelReturnKey returnKeyType);
229
230         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_state")]
231         internal static extern ErrorCode ImeContextGetReturnKeyState(IntPtr context, out bool returnKeyState);
232
233         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_prediction_mode")]
234         internal static extern ErrorCode ImeContextGetPredictionMode(IntPtr context, out bool predictionMode);
235
236         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_password_mode")]
237         internal static extern ErrorCode ImeContextGetPasswordMode(IntPtr context, out bool passwordMode);
238
239         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_input_hint")]
240         internal static extern ErrorCode ImeContextGetInputHint(IntPtr context, out InputHints inputHint);
241
242         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_bidi_direction")]
243         internal static extern ErrorCode ImeContextGetBidiDirection(IntPtr context, out BiDirection bidi);
244
245         [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_language")]
246         internal static extern ErrorCode ImeContextGetLanguage(IntPtr context, out InputPanelLanguage language);
247
248         [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_name")]
249         internal static extern ErrorCode ImeDeviceInfoGetName(IntPtr dev_info, out string devName);
250
251         [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_class")]
252         internal static extern ErrorCode ImeDeviceInfoGetClass(IntPtr dev_info, out DeviceClass devClass);
253
254         [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_subclass")]
255         internal static extern ErrorCode ImeDeviceInfoGetSubclass(IntPtr dev_info, out DeviceSubclass devSubClass);
256
257
258         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
259         internal delegate void ImeCreateCb(IntPtr userData);
260
261         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
262         internal delegate void ImeTerminateCb(IntPtr userData);
263
264         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
265         internal delegate void ImeShowCb(int contextId, IntPtr context, IntPtr userData);
266
267         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
268         internal delegate void ImeHideCb(int contextId, IntPtr userData);
269
270         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
271         internal delegate void ImeFocusedInCb(int contextId, IntPtr userData);
272
273         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
274         internal delegate void ImeFocusedOutCb(int contextId, IntPtr userData);
275
276         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
277         internal delegate void ImeSurroundingTextUpdatedCb(int contextId, IntPtr text, int cursorPos, IntPtr userData);
278
279         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
280         internal delegate void ImeInputContextResetCb(IntPtr userData);
281
282         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
283         internal delegate void ImeCursorPositionitionUpdatedCb(int cursorPos, IntPtr userData);
284
285         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
286         internal delegate void ImeLanguageRequestedCb(IntPtr userData, out IntPtr langCode);
287
288         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
289         internal delegate void ImeLanguageSetCb(InputPanelLanguage language, IntPtr userData);
290
291         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
292         internal delegate void ImeImdataSetCb(IntPtr data, uint dataLength, IntPtr userData);
293
294         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
295         internal delegate void ImeImdataRequestedCb(IntPtr userData, out IntPtr data, out uint dataLength);
296
297         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
298         internal delegate void ImeLayoutSetCb(InputPanelLayout layout, IntPtr userData);
299
300         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
301         internal delegate void ImeReturnKeySetCb(InputPanelReturnKey type, IntPtr userData);
302
303         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
304         internal delegate void ImeReturnKeyStateSetCb(bool disabled, IntPtr userData);
305
306         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
307         internal delegate void ImeGeometryRequestedCb(IntPtr userData, out int x, out int y, out int w, out int h);
308
309         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
310         internal delegate bool ImeProcessKeyEventCb(KeyCode keycode, KeyMask keymask, IntPtr devInfo, IntPtr userData);
311
312         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
313         internal delegate void ImeDisplayLanguageChangedCb(IntPtr language, IntPtr userData);
314
315         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
316         internal delegate void ImeRotationChangedCb(int degree, IntPtr userData);
317
318         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
319         internal delegate void ImeAccessibilityStateChangedCb(bool state, IntPtr userData);
320
321         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
322         internal delegate void ImeOptionWindowCreatedCb(IntPtr window, OptionWindowType type, IntPtr userData);
323
324         [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
325         internal delegate void ImeOptionWindowDestroyedCb(IntPtr window, IntPtr userData);
326     }
327 }