1 #pragma warning disable 1591
4 using System.Runtime.InteropServices;
5 using System.Runtime.CompilerServices;
6 using System.Collections.Generic;
7 using System.Diagnostics;
8 using System.Reflection;
9 using System.Threading;
11 using static Eina.NativeCustomExportFunctions;
12 using EoG = Efl.Eo.Globals;
22 /// <summary>Represents the type of the native Efl_Class.</summary>
23 public enum EflClassType
25 /// <summary>Regular EFL classes.</summary>
27 /// <summary>Non-instantiable efl classes (i.e. Abstracts).</summary>
29 /// <summary>Interface types.</summary>
31 /// <summary>Mixins types.</summary>
33 /// <summary>Invalid class type.</summary>
37 [return: MarshalAs(UnmanagedType.U1)]
38 public delegate bool efl_object_init_delegate();
39 public static FunctionWrapper<efl_object_init_delegate> efl_object_init_ptr =
40 new FunctionWrapper<efl_object_init_delegate>(efl.Libs.EoModule, "efl_object_init");
41 public static bool efl_object_init() => efl_object_init_ptr.Value.Delegate();
43 public delegate void efl_object_shutdown_delegate();
44 public static FunctionWrapper<efl_object_shutdown_delegate> efl_object_shutdown_ptr = new FunctionWrapper<efl_object_shutdown_delegate>(efl.Libs.EoModule, "efl_object_shutdown");
45 public static void efl_object_shutdown() => efl_object_shutdown_ptr.Value.Delegate();
46 // [DllImport(efl.Libs.Eo)] public static extern void efl_object_shutdown();
47 public static FunctionWrapper<_efl_add_internal_start_delegate> _efl_add_internal_start_ptr = new FunctionWrapper<_efl_add_internal_start_delegate>(efl.Libs.EoModule, "_efl_add_internal_start");
48 public delegate IntPtr
49 _efl_add_internal_start_delegate([MarshalAs(UnmanagedType.LPStr)] String file, int line,
50 IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback);
52 [DllImport(efl.Libs.CustomExports)] public static extern IntPtr efl_mono_wrapper_supervisor_get(IntPtr eo);
53 [DllImport(efl.Libs.CustomExports)] public static extern void efl_mono_wrapper_supervisor_set(IntPtr eo, IntPtr ws);
55 [DllImport(efl.Libs.Eo)] public static extern IntPtr
56 _efl_add_internal_start([MarshalAs(UnmanagedType.LPStr)] String file, int line,
57 IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback);
58 public delegate IntPtr
59 _efl_add_end_delegate(IntPtr eo, byte is_ref, byte is_fallback);
60 [DllImport(efl.Libs.Eo)] public static extern IntPtr
61 _efl_add_end(IntPtr eo, byte is_ref, byte is_fallback);
62 public delegate IntPtr
63 efl_ref_delegate(IntPtr eo);
64 [DllImport(efl.Libs.Eo)] public static extern IntPtr
67 efl_unref_delegate(IntPtr eo);
68 [DllImport(efl.Libs.CustomExports)] public static extern void
71 efl_ref_count_delegate(IntPtr eo);
72 [DllImport(efl.Libs.Eo)] public static extern int
73 efl_ref_count(IntPtr eo);
74 [DllImport(efl.Libs.CustomExports)] public static extern void
75 efl_mono_wrapper_supervisor_callbacks_set(Efl.FreeWrapperSupervisorCb freeWrapperSupervisorCb);
76 [DllImport(efl.Libs.CustomExports)] public static extern void
77 efl_mono_native_dispose(IntPtr eo);
78 [DllImport(efl.Libs.CustomExports)] public static extern void
79 efl_mono_thread_safe_native_dispose(IntPtr eo);
80 [DllImport(efl.Libs.CustomExports)] public static extern void
81 efl_mono_thread_safe_efl_unref(IntPtr eo);
83 [DllImport(efl.Libs.CustomExports)] public static extern void
84 efl_mono_thread_safe_free_cb_exec(IntPtr free_cb, IntPtr cb_data);
86 [DllImport(efl.Libs.Eo)] public static extern IntPtr
87 efl_class_name_get(IntPtr eo);
88 [DllImport(efl.Libs.Eo)] public static extern IntPtr
89 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr term);
90 [DllImport(efl.Libs.Eo)] public static extern IntPtr
91 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr term);
92 [DllImport(efl.Libs.Eo)] public static extern IntPtr
93 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr term);
94 [DllImport(efl.Libs.Eo)] public static extern IntPtr
95 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr term);
96 [DllImport(efl.Libs.Eo)] public static extern IntPtr
97 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr term);
98 [DllImport(efl.Libs.Eo)] public static extern IntPtr
99 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr term);
100 [DllImport(efl.Libs.Eo)] public static extern IntPtr
101 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr term);
102 [DllImport(efl.Libs.Eo)] public static extern IntPtr
103 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr term);
104 [DllImport(efl.Libs.Eo)] public static extern IntPtr
105 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);
106 [DllImport(efl.Libs.Eo)] public static extern IntPtr
107 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);
108 [DllImport(efl.Libs.Eo)] public static extern IntPtr
109 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);
110 [DllImport(efl.Libs.Eo)] public static extern IntPtr
111 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);
112 [DllImport(efl.Libs.Eo)] public static extern IntPtr
113 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);
114 [DllImport(efl.Libs.Eo)] public static extern IntPtr
115 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);
116 [DllImport(efl.Libs.Eo)] public static extern IntPtr
117 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);
118 [DllImport(efl.Libs.Eo)] public static extern IntPtr
119 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);
120 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn9, IntPtr extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr term);
122 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn10, IntPtr extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr term);
124 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn11, IntPtr extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr term);
126 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn12, IntPtr extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr term);
128 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn13, IntPtr extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr term);
130 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn14, IntPtr extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr term);
132 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn15, IntPtr extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr term);
134 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn16, IntPtr extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr term);
136 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn17, IntPtr extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr term);
138 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn18, IntPtr extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr term);
140 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn19, IntPtr extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr term);
142 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn20, IntPtr extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr term);
144 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn21, IntPtr extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr term);
146 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn22, IntPtr extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr term);
148 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn23, IntPtr extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr term);
150 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn24, IntPtr extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr term);
152 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn25, IntPtr extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr term);
154 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn26, IntPtr extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr term);
156 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn27, IntPtr extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr term);
158 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn28, IntPtr extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr term);
160 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn29, IntPtr extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr term);
162 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn30, IntPtr extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr term);
164 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn31, IntPtr extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr term);
166 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn32, IntPtr extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr term);
168 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn33, IntPtr extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr term);
170 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn34, IntPtr extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr term);
172 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn35, IntPtr extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr term);
174 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn36, IntPtr extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr term);
176 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn37, IntPtr extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr term);
178 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn38, IntPtr extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr term);
180 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn39, IntPtr extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr term);
182 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn40, IntPtr extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr term);
184 [DllImport(efl.Libs.Eo)] public static extern IntPtr
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 extn41, IntPtr extn42, IntPtr extn43, IntPtr extn44, IntPtr extn45, IntPtr extn46, IntPtr extn47, IntPtr extn48, IntPtr term);
187 public delegate byte efl_class_functions_set_delegate(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops);
188 [DllImport(efl.Libs.Eo)] public static extern byte efl_class_functions_set(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops);
189 public delegate IntPtr efl_data_scope_get_delegate(IntPtr obj, IntPtr klass);
190 [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_data_scope_get(IntPtr obj, IntPtr klass);
191 public delegate IntPtr efl_super_delegate(IntPtr obj, IntPtr klass);
192 [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_super(IntPtr obj, IntPtr klass);
193 public delegate IntPtr efl_class_get_delegate(IntPtr obj);
194 [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_class_get(IntPtr obj);
195 [DllImport(efl.Libs.Eo)] public static extern EflClassType efl_class_type_get(IntPtr klass);
196 public delegate IntPtr dlerror_delegate();
197 [DllImport(efl.Libs.Evil)] public static extern IntPtr dlerror();
199 [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
200 efl_event_callback_priority_add(IntPtr obj, IntPtr desc, short priority, IntPtr cb, IntPtr data);
202 [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
203 efl_event_callback_del(IntPtr obj, IntPtr desc, IntPtr cb, IntPtr data);
205 [DllImport(efl.Libs.Eo)] [return: MarshalAs(UnmanagedType.U1)] public static extern bool
206 efl_event_callback_call(IntPtr obj, IntPtr desc, IntPtr event_info);
208 public const int RTLD_NOW = 2;
210 public delegate byte class_initializer(IntPtr klass);
212 public static T GetParamHelper<T>(Nullable<T> v) where T : struct
217 public static U GetParamHelper<U>(U v)
222 public static bool ParamHelperCheck<T>(Nullable<T> v) where T : struct
227 public static bool ParamHelperCheck<U>(U v)
232 public static IntPtr register_class(String class_name, IntPtr base_klass, System.Type type)
234 ClassDescription description;
235 description.version = 2; // EO_VERSION
236 description.name = class_name;
237 description.class_type = 0; // REGULAR
238 description.data_size = (UIntPtr)0;
239 description.class_initializer = IntPtr.Zero;
240 description.class_constructor = IntPtr.Zero;
241 description.class_destructor = IntPtr.Zero;
243 class_initializer init = (IntPtr kls) =>
245 return Globals.class_initializer_call(kls, type);
248 description.class_initializer = Marshal.GetFunctionPointerForDelegate(init);
250 IntPtr description_ptr = Eina.MemoryNative.Alloc(Marshal.SizeOf(description));
251 Marshal.StructureToPtr(description, description_ptr, false);
253 // FIXME: description_ptr seems to be leaking memory even after an eo_shutdown
255 var interface_list = EoG.get_efl_interfaces(type);
257 Eina.Log.Debug($"Going to register new class named {class_name}");
258 IntPtr klass = EoG.call_efl_class_new(description_ptr, base_klass, interface_list);
259 if (klass == IntPtr.Zero)
261 Eina.Log.Error("klass was not registered");
265 Eina.Log.Debug("Registered class successfully");
271 public static List<IntPtr> get_efl_interfaces(System.Type type)
273 System.Type base_type = type.BaseType;
275 var ifaces_lst = new List<IntPtr>();
276 var base_ifaces = base_type.GetInterfaces();
277 var ifaces = type.GetInterfaces();
278 foreach (var iface in ifaces)
280 if (!System.Array.Exists(base_ifaces, element => element == iface))
282 var attrs = System.Attribute.GetCustomAttributes(iface);
283 foreach (var attr in attrs)
285 if (attr is Efl.Eo.NativeClass)
287 ifaces_lst.Add(((Efl.Eo.NativeClass)attr).GetEflClass());
297 private static Efl.Eo.NativeClass GetNativeClass(System.Type type)
299 var attrs = System.Attribute.GetCustomAttributes(type, false);
300 foreach (var attr in attrs)
302 if (attr is Efl.Eo.NativeClass)
304 return (Efl.Eo.NativeClass)attr;
311 public static System.Collections.Generic.List<System.Reflection.MethodInfo>
312 GetUserMethods(System.Type type)
314 var r = new System.Collections.Generic.List<System.Reflection.MethodInfo>();
315 var flags = System.Reflection.BindingFlags.Instance
316 | System.Reflection.BindingFlags.DeclaredOnly
317 | System.Reflection.BindingFlags.Public
318 | System.Reflection.BindingFlags.NonPublic;
319 r.AddRange(type.GetMethods(flags));
320 var base_type = type.BaseType;
322 for (;base_type != null; base_type = base_type.BaseType)
324 if (IsGeneratedClass(base_type))
329 r.AddRange(base_type.GetMethods(flags));
334 public static byte class_initializer_call(IntPtr klass, System.Type type)
336 Eina.Log.Debug($"called with 0x{klass.ToInt64():x} {type}");
337 var derived = type.BaseType;
338 Efl.Eo.NativeClass nativeClass = GetNativeClass(derived);
340 while (nativeClass == null)
342 derived = derived.BaseType;
345 nativeClass = GetNativeClass(derived);
348 if (nativeClass != null)
350 Eina.Log.Debug("nativeClass != null");
351 var descs = nativeClass.GetEoOps(type);
352 var count = descs.Count;
354 var all_interfaces = type.GetInterfaces();
355 var base_interfaces = type.BaseType.GetInterfaces();
356 foreach (var iface in all_interfaces)
358 if (!System.Array.Exists(base_interfaces, element => element == iface))
360 var nc = GetNativeClass(iface);
363 var moredescs = nc.GetEoOps(type);
364 Eina.Log.Debug($"adding {moredescs.Count} more descs to registration");
365 descs.AddRange(moredescs);
371 IntPtr descs_ptr = IntPtr.Zero;
375 descs_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(descs[0]) * count);
378 IntPtr ptr = descs_ptr;
379 for (int i = 0; i != count; ++i)
381 Marshal.StructureToPtr(descs[i], ptr, false);
382 ptr = IntPtr.Add(ptr, Marshal.SizeOf(descs[0]));
386 ops.descs = descs_ptr;
387 ops.count = (UIntPtr)count;
388 IntPtr ops_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ops));
389 Marshal.StructureToPtr(ops, ops_ptr, false);
390 Efl.Eo.Globals.efl_class_functions_set(klass, ops_ptr, IntPtr.Zero);
395 Eina.Log.Debug("nativeClass == null");
401 public static IntPtr call_efl_class_new(IntPtr desc, IntPtr bk, List<IntPtr> il = null)
403 IntPtr nul = IntPtr.Zero;
404 int iface_list_count = (il == null ? 0 : il.Count);
405 switch (iface_list_count)
408 case 0: return EoG.efl_class_new(desc, bk, nul);
409 case 1: return EoG.efl_class_new(desc, bk, il[0], nul);
410 case 2: return EoG.efl_class_new(desc, bk, il[0], il[1], nul);
411 case 3: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], nul);
412 case 4: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], nul);
413 case 5: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], nul);
414 case 6: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], nul);
415 case 7: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], nul);
416 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);
417 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);
418 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);
419 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);
420 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);
421 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);
422 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);
423 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);
424 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);
425 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);
426 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);
427 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);
428 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);
429 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);
430 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);
431 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);
432 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);
433 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);
434 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);
435 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);
436 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);
437 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);
438 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);
439 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);
440 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);
441 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);
442 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);
443 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);
444 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);
445 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);
446 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);
447 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);
448 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);
449 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);
450 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);
451 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);
452 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);
453 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);
454 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);
455 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);
456 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);
460 public static Efl.Eo.WrapperSupervisor WrapperSupervisorPtrToManaged(IntPtr wsPtr)
462 return (Efl.Eo.WrapperSupervisor) GCHandle.FromIntPtr(wsPtr).Target;
465 public static Efl.Eo.WrapperSupervisor GetWrapperSupervisor(IntPtr eo)
467 var wsPtr = Efl.Eo.Globals.efl_mono_wrapper_supervisor_get(eo);
468 if (wsPtr == IntPtr.Zero)
473 return WrapperSupervisorPtrToManaged(wsPtr);
476 public static void SetWrapperSupervisor(IntPtr eo, Efl.Eo.WrapperSupervisor ws)
478 GCHandle gch = GCHandle.Alloc(ws);
479 Efl.Eo.Globals.efl_mono_wrapper_supervisor_set(eo, GCHandle.ToIntPtr(gch));
482 public static void free_dict_values(Dictionary<String, IntPtr> dict)
484 foreach (IntPtr ptr in dict.Values)
486 Eina.MemoryNative.Free(ptr);
490 public static void free_stringshare_values(Dictionary<String, IntPtr> dict)
492 foreach (IntPtr ptr in dict.Values)
494 Eina.Stringshare.eina_stringshare_del(ptr);
498 public static void free_gchandle(IntPtr ptr)
500 GCHandle handle = GCHandle.FromIntPtr(ptr);
504 public static System.Threading.Tasks.Task<Eina.Value> WrapAsync(Eina.Future future, CancellationToken token)
506 // Creates a task that will wait for SetResult for completion.
507 // TaskCompletionSource is used to create tasks for 'external' Task sources.
508 var tcs = new System.Threading.Tasks.TaskCompletionSource<Eina.Value>();
510 // Flag to be passed to the cancell callback
511 bool fulfilled = false;
513 future.Then((Eina.Value received) =>
517 // Convert an failed Future to a failed Task.
518 if (received.GetValueType() == Eina.ValueType.Error)
521 received.Get(out err);
522 if (err == Eina.Error.ECANCELED)
528 tcs.TrySetException(new Efl.FutureException(received));
533 // Will mark the returned task below as completed.
534 tcs.SetResult(received);
541 // Callback to be called when the token is cancelled.
546 // Will trigger the Then callback above with an Eina.Error
557 /// <summary>Returns whether the given type was generated by eolian-mono</summary>
558 /// <param name="managedType">The type to check.</param>
559 /// <returns>True if generated by eolian-mono. False otherwise.</returns>
560 private static bool IsGeneratedClass(System.Type managedType)
562 return GetNativeClass(managedType) != null;
565 /// <summary>Creates a new wrapper for the given Eo id.
567 /// <para>If the Eo was created from a non-generated class (i.e. C#-pure class), it returns
568 /// the C# instance handle stored in the Eo's private data.</para>
570 /// <para>For generated-class Eo instance, we use reflection to get the correct C# type to re-wrap
574 /// <param name="handle">The Eo id to be wrapped.</param>
575 /// <param name="shouldIncRef">Whether we should increase the refcount of the Eo instance.</param>
576 /// <returns>The C# wrapper for this instance.</returns>
577 public static Efl.Eo.IWrapper CreateWrapperFor(System.IntPtr handle, bool shouldIncRef=true)
580 if (handle == IntPtr.Zero)
585 Efl.Eo.Globals.efl_ref(handle);
588 var ws = Efl.Eo.Globals.GetWrapperSupervisor(handle);
589 if (ws != null && ws.Target != null)
593 Efl.Eo.Globals.efl_unref(handle);
599 IntPtr eoKlass = efl_class_get(handle);
601 if (eoKlass == IntPtr.Zero)
603 throw new InvalidOperationException($"Can't get Eo class for object handle 0x{handle.ToInt64():x}");
606 var managedType = ClassRegister.GetManagedType(eoKlass);
608 if (managedType == null)
610 IntPtr nativeName = efl_class_name_get(eoKlass);
611 var name = Eina.StringConversion.NativeUtf8ToManagedString(nativeName);
613 throw new InvalidOperationException($"Can't get Managed class for object handle 0x{handle.ToInt64():x} with native class [{name}]");
616 Debug.Assert(IsGeneratedClass(managedType));
617 System.Reflection.ConstructorInfo constructor = null;
621 var flags = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic;
622 constructor = managedType.GetConstructor(flags, null, new Type[1] { typeof(System.IntPtr) }, null);
624 catch (InvalidOperationException)
626 throw new InvalidOperationException($"Can't get constructor for type {managedType}");
629 var ret = (Efl.Eo.IWrapper) constructor.Invoke(new object[1] { handle });
633 throw new InvalidOperationException($"Can't construct type {managedType} from IntPtr handle");
638 Efl.Eo.Globals.efl_ref(handle);
645 Efl.Eo.Globals.efl_unref(handle);
649 private static Efl.FreeWrapperSupervisorCb FreeWrapperSupervisorCallbackDelegate = new Efl.FreeWrapperSupervisorCb(FreeWrapperSupervisorCallback);
650 public static void FreeWrapperSupervisorCallback(IntPtr eo)
654 var wsPtr = Efl.Eo.Globals.efl_mono_wrapper_supervisor_get(eo);
655 if (wsPtr == IntPtr.Zero)
657 Eina.Log.Error($"Invalid wrapper supervisor [Eo pointer: {eo.ToInt64():x}]");
661 Efl.Eo.Globals.efl_mono_wrapper_supervisor_set(eo, IntPtr.Zero);
663 GCHandle gch = GCHandle.FromIntPtr(wsPtr);
664 var ws = (Efl.Eo.WrapperSupervisor) gch.Target;
665 foreach (var item in ws.EoEvents)
667 if (!efl_event_callback_del(eo, item.Key.desc, item.Value.evtCallerPtr, wsPtr))
669 Eina.Log.Error($"Failed to remove event proxy for event {item.Key.desc} [eo: {eo.ToInt64():x}; cb: {item.Value.evtCallerPtr.ToInt64():x}]");
673 // Free the native eo
674 Efl.Eo.Globals.efl_unref(eo);
676 // now the WrapperSupervisor can be collected, and so its member:
677 // - the event dictionary
678 // - and the EoWrapper if it is still pinned
683 Eina.Log.Error(e.ToString());
684 Eina.Error.Set(Eina.Error.UNHANDLED_EXCEPTION);
688 public static void SetNativeDisposeCallbacks()
690 efl_mono_wrapper_supervisor_callbacks_set(FreeWrapperSupervisorCallbackDelegate);
693 public static void ThreadSafeFreeCbExec(EinaFreeCb cbFreeCb, IntPtr cbData)
695 EinaFreeCb cb = (IntPtr gcHandlePtr) => {
697 GCHandle gcHandle = GCHandle.FromIntPtr(gcHandlePtr);
701 Monitor.Enter(Efl.All.InitLock);
702 if (Efl.All.MainLoopInitialized)
704 IntPtr cbPtr = Marshal.GetFunctionPointerForDelegate(cb);
705 var handle = GCHandle.Alloc(cb);
706 var handlePtr = GCHandle.ToIntPtr(handle);
708 efl_mono_thread_safe_free_cb_exec(cbPtr, handlePtr);
710 Monitor.Exit(Efl.All.InitLock);
715 public static class Config
718 public static void Init()
720 Globals.efl_object_init();
721 Globals.SetNativeDisposeCallbacks();
724 public static void Shutdown()
726 Globals.efl_object_shutdown();
730 [System.AttributeUsage(System.AttributeTargets.Class |
731 System.AttributeTargets.Interface,
732 AllowMultiple = false,
735 public abstract class NativeClass : System.Attribute
737 public abstract IntPtr GetEflClass();
738 public abstract System.Collections.Generic.List<Efl_Op_Description> GetEoOps(System.Type type);
741 /// <summary>Attribute for private native classes.
743 /// <para>For internal usage by generated code only.</para></summary>
744 public class PrivateNativeClass : NativeClass
746 public override IntPtr GetEflClass()
751 public override System.Collections.Generic.List<Efl_Op_Description> GetEoOps(System.Type type)
757 public interface IWrapper
759 /// <summary>Pointer to internal Eo instance.</summary>
765 /// <summary>Pointer to internal Eo class.</summary>
772 public static class ClassRegister
774 public static System.Type GetManagedType(IntPtr klass)
777 if (Efl.Eo.ClassRegister.typeFromKlass.TryGetValue(klass, out t))
782 // If it isn't on the dictionary then it is a Native binding class
783 IntPtr namePtr = Efl.Eo.Globals.efl_class_name_get(klass);
784 if (namePtr == IntPtr.Zero)
786 throw new System.InvalidOperationException($"Could not get Native class name. Handle: {klass}");
789 string name = Eina.StringConversion.NativeUtf8ToManagedString(namePtr)
790 .Replace("_", ""); // Convert Efl C name to C# name
792 // Check if this is an internal implementation of an abstract class
793 var abstract_impl_suffix = "Realized";
794 if (name.EndsWith(abstract_impl_suffix))
796 name = name.Substring(0, name.Length - abstract_impl_suffix.Length);
797 var lastDot = name.LastIndexOf(".");
798 var klassName = name.Substring(lastDot + 1);
799 name += "+" + klassName + abstract_impl_suffix; // '+' is the separator for nested classes
802 // When converting to managed, interfaces and mixins gets the 'I' prefix.
803 var klass_type = Efl.Eo.Globals.efl_class_type_get(klass);
804 if (klass_type == Efl.Eo.Globals.EflClassType.Interface || klass_type == Efl.Eo.Globals.EflClassType.Mixin)
806 var pos = name.LastIndexOf(".");
807 name = name.Insert(pos + 1, "I"); // -1 if not found, inserts at 0 normally
810 var curr_asm = typeof(IWrapper).Assembly;
811 t = curr_asm.GetType(name);
814 foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
816 if (assembly == curr_asm)
821 t = assembly.GetType(name);
830 return typeof(Efl.Object);
834 AddToKlassTypeBiDictionary(klass, t); // Cache it in the dictionary
838 public static IntPtr GetKlass(System.Type objectType)
841 if (klassFromType.TryGetValue(objectType, out klass))
846 // Check if it is a Native binding class
847 klass = GetNativeKlassPtr(objectType);
848 if (klass != IntPtr.Zero)
850 // Add to the dictionary cache
851 AddToKlassTypeBiDictionary(klass, objectType);
855 // Unregistered Inherited class, let's register it
856 IntPtr baseKlass = GetNativeBaseKlassPtr(objectType);
857 if (baseKlass == IntPtr.Zero)
859 throw new System.InvalidOperationException($"Could not get base C# binding class for Inherited type: {objectType.FullName}");
862 return RegisterKlass(baseKlass, objectType);
865 public static IntPtr GetInheritKlassOrRegister(IntPtr baseKlass, System.Type objectType)
868 if (klassFromType.TryGetValue(objectType, out klass))
873 return RegisterKlass(baseKlass, objectType);
876 private static IntPtr RegisterKlass(IntPtr baseKlass, System.Type objectType)
878 lock (klassAllocLock)
880 IntPtr newKlass = Efl.Eo.Globals.register_class(objectType.FullName, baseKlass, objectType);
881 if (newKlass == IntPtr.Zero)
883 throw new System.InvalidOperationException($"Failed to register class '{objectType.FullName}'");
886 AddToKlassTypeBiDictionary(newKlass, objectType);
891 private static IntPtr GetNativeBaseKlassPtr(System.Type objectType)
893 for (System.Type t = objectType.BaseType; t != null; t = t.BaseType)
895 var ptr = GetNativeKlassPtr(t);
896 if (ptr != IntPtr.Zero)
902 throw new System.InvalidOperationException($"Class '{objectType.FullName}' is not an Efl object");
905 private static IntPtr GetNativeKlassPtr(System.Type objectType)
907 if (objectType == null)
912 if (objectType.IsInterface)
914 // Try to get the *Concrete class
915 var assembly = objectType.Assembly;
916 objectType = assembly.GetType(objectType.FullName + "Concrete");
918 if (objectType == null)
924 var method = objectType.GetMethod("GetEflClassStatic",
925 System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
932 return (IntPtr)(method.Invoke(null, null));
935 public static void AddToKlassTypeBiDictionary(IntPtr klassPtr, System.Type objectType)
937 klassFromType[objectType] = klassPtr;
938 typeFromKlass[klassPtr] = objectType;
941 public static System.Collections.Concurrent.ConcurrentDictionary<System.Type, System.IntPtr> klassFromType
942 = new System.Collections.Concurrent.ConcurrentDictionary<System.Type, System.IntPtr>();
944 public static System.Collections.Concurrent.ConcurrentDictionary<System.IntPtr, System.Type> typeFromKlass
945 = new System.Collections.Concurrent.ConcurrentDictionary<System.IntPtr, System.Type>();
947 private static readonly object klassAllocLock = new object();
950 public interface IOwnershipTag
954 public class OwnTag : IOwnershipTag
958 public class NonOwnTag : IOwnershipTag
962 public class MarshalEo<U> : ICustomMarshaler
963 where U : IOwnershipTag
965 public static ICustomMarshaler GetInstance(string cookie)
967 Eina.Log.Debug("MarshalEo.GetInstace cookie " + cookie);
968 return new MarshalEo<U>();
971 public void CleanUpManagedData(object ManagedObj)
973 //Eina.Log.Warning("MarshalEo.CleanUpManagedData not implemented");
974 //throw new NotImplementedException();
977 public void CleanUpNativeData(IntPtr pNativeData)
979 //Eina.Log.Warning("MarshalEo.CleanUpNativeData not implemented");
980 //throw new NotImplementedException();
983 public int GetNativeDataSize()
985 Eina.Log.Debug("MarshalEo.GetNativeDataSize");
990 public IntPtr MarshalManagedToNative(object ManagedObj)
992 Eina.Log.Debug("MarshalEo.MarshallManagedToNative");
994 if (ManagedObj == null)
999 var r = ((IWrapper)ManagedObj).NativeHandle;
1000 if (typeof(U) == typeof(OwnTag))
1002 Efl.Eo.Globals.efl_ref(r);
1008 public object MarshalNativeToManaged(IntPtr pNativeData)
1010 return Efl.Eo.Globals.CreateWrapperFor(pNativeData, shouldIncRef : typeof(U) != typeof(OwnTag));
1014 ///<summary>Marshals between System.Type instances and Eo classes (IntPtrs).</summary>
1015 public class MarshalEflClass : ICustomMarshaler
1017 public static ICustomMarshaler GetInstance(string cookie)
1019 Eina.Log.Debug("MarshalEflClass.GetInstance cookie " + cookie);
1020 return new MarshalEflClass();
1023 public void CleanUpManagedData(object ManagedObj)
1027 public void CleanUpNativeData(IntPtr pNativeData)
1031 public int GetNativeDataSize()
1033 Eina.Log.Debug("MarshalEflClass.GetNativeDataSize");
1037 public IntPtr MarshalManagedToNative(object ManagedObj)
1039 Eina.Log.Debug("MarshalEflClass.MarshallManagedToNative");
1040 if (ManagedObj == null)
1045 var t = (System.Type)ManagedObj;
1046 return Efl.Eo.ClassRegister.GetKlass(t);
1049 public object MarshalNativeToManaged(IntPtr pNativeData)
1051 Eina.Log.Debug("MarshalEflClass.MarshalNativeToManaged");
1052 if (pNativeData == IntPtr.Zero)
1057 return Efl.Eo.ClassRegister.GetManagedType(pNativeData);
1061 public class StringPassOwnershipMarshaler : ICustomMarshaler
1063 public object MarshalNativeToManaged(IntPtr pNativeData)
1065 var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1066 Eina.MemoryNative.Free(pNativeData);
1070 public IntPtr MarshalManagedToNative(object managedObj)
1072 return Eina.MemoryNative.StrDup((string)managedObj);
1075 public void CleanUpNativeData(IntPtr pNativeData)
1077 // No need to cleanup. C will take care of it.
1080 public void CleanUpManagedData(object managedObj)
1084 public int GetNativeDataSize()
1089 public static ICustomMarshaler GetInstance(string cookie)
1091 if (marshaler == null)
1093 marshaler = new StringPassOwnershipMarshaler();
1099 static private StringPassOwnershipMarshaler marshaler;
1102 public class StringKeepOwnershipMarshaler: ICustomMarshaler
1104 public object MarshalNativeToManaged(IntPtr pNativeData)
1106 return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1109 public IntPtr MarshalManagedToNative(object managedObj)
1111 return Eina.StringConversion.ManagedStringToNativeUtf8Alloc((string)managedObj);
1114 public void CleanUpNativeData(IntPtr pNativeData)
1116 // No need to free. The Native side will keep the ownership.
1119 public void CleanUpManagedData(object managedObj)
1123 public int GetNativeDataSize()
1128 public static ICustomMarshaler GetInstance(string cookie)
1130 if (marshaler == null)
1132 marshaler = new StringKeepOwnershipMarshaler();
1138 static private StringKeepOwnershipMarshaler marshaler;
1141 public class StringsharePassOwnershipMarshaler : ICustomMarshaler
1143 public object MarshalNativeToManaged(IntPtr pNativeData)
1145 var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1146 Eina.Stringshare.eina_stringshare_del(pNativeData);
1150 public IntPtr MarshalManagedToNative(object managedObj)
1152 return Eina.Stringshare.eina_stringshare_add((string)managedObj);
1155 public void CleanUpNativeData(IntPtr pNativeData)
1157 // No need to free as it's for own() parameters.
1160 public void CleanUpManagedData(object managedObj)
1164 public int GetNativeDataSize()
1169 public static ICustomMarshaler GetInstance(string cookie)
1171 if (marshaler == null)
1173 marshaler = new StringsharePassOwnershipMarshaler();
1179 static private StringsharePassOwnershipMarshaler marshaler;
1182 public class StringshareKeepOwnershipMarshaler : ICustomMarshaler
1184 public object MarshalNativeToManaged(IntPtr pNativeData)
1186 return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
1189 public IntPtr MarshalManagedToNative(object managedObj)
1191 return Eina.Stringshare.eina_stringshare_add((string)managedObj);
1194 public void CleanUpNativeData(IntPtr pNativeData)
1196 // No need to free, as the native side will keep ownership.
1199 public void CleanUpManagedData(object managedObj)
1203 public int GetNativeDataSize()
1208 public static ICustomMarshaler GetInstance(string cookie)
1210 if (marshaler == null)
1212 marshaler = new StringshareKeepOwnershipMarshaler();
1218 static private StringshareKeepOwnershipMarshaler marshaler;
1221 public class StrbufPassOwnershipMarshaler : ICustomMarshaler
1223 public object MarshalNativeToManaged(IntPtr pNativeData)
1225 return new Eina.Strbuf(pNativeData, Eina.Ownership.Managed);
1228 public IntPtr MarshalManagedToNative(object managedObj)
1230 Eina.Strbuf buf = managedObj as Eina.Strbuf;
1231 buf.ReleaseOwnership();
1235 public void CleanUpNativeData(IntPtr pNativeData)
1237 // No need to cleanup. C will take care of it.
1240 public void CleanUpManagedData(object managedObj)
1244 public int GetNativeDataSize()
1249 public static ICustomMarshaler GetInstance(string cookie)
1251 if (marshaler == null)
1253 marshaler = new StrbufPassOwnershipMarshaler();
1259 static private StrbufPassOwnershipMarshaler marshaler;
1262 public class StrbufKeepOwnershipMarshaler: ICustomMarshaler
1264 public object MarshalNativeToManaged(IntPtr pNativeData)
1266 return new Eina.Strbuf(pNativeData, Eina.Ownership.Unmanaged);
1269 public IntPtr MarshalManagedToNative(object managedObj)
1271 Eina.Strbuf buf = managedObj as Eina.Strbuf;
1275 public void CleanUpNativeData(IntPtr pNativeData)
1277 // No need to free. The Native side will keep the ownership.
1280 public void CleanUpManagedData(object managedObj)
1284 public int GetNativeDataSize()
1289 public static ICustomMarshaler GetInstance(string cookie)
1291 if (marshaler == null)
1293 marshaler = new StrbufKeepOwnershipMarshaler();
1299 static private StrbufKeepOwnershipMarshaler marshaler;
1304 /// <summary>General exception for errors inside the binding.</summary>
1305 public class EflException : Exception
1307 /// <summary>Create a new EflException with the given message.</summary>
1308 public EflException(string message) : base(message)
1313 /// <summary>Exception to be raised when a Task fails due to a failed Eina.Future.</summary>
1314 public class FutureException : EflException
1316 /// <summary>The error code returned by the failed Eina.Future.</summary>
1317 public Eina.Error Error { get; private set; }
1319 /// <summary>Construct a new exception from the Eina.Error stored in the given Eina.Value.</summary>
1320 public FutureException(Eina.Value value) : base("Future failed.")
1322 if (value.GetValueType() != Eina.ValueType.Error)
1324 throw new ArgumentException("FutureException must receive an Eina.Value with Eina.Error.");