/* * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved * * Licensed under the Apache License, Version 2.0 (the License); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an AS IS BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Runtime.InteropServices; using Tizen.Uix.InputMethod; /// /// Partial Interop Class /// internal static partial class Interop { /// /// InputMethod Interop Class /// internal static class InputMethod { internal static string LogTag = "Tizen.Uix.InputMethod"; private const int ErrorInputMethod = -0x02F20000; internal enum ErrorCode { None = Tizen.Internals.Errors.ErrorCode.None, InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter, PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied, NoCallbackFunction = ErrorInputMethod | 0x0001, NotRunning = ErrorInputMethod | 0x0002, OperationFailed = ErrorInputMethod | 0x0010, OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory }; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] internal struct ImeCallbackStruct { [MarshalAs(UnmanagedType.FunctionPtr)] internal ImeCreateCb create; [MarshalAs(UnmanagedType.FunctionPtr)] internal ImeTerminateCb terminate; [MarshalAs(UnmanagedType.FunctionPtr)] internal ImeShowCb show; [MarshalAs(UnmanagedType.FunctionPtr)] internal ImeHideCb hide; }; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)] internal struct ImePreEditAttributeStruct { internal uint start; internal uint length; internal int type; internal uint value; }; internal sealed class ImeCallbackStructGCHandle : IDisposable { internal ImeCallbackStruct _imeCallbackStruct; internal GCHandle _imeCallbackStructHandle; public ImeCallbackStructGCHandle() { _imeCallbackStruct = new ImeCallbackStruct(); _imeCallbackStructHandle = GCHandle.Alloc(_imeCallbackStruct); } #region IDisposable Support private bool disposedValue = false; void Dispose(bool disposing) { Tizen.Log.Info(LogTag, "In Dispose"); if (!disposedValue) { if (disposing) { Tizen.Log.Info(LogTag, "In Dispose free called"); _imeCallbackStructHandle.Free(); } disposedValue = true; } } public void Dispose() { Dispose(true); } #endregion } [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeRunCb(); [DllImport(Libraries.InputMethod, EntryPoint = "ime_run")] internal static extern ErrorCode ImeRun(ref ImeCallbackStruct basicCB, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_in_cb")] internal static extern ErrorCode ImeEventSetFocusedInCb(ImeFocusedInCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_out_cb")] internal static extern ErrorCode ImeEventSetFocusedOutCb(ImeFocusedOutCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_surrounding_text_updated_cb")] internal static extern ErrorCode ImeEventSetSurroundingTextUpdatedCb(ImeSurroundingTextUpdatedCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_input_context_reset_cb")] internal static extern ErrorCode ImeEventSetInputContextResetCb(ImeInputContextResetCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_cursor_position_updated_cb")] internal static extern ErrorCode ImeEventSetCursorPositionUpdatedCb(ImeCursorPositionUpdatedCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_requested_cb")] internal static extern ErrorCode ImeEventSetLanguageRequestedCallbackCb(ImeLanguageRequestedCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_set_cb")] internal static extern ErrorCode ImeEventSetLanguageSetCb(ImeLanguageSetCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_set_cb")] internal static extern ErrorCode ImeEventSetImdataSetCb(ImeImdataSetCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_requested_cb")] internal static extern ErrorCode ImeEventSetImdataRequestedCb(ImeImdataRequestedCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_layout_set_cb")] internal static extern ErrorCode ImeEventSetLayoutSetCb(ImeLayoutSetCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_type_set_cb")] internal static extern ErrorCode ImeEventSetReturnKeySetCb(ImeReturnKeySetCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_state_set_cb")] internal static extern ErrorCode ImeEventSetReturnKeyStateSetCb(ImeReturnKeyStateSetCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_geometry_requested_cb")] internal static extern ErrorCode ImeEventSetGeometryRequestedCallbackCb(ImeGeometryRequestedCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_process_key_event_cb")] internal static extern ErrorCode ImeEventSetProcessKeyEventCb(ImeProcessKeyEventCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_display_language_changed_cb")] internal static extern ErrorCode ImeEventSetDisplayLanguageChangedCb(ImeDisplayLanguageChangedCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_rotation_degree_changed_cb")] internal static extern ErrorCode ImeEventSetRotationChangedCb(ImeRotationChangedCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_accessibility_state_changed_cb")] internal static extern ErrorCode ImeEventSetAccessibilityStateChangedCb(ImeAccessibilityStateChangedCb callbackFunction, IntPtr userData); [DllImport(Libraries.InputMethod, EntryPoint = "ime_send_key_event")] internal static extern ErrorCode ImeSendKeyEvent(KeyCode keycode, KeyMask keymask, bool forwardKey); [DllImport(Libraries.InputMethod, EntryPoint = "ime_commit_string")] internal static extern ErrorCode ImeCommitString(string str); [DllImport(Libraries.InputMethod, EntryPoint = "ime_show_preedit_string")] internal static extern ErrorCode ImeShowPreeditString(); [DllImport(Libraries.InputMethod, EntryPoint = "ime_hide_preedit_string")] internal static extern ErrorCode ImeHidePreeditString(); [DllImport(Libraries.InputMethod, EntryPoint = "ime_update_preedit_string")] internal static extern ErrorCode ImeUpdatePreeditString(string str, IntPtr attrs); [DllImport(Libraries.InputMethod, EntryPoint = "ime_request_surrounding_text")] internal static extern ErrorCode ImeRequestSurroundingText(int maxlenBefore, int maxlenAfter); [DllImport(Libraries.InputMethod, EntryPoint = "ime_delete_surrounding_text")] internal static extern ErrorCode ImeDeleteSurroundingText(int offset, int len); [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_surrounding_text")] internal static extern ErrorCode ImeGetSurroundingText(int maxlenBefore, int maxlenAfter, out IntPtr text, out int cursorPos); [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_selection")] internal static extern ErrorCode ImeSetSelection(int start, int end); [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_main_window")] internal static extern IntPtr ImeGetMainWindow(); [DllImport(Libraries.InputMethod, EntryPoint = "ime_prepare")] internal static extern ErrorCode ImePrepare(); [DllImport(Libraries.InputMethod, EntryPoint = "ime_initialize")] internal static extern ErrorCode ImeInitialize(); [DllImport(Libraries.InputMethod, EntryPoint = "ime_finalize")] internal static extern ErrorCode ImeFinalize(); [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_size")] internal static extern ErrorCode ImeSetSize(int portraitWidth, int portraitHeight, int landscapeWidth, int landscapeHeight); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout")] internal static extern ErrorCode ImeContextGetLayout(IntPtr context, out InputPanelLayout layout); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout_variation")] internal static extern ErrorCode ImeContextGetLayoutVariation(IntPtr context, out LayoutVariation layoutVariation); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_cursor_position")] internal static extern ErrorCode ImeContextGetCursorPosition(IntPtr context, out int cursorPos); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_autocapital_type")] internal static extern ErrorCode ImeContextGetAutocapitalType(IntPtr context, out AutoCapitalization autocapitalType); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_type")] internal static extern ErrorCode ImeContextGetReturnKey(IntPtr context, out InputPanelReturnKey returnKeyType); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_state")] internal static extern ErrorCode ImeContextGetReturnKeyState(IntPtr context, out bool returnKeyState); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_prediction_mode")] internal static extern ErrorCode ImeContextGetPredictionMode(IntPtr context, out bool predictionMode); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_password_mode")] internal static extern ErrorCode ImeContextGetPasswordMode(IntPtr context, out bool passwordMode); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_input_hint")] internal static extern ErrorCode ImeContextGetInputHint(IntPtr context, out InputHints inputHint); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_bidi_direction")] internal static extern ErrorCode ImeContextGetBidiDirection(IntPtr context, out BiDirection bidi); [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_language")] internal static extern ErrorCode ImeContextGetLanguage(IntPtr context, out InputPanelLanguage language); [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_name")] internal static extern ErrorCode ImeDeviceInfoGetName(IntPtr dev_info, out string devName); [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_class")] internal static extern ErrorCode ImeDeviceInfoGetClass(IntPtr dev_info, out DeviceClass devClass); [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_subclass")] internal static extern ErrorCode ImeDeviceInfoGetSubclass(IntPtr dev_info, out DeviceSubclass devSubClass); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeCreateCb(IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeTerminateCb(IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeShowCb(int contextId, IntPtr context, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeHideCb(int contextId, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeFocusedInCb(int contextId, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeFocusedOutCb(int contextId, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeSurroundingTextUpdatedCb(int contextId, IntPtr text, int cursorPos, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeInputContextResetCb(IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeCursorPositionUpdatedCb(int cursorPos, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeLanguageRequestedCb(IntPtr userData, out IntPtr langCode); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeLanguageSetCb(InputPanelLanguage language, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeImdataSetCb(IntPtr data, uint dataLength, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeImdataRequestedCb(IntPtr userData, out IntPtr data, out uint dataLength); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeLayoutSetCb(InputPanelLayout layout, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeReturnKeySetCb(InputPanelReturnKey type, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeReturnKeyStateSetCb(bool disabled, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeGeometryRequestedCb(IntPtr userData, out int x, out int y, out int w, out int h); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate bool ImeProcessKeyEventCb(KeyCode keycode, KeyMask keymask, IntPtr devInfo, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeDisplayLanguageChangedCb(IntPtr language, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeRotationChangedCb(int degree, IntPtr userData); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] internal delegate void ImeAccessibilityStateChangedCb(bool state, IntPtr userData); } }