Object.cs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. //
  2. // Urho's Object C# sugar
  3. //
  4. // Authors:
  5. // Miguel de Icaza ([email protected])
  6. //
  7. // Copyrigh 2015 Xamarin INc
  8. //
  9. using System;
  10. using System.Runtime.InteropServices;
  11. namespace Urho {
  12. public partial class UrhoObject : RefCounted
  13. {
  14. [MonoPInvokeCallback(typeof(ObjectCallbackSignature))]
  15. internal static void ObjectCallback(IntPtr data, int stringHash, IntPtr variantMap)
  16. {
  17. GCHandle gch = GCHandle.FromIntPtr(data);
  18. Action<IntPtr> a = (Action<IntPtr>)gch.Target;
  19. a(variantMap);
  20. }
  21. internal static ObjectCallbackSignature ObjectCallbackInstance = ObjectCallback;
  22. [DllImport(Consts.NativeImport, CallingConvention = CallingConvention.Cdecl)]
  23. internal static extern void FreeBuffer(IntPtr buffer);
  24. [DllImport(Consts.NativeImport, CallingConvention = CallingConvention.Cdecl)]
  25. internal static extern IntPtr urho_subscribe_event(IntPtr target, ObjectCallbackSignature act, IntPtr data, int eventNameHash);
  26. public Subscription SubscribeToEvent(string eventName, Action<EventDataContainer> handler)
  27. {
  28. return SubscribeToEvent(new StringHash(eventName), handler);
  29. }
  30. public Subscription SubscribeToEvent(StringHash eventName, Action<EventDataContainer> handler)
  31. {
  32. var s = new Subscription(ptr => handler(new EventDataContainer(ptr)));
  33. s.UnmanagedProxy = urho_subscribe_event(handle, ObjectCallbackInstance, GCHandle.ToIntPtr(s.gch), eventName.Code);
  34. return s;
  35. }
  36. }
  37. }