1 #pragma warning disable 1591
4 using System.Runtime.InteropServices;
5 using System.Collections.Generic;
6 using System.Diagnostics;
7 using System.Threading;
9 using static Eina.NativeCustomExportFunctions;
10 using EoG = Efl.Eo.Globals;
12 namespace Efl { namespace Eo {
14 public class Globals {
15 [return: MarshalAs(UnmanagedType.U1)]
16 public delegate bool efl_object_init_delegate();
17 public static FunctionWrapper<efl_object_init_delegate> efl_object_init_ptr =
18 new FunctionWrapper<efl_object_init_delegate>(efl.Libs.EoModule, "efl_object_init");
19 public static bool efl_object_init() => efl_object_init_ptr.Value.Delegate();
21 public delegate void efl_object_shutdown_delegate();
22 public static FunctionWrapper<efl_object_shutdown_delegate> efl_object_shutdown_ptr = new FunctionWrapper<efl_object_shutdown_delegate>(efl.Libs.EoModule, "efl_object_shutdown");
23 public static void efl_object_shutdown() => efl_object_shutdown_ptr.Value.Delegate();
24 // [DllImport(efl.Libs.Eo)] public static extern void efl_object_shutdown();
25 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");
26 public delegate IntPtr
27 _efl_add_internal_start_delegate([MarshalAs(UnmanagedType.LPStr)] String file, int line,
28 IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback);
29 [DllImport(efl.Libs.Eo)] public static extern IntPtr
30 _efl_add_internal_start([MarshalAs(UnmanagedType.LPStr)] String file, int line,
31 IntPtr klass, IntPtr parent, byte is_ref, byte is_fallback);
32 public delegate IntPtr
33 _efl_add_end_delegate(IntPtr eo, byte is_ref, byte is_fallback);
34 [DllImport(efl.Libs.Eo)] public static extern IntPtr
35 _efl_add_end(IntPtr eo, byte is_ref, byte is_fallback);
36 public delegate IntPtr
37 efl_ref_delegate(IntPtr eo);
38 [DllImport(efl.Libs.Eo)] public static extern IntPtr
41 efl_unref_delegate(IntPtr eo);
42 [DllImport(efl.Libs.CustomExports)] public static extern void
45 efl_ref_count_delegate(IntPtr eo);
46 [DllImport(efl.Libs.Eo)] public static extern int
47 efl_ref_count(IntPtr eo);
49 [DllImport(efl.Libs.Eo)] public static extern IntPtr
50 efl_class_name_get(IntPtr eo);
51 [DllImport(efl.Libs.Eo)] public static extern IntPtr
52 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr term);
53 [DllImport(efl.Libs.Eo)] public static extern IntPtr
54 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr term);
55 [DllImport(efl.Libs.Eo)] public static extern IntPtr
56 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr term);
57 [DllImport(efl.Libs.Eo)] public static extern IntPtr
58 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr term);
59 [DllImport(efl.Libs.Eo)] public static extern IntPtr
60 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr term);
61 [DllImport(efl.Libs.Eo)] public static extern IntPtr
62 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr term);
63 [DllImport(efl.Libs.Eo)] public static extern IntPtr
64 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr term);
65 [DllImport(efl.Libs.Eo)] public static extern IntPtr
66 efl_class_new(IntPtr class_description, IntPtr parent, IntPtr extn1, IntPtr extn2, IntPtr extn3, IntPtr extn4, IntPtr extn5, IntPtr extn6, IntPtr extn7, IntPtr term);
67 [DllImport(efl.Libs.Eo)] public static extern IntPtr
68 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);
69 [DllImport(efl.Libs.Eo)] public static extern IntPtr
70 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);
71 [DllImport(efl.Libs.Eo)] public static extern IntPtr
72 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);
73 [DllImport(efl.Libs.Eo)] public static extern IntPtr
74 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);
75 [DllImport(efl.Libs.Eo)] public static extern IntPtr
76 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);
77 [DllImport(efl.Libs.Eo)] public static extern IntPtr
78 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);
79 [DllImport(efl.Libs.Eo)] public static extern IntPtr
80 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);
81 [DllImport(efl.Libs.Eo)] public static extern IntPtr
82 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);
83 [DllImport(efl.Libs.Eo)] public static extern IntPtr
84 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);
85 [DllImport(efl.Libs.Eo)] public static extern IntPtr
86 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);
87 [DllImport(efl.Libs.Eo)] public static extern IntPtr
88 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);
89 [DllImport(efl.Libs.Eo)] public static extern IntPtr
90 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);
91 [DllImport(efl.Libs.Eo)] public static extern IntPtr
92 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);
93 [DllImport(efl.Libs.Eo)] public static extern IntPtr
94 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);
95 [DllImport(efl.Libs.Eo)] public static extern IntPtr
96 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);
97 [DllImport(efl.Libs.Eo)] public static extern IntPtr
98 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);
99 [DllImport(efl.Libs.Eo)] public static extern IntPtr
100 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);
101 [DllImport(efl.Libs.Eo)] public static extern IntPtr
102 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);
103 [DllImport(efl.Libs.Eo)] public static extern IntPtr
104 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);
105 [DllImport(efl.Libs.Eo)] public static extern IntPtr
106 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);
107 [DllImport(efl.Libs.Eo)] public static extern IntPtr
108 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);
109 [DllImport(efl.Libs.Eo)] public static extern IntPtr
110 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);
111 [DllImport(efl.Libs.Eo)] public static extern IntPtr
112 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);
113 [DllImport(efl.Libs.Eo)] public static extern IntPtr
114 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);
115 [DllImport(efl.Libs.Eo)] public static extern IntPtr
116 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);
117 [DllImport(efl.Libs.Eo)] public static extern IntPtr
118 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);
119 [DllImport(efl.Libs.Eo)] public static extern IntPtr
120 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);
121 [DllImport(efl.Libs.Eo)] public static extern IntPtr
122 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);
123 [DllImport(efl.Libs.Eo)] public static extern IntPtr
124 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);
125 [DllImport(efl.Libs.Eo)] public static extern IntPtr
126 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);
127 [DllImport(efl.Libs.Eo)] public static extern IntPtr
128 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);
129 [DllImport(efl.Libs.Eo)] public static extern IntPtr
130 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);
131 [DllImport(efl.Libs.Eo)] public static extern IntPtr
132 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);
133 [DllImport(efl.Libs.Eo)] public static extern IntPtr
134 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);
135 [DllImport(efl.Libs.Eo)] public static extern IntPtr
136 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);
137 [DllImport(efl.Libs.Eo)] public static extern IntPtr
138 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);
139 [DllImport(efl.Libs.Eo)] public static extern IntPtr
140 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);
141 [DllImport(efl.Libs.Eo)] public static extern IntPtr
142 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);
143 [DllImport(efl.Libs.Eo)] public static extern IntPtr
144 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);
145 [DllImport(efl.Libs.Eo)] public static extern IntPtr
146 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);
147 [DllImport(efl.Libs.Eo)] public static extern IntPtr
148 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);
150 public delegate byte efl_class_functions_set_delegate(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops);
151 [DllImport(efl.Libs.Eo)] public static extern byte efl_class_functions_set(IntPtr klass_id, IntPtr object_ops, IntPtr class_ops);
152 public delegate IntPtr efl_data_scope_get_delegate(IntPtr obj, IntPtr klass);
153 [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_data_scope_get(IntPtr obj, IntPtr klass);
154 public delegate IntPtr efl_super_delegate(IntPtr obj, IntPtr klass);
155 [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_super(IntPtr obj, IntPtr klass);
156 public delegate IntPtr efl_class_get_delegate(IntPtr obj);
157 [DllImport(efl.Libs.Eo)] public static extern IntPtr efl_class_get(IntPtr obj);
158 public delegate IntPtr dlerror_delegate();
159 [DllImport(efl.Libs.Evil)] public static extern IntPtr dlerror();
161 public delegate bool efl_event_callback_priority_add_delegate(
167 [DllImport(efl.Libs.Eo)] public static extern bool efl_event_callback_priority_add(
173 public delegate bool efl_event_callback_del_delegate(
178 [DllImport(efl.Libs.Eo)] public static extern bool efl_event_callback_del(
183 public delegate IntPtr
184 efl_object_legacy_only_event_description_get_delegate([MarshalAs(UnmanagedType.LPStr)] String name);
185 [DllImport(efl.Libs.Eo)] public static extern IntPtr
186 efl_object_legacy_only_event_description_get([MarshalAs(UnmanagedType.LPStr)] String name);
188 public const int RTLD_NOW = 2;
190 public delegate byte class_initializer(IntPtr klass);
192 public static T GetParamHelper<T>(Nullable<T> v) where T : struct
196 public static U GetParamHelper<U>(U v)
200 public static bool ParamHelperCheck<T>(Nullable<T> v) where T : struct
204 public static bool ParamHelperCheck<U>(U v)
209 public static IntPtr register_class(String class_name, IntPtr base_klass, System.Type type)
211 ClassDescription description;
212 description.version = 2; // EO_VERSION
213 description.name = class_name;
214 description.class_type = 0; // REGULAR
215 description.data_size = (UIntPtr)8;
216 description.class_initializer = IntPtr.Zero;
217 description.class_constructor = IntPtr.Zero;
218 description.class_destructor = IntPtr.Zero;
220 class_initializer init = (IntPtr kls) =>
222 return Globals.class_initializer_call(kls, type);
225 description.class_initializer = Marshal.GetFunctionPointerForDelegate(init);
227 IntPtr description_ptr = Eina.MemoryNative.Alloc(Marshal.SizeOf(description));
228 Marshal.StructureToPtr(description, description_ptr, false);
230 var interface_list = EoG.get_efl_interfaces(type);
232 Eina.Log.Debug($"Going to register new class named {class_name}");
233 IntPtr klass = EoG.call_efl_class_new(description_ptr, base_klass, interface_list);
234 if(klass == IntPtr.Zero)
235 Eina.Log.Error("klass was not registered");
237 Eina.Log.Debug("Registered class successfully");
240 public static List<IntPtr> get_efl_interfaces(System.Type type)
242 System.Type base_type = type.BaseType;
244 var ifaces_lst = new List<IntPtr>();
245 var base_ifaces = base_type.GetInterfaces();
246 var ifaces = type.GetInterfaces();
247 foreach (var iface in ifaces)
249 if (!System.Array.Exists(base_ifaces, element => element == iface))
251 var attrs = System.Attribute.GetCustomAttributes(iface);
252 foreach (var attr in attrs)
254 if (attr is Efl.Eo.NativeClass) {
255 ifaces_lst.Add(((Efl.Eo.NativeClass)attr).GetEflClass());
263 private static Efl.Eo.NativeClass get_native_class(System.Type type)
265 var attrs = System.Attribute.GetCustomAttributes(type);
266 foreach (var attr in attrs)
268 if (attr is Efl.Eo.NativeClass) {
269 return (Efl.Eo.NativeClass)attr;
274 public static byte class_initializer_call(IntPtr klass, System.Type type)
276 Eina.Log.Debug($"called with 0x{klass.ToInt64():x} {type}");
277 Efl.Eo.NativeClass nativeClass = get_native_class(type.BaseType);
279 if (nativeClass != null)
281 Eina.Log.Debug("nativeClass != null");
282 var descs = nativeClass.GetEoOps(type);
283 var count = descs.Count;
285 var all_interfaces = type.GetInterfaces();
286 var base_interfaces = type.BaseType.GetInterfaces();
287 foreach (var iface in all_interfaces)
289 if (!System.Array.Exists(base_interfaces, element => element == iface))
291 var nc = get_native_class(iface);
294 var moredescs = nc.GetEoOps(type);
295 Eina.Log.Debug($"adding {moredescs.Count} more descs to registration");
296 descs.AddRange(moredescs);
302 IntPtr descs_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(descs[0])*count);
303 IntPtr ptr = descs_ptr;
304 for(int i = 0; i != count; ++i)
306 Marshal.StructureToPtr(descs[i], ptr, false);
307 ptr = IntPtr.Add(ptr, Marshal.SizeOf(descs[0]));
310 ops.descs = descs_ptr;
311 ops.count = (UIntPtr)count;
312 IntPtr ops_ptr = Marshal.AllocHGlobal(Marshal.SizeOf(ops));
313 Marshal.StructureToPtr(ops, ops_ptr, false);
314 Efl.Eo.Globals.efl_class_functions_set(klass, ops_ptr, IntPtr.Zero);
318 Eina.Log.Debug("nativeClass == null");
322 public static IntPtr call_efl_class_new(IntPtr desc, IntPtr bk, List<IntPtr> il = null)
324 IntPtr nul = IntPtr.Zero;
325 int iface_list_count = (il == null ? 0 : il.Count);
326 switch(iface_list_count)
329 case 0: return EoG.efl_class_new(desc, bk, nul);
330 case 1: return EoG.efl_class_new(desc, bk, il[0], nul);
331 case 2: return EoG.efl_class_new(desc, bk, il[0], il[1], nul);
332 case 3: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], nul);
333 case 4: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], nul);
334 case 5: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], nul);
335 case 6: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], nul);
336 case 7: return EoG.efl_class_new(desc, bk, il[0], il[1], il[2], il[3], il[4], il[5], il[6], nul);
337 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);
338 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);
339 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);
340 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);
341 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);
342 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);
343 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);
344 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);
345 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);
346 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);
347 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);
348 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);
349 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);
350 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);
351 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);
352 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);
353 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);
354 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);
355 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);
356 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);
357 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);
358 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);
359 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);
360 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);
361 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);
362 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);
363 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);
364 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);
365 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);
366 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);
367 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);
368 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);
369 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);
370 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);
371 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);
372 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);
373 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);
374 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);
375 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);
376 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);
377 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);
380 public static IntPtr instantiate_start(IntPtr klass, Efl.Object parent)
382 Eina.Log.Debug($"Instantiating from klass 0x{klass.ToInt64():x}");
383 System.IntPtr parent_ptr = System.IntPtr.Zero;
385 parent_ptr = parent.NativeHandle;
387 System.IntPtr eo = Efl.Eo.Globals._efl_add_internal_start("file", 0, klass, parent_ptr, 1, 0);
388 if (eo == System.IntPtr.Zero)
390 throw new Exception("Instantiation failed");
393 Eina.Log.Debug($"Eo instance right after internal_start 0x{eo.ToInt64():x} with refcount {Efl.Eo.Globals.efl_ref_count(eo)}");
394 Eina.Log.Debug($"Parent was 0x{parent_ptr.ToInt64()}");
398 public static IntPtr instantiate_end(IntPtr eo) {
399 Eina.Log.Debug("calling efl_add_internal_end");
400 eo = Efl.Eo.Globals._efl_add_end(eo, 1, 0);
401 Eina.Log.Debug($"efl_add_end returned eo 0x{eo.ToInt64():x}");
404 public static void data_set(Efl.Eo.IWrapper obj)
406 Eina.Log.Debug($"Calling data_scope_get with obj {obj.NativeHandle.ToInt64():x} and klass {obj.NativeClass.ToInt64():x}");
407 IntPtr pd = Efl.Eo.Globals.efl_data_scope_get(obj.NativeHandle, obj.NativeClass);
409 GCHandle gch = GCHandle.Alloc(obj);
411 epd.pointer = GCHandle.ToIntPtr(gch);
412 Marshal.StructureToPtr(epd, pd, false);
415 public static Efl.Eo.IWrapper data_get(IntPtr pd)
417 EolianPD epd = (EolianPD)Marshal.PtrToStructure(pd, typeof(EolianPD));
418 if(epd.pointer != IntPtr.Zero)
420 GCHandle gch = GCHandle.FromIntPtr(epd.pointer);
421 return (Efl.Eo.IWrapper)gch.Target;
427 public static void free_dict_values(Dictionary<String, IntPtr> dict)
429 foreach(IntPtr ptr in dict.Values)
431 Eina.MemoryNative.Free(ptr);
435 public static void free_stringshare_values(Dictionary<String, IntPtr> dict)
437 foreach(IntPtr ptr in dict.Values)
439 Eina.Stringshare.eina_stringshare_del(ptr);
443 public static void free_gchandle(IntPtr ptr)
445 GCHandle handle = GCHandle.FromIntPtr(ptr);
449 public static System.Threading.Tasks.Task<Eina.Value> WrapAsync(Eina.Future future, CancellationToken token)
451 // Creates a task that will wait for SetResult for completion.
452 // TaskCompletionSource is used to create tasks for 'external' Task sources.
453 var tcs = new System.Threading.Tasks.TaskCompletionSource<Eina.Value>();
455 // Flag to be passed to the cancell callback
456 bool fulfilled = false;
458 future.Then((Eina.Value received) => {
461 // Convert an failed Future to a failed Task.
462 if (received.GetValueType() == Eina.ValueType.Error)
465 received.Get(out err);
466 if (err == Eina.Error.ECANCELED)
469 tcs.TrySetException(new Efl.FutureException(received));
473 // Will mark the returned task below as completed.
474 tcs.SetResult(received);
480 // Callback to be called when the token is cancelled.
481 token.Register(() => {
484 // Will trigger the Then callback above with an Eina.Error
494 public static class Config
496 public static void Init()
498 Globals.efl_object_init();
501 public static void Shutdown()
503 Globals.efl_object_shutdown();
507 [System.AttributeUsage(System.AttributeTargets.Class |
508 System.AttributeTargets.Interface,
509 AllowMultiple = false,
512 public abstract class NativeClass : System.Attribute
514 public abstract IntPtr GetEflClass();
515 public abstract System.Collections.Generic.List<Efl_Op_Description> GetEoOps(System.Type type);
518 public interface IWrapper
520 /// <summary>Pointer to internal Eo instance.</summary>
525 /// <summary>Pointer to internal Eo class.</summary>
532 public static class ClassRegister
534 public static System.Type GetManagedType(IntPtr klass)
537 if (Efl.Eo.ClassRegister.typeFromKlass.TryGetValue(klass, out t))
540 // If it isn't on the dictionary then it is a Native binding class
541 IntPtr namePtr = Efl.Eo.Globals.efl_class_name_get(klass);
542 if (namePtr == IntPtr.Zero) {
543 throw new System.InvalidOperationException($"Could not get Native class name. Handle: {klass}");
546 string name = Eina.StringConversion.NativeUtf8ToManagedString(namePtr)
547 .Replace("_", ""); // Convert Efl C name to C# name
549 var curr_asm = typeof(IWrapper).Assembly;
550 t = curr_asm.GetType(name);
553 foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies())
555 if (assembly == curr_asm)
558 t = assembly.GetType(name);
563 throw new System.InvalidOperationException($"Could not find the C# binding class for the EFL class: {name}");
566 AddToKlassTypeBiDictionary(klass, t); // Cache it in the dictionary
570 public static IntPtr GetKlass(System.Type objectType)
573 if (klassFromType.TryGetValue(objectType, out klass))
576 // Check if it is a Native binding class
577 klass = GetNativeKlassPtr(objectType);
578 if (klass != IntPtr.Zero) {
579 // Add to the dictionary cache
580 AddToKlassTypeBiDictionary(klass, objectType);
584 // Unregistered Inherited class, let's register it
585 IntPtr baseKlass = GetNativeBaseKlassPtr(objectType);
586 if (baseKlass == IntPtr.Zero)
587 throw new System.InvalidOperationException($"Could not get base C# binding class for Inherited type: {objectType.FullName}");
588 return RegisterKlass(baseKlass, objectType);
591 public static IntPtr GetInheritKlassOrRegister(IntPtr baseKlass, System.Type objectType)
594 if (klassFromType.TryGetValue(objectType, out klass))
597 return RegisterKlass(baseKlass, objectType);
600 private static IntPtr RegisterKlass(IntPtr baseKlass, System.Type objectType)
602 lock (klassAllocLock) {
603 IntPtr newKlass = Efl.Eo.Globals.register_class(objectType.FullName, baseKlass, objectType);
604 if (newKlass == IntPtr.Zero) {
605 throw new System.InvalidOperationException($"Failed to register class '{objectType.FullName}'");
607 AddToKlassTypeBiDictionary(newKlass, objectType);
612 private static IntPtr GetNativeBaseKlassPtr(System.Type objectType)
614 for (System.Type t = objectType.BaseType; t != null; t = t.BaseType)
616 var method = t.GetMethod("GetEflClassStatic",
617 System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
619 return (IntPtr) method.Invoke(null, null);
621 throw new System.InvalidOperationException($"Class '{objectType.FullName}' is not an Efl object");
624 private static IntPtr GetNativeKlassPtr(System.Type objectType)
626 var method = objectType.GetMethod("GetEflClassStatic",
627 System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
628 return (IntPtr) method?.Invoke(null, null);
631 public static void AddToKlassTypeBiDictionary(IntPtr klassPtr, System.Type objectType)
633 klassFromType[objectType] = klassPtr;
634 typeFromKlass[klassPtr] = objectType;
637 public static System.Collections.Concurrent.ConcurrentDictionary<System.Type, System.IntPtr> klassFromType
638 = new System.Collections.Concurrent.ConcurrentDictionary<System.Type, System.IntPtr>();
640 public static System.Collections.Concurrent.ConcurrentDictionary<System.IntPtr, System.Type> typeFromKlass
641 = new System.Collections.Concurrent.ConcurrentDictionary<System.IntPtr, System.Type>();
643 private static readonly object klassAllocLock = new object();
646 public interface IOwnershipTag
650 public class OwnTag : IOwnershipTag
654 public class NonOwnTag : IOwnershipTag
658 public class MarshalTest<T, U> : ICustomMarshaler
659 where U : IOwnershipTag
661 public static ICustomMarshaler GetInstance(string cookie)
663 Eina.Log.Debug("MarshalTest.GetInstace cookie " + cookie);
664 return new MarshalTest<T, U>();
666 public void CleanUpManagedData(object ManagedObj)
668 //Eina.Log.Warning("MarshalTest.CleanUpManagedData not implemented");
669 //throw new NotImplementedException();
672 public void CleanUpNativeData(IntPtr pNativeData)
674 //Eina.Log.Warning("MarshalTest.CleanUpNativeData not implemented");
675 //throw new NotImplementedException();
678 public int GetNativeDataSize()
680 Eina.Log.Debug("MarshalTest.GetNativeDataSize");
685 public IntPtr MarshalManagedToNative(object ManagedObj)
687 Eina.Log.Debug("MarshalTest.MarshallManagedToNative");
688 var r = ((IWrapper)ManagedObj).NativeHandle;
689 if (typeof(U) == typeof(OwnTag))
690 Efl.Eo.Globals.efl_ref(r);
694 public object MarshalNativeToManaged(IntPtr pNativeData)
696 Eina.Log.Debug("MarshalTest.MarshalNativeToManaged");
697 if (typeof(U) != typeof(OwnTag))
698 Efl.Eo.Globals.efl_ref(pNativeData);
699 return Activator.CreateInstance(typeof(T), new System.Object[] {pNativeData});
704 ///<summary>Marshals between System.Type instances and Eo classes (IntPtrs).</summary>
705 public class MarshalEflClass : ICustomMarshaler
707 public static ICustomMarshaler GetInstance(string cookie)
709 Eina.Log.Debug("MarshalTest.GetInstance cookie " + cookie);
710 return new MarshalEflClass();
712 public void CleanUpManagedData(object ManagedObj)
716 public void CleanUpNativeData(IntPtr pNativeData)
720 public int GetNativeDataSize()
722 Eina.Log.Debug("MarshalTest.GetNativeDataSize");
726 public IntPtr MarshalManagedToNative(object ManagedObj)
728 Eina.Log.Debug("MarshalTest.MarshallManagedToNative");
729 if (ManagedObj == null)
731 var t = (System.Type) ManagedObj;
732 return Efl.Eo.ClassRegister.GetKlass(t);
735 public object MarshalNativeToManaged(IntPtr pNativeData)
737 Eina.Log.Debug("MarshalTest.MarshalNativeToManaged");
738 if (pNativeData == IntPtr.Zero)
740 return Efl.Eo.ClassRegister.GetManagedType(pNativeData);
744 public class StringPassOwnershipMarshaler : ICustomMarshaler {
745 public object MarshalNativeToManaged(IntPtr pNativeData) {
746 var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
747 Eina.MemoryNative.Free(pNativeData);
751 public IntPtr MarshalManagedToNative(object managedObj) {
752 return Eina.MemoryNative.StrDup((string)managedObj);
755 public void CleanUpNativeData(IntPtr pNativeData) {
756 // No need to cleanup. C will take care of it.
759 public void CleanUpManagedData(object managedObj) {
762 public int GetNativeDataSize() {
766 public static ICustomMarshaler GetInstance(string cookie) {
767 if (marshaler == null) {
768 marshaler = new StringPassOwnershipMarshaler();
772 static private StringPassOwnershipMarshaler marshaler;
775 public class StringKeepOwnershipMarshaler: ICustomMarshaler {
776 public object MarshalNativeToManaged(IntPtr pNativeData) {
777 return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
780 public IntPtr MarshalManagedToNative(object managedObj) {
781 return Eina.StringConversion.ManagedStringToNativeUtf8Alloc((string)managedObj);
784 public void CleanUpNativeData(IntPtr pNativeData) {
785 // No need to free. The Native side will keep the ownership.
788 public void CleanUpManagedData(object managedObj) {
791 public int GetNativeDataSize() {
795 public static ICustomMarshaler GetInstance(string cookie) {
796 if (marshaler == null) {
797 marshaler = new StringKeepOwnershipMarshaler();
801 static private StringKeepOwnershipMarshaler marshaler;
804 public class StringsharePassOwnershipMarshaler : ICustomMarshaler {
805 public object MarshalNativeToManaged(IntPtr pNativeData) {
806 var ret = Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
807 Eina.Stringshare.eina_stringshare_del(pNativeData);
811 public IntPtr MarshalManagedToNative(object managedObj) {
812 return Eina.Stringshare.eina_stringshare_add((string)managedObj);
815 public void CleanUpNativeData(IntPtr pNativeData) {
816 // No need to free as it's for own() parameters.
819 public void CleanUpManagedData(object managedObj) {
822 public int GetNativeDataSize() {
826 public static ICustomMarshaler GetInstance(string cookie) {
827 if (marshaler == null) {
828 marshaler = new StringsharePassOwnershipMarshaler();
832 static private StringsharePassOwnershipMarshaler marshaler;
835 public class StringshareKeepOwnershipMarshaler : ICustomMarshaler {
836 public object MarshalNativeToManaged(IntPtr pNativeData) {
837 return Eina.StringConversion.NativeUtf8ToManagedString(pNativeData);
840 public IntPtr MarshalManagedToNative(object managedObj) {
841 return Eina.Stringshare.eina_stringshare_add((string)managedObj);
844 public void CleanUpNativeData(IntPtr pNativeData) {
845 // No need to free, as the native side will keep ownership.
848 public void CleanUpManagedData(object managedObj) {
851 public int GetNativeDataSize() {
855 public static ICustomMarshaler GetInstance(string cookie) {
856 if (marshaler == null) {
857 marshaler = new StringshareKeepOwnershipMarshaler();
861 static private StringshareKeepOwnershipMarshaler marshaler;
864 public class StrbufPassOwnershipMarshaler : ICustomMarshaler {
865 public object MarshalNativeToManaged(IntPtr pNativeData) {
866 return new Eina.Strbuf(pNativeData, Eina.Ownership.Managed);
869 public IntPtr MarshalManagedToNative(object managedObj) {
870 Eina.Strbuf buf = managedObj as Eina.Strbuf;
871 buf.ReleaseOwnership();
875 public void CleanUpNativeData(IntPtr pNativeData) {
876 // No need to cleanup. C will take care of it.
879 public void CleanUpManagedData(object managedObj) {
882 public int GetNativeDataSize() {
886 public static ICustomMarshaler GetInstance(string cookie) {
887 if (marshaler == null) {
888 marshaler = new StrbufPassOwnershipMarshaler();
892 static private StrbufPassOwnershipMarshaler marshaler;
895 public class StrbufKeepOwnershipMarshaler: ICustomMarshaler {
896 public object MarshalNativeToManaged(IntPtr pNativeData) {
897 return new Eina.Strbuf(pNativeData, Eina.Ownership.Unmanaged);
900 public IntPtr MarshalManagedToNative(object managedObj) {
901 Eina.Strbuf buf = managedObj as Eina.Strbuf;
905 public void CleanUpNativeData(IntPtr pNativeData) {
906 // No need to free. The Native side will keep the ownership.
909 public void CleanUpManagedData(object managedObj) {
912 public int GetNativeDataSize() {
916 public static ICustomMarshaler GetInstance(string cookie) {
917 if (marshaler == null) {
918 marshaler = new StrbufKeepOwnershipMarshaler();
922 static private StrbufKeepOwnershipMarshaler marshaler;
929 /// <summary>General exception for errors inside the binding.</summary>
930 public class EflException : Exception
932 /// <summary>Create a new EflException with the given message.</summary>
933 public EflException(string message) : base(message)
938 /// <summary>Exception to be raised when a Task fails due to a failed Eina.Future.</summary>
939 public class FutureException : EflException
941 /// <summary>The error code returned by the failed Eina.Future.</summary>
942 public Eina.Error Error { get; private set; }
944 /// <summary>Construct a new exception from the Eina.Error stored in the given Eina.Value.</summary>
945 public FutureException(Eina.Value value) : base("Future failed.")
947 if (value.GetValueType() != Eina.ValueType.Error)
948 throw new ArgumentException("FutureException must receive an Eina.Value with Eina.Error.");