1 /* 2 * Copyright 2019 by its authors. See AUTHORS. 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 #pragma warning disable 1591 17 18 using System; 19 using System.Runtime.InteropServices; 20 using System.Runtime.CompilerServices; 21 using System.Collections.Generic; 22 using System.Diagnostics; 23 using System.Diagnostics.CodeAnalysis; 24 using System.Reflection; 25 using System.Threading; 26 using System.Linq; 27 28 using static Eina.NativeCustomExportFunctions; 29 using EoG = Efl.Eo.Globals; 30 31 namespace Efl 32 { 33 34 namespace Eo 35 { 36 37 internal static class Globals 38 { 39 /// <summary>Represents the type of the native Efl_Class.</summary> 40 internal enum EflClassType 41 { 42 /// <summary>Regular EFL classes.</summary> 43 Regular = 0, 44 /// <summary>Non-instantiable efl classes (i.e. Abstracts).</summary> 45 RegularNoInstant, 46 /// <summary>Interface types.</summary> 47 Interface, 48 /// <summary>Mixins types.</summary> 49 Mixin, 50 /// <summary>Invalid class type.</summary> 51 Invalid 52 } 53 54 [return: MarshalAs(UnmanagedType.U1)] efl_object_init_delegate()55 internal delegate bool efl_object_init_delegate(); 56 static readonly FunctionWrapper<efl_object_init_delegate> efl_object_init_ptr = 57 new FunctionWrapper<efl_object_init_delegate>(efl.Libs.EoModule, "efl_object_init"); efl_object_init()58 internal static bool efl_object_init() => efl_object_init_ptr.Value.Delegate(); 59 efl_object_shutdown_delegate()60 internal delegate void efl_object_shutdown_delegate(); 61 static readonly FunctionWrapper<efl_object_shutdown_delegate> efl_object_shutdown_ptr = new FunctionWrapper<efl_object_shutdown_delegate>(efl.Libs.EoModule, "efl_object_shutdown"); efl_object_shutdown()62 internal static void efl_object_shutdown() => efl_object_shutdown_ptr.Value.Delegate(); 63 // [DllImport(efl.Libs.Eo)] internal static extern void efl_object_shutdown(); 64 efl_mono_wrapper_supervisor_get(IntPtr eo)65 [DllImport(efl.Libs.CustomExports)] internal static extern IntPtr efl_mono_wrapper_supervisor_get(IntPtr eo); efl_mono_wrapper_supervisor_set(IntPtr eo, IntPtr ws)66 [DllImport(efl.Libs.CustomExports)] internal static extern void efl_mono_wrapper_supervisor_set(IntPtr eo, IntPtr ws); 67 68 [DllImport(efl.Libs.Eo)] internal static extern IntPtr _efl_add_internal_start([MarshalAs(UnmanagedType.LPStr)] String file, int line, IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback)69 _efl_add_internal_start([MarshalAs(UnmanagedType.LPStr)] String file, int line, 70 IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback); 71 [DllImport(efl.Libs.Eo)] internal static extern IntPtr _efl_add_internal_start_bindings([MarshalAs(UnmanagedType.LPStr)] String file, int line, IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback, IntPtr substitute_ctor, IntPtr data)72 _efl_add_internal_start_bindings([MarshalAs(UnmanagedType.LPStr)] String file, int line, IntPtr klass, IntPtr parent, 73 byte is_ref, byte is_fallback, IntPtr substitute_ctor, IntPtr data); 74 internal delegate IntPtr _efl_add_end_delegate(IntPtr eo, byte is_ref, byte is_fallback)75 _efl_add_end_delegate(IntPtr eo, byte is_ref, byte is_fallback); 76 [DllImport(efl.Libs.Eo)] internal static extern IntPtr _efl_add_end(IntPtr eo, byte is_ref, byte is_fallback)77 _efl_add_end(IntPtr eo, byte is_ref, byte is_fallback); 78 internal delegate IntPtr efl_ref_delegate(IntPtr eo)79 efl_ref_delegate(IntPtr eo); 80 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_ref(IntPtr eo)81 efl_ref(IntPtr eo); 82 internal delegate void efl_unref_delegate(IntPtr eo)83 efl_unref_delegate(IntPtr eo); 84 [DllImport(efl.Libs.CustomExports)] internal static extern void efl_unref(IntPtr eo)85 efl_unref(IntPtr eo); 86 internal delegate int efl_ref_count_delegate(IntPtr eo)87 efl_ref_count_delegate(IntPtr eo); 88 [DllImport(efl.Libs.Eo)] internal static extern int efl_ref_count(IntPtr eo)89 efl_ref_count(IntPtr eo); 90 [DllImport(efl.Libs.CustomExports)] internal static extern void efl_mono_wrapper_supervisor_callbacks_set(Efl.FreeWrapperSupervisorCb freeWrapperSupervisorCb)91 efl_mono_wrapper_supervisor_callbacks_set(Efl.FreeWrapperSupervisorCb freeWrapperSupervisorCb); 92 [DllImport(efl.Libs.CustomExports)] internal static extern void efl_mono_native_dispose(IntPtr eo)93 efl_mono_native_dispose(IntPtr eo); 94 [DllImport(efl.Libs.CustomExports)] internal static extern void efl_mono_thread_safe_native_dispose(IntPtr eo)95 efl_mono_thread_safe_native_dispose(IntPtr eo); 96 [DllImport(efl.Libs.CustomExports)] internal static extern void efl_mono_thread_safe_efl_unref(IntPtr eo)97 efl_mono_thread_safe_efl_unref(IntPtr eo); 98 99 [DllImport(efl.Libs.CustomExports)] internal static extern void efl_mono_thread_safe_free_cb_exec(IntPtr free_cb, IntPtr cb_data)100 efl_mono_thread_safe_free_cb_exec(IntPtr free_cb, IntPtr cb_data); 101 102 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_name_get(IntPtr eo)103 efl_class_name_get(IntPtr eo); 104 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr term)105 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr term); 106 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr term)107 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr term); 108 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr term)109 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr term); 110 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr term)111 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr term); 112 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr term)113 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr term); 114 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr term)115 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr term); 116 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr term)117 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr term); 118 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr term)119 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr term); 120 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr term)121 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr term); 122 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr term)123 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr term); 124 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr term)125 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr term); 126 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr term)127 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr term); 128 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr term)129 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr term); 130 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr term)131 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr term); 132 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr term)133 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr term); 134 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr term)135 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr term); 136 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr term)137 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr term); 138 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr term)139 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr term); 140 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr term)141 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr term); 142 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr term)143 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr term); 144 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr term)145 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr term); 146 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr term)147 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr term); 148 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr term)149 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr term); 150 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr term)151 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr term); 152 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr term)153 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr term); 154 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr term)155 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr term); 156 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr term)157 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr term); 158 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr term)159 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr term); 160 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr term)161 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr term); 162 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr term)163 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr term); 164 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr term)165 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr term); 166 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr term)167 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr term); 168 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr term)169 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr term); 170 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr term)171 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr term); 172 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr term)173 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr term); 174 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr term)175 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr term); 176 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr term)177 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr term); 178 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr term)179 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr term); 180 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr term)181 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr term); 182 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr term)183 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr term); 184 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr term)185 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr term); 186 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr term)187 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr term); 188 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr term)189 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr term); 190 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr term)191 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr term); 192 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr term)193 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr term); 194 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr term)195 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr term); 196 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr term)197 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr term); 198 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr term)199 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr term); 200 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr extn48, IntPtr term)201 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr extn8, IntPtr extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr extn48, IntPtr term); 202 efl_class_functions_set_delegate(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops)203 internal delegate byte efl_class_functions_set_delegate(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops); efl_class_functions_set(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops)204 [DllImport(efl.Libs.Eo)] internal static extern byte efl_class_functions_set(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops); efl_data_scope_get_delegate(IntPtr obj, IntPtr klass)205 internal delegate IntPtr efl_data_scope_get_delegate(IntPtr obj, IntPtr klass); efl_data_scope_get(IntPtr obj, IntPtr klass)206 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_data_scope_get(IntPtr obj, IntPtr klass); efl_super_delegate(IntPtr obj, IntPtr klass)207 internal delegate IntPtr efl_super_delegate(IntPtr obj, IntPtr klass); 208 209 /// <summary>Gets a native pointer to <c>obj</c> that forwards the method call to its parent 210 /// implementation. 211 /// 212 /// <para>For generated code use only.</para> 213 /// <para>Since EFL 1.23.</para> 214 /// </summary> 215 /// <param name="obj">The native pointer to be prepared.</param> 216 /// <param name="klass">The current class.</param> 217 /// <returns>The native pointer to <c>obj</c> prepared to call the parent implementation of <c>klass</c>.</returns> Super(IntPtr obj, IntPtr klass)218 internal static IntPtr Super(IntPtr obj, IntPtr klass) 219 { 220 return efl_super(obj, klass); 221 } 222 efl_super(IntPtr obj, IntPtr klass)223 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_super(IntPtr obj, IntPtr klass); efl_class_get_delegate(IntPtr obj)224 internal delegate IntPtr efl_class_get_delegate(IntPtr obj); efl_class_get(IntPtr obj)225 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_class_get(IntPtr obj); 226 227 /// <summary>Gets the native EO class pointer for the given object. 228 /// <para>For generated code use only.</para> 229 /// <para>Since EFL 1.23.</para> 230 /// </summary> 231 /// <param name="obj">The native pointer to the <see cref="Efl.Object" /> instance to get the native class 232 /// from.</param> 233 /// <returns>The native class pointer or <see cref="IntPtr.Zero" /> if no such class existis.</returns> GetClass(IntPtr obj)234 internal static IntPtr GetClass(IntPtr obj) 235 { 236 return efl_class_get(obj); 237 } 238 efl_class_type_get(IntPtr klass)239 [DllImport(efl.Libs.Eo)] internal static extern EflClassType efl_class_type_get(IntPtr klass); dlerror_delegate()240 internal delegate IntPtr dlerror_delegate(); dlerror()241 [DllImport(efl.Libs.Evil)] internal static extern IntPtr dlerror(); 242 efl_constructor(IntPtr obj)243 [DllImport(efl.Libs.Eo)] internal static extern IntPtr efl_constructor(IntPtr obj); 244 efl_mono_avoid_top_level_constructor_callback_addr_get()245 [DllImport(efl.Libs.CustomExports)] internal static extern IntPtr efl_mono_avoid_top_level_constructor_callback_addr_get(); 246 247 [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool efl_event_callback_priority_add(IntPtr obj, IntPtr desc, short priority, IntPtr cb, IntPtr data)248 efl_event_callback_priority_add(IntPtr obj, IntPtr desc, short priority, IntPtr cb, IntPtr data); 249 250 [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool efl_event_callback_del(IntPtr obj, IntPtr desc, IntPtr cb, IntPtr data)251 efl_event_callback_del(IntPtr obj, IntPtr desc, IntPtr cb, IntPtr data); 252 253 [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] internal static extern bool efl_event_callback_call(IntPtr obj, IntPtr desc, IntPtr event_info)254 efl_event_callback_call(IntPtr obj, IntPtr desc, IntPtr event_info); 255 256 /// <summary>Calls the callbacks associated to an event. 257 /// <para>For generated code use only.</para> 258 /// <para>Since EFL 1.23.</para> 259 /// </summary> 260 /// <param name="obj">The native pointer to the <see cref="Efl.Object" /> instance that will be the emitter 261 /// of the event.</param> 262 /// <param name="desc">The native event description.</param> 263 /// <param name="event_info">The native payload of the event.</param> 264 /// <returns><c>false</c> if one of the callbacks aborted the call. <c>true</c> otherwise.</returns> CallEventCallback(IntPtr obj, IntPtr desc, IntPtr event_info)265 internal static bool CallEventCallback(IntPtr obj, IntPtr desc, IntPtr event_info) 266 { 267 return efl_event_callback_call(obj, desc, event_info); 268 } 269 270 internal const int RTLD_NOW = 2; 271 class_initializer(IntPtr klass)272 internal delegate byte class_initializer(IntPtr klass); 273 274 internal static T GetParamHelper<T>(Nullable<T> v) where T : struct 275 { 276 return v.Value; 277 } 278 GetParamHelper(U v)279 internal static U GetParamHelper<U>(U v) 280 { 281 return v; 282 } 283 284 internal static bool ParamHelperCheck<T>(Nullable<T> v) where T : struct 285 { 286 return v.HasValue; 287 } 288 ParamHelperCheck(U v)289 internal static bool ParamHelperCheck<U>(U v) 290 { 291 return v != null; 292 } 293 register_class(String class_name, IntPtr base_klass, System.Type type)294 internal static IntPtr register_class(String class_name, IntPtr base_klass, System.Type type) 295 { 296 ClassDescription description; 297 description.version = 2; // EO_VERSION 298 description.name = class_name; 299 description.class_type = 0; // REGULAR 300 description.data_size = (UIntPtr)0; 301 description.class_initializer = IntPtr.Zero; 302 description.class_constructor = IntPtr.Zero; 303 description.class_destructor = IntPtr.Zero; 304 305 class_initializer init = (IntPtr kls) => 306 { 307 return Globals.class_initializer_call(kls, type); 308 }; 309 310 description.class_initializer = Marshal.GetFunctionPointerForDelegate(init); 311 312 IntPtr description_ptr = Eina.MemoryNative.Alloc(Marshal.SizeOf(description)); 313 Marshal.StructureToPtr(description, description_ptr, false); 314 315 // FIXME: description_ptr seems to be leaking memory even after an eo_shutdown 316 317 var interface_list = EoG.get_efl_interfaces(type); 318 319 Eina.Log.Debug($"Going to register new class named {class_name}"); 320 IntPtr klass = EoG.call_efl_class_new(description_ptr, base_klass, interface_list); 321 if (klass == IntPtr.Zero) 322 { 323 Eina.Log.Error("klass was not registered"); 324 } 325 else 326 { 327 Eina.Log.Debug("Registered class successfully"); 328 } 329 330 return klass; 331 } 332 get_efl_interfaces(System.Type type)333 internal static List<IntPtr> get_efl_interfaces(System.Type type) 334 { 335 System.Type base_type = type.BaseType; 336 337 var ifaces_lst = new List<IntPtr>(); 338 var base_ifaces = base_type.GetInterfaces(); 339 var ifaces = type.GetInterfaces(); 340 foreach (var iface in ifaces) 341 { 342 if (!System.Array.Exists(base_ifaces, element => element == iface)) 343 { 344 var attrs = System.Attribute.GetCustomAttributes(iface); 345 foreach (var attr in attrs) 346 { 347 if (attr is Efl.Eo.NativeClass) 348 { 349 ifaces_lst.Add(((Efl.Eo.NativeClass)attr).GetEflClass()); 350 break; 351 } 352 } 353 } 354 } 355 356 return ifaces_lst; 357 } 358 GetNativeClass(System.Type type)359 private static Efl.Eo.NativeClass GetNativeClass(System.Type type) 360 { 361 var attrs = System.Attribute.GetCustomAttributes(type, false); 362 foreach (var attr in attrs) 363 { 364 if (attr is Efl.Eo.NativeClass) 365 { 366 return (Efl.Eo.NativeClass)attr; 367 } 368 } 369 370 return null; 371 } 372 373 internal static System.Collections.Generic.List<string> GetUserMethods(System.Type type)374 GetUserMethods(System.Type type) 375 { 376 var r = new System.Collections.Generic.List<string>(); 377 var flags = 378 System.Reflection.BindingFlags.Instance 379 | System.Reflection.BindingFlags.DeclaredOnly 380 | System.Reflection.BindingFlags.Public 381 | System.Reflection.BindingFlags.NonPublic; 382 383 for (var base_type = type;;base_type = base_type.BaseType) 384 { 385 r.AddRange(base_type.GetMethods(flags) 386 .AsParallel().Select(info=>info.Name).ToList()); 387 if (IsGeneratedClass(base_type.BaseType)) 388 { 389 break; 390 } 391 392 if (base_type.BaseType == null) 393 { 394 break; 395 } 396 } 397 398 return r; 399 } 400 class_initializer_call(IntPtr klass, System.Type type)401 internal static byte class_initializer_call(IntPtr klass, System.Type type) 402 { 403 Eina.Log.Debug($"called with 0x{klass.ToInt64():x} {type}"); 404 var derived = type.BaseType; 405 Efl.Eo.NativeClass nativeClass = GetNativeClass(derived); 406 407 while (nativeClass == null) 408 { 409 derived = derived.BaseType; 410 if (derived == null) 411 break; 412 nativeClass = GetNativeClass(derived); 413 } 414 415 if (nativeClass != null) 416 { 417 Eina.Log.Debug("nativeClass != null"); 418 var descs = nativeClass.GetEoOps(type, true); 419 var count = descs.Count; 420 IntPtr descs_ptr = IntPtr.Zero; 421 422 if (count > 0) 423 { 424 descs_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(descs[0]) * count); 425 } 426 427 IntPtr ptr = descs_ptr; 428 for (int i = 0; i != count; ++i) 429 { 430 Marshal.StructureToPtr(descs[i], ptr, false); 431 ptr = IntPtr.Add(ptr, Marshal.SizeOf(descs[0])); 432 } 433 434 EflObjectOps ops; 435 ops.descs = descs_ptr; 436 ops.count = (UIntPtr)count; 437 IntPtr ops_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ops)); 438 Marshal.StructureToPtr(ops, ops_ptr, false); 439 Efl.Eo.Globals.efl_class_functions_set(klass, ops_ptr, IntPtr.Zero); 440 //EoKlass = klass; 441 } 442 else 443 { 444 Eina.Log.Debug("nativeClass == null"); 445 } 446 447 return 1; 448 } 449 call_efl_class_new(IntPtr desc, IntPtr bk, List<IntPtr> il = null)450 internal static IntPtr call_efl_class_new(IntPtr desc, IntPtr bk, List<IntPtr> il = null) 451 { 452 IntPtr nul = IntPtr.Zero; 453 int iface_list_count = (il == null ? 0 : il.Count); 454 switch (iface_list_count) 455 { 456 default: return nul; 457 case 0: return EoG.efl_class_new(desc, bk, nul); 458 case 1: return EoG.efl_class_new(desc, bk, il[0], nul); 459 case 2: return EoG.efl_class_new(desc, bk, il[0], il[1], nul); 460 case 3: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], nul); 461 case 4: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], nul); 462 case 5: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], nul); 463 case 6: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], nul); 464 case 7: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], nul); 465 case 8: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], nul); 466 case 9: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], nul); 467 case 10: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], nul); 468 case 11: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], nul); 469 case 12: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], nul); 470 case 13: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], nul); 471 case 14: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], nul); 472 case 15: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], nul); 473 case 16: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], nul); 474 case 17: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], nul); 475 case 18: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], nul); 476 case 19: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], nul); 477 case 20: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], nul); 478 case 21: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], nul); 479 case 22: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], nul); 480 case 23: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], nul); 481 case 24: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], nul); 482 case 25: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], nul); 483 case 26: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], nul); 484 case 27: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], nul); 485 case 28: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], nul); 486 case 29: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], nul); 487 case 30: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], nul); 488 case 31: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], nul); 489 case 32: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], nul); 490 case 33: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], nul); 491 case 34: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], nul); 492 case 35: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], nul); 493 case 36: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], nul); 494 case 37: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], nul); 495 case 38: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], nul); 496 case 39: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], nul); 497 case 40: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], nul); 498 case 41: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], nul); 499 case 42: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], nul); 500 case 43: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], nul); 501 case 44: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], nul); 502 case 45: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], il[44], nul); 503 case 46: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], il[44], il[45], nul); 504 case 47: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], il[44], il[45], il[46], nul); 505 case 48: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], il[7], il[8], il[9], il[10], il[11], il[12], il[13], il[14], il[15], il[16], il[17], il[18], il[19], il[20], il[21], il[22], il[23], il[24], il[25], il[26], il[27], il[28], il[29], il[30], il[31], il[32], il[33], il[34], il[35], il[36], il[37], il[38], il[39], il[40], il[41], il[42], il[43], il[44], il[45], il[46], il[47], nul); 506 } 507 } 508 WrapperSupervisorPtrToManaged(IntPtr wsPtr)509 internal static Efl.Eo.WrapperSupervisor WrapperSupervisorPtrToManaged(IntPtr wsPtr) 510 { 511 return (Efl.Eo.WrapperSupervisor) GCHandle.FromIntPtr(wsPtr).Target; 512 } 513 GetWrapperSupervisor(IntPtr eo)514 internal static Efl.Eo.WrapperSupervisor GetWrapperSupervisor(IntPtr eo) 515 { 516 var wsPtr = Efl.Eo.Globals.efl_mono_wrapper_supervisor_get(eo); 517 if (wsPtr == IntPtr.Zero) 518 { 519 return null; 520 } 521 522 return WrapperSupervisorPtrToManaged(wsPtr); 523 } 524 SetWrapperSupervisor(IntPtr eo, Efl.Eo.WrapperSupervisor ws)525 internal static void SetWrapperSupervisor(IntPtr eo, Efl.Eo.WrapperSupervisor ws) 526 { 527 GCHandle gch = GCHandle.Alloc(ws); 528 Efl.Eo.Globals.efl_mono_wrapper_supervisor_set(eo, GCHandle.ToIntPtr(gch)); 529 } 530 free_dict_values(Dictionary<String, IntPtr> dict)531 internal static void free_dict_values(Dictionary<String, IntPtr> dict) 532 { 533 foreach (IntPtr ptr in dict.Values) 534 { 535 Eina.MemoryNative.Free(ptr); 536 } 537 } 538 free_stringshare_values(Dictionary<String, IntPtr> dict)539 internal static void free_stringshare_values(Dictionary<String, IntPtr> dict) 540 { 541 foreach (IntPtr ptr in dict.Values) 542 { 543 Eina.NativeMethods.eina_stringshare_del(ptr); 544 } 545 } 546 free_gchandle(IntPtr ptr)547 internal static void free_gchandle(IntPtr ptr) 548 { 549 GCHandle handle = GCHandle.FromIntPtr(ptr); 550 handle.Free(); 551 } 552 WrapAsync(Eina.Future future, CancellationToken token)553 internal static System.Threading.Tasks.Task<Eina.Value> WrapAsync(Eina.Future future, CancellationToken token) 554 { 555 // Creates a task that will wait for SetResult for completion. 556 // TaskCompletionSource is used to create tasks for 'external' Task sources. 557 var tcs = new System.Threading.Tasks.TaskCompletionSource<Eina.Value>(); 558 559 // Flag to be passed to the cancell callback 560 bool fulfilled = false; 561 562 future.Then((Eina.Value received) => 563 { 564 lock (future) 565 { 566 // Convert an failed Future to a failed Task. 567 if (received.GetValueType() == Eina.ValueType.Error) 568 { 569 Eina.Error err; 570 received.Get(out err); 571 if (err == Eina.Error.ECANCELED) 572 { 573 tcs.SetCanceled(); 574 } 575 else 576 { 577 tcs.TrySetException(new Efl.FutureException(err)); 578 } 579 } 580 else 581 { 582 // Async receiver methods may consume the value C# wrapper, like when awaiting in the start of an 583 // using block. In order to continue to forward the value correctly to the next futures 584 // in the chain, we give the Async wrapper a copy of the received wrapper. 585 tcs.SetResult(new Eina.Value(received)); 586 } 587 588 fulfilled = true; 589 return received; 590 } 591 }); 592 // Callback to be called when the token is cancelled. 593 token.Register(() => 594 { 595 lock (future) 596 { 597 // Will trigger the Then callback above with an Eina.Error 598 if (!fulfilled) 599 { 600 future.Cancel(); 601 } 602 } 603 }); 604 605 return tcs.Task; 606 } 607 608 /// <summary>Returns whether the given type was generated by eolian-mono</summary> 609 /// <param name="managedType">The type to check.</param> 610 /// <returns>True if generated by eolian-mono. False otherwise.</returns> IsGeneratedClass(System.Type managedType)611 private static bool IsGeneratedClass(System.Type managedType) 612 { 613 return GetNativeClass(managedType) != null; 614 } 615 616 /// <summary>Creates a new wrapper for the given Eo id. 617 /// 618 /// <para>If the Eo have a WrapperSupervisor, it returns the C# instance handle stored in its 619 /// WrapperSupervisor. otherwise, we use reflection to get the correct C# type to re-wrap it.</para> 620 /// </summary> 621 /// 622 /// <param name="handle">The Eo id to be wrapped.</param> 623 /// <param name="shouldIncRef">Whether we should increase the refcount of the Eo instance.</param> 624 /// <returns>The C# wrapper for this instance.</returns> CreateWrapperFor(System.IntPtr handle, bool shouldIncRef=true)625 internal static Efl.Eo.IWrapper CreateWrapperFor(System.IntPtr handle, bool shouldIncRef=true) 626 { 627 628 if (handle == IntPtr.Zero) 629 { 630 return null; 631 } 632 633 Efl.Eo.Globals.efl_ref(handle); 634 try 635 { 636 var ws = Efl.Eo.Globals.GetWrapperSupervisor(handle); 637 if (ws != null && ws.Target != null) 638 { 639 if (!shouldIncRef) 640 { 641 Efl.Eo.Globals.efl_unref(handle); 642 } 643 644 return ws.Target; 645 } 646 647 IntPtr eoKlass = efl_class_get(handle); 648 649 if (eoKlass == IntPtr.Zero) 650 { 651 throw new InvalidOperationException($"Can't get Eo class for object handle 0x{handle.ToInt64():x}"); 652 } 653 654 var managedType = ClassRegister.GetManagedType(eoKlass); 655 656 if (managedType == null) 657 { 658 IntPtr nativeName = efl_class_name_get(eoKlass); 659 var name = Eina.StringConversion.NativeUtf8ToManagedString(nativeName); 660 661 throw new InvalidOperationException($"Can't get Managed class for object handle 0x{handle.ToInt64():x} with native class [{name}]"); 662 } 663 664 Debug.Assert(IsGeneratedClass(managedType)); 665 System.Reflection.ConstructorInfo constructor = null; 666 667 try 668 { 669 var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; 670 constructor = managedType.GetConstructor(flags, null, new Type[1] { typeof(WrappingHandle) }, null); 671 } 672 catch (InvalidOperationException) 673 { 674 throw new InvalidOperationException($"Can't get constructor for type {managedType}"); 675 } 676 677 WrappingHandle wh = new WrappingHandle(handle); 678 var ret = (Efl.Eo.IWrapper) constructor.Invoke(new object[1] { wh }); 679 680 if (ret == null) 681 { 682 throw new InvalidOperationException($"Can't construct type {managedType} from IntPtr handle"); 683 } 684 685 if (shouldIncRef) 686 { 687 Efl.Eo.Globals.efl_ref(handle); 688 } 689 690 return ret; 691 } 692 finally 693 { 694 Efl.Eo.Globals.efl_unref(handle); 695 } 696 } 697 698 private static Efl.FreeWrapperSupervisorCb FreeWrapperSupervisorCallbackDelegate = new Efl.FreeWrapperSupervisorCb(FreeWrapperSupervisorCallback); FreeWrapperSupervisorCallback(IntPtr eo)699 internal static void FreeWrapperSupervisorCallback(IntPtr eo) 700 { 701 try 702 { 703 var wsPtr = Efl.Eo.Globals.efl_mono_wrapper_supervisor_get(eo); 704 if (wsPtr == IntPtr.Zero) 705 { 706 Eina.Log.Error($"Invalid wrapper supervisor [Eo pointer: {eo.ToInt64():x}]"); 707 return; 708 } 709 710 Efl.Eo.Globals.efl_mono_wrapper_supervisor_set(eo, IntPtr.Zero); 711 712 GCHandle gch = GCHandle.FromIntPtr(wsPtr); 713 var ws = (Efl.Eo.WrapperSupervisor) gch.Target; 714 foreach (var item in ws.EoEvents) 715 { 716 if (!efl_event_callback_del(eo, item.Key.desc, item.Value.evtCallerPtr, wsPtr)) 717 { 718 Eina.Log.Error($"Failed to remove event proxy for event {item.Key.desc} [eo: {eo.ToInt64():x}; cb: {item.Value.evtCallerPtr.ToInt64():x}]"); 719 } 720 } 721 722 // Free the native eo 723 Efl.Eo.Globals.efl_unref(eo); 724 725 // now the WrapperSupervisor can be collected, and so its member: 726 // - the event dictionary 727 // - and the EoWrapper if it is still pinned 728 gch.Free(); 729 } 730 catch (Exception e) 731 { 732 Eina.Log.Error(e.ToString()); 733 Eina.Error.Set(Eina.Error.UNHANDLED_EXCEPTION); 734 } 735 } 736 SetNativeDisposeCallbacks()737 internal static void SetNativeDisposeCallbacks() 738 { 739 efl_mono_wrapper_supervisor_callbacks_set(FreeWrapperSupervisorCallbackDelegate); 740 } 741 ThreadSafeFreeCbExec(Eina.Callbacks.EinaFreeCb cbFreeCb, IntPtr cbData)742 internal static void ThreadSafeFreeCbExec(Eina.Callbacks.EinaFreeCb cbFreeCb, IntPtr cbData) 743 { 744 Eina.Callbacks.EinaFreeCb cb = (IntPtr gcHandlePtr) => { 745 cbFreeCb(cbData); 746 GCHandle gcHandle = GCHandle.FromIntPtr(gcHandlePtr); 747 gcHandle.Free(); 748 }; 749 750 Monitor.Enter(Efl.All.InitLock); 751 if (Efl.All.MainLoopInitialized) 752 { 753 IntPtr cbPtr = Marshal.GetFunctionPointerForDelegate(cb); 754 var handle = GCHandle.Alloc(cb); 755 var handlePtr = GCHandle.ToIntPtr(handle); 756 757 efl_mono_thread_safe_free_cb_exec(cbPtr, handlePtr); 758 } 759 Monitor.Exit(Efl.All.InitLock); 760 } 761 AccessorToIEnumerable(IntPtr accessor)762 internal static IEnumerable<T> AccessorToIEnumerable<T>(IntPtr accessor) 763 { 764 if (accessor == IntPtr.Zero) 765 throw new ArgumentException("accessor is null", nameof(accessor)); 766 767 IntPtr data = IntPtr.Zero; 768 uint position = 0; 769 770 while (Eina.AccessorNativeFunctions.eina_accessor_data_get(accessor, position, out data)) 771 { 772 yield return Eina.TraitFunctions.NativeToManaged<T>(data); 773 position += 1; 774 } 775 } 776 IEnumerableToAccessor(IEnumerable<T> enumerable, bool isMoved)777 internal static IntPtr IEnumerableToAccessor<T>(IEnumerable<T> enumerable, bool isMoved) 778 { 779 if (enumerable == null) 780 { 781 throw new ArgumentException("enumerable is null", nameof(enumerable)); 782 } 783 784 // If we are a wrapper around an existing Eina.Accessor, we can just forward 785 // it and avoid unnecessary copying in non-owning transfers. 786 var wrappedAccessor = enumerable as Eina.Accessor<T>; 787 788 if (wrappedAccessor != null && !isMoved) 789 { 790 return wrappedAccessor.Handle; 791 } 792 793 // TODO: Check if we're either an Eina.List or Eina.Collection? 794 // We could just rewrap their native accessors 795 IntPtr[] intPtrs = new IntPtr[enumerable.Count()]; 796 797 int i = 0; 798 foreach (T data in enumerable) 799 { 800 intPtrs[i] = Eina.TraitFunctions.ManagedToNativeAlloc<T>(data); 801 i++; 802 } 803 804 GCHandle pinnedArray = GCHandle.Alloc(intPtrs, GCHandleType.Pinned); 805 IntPtr nativeAccessor = IntPtr.Zero; 806 807 if (isMoved) 808 { 809 // We need a custom accessor that would unpin the data when freed. 810 nativeAccessor = Eina.AccessorNativeFunctions.eina_mono_owned_carray_length_accessor_new(pinnedArray.AddrOfPinnedObject(), 811 (uint)IntPtr.Size, 812 (uint)intPtrs.Length, 813 free_gchandle, 814 GCHandle.ToIntPtr(pinnedArray)); 815 } 816 else 817 { 818 // FIXME: Leaking.... 819 nativeAccessor = Eina.AccessorNativeFunctions.eina_carray_length_accessor_new(pinnedArray.AddrOfPinnedObject(), 820 (uint)(IntPtr.Size), 821 (uint)intPtrs.Length); 822 } 823 824 if (nativeAccessor == IntPtr.Zero) 825 { 826 pinnedArray.Free(); 827 throw new InvalidOperationException("Failed to get native accessor for the given container"); 828 } 829 830 return nativeAccessor; 831 } 832 IteratorToIEnumerable(IntPtr iterator)833 internal static IEnumerable<T> IteratorToIEnumerable<T>(IntPtr iterator) 834 { 835 if (iterator == IntPtr.Zero) 836 throw new ArgumentException("iterator is null", nameof(iterator)); 837 838 while (Eina.IteratorNativeFunctions.eina_iterator_next(iterator, out IntPtr data)) 839 { 840 yield return Eina.TraitFunctions.NativeToManaged<T>(data); 841 } 842 } 843 IEnumerableToIterator(IEnumerable<T> enumerable, bool isMoved)844 internal static IntPtr IEnumerableToIterator<T>(IEnumerable<T> enumerable, bool isMoved) 845 { 846 if (enumerable == null) 847 { 848 throw new ArgumentException("enumerable is null", nameof(enumerable)); 849 } 850 851 // If we are a wrapper around an existing Eina.Iterator, we can just forward 852 // it and avoid unnecessary copying in non-owning transfers. 853 var wrappedIterator = enumerable as Eina.Iterator<T>; 854 855 if (wrappedIterator != null && !isMoved) 856 { 857 return wrappedIterator.Handle; 858 } 859 860 var list = new List<IntPtr>(); 861 foreach (T data in enumerable) 862 { 863 list.Add(Eina.TraitFunctions.ManagedToNativeAlloc<T>(data)); 864 } 865 866 IntPtr[] dataArray = list.ToArray(); 867 GCHandle pinnedArray = GCHandle.Alloc(dataArray, GCHandleType.Pinned); 868 IntPtr ret = Eina.IteratorNativeFunctions.eina_carray_length_iterator_new(pinnedArray.AddrOfPinnedObject(), (uint)(IntPtr.Size), (uint)dataArray.Length); 869 870 if (!isMoved) 871 { 872 // FIXME Need to free ret and unpin pinnedArray in the future. 873 } 874 875 return ret; 876 } 877 NativeListToIList(IntPtr nativeList)878 internal static IList<T> NativeListToIList<T>(IntPtr nativeList) 879 { 880 if (nativeList == IntPtr.Zero) 881 throw new ArgumentException("nativeList is null", nameof(nativeList)); 882 883 IntPtr l; 884 List<T> list = new List<T>(); 885 for (l = nativeList; l != IntPtr.Zero; l = Eina.ListNativeFunctions.eina_list_next_custom_export_mono(l)) 886 { 887 list.Add(Eina.TraitFunctions.NativeToManaged<T>(Eina.ListNativeFunctions.eina_list_data_get_custom_export_mono(l))); 888 } 889 return list; 890 } 891 IListToNativeList(IList<T> list, bool isMoved)892 internal static IntPtr IListToNativeList<T>(IList<T> list, bool isMoved) 893 { 894 if (list == null) 895 throw new ArgumentException("list is null", nameof(list)); 896 897 // If we are a wrapper around an existing Eina.List, we can just forward 898 // it and avoid unnecessary copying in non-owning transfers. 899 var wrappedList = list as Eina.List<T>; 900 901 if (wrappedList != null && !isMoved) 902 { 903 return wrappedList.Handle; 904 } 905 906 IntPtr nativeList = IntPtr.Zero; 907 foreach (T data in list) 908 { 909 nativeList = Eina.ListNativeFunctions.eina_list_append(nativeList, Eina.TraitFunctions.ManagedToNativeAlloc(data)); //FIXME: need to free 910 } 911 912 if (!isMoved) 913 { 914 // FIXME Need to free ret and unpin pinnedArray in the future. 915 } 916 917 return nativeList; 918 } 919 NativeArrayToIList(IntPtr nativeArray)920 internal static IList<T> NativeArrayToIList<T>(IntPtr nativeArray) 921 { 922 if (nativeArray == IntPtr.Zero) 923 throw new ArgumentException("nativeArray is null", nameof(nativeArray)); 924 925 List<T> list = new List<T>(); 926 UpdateListFromNativeArray(list, nativeArray); 927 928 // FIXME need to free `list` if the returned list is not @moved 929 return list; 930 } 931 IListToNativeArray(IList<T> list, bool isMoved)932 internal static IntPtr IListToNativeArray<T>(IList<T> list, bool isMoved) 933 { 934 if (list == null) 935 throw new ArgumentException("list is null", nameof(list)); 936 937 // If we are a wrapper around an existing Eina.Array, we can just forward 938 // it and avoid unnecessary copying in non-owning transfers. 939 var wrappedArray = list as Eina.Array<T>; 940 941 if (wrappedArray != null && !isMoved) 942 { 943 return wrappedArray.Handle; 944 } 945 946 IntPtr nativeArray = Eina.ArrayNativeFunctions.eina_array_new(4); 947 foreach (T data in list) 948 { 949 Eina.ArrayNativeFunctions.eina_array_push_custom_export_mono(nativeArray, Eina.TraitFunctions.ManagedToNativeAlloc(data)); //FIXME: need to free 950 } 951 952 if (!isMoved) 953 { 954 // FIXME Need to free ret and unpin pinnedArray in the future. 955 } 956 957 return nativeArray; 958 } 959 UpdateListFromNativeArray(IList<T> list, IntPtr nativeArray)960 internal static void UpdateListFromNativeArray<T>(IList<T> list, IntPtr nativeArray) 961 { 962 // Do not update if list Handle is same to nativeArray. They already updated in native code. 963 var wrappedArray = list as Eina.Array<T>; 964 if (wrappedArray != null && wrappedArray.Handle == nativeArray) 965 return; 966 967 list.Clear(); 968 if (nativeArray == IntPtr.Zero) 969 { 970 return; 971 } 972 973 uint count = Eina.ArrayNativeFunctions.eina_array_count_custom_export_mono(nativeArray); 974 for (uint i = 0; i < count; i++) 975 { 976 list.Add(Eina.TraitFunctions.NativeToManaged<T>(Eina.ArrayNativeFunctions.eina_array_data_get_custom_export_mono(nativeArray, i))); 977 } 978 } 979 980 } // Globals 981 982 /// <summary> 983 /// Internal struct used by the binding to pass the native handle pointer 984 /// to the managed object wrapping constructor. 985 /// Internal usage only: do not use this class in inherited classes. 986 /// </summary> 987 internal struct WrappingHandle 988 { WrappingHandleEfl.Eo.WrappingHandle989 public WrappingHandle(IntPtr h) 990 { 991 NativeHandle = h; 992 } 993 994 public IntPtr NativeHandle { get; private set; } 995 } 996 997 /// <summary> 998 /// Manage the initialization and cleanup for the Efl object subsystem. 999 /// <para>Since EFL 1.24.</para> 1000 /// </summary> 1001 public static class Config 1002 { 1003 /// <summary> 1004 /// Initialize the EFL object subsystem. 1005 /// <para>Since EFL 1.24.</para> 1006 /// </summary> Init()1007 public static void Init() 1008 { 1009 Globals.efl_object_init(); 1010 Globals.SetNativeDisposeCallbacks(); 1011 } 1012 1013 /// <summary> 1014 /// Shutdown the EFL object subsystem. 1015 /// <para>Since EFL 1.24.</para> 1016 /// </summary> Shutdown()1017 public static void Shutdown() 1018 { 1019 Globals.efl_object_shutdown(); 1020 } 1021 } 1022 1023 [System.AttributeUsage(System.AttributeTargets.Class | 1024 System.AttributeTargets.Interface, 1025 AllowMultiple = false, 1026 Inherited = false) 1027 ] 1028 abstract class NativeClass : System.Attribute 1029 { GetEflClass()1030 internal abstract IntPtr GetEflClass(); GetEoOps(System.Type type, bool includeInherited)1031 internal abstract System.Collections.Generic.List<EflOpDescription> GetEoOps(System.Type type, bool includeInherited); 1032 } 1033 1034 /// <summary>Attribute for private native classes. 1035 /// 1036 /// <para>For internal usage by generated code only.</para></summary> 1037 class PrivateNativeClass : NativeClass 1038 { GetEflClass()1039 internal override IntPtr GetEflClass() 1040 { 1041 return IntPtr.Zero; 1042 } 1043 GetEoOps(System.Type type, bool includeInherited)1044 internal override System.Collections.Generic.List<EflOpDescription> GetEoOps(System.Type type, bool includeInherited) 1045 { 1046 return null; 1047 } 1048 } 1049 1050 [System.AttributeUsage(System.AttributeTargets.Class | 1051 System.AttributeTargets.Interface | 1052 System.AttributeTargets.Enum | 1053 System.AttributeTargets.Delegate | 1054 System.AttributeTargets.Struct, 1055 AllowMultiple = false, 1056 Inherited = false) 1057 ] 1058 internal class BindingEntityAttribute: System.Attribute 1059 { IsBindingEntity(System.Type t)1060 public static bool IsBindingEntity(System.Type t) 1061 { 1062 return Attribute.GetCustomAttribute(t, typeof(BindingEntityAttribute), false) != null; 1063 } 1064 } 1065 1066 public interface IWrapper 1067 { 1068 /// <summary>Pointer to internal Eo instance.</summary> 1069 IntPtr NativeHandle 1070 { 1071 get; 1072 } 1073 1074 /// <summary>Pointer to internal Eo class.</summary> 1075 IntPtr NativeClass 1076 { 1077 get; 1078 } 1079 } 1080 1081 internal static class ClassRegister 1082 { GetManagedType(IntPtr klass)1083 internal static System.Type GetManagedType(IntPtr klass) 1084 { 1085 System.Type t; 1086 if (Efl.Eo.ClassRegister.typeFromKlass.TryGetValue(klass, out t)) 1087 { 1088 return t; 1089 } 1090 1091 // If it isn't on the dictionary then it is a Native binding class 1092 IntPtr namePtr = Efl.Eo.Globals.efl_class_name_get(klass); 1093 if (namePtr == IntPtr.Zero) 1094 { 1095 throw new System.InvalidOperationException($"Could not get Native class name. Handle: {klass}"); 1096 } 1097 #pragma warning disable CA1307 1098 string name = Eina.StringConversion.NativeUtf8ToManagedString(namePtr) 1099 .Replace("_", ""); // Convert Efl C name to C# name 1100 #pragma warning restore CA1307 1101 1102 // Check if this is an internal implementation of an abstract class 1103 var abstract_impl_suffix = "Realized"; 1104 if (name.EndsWith(abstract_impl_suffix, StringComparison.Ordinal)) 1105 { 1106 name = name.Substring(0, name.Length - abstract_impl_suffix.Length); 1107 var lastDot = name.LastIndexOf(".", StringComparison.Ordinal); 1108 var klassName = name.Substring(lastDot + 1); 1109 name += "+" + klassName + abstract_impl_suffix; // '+' is the separator for nested classes 1110 } 1111 1112 // When converting to managed, interfaces and mixins gets the 'I' prefix. 1113 var klass_type = Efl.Eo.Globals.efl_class_type_get(klass); 1114 if (klass_type == Efl.Eo.Globals.EflClassType.Interface || klass_type == Efl.Eo.Globals.EflClassType.Mixin) 1115 { 1116 var pos = name.LastIndexOf(".", StringComparison.Ordinal); 1117 name = name.Insert(pos + 1, "I"); // -1 if not found, inserts at 0 normally 1118 } 1119 1120 var curr_asm = typeof(IWrapper).Assembly; 1121 t = curr_asm.GetType(name); 1122 if (t == null) 1123 { 1124 foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) 1125 { 1126 if (assembly == curr_asm) 1127 { 1128 continue; 1129 } 1130 1131 t = assembly.GetType(name); 1132 if (t != null) 1133 { 1134 break; 1135 } 1136 } 1137 1138 if (t == null) 1139 { 1140 return typeof(Efl.ObjectRealized); 1141 } 1142 } 1143 1144 AddToKlassTypeBiDictionary(klass, t); // Cache it in the dictionary 1145 return t; 1146 } 1147 GetKlass(System.Type objectType)1148 internal static IntPtr GetKlass(System.Type objectType) 1149 { 1150 IntPtr klass; 1151 if (klassFromType.TryGetValue(objectType, out klass)) 1152 { 1153 return klass; 1154 } 1155 1156 // Check if it is a Native binding class 1157 klass = GetNativeKlassPtr(objectType); 1158 if (klass != IntPtr.Zero) 1159 { 1160 // Add to the dictionary cache 1161 AddToKlassTypeBiDictionary(klass, objectType); 1162 return klass; 1163 } 1164 1165 // Unregistered Inherited class, let's register it 1166 IntPtr baseKlass = GetNativeBaseKlassPtr(objectType); 1167 if (baseKlass == IntPtr.Zero) 1168 { 1169 throw new System.InvalidOperationException($"Could not get base C# binding class for Inherited type: {objectType.FullName}"); 1170 } 1171 1172 return RegisterKlass(baseKlass, objectType); 1173 } 1174 GetInheritKlassOrRegister(IntPtr baseKlass, System.Type objectType)1175 internal static IntPtr GetInheritKlassOrRegister(IntPtr baseKlass, System.Type objectType) 1176 { 1177 IntPtr klass; 1178 if (klassFromType.TryGetValue(objectType, out klass)) 1179 { 1180 return klass; 1181 } 1182 1183 return RegisterKlass(baseKlass, objectType); 1184 } 1185 RegisterKlass(IntPtr baseKlass, System.Type objectType)1186 private static IntPtr RegisterKlass(IntPtr baseKlass, System.Type objectType) 1187 { 1188 lock (klassAllocLock) 1189 { 1190 IntPtr newKlass = Efl.Eo.Globals.register_class(objectType.FullName, baseKlass, objectType); 1191 if (newKlass == IntPtr.Zero) 1192 { 1193 throw new System.InvalidOperationException($"Failed to register class '{objectType.FullName}'"); 1194 } 1195 1196 AddToKlassTypeBiDictionary(newKlass, objectType); 1197 return newKlass; 1198 } 1199 } 1200 GetNativeBaseKlassPtr(System.Type objectType)1201 private static IntPtr GetNativeBaseKlassPtr(System.Type objectType) 1202 { 1203 for (System.Type t = objectType.BaseType; t != null; t = t.BaseType) 1204 { 1205 var ptr = GetNativeKlassPtr(t); 1206 if (ptr != IntPtr.Zero) 1207 { 1208 return ptr; 1209 } 1210 } 1211 1212 throw new System.InvalidOperationException($"Class '{objectType.FullName}' is not an Efl object"); 1213 } 1214 GetNativeKlassPtr(System.Type objectType)1215 private static IntPtr GetNativeKlassPtr(System.Type objectType) 1216 { 1217 if (objectType == null) 1218 { 1219 return IntPtr.Zero; 1220 } 1221 1222 if (objectType.IsInterface) 1223 { 1224 // Try to get the *NativeMethods class 1225 var nativeMethods = (Efl.Eo.NativeClass)System.Attribute.GetCustomAttributes(objectType)?.FirstOrDefault(attr => attr is Efl.Eo.NativeClass); 1226 if (nativeMethods == null) 1227 return IntPtr.Zero; 1228 1229 return nativeMethods.GetEflClass(); 1230 } 1231 1232 var method = objectType.GetMethod("GetEflClassStatic", 1233 System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic); 1234 1235 if (method == null) 1236 { 1237 return IntPtr.Zero; 1238 } 1239 1240 return (IntPtr)(method.Invoke(null, null)); 1241 } 1242 AddToKlassTypeBiDictionary(IntPtr klassPtr, System.Type objectType)1243 internal static void AddToKlassTypeBiDictionary(IntPtr klassPtr, System.Type objectType) 1244 { 1245 klassFromType[objectType] = klassPtr; 1246 typeFromKlass[klassPtr] = objectType; 1247 } 1248 1249 internal static readonly System.Collections.Concurrent.ConcurrentDictionary<System.Type, System.IntPtr> klassFromType 1250 = new System.Collections.Concurrent.ConcurrentDictionary<System.Type, System.IntPtr>(); 1251 1252 internal static readonly System.Collections.Concurrent.ConcurrentDictionary<System.IntPtr, System.Type> typeFromKlass 1253 = new System.Collections.Concurrent.ConcurrentDictionary<System.IntPtr, System.Type>(); 1254 1255 private static readonly object klassAllocLock = new object(); 1256 } 1257 1258 /// <summary>Custom marshaler for Eo objects that do not move ownership between native and managed code. 1259 /// 1260 /// <para>For internal usage by generated code.</para> 1261 /// 1262 /// <para>Since EFL 1.24.</para> 1263 /// </summary> 1264 class MarshalEoNoMove : ICustomMarshaler 1265 { 1266 private static ICustomMarshaler instance = new MarshalEoNoMove(); 1267 1268 /// <summary> 1269 /// Gets an instance of this marshaler. 1270 /// <para>Since EFL 1.24.</para> 1271 /// </summary> 1272 /// <param name="cookie">Cookie to identify the marshaler. Unused.</param> 1273 /// <returns>The marshaler instance.</returns> 1274 [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Justification = "The same marshaler is used for all cases.")] GetInstance(string cookie)1275 public static ICustomMarshaler GetInstance(string cookie) => instance; 1276 1277 /// <summary> 1278 /// Clean ups the managed data. 1279 /// <para>Since EFL 1.24.</para> 1280 /// </summary> 1281 /// <param name="ManagedObj">The object to be cleaned.</param> CleanUpManagedData(object ManagedObj)1282 public void CleanUpManagedData(object ManagedObj) 1283 { 1284 } 1285 1286 /// <summary> 1287 /// Clean ups the native data if it was created. 1288 /// <para>Since EFL 1.24.</para> 1289 /// </summary> 1290 /// <param name="pNativeData">The native data to be cleaned.</param> CleanUpNativeData(IntPtr pNativeData)1291 public void CleanUpNativeData(IntPtr pNativeData) 1292 { 1293 } 1294 1295 /// <summary> 1296 /// Gets the native data size. 1297 /// <para>Since EFL 1.24.</para> 1298 /// </summary> 1299 /// <returns>The data size in bytes.</returns> GetNativeDataSize()1300 public int GetNativeDataSize() => -1; 1301 1302 /// <summary> 1303 /// Marshals the given managed object to its native handle. 1304 /// <para>As this marshaler does not move the reference, the managed code 1305 /// can keep its reference and does not need to incref.</para> 1306 /// <para>Since EFL 1.24.</para> 1307 /// </summary> 1308 /// <param name="ManagedObj">The object to be marshalled.</param> 1309 /// <returns>The marshalled native data.</returns> MarshalManagedToNative(object ManagedObj)1310 public IntPtr MarshalManagedToNative(object ManagedObj) 1311 { 1312 if (ManagedObj == null) 1313 { 1314 return IntPtr.Zero; 1315 } 1316 1317 IWrapper wrapper = ManagedObj as IWrapper; 1318 1319 if (wrapper == null) 1320 { 1321 throw new ArgumentException("Managed object to be marshalled must be an IWrapper."); 1322 } 1323 1324 return wrapper.NativeHandle; 1325 } 1326 1327 /// <summary> 1328 /// Marshals the given native pointer into a managed object. 1329 /// <para>The given native object has its reference count incremented in order to make 1330 /// the C# wrapper capable of accessing it while the wrapper is alive.</para> 1331 /// <para>Since EFL 1.24.</para> 1332 /// </summary> 1333 /// <param name="pNativeData">The native pointer to the EO object.</param> 1334 /// <returns>The managed wrapper for the given native object.</returns> MarshalNativeToManaged(IntPtr pNativeData)1335 public object MarshalNativeToManaged(IntPtr pNativeData) 1336 { 1337 return Efl.Eo.Globals.CreateWrapperFor(pNativeData, shouldIncRef : true); 1338 } 1339 } 1340 1341 /// <summary>Custom marshaler for Eo objects that move ownership between native and managed code. 1342 /// 1343 /// <para>For internal usage by generated code.</para> 1344 /// 1345 /// <para>Since EFL 1.24.</para> 1346 /// </summary> 1347 class MarshalEoMove : ICustomMarshaler 1348 { 1349 private static ICustomMarshaler instance = new MarshalEoMove(); 1350 1351 /// <summary> 1352 /// Gets an instance of this marshaler. 1353 /// <para>Since EFL 1.24.</para> 1354 /// </summary> 1355 /// <param name="cookie">Cookie to identify the marshaler. Unused.</param> 1356 /// <returns>The marshaler instance.</returns> 1357 [SuppressMessage("Microsoft.Usage", "CA1801:ReviewUnusedParameters", Justification = "The same marshaler is used for all cases.")] GetInstance(string cookie)1358 public static ICustomMarshaler GetInstance(string cookie) => instance; 1359 1360 /// <summary> 1361 /// Clean ups the managed data. 1362 /// <para>Since EFL 1.24.</para> 1363 /// </summary> 1364 /// <param name="ManagedObj">The object to be cleaned.</param> CleanUpManagedData(object ManagedObj)1365 public void CleanUpManagedData(object ManagedObj) 1366 { 1367 } 1368 1369 /// <summary> 1370 /// Clean ups the native data if it was created. 1371 /// <para>Since EFL 1.24.</para> 1372 /// </summary> 1373 /// <param name="pNativeData">The native data to be cleaned.</param> CleanUpNativeData(IntPtr pNativeData)1374 public void CleanUpNativeData(IntPtr pNativeData) 1375 { 1376 } 1377 1378 /// <summary> 1379 /// Gets the native data size. 1380 /// <para>Since EFL 1.24.</para> 1381 /// </summary> 1382 /// <returns>The data size in bytes.</returns> GetNativeDataSize()1383 public int GetNativeDataSize() => -1; 1384 1385 /// <summary> 1386 /// Marshals the given managed object to its native handle. 1387 /// <para>The wrapper given as parameter needs to keep a reference to the native 1388 /// object, so the EO has its refcount incremented.</para> 1389 /// <para>Since EFL 1.24.</para> 1390 /// </summary> 1391 /// <param name="ManagedObj">The object to be marshalled.</param> 1392 /// <returns>The marshalled native data.</returns> MarshalManagedToNative(object ManagedObj)1393 public IntPtr MarshalManagedToNative(object ManagedObj) 1394 { 1395 if (ManagedObj == null) 1396 { 1397 return IntPtr.Zero; 1398 } 1399 1400 IWrapper wrapper = ManagedObj as IWrapper; 1401 1402 if (wrapper == null) 1403 { 1404 throw new ArgumentException("Managed object to be marshalled must be an IWrapper."); 1405 } 1406 1407 return Efl.Eo.Globals.efl_ref(wrapper.NativeHandle); 1408 } 1409 1410 /// <summary> 1411 /// Marshals the given native pointer into a managed object. 1412 /// <para>The returned wrapper "steals" the reference to keep it alive.</para> 1413 /// <para>Since EFL 1.24.</para> 1414 /// </summary> 1415 /// <param name="pNativeData">The native pointer to the EO object.</param> 1416 /// <returns>The managed wrapper for the given native object.</returns> MarshalNativeToManaged(IntPtr pNativeData)1417 public object MarshalNativeToManaged(IntPtr pNativeData) 1418 { 1419 return Efl.Eo.Globals.CreateWrapperFor(pNativeData, shouldIncRef : false); 1420 } 1421 } 1422 1423 ///<summary>Marshals between System.Type instances and Eo classes (IntPtrs).</summary> 1424 class MarshalEflClass : ICustomMarshaler 1425 { GetInstance(string cookie)1426 internal static ICustomMarshaler GetInstance(string cookie) 1427 { 1428 Eina.Log.Debug("MarshalEflClass.GetInstance cookie " + cookie); 1429 return new MarshalEflClass(); 1430 } 1431 CleanUpManagedData(object ManagedObj)1432 public void CleanUpManagedData(object ManagedObj) 1433 { 1434 } 1435 CleanUpNativeData(IntPtr pNativeData)1436 public void CleanUpNativeData(IntPtr pNativeData) 1437 { 1438 } 1439 GetNativeDataSize()1440 public int GetNativeDataSize() 1441 { 1442 Eina.Log.Debug("MarshalEflClass.GetNativeDataSize"); 1443 return 0; 1444 } 1445 MarshalManagedToNative(object ManagedObj)1446 public IntPtr MarshalManagedToNative(object ManagedObj) 1447 { 1448 Eina.Log.Debug("MarshalEflClass.MarshallManagedToNative"); 1449 if (ManagedObj == null) 1450 { 1451 return IntPtr.Zero; 1452 } 1453 1454 var t = (System.Type)ManagedObj; 1455 return Efl.Eo.ClassRegister.GetKlass(t); 1456 } 1457 MarshalNativeToManaged(IntPtr pNativeData)1458 public object MarshalNativeToManaged(IntPtr pNativeData) 1459 { 1460 Eina.Log.Debug("MarshalEflClass.MarshalNativeToManaged"); 1461 if (pNativeData == IntPtr.Zero) 1462 { 1463 return null; 1464 } 1465 1466 return Efl.Eo.ClassRegister.GetManagedType(pNativeData); 1467 } 1468 } 1469 1470 class StringPassOwnershipMarshaler : ICustomMarshaler 1471 { MarshalNativeToManaged(IntPtr pNativeData)1472 public object MarshalNativeToManaged(IntPtr pNativeData) 1473 { 1474 var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); 1475 Eina.MemoryNative.Free(pNativeData); 1476 return ret; 1477 } 1478 MarshalManagedToNative(object managedObj)1479 public IntPtr MarshalManagedToNative(object managedObj) 1480 { 1481 return Eina.MemoryNative.StrDup((string)managedObj); 1482 } 1483 CleanUpNativeData(IntPtr pNativeData)1484 public void CleanUpNativeData(IntPtr pNativeData) 1485 { 1486 // No need to cleanup. C will take care of it. 1487 } 1488 CleanUpManagedData(object managedObj)1489 public void CleanUpManagedData(object managedObj) 1490 { 1491 } 1492 GetNativeDataSize()1493 public int GetNativeDataSize() 1494 { 1495 return -1; 1496 } 1497 GetInstance(string cookie)1498 internal static ICustomMarshaler GetInstance(string cookie) 1499 { 1500 if (marshaler == null) 1501 { 1502 marshaler = new StringPassOwnershipMarshaler(); 1503 } 1504 1505 return marshaler; 1506 } 1507 1508 static private StringPassOwnershipMarshaler marshaler; 1509 } 1510 1511 1512 class StringOutMarshaler: ICustomMarshaler 1513 { MarshalNativeToManaged(IntPtr pNativeData)1514 public object MarshalNativeToManaged(IntPtr pNativeData) 1515 { 1516 return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); 1517 } 1518 MarshalManagedToNative(object managedObj)1519 public IntPtr MarshalManagedToNative(object managedObj) 1520 { 1521 return Eina.MemoryNative.SlstrCopyNew((string)managedObj); 1522 } 1523 CleanUpNativeData(IntPtr pNativeData)1524 public void CleanUpNativeData(IntPtr pNativeData) 1525 { 1526 } 1527 CleanUpManagedData(object managedObj)1528 public void CleanUpManagedData(object managedObj) 1529 { 1530 } 1531 GetNativeDataSize()1532 public int GetNativeDataSize() 1533 { 1534 return -1; 1535 } 1536 GetInstance(string cookie)1537 internal static ICustomMarshaler GetInstance(string cookie) 1538 { 1539 if (marshaler == null) 1540 { 1541 marshaler = new StringOutMarshaler(); 1542 } 1543 1544 return marshaler; 1545 } 1546 1547 static private StringOutMarshaler marshaler; 1548 } 1549 1550 class StringKeepOwnershipMarshaler: ICustomMarshaler 1551 { MarshalNativeToManaged(IntPtr pNativeData)1552 public object MarshalNativeToManaged(IntPtr pNativeData) 1553 { 1554 return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); 1555 } 1556 MarshalManagedToNative(object managedObj)1557 public IntPtr MarshalManagedToNative(object managedObj) 1558 { 1559 return Eina.StringConversion.ManagedStringToNativeUtf8Alloc((string)managedObj); 1560 } 1561 CleanUpNativeData(IntPtr pNativeData)1562 public void CleanUpNativeData(IntPtr pNativeData) 1563 { 1564 // No need to free. The Native side will keep the ownership. 1565 } 1566 CleanUpManagedData(object managedObj)1567 public void CleanUpManagedData(object managedObj) 1568 { 1569 } 1570 GetNativeDataSize()1571 public int GetNativeDataSize() 1572 { 1573 return -1; 1574 } 1575 GetInstance(string cookie)1576 internal static ICustomMarshaler GetInstance(string cookie) 1577 { 1578 if (marshaler == null) 1579 { 1580 marshaler = new StringKeepOwnershipMarshaler(); 1581 } 1582 1583 return marshaler; 1584 } 1585 1586 static private StringKeepOwnershipMarshaler marshaler; 1587 } 1588 1589 class StringsharePassOwnershipMarshaler : ICustomMarshaler 1590 { MarshalNativeToManaged(IntPtr pNativeData)1591 public object MarshalNativeToManaged(IntPtr pNativeData) 1592 { 1593 var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); 1594 Eina.NativeMethods.eina_stringshare_del(pNativeData); 1595 return ret; 1596 } 1597 MarshalManagedToNative(object managedObj)1598 public IntPtr MarshalManagedToNative(object managedObj) 1599 { 1600 return Eina.MemoryNative.AddStringshare((string)managedObj); 1601 } 1602 CleanUpNativeData(IntPtr pNativeData)1603 public void CleanUpNativeData(IntPtr pNativeData) 1604 { 1605 // No need to free as it's for own() parameters. 1606 } 1607 CleanUpManagedData(object managedObj)1608 public void CleanUpManagedData(object managedObj) 1609 { 1610 } 1611 GetNativeDataSize()1612 public int GetNativeDataSize() 1613 { 1614 return -1; 1615 } 1616 GetInstance(string cookie)1617 internal static ICustomMarshaler GetInstance(string cookie) 1618 { 1619 if (marshaler == null) 1620 { 1621 marshaler = new StringsharePassOwnershipMarshaler(); 1622 } 1623 1624 return marshaler; 1625 } 1626 1627 static private StringsharePassOwnershipMarshaler marshaler; 1628 } 1629 1630 class StringshareKeepOwnershipMarshaler : ICustomMarshaler 1631 { MarshalNativeToManaged(IntPtr pNativeData)1632 public object MarshalNativeToManaged(IntPtr pNativeData) 1633 { 1634 return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData); 1635 } 1636 MarshalManagedToNative(object managedObj)1637 public IntPtr MarshalManagedToNative(object managedObj) 1638 { 1639 return Eina.MemoryNative.AddStringshare((string)managedObj); 1640 } 1641 CleanUpNativeData(IntPtr pNativeData)1642 public void CleanUpNativeData(IntPtr pNativeData) 1643 { 1644 // No need to free, as the native side will keep ownership. 1645 } 1646 CleanUpManagedData(object managedObj)1647 public void CleanUpManagedData(object managedObj) 1648 { 1649 } 1650 GetNativeDataSize()1651 public int GetNativeDataSize() 1652 { 1653 return -1; 1654 } 1655 GetInstance(string cookie)1656 internal static ICustomMarshaler GetInstance(string cookie) 1657 { 1658 if (marshaler == null) 1659 { 1660 marshaler = new StringshareKeepOwnershipMarshaler(); 1661 } 1662 1663 return marshaler; 1664 } 1665 1666 static private StringshareKeepOwnershipMarshaler marshaler; 1667 } 1668 1669 class StrbufPassOwnershipMarshaler : ICustomMarshaler 1670 { MarshalNativeToManaged(IntPtr pNativeData)1671 public object MarshalNativeToManaged(IntPtr pNativeData) 1672 { 1673 return new Eina.Strbuf(pNativeData, Eina.Ownership.Managed); 1674 } 1675 MarshalManagedToNative(object managedObj)1676 public IntPtr MarshalManagedToNative(object managedObj) 1677 { 1678 Eina.Strbuf buf = managedObj as Eina.Strbuf; 1679 buf.ReleaseOwnership(); 1680 return buf.Handle; 1681 } 1682 CleanUpNativeData(IntPtr pNativeData)1683 public void CleanUpNativeData(IntPtr pNativeData) 1684 { 1685 // No need to cleanup. C will take care of it. 1686 } 1687 CleanUpManagedData(object managedObj)1688 public void CleanUpManagedData(object managedObj) 1689 { 1690 } 1691 GetNativeDataSize()1692 public int GetNativeDataSize() 1693 { 1694 return -1; 1695 } 1696 GetInstance(string cookie)1697 internal static ICustomMarshaler GetInstance(string cookie) 1698 { 1699 if (marshaler == null) 1700 { 1701 marshaler = new StrbufPassOwnershipMarshaler(); 1702 } 1703 1704 return marshaler; 1705 } 1706 1707 static private StrbufPassOwnershipMarshaler marshaler; 1708 } 1709 1710 class StrbufKeepOwnershipMarshaler: ICustomMarshaler 1711 { MarshalNativeToManaged(IntPtr pNativeData)1712 public object MarshalNativeToManaged(IntPtr pNativeData) 1713 { 1714 return new Eina.Strbuf(pNativeData, Eina.Ownership.Unmanaged); 1715 } 1716 MarshalManagedToNative(object managedObj)1717 public IntPtr MarshalManagedToNative(object managedObj) 1718 { 1719 Eina.Strbuf buf = managedObj as Eina.Strbuf; 1720 return buf.Handle; 1721 } 1722 CleanUpNativeData(IntPtr pNativeData)1723 public void CleanUpNativeData(IntPtr pNativeData) 1724 { 1725 // No need to free. The Native side will keep the ownership. 1726 } 1727 CleanUpManagedData(object managedObj)1728 public void CleanUpManagedData(object managedObj) 1729 { 1730 } 1731 GetNativeDataSize()1732 public int GetNativeDataSize() 1733 { 1734 return -1; 1735 } 1736 GetInstance(string cookie)1737 internal static ICustomMarshaler GetInstance(string cookie) 1738 { 1739 if (marshaler == null) 1740 { 1741 marshaler = new StrbufKeepOwnershipMarshaler(); 1742 } 1743 1744 return marshaler; 1745 } 1746 1747 static private StrbufKeepOwnershipMarshaler marshaler; 1748 } 1749 1750 } // namespace eo 1751 1752 /// <summary>General exception for errors inside the binding.</summary> 1753 public class EflException : Exception 1754 { 1755 /// <summary> 1756 /// Default Constructor. 1757 /// <para>Since EFL 1.23.</para> 1758 /// </summary> EflException()1759 public EflException() 1760 { 1761 } 1762 1763 /// <summary>Create a new EflException with the given message.</summary> EflException(string message)1764 public EflException(string message) : base(message) 1765 { 1766 } 1767 1768 /// <summary> 1769 /// Create a new EflException with the given message and inner exception. 1770 /// <para>Since EFL 1.23.</para> 1771 /// </summary> 1772 /// <param name="message">The message of the exception.</param> 1773 /// <param name="innerException">The inner exception.</param> EflException(string message, Exception innerException)1774 public EflException(string message, Exception innerException) 1775 : base(message, innerException) 1776 { 1777 } 1778 } 1779 1780 /// <summary>Exception to be raised when a Task fails due to a failed Eina.Future.</summary> 1781 public class FutureException : EflException 1782 { 1783 /// <summary>The error code returned by the failed Eina.Future.</summary> 1784 public Eina.Error Error { get; private set; } 1785 1786 /// <summary> 1787 /// Default constructor. 1788 /// <para>Since EFL 1.23.</para> 1789 /// </summary> FutureException()1790 public FutureException() : this(Eina.Error.UNHANDLED_EXCEPTION) 1791 { 1792 } 1793 1794 /// <summary> 1795 /// Construct a new exception from the <see cref="Eina.Error" /> 1796 /// with a given message 1797 /// <para>Since EFL 1.23.</para> 1798 /// </summary> 1799 /// <param name="message">The message of the exception.</param> FutureException(string message)1800 public FutureException(string message) 1801 : this(Eina.Error.UNHANDLED_EXCEPTION, message) 1802 { 1803 } 1804 1805 /// <summary> 1806 /// Construct a new exception from the <see cref="Eina.Error" /> 1807 /// with a given message and inner exception. 1808 /// <para>Since EFL 1.23.</para> 1809 /// </summary> 1810 /// <param name="message">The message of the exception.</param> 1811 /// <param name="innerException">The inner exception.</param> FutureException(string message, Exception innerException)1812 public FutureException(string message, Exception innerException) 1813 : this(Eina.Error.UNHANDLED_EXCEPTION, message, innerException) 1814 { 1815 } 1816 1817 /// <summary> 1818 /// Construct a new exception from the <see cref="Eina.Error" /> 1819 /// with a given error. 1820 /// <para>Since EFL 1.23.</para> 1821 /// </summary> 1822 /// <param name="error">The error of the exception..</param> FutureException(Eina.Error error)1823 public FutureException(Eina.Error error) 1824 : this(error, "Future failed.") 1825 { 1826 } 1827 1828 /// <summary> 1829 /// Construct a new exception from the <see cref="Eina.Error" /> 1830 /// with a given error and message. 1831 /// <para>Since EFL 1.23.</para> 1832 /// </summary> 1833 /// <param name="error">The error of the exception..</param> 1834 /// <param name="message">The message of the exception.</param> FutureException(Eina.Error error, string message)1835 public FutureException(Eina.Error error, string message) 1836 : this(error, message, null) 1837 { 1838 } 1839 1840 /// <summary> 1841 /// Construct a new exception from the <see cref="Eina.Error" /> 1842 /// with a given error, message and innerException. 1843 /// <para>Since EFL 1.23.</para> 1844 /// </summary> 1845 /// <param name="error">The error of the exception..</param> 1846 /// <param name="message">The message of the exception.</param> 1847 /// <param name="innerException">The inner exception.</param> FutureException(Eina.Error error, string message, Exception innerException)1848 public FutureException(Eina.Error error, string message, 1849 Exception innerException) 1850 : base(message, innerException) => Error = error; 1851 } 1852 } // namespace efl 1853