private void WriteDelegate()

in utils/SkiaSharpGenerator/Generate/Generator.cs [96:143]


		private void WriteDelegate(TextWriter writer, CppTypedef del)
		{
			if (!(((CppPointerType)del.ElementType).ElementType is CppFunctionType function))
			{
				Log?.LogWarning($"Unknown delegate type {del}");

				writer.WriteLine($"// TODO: {del}");
				return;
			}

			var name = del.GetDisplayName();

			Log?.LogVerbose($"    {name}");

			functionMappings.TryGetValue(name, out var map);
			name = map?.CsType ?? CleanName(name);

			writer.WriteLine($"\t// {del}");
			writer.WriteLine($"\t[UnmanagedFunctionPointer (CallingConvention.Cdecl)]");

			var paramsList = new List<string>();
			for (var i = 0; i < function.Parameters.Count; i++)
			{
				var p = function.Parameters[i];
				var n = string.IsNullOrEmpty(p.Name) ? $"param{i}" : p.Name;
				var t = GetType(p.Type);
				var cppT = GetCppType(p.Type);
				if (t == "Boolean" || cppT == "bool")
					t = $"[MarshalAs (UnmanagedType.I1)] bool";
				if (map != null && map.Parameters.TryGetValue(i.ToString(), out var newT))
					t = newT;
				paramsList.Add($"{t} {n}");
			}

			var returnType = GetType(function.ReturnType);
			if (map != null && map.Parameters.TryGetValue("-1", out var newR))
			{
				returnType = newR;
			}
			else if (returnType == "Boolean" || GetCppType(function.ReturnType) == "bool")
			{
				returnType = "bool";
				writer.WriteLine($"\t[return: MarshalAs (UnmanagedType.I1)]");
			}

			writer.WriteLine($"\tinternal unsafe delegate {returnType} {name}({string.Join(", ", paramsList)});");
			writer.WriteLine();
		}