Browse Source

A few fixes

Krzysztof Krysiński 1 year ago
parent
commit
23627278e5

+ 2 - 2
src/PixiEditor.Extensions.Wasm/native/layout_builder_api.c

@@ -8,7 +8,7 @@ __attribute((import_name("subscribe_to_event")))
 void subscribe_to_event(int32_t elementId, char* eventName, int32_t length);
 void subscribe_to_event(int32_t elementId, char* eventName, int32_t length);
 
 
 __attribute__((import_name("state_changed")))
 __attribute__((import_name("state_changed")))
-void state_changed(uint32_t elementId, uint8_t* data, int32_t length);
+void state_changed(int32_t elementId, uint8_t* data, int32_t length);
 
 
 void internal_subscribe_to_event(int32_t elementId, MonoString* eventName)
 void internal_subscribe_to_event(int32_t elementId, MonoString* eventName)
 {
 {
@@ -17,7 +17,7 @@ void internal_subscribe_to_event(int32_t elementId, MonoString* eventName)
 }
 }
 
 
 __attribute((export_name("raise_element_event")))
 __attribute((export_name("raise_element_event")))
-void raise_element_event(int elementId, const char* eventName)
+void raise_element_event(int32_t elementId, const char* eventName)
 {
 {
     MonoMethod* method = lookup_interop_method("EventRaised");
     MonoMethod* method = lookup_interop_method("EventRaised");
     void* args[] = { &elementId, mono_wasm_string_from_js(eventName) };
     void* args[] = { &elementId, mono_wasm_string_from_js(eventName) };

+ 2 - 38
src/PixiEditor.Extensions.WasmRuntime/WasmExtensionInstance.cs

@@ -71,54 +71,18 @@ public partial class WasmExtensionInstance : Extension
 
 
     private void DefinePixiEditorApi()
     private void DefinePixiEditorApi()
     {
     {
+        LinkApiFunctions();
         Linker.DefineFunction("env", "log_message", (int messageOffset, int messageLength) =>
         Linker.DefineFunction("env", "log_message", (int messageOffset, int messageLength) =>
         {
         {
             string messageString = WasmMemoryUtility.GetString(messageOffset, messageLength);
             string messageString = WasmMemoryUtility.GetString(messageOffset, messageLength);
             Console.WriteLine(messageString.ReplaceLineEndings());
             Console.WriteLine(messageString.ReplaceLineEndings());
         });
         });
 
 
-        Linker.DefineFunction("env", "create_popup_window",(int titleOffset, int titleLength, int bodyOffset, int bodyLength) =>
-        {
-            string title = WasmMemoryUtility.GetString(titleOffset, titleLength);
-            Span<byte> arr = memory.GetSpan<byte>(bodyOffset, bodyLength);
-
-            var body = LayoutBuilder.Deserialize(arr, DuplicateResolutionTactic.ThrowException);
-
-            var popupWindow = Api.Windowing.CreatePopupWindow(title, body.BuildNative());
-
-            int handle = NativeObjectManager.AddObject(popupWindow);
-            return WasmMemoryUtility.WriteInt32(handle);
-        });
-
-        Linker.DefineFunction("env", "set_window_title", (int handle, int titleOffset, int titleLength) =>
-        {
-            string title = WasmMemoryUtility.GetString(titleOffset, titleLength);
-            var window = NativeObjectManager.GetObject<PopupWindow>(memory.ReadInt32(handle));
-            window.Title = title;
-        });
-
-        Linker.DefineFunction("env", "get_window_title", (int handle) =>
-        {
-            var window = NativeObjectManager.GetObject<PopupWindow>(memory.ReadInt32(handle));
-            return WasmMemoryUtility.WriteString(window.Title);
-        });
-
-        Linker.DefineFunction("env", "show_window", (int handle) =>
-        {
-            var window = NativeObjectManager.GetObject<PopupWindow>(memory.ReadInt32(handle));
-            window.Show();
-        });
-
-        Linker.DefineFunction("env", "close_window", (int handle) =>
-        {
-            var window = NativeObjectManager.GetObject<PopupWindow>(memory.ReadInt32(handle));
-            window.Close();
-        });
-
         Linker.DefineFunction("env", "subscribe_to_event", (int controlId, int eventNameOffset, int eventNameLengthOffset) =>
         Linker.DefineFunction("env", "subscribe_to_event", (int controlId, int eventNameOffset, int eventNameLengthOffset) =>
         {
         {
             string eventName = WasmMemoryUtility.GetString(eventNameOffset, eventNameLengthOffset);
             string eventName = WasmMemoryUtility.GetString(eventNameOffset, eventNameLengthOffset);
 
 
+            // TODO: Make sure controlId is actually a id and not wasm memory address
             LayoutBuilder.ManagedElements[controlId].AddEvent(eventName, (args) =>
             LayoutBuilder.ManagedElements[controlId].AddEvent(eventName, (args) =>
             {
             {
                 var action = Instance.GetAction<int, int>("raise_element_event");
                 var action = Instance.GetAction<int, int>("raise_element_event");

+ 29 - 0
src/PixiEditor.Extensions.WasmRuntime/WindowingApi.cs

@@ -1,4 +1,5 @@
 using PixiEditor.Extensions.FlyUI.Elements;
 using PixiEditor.Extensions.FlyUI.Elements;
+using PixiEditor.Extensions.Windowing;
 
 
 namespace PixiEditor.Extensions.WasmRuntime;
 namespace PixiEditor.Extensions.WasmRuntime;
 
 
@@ -13,4 +14,32 @@ internal class WindowingApi : ApiGroupHandler
         int handle = NativeObjectManager.AddObject(popupWindow);
         int handle = NativeObjectManager.AddObject(popupWindow);
         return handle;
         return handle;
     }
     }
+
+    [ApiFunction("set_window_title")]
+    public void SetWindowTitle(int handle, string title)
+    {
+        var window = NativeObjectManager.GetObject<PopupWindow>(handle);
+        window.Title = title;
+    }
+
+    [ApiFunction("get_window_title")]
+    public string GetWindowTitle(int handle)
+    {
+        var window = NativeObjectManager.GetObject<PopupWindow>(handle);
+        return window.Title;
+    }
+
+    [ApiFunction("show_window")]
+    public void ShowWindow(int handle)
+    {
+        var window = NativeObjectManager.GetObject<PopupWindow>(handle);
+        window.Show();
+    }
+
+    [ApiFunction("close_window")]
+    public void CloseWindow(int handle)
+    {
+        var window = NativeObjectManager.GetObject<PopupWindow>(handle);
+        window.Close();
+    }
 }
 }

+ 13 - 5
src/PixiEditor.WasmApi.Gen/MethodBodyRewriter.cs

@@ -29,17 +29,25 @@ public class MethodBodyRewriter : CSharpSyntaxRewriter
     {
     {
         var memberSymbol = MethodSemanticModel.GetSymbolInfo(node).Symbol;
         var memberSymbol = MethodSemanticModel.GetSymbolInfo(node).Symbol;
 
 
-        if(memberSymbol.Kind != SymbolKind.Property && memberSymbol.Kind != SymbolKind.Field)
+        if(memberSymbol.Kind != SymbolKind.Field && memberSymbol.Kind != SymbolKind.Method)
         {
         {
             return base.VisitMemberAccessExpression(node);
             return base.VisitMemberAccessExpression(node);
         }
         }
 
 
-        if(!memberSymbol.IsStatic)
+        string fullyQualifiedName = memberSymbol.ToDisplayString();
+
+        if (memberSymbol is { Kind: SymbolKind.Method, IsStatic: false })
         {
         {
-            return base.VisitMemberAccessExpression(node);
-        }
+            var genericArguments = ((IMethodSymbol)memberSymbol).TypeArguments;
 
 
-        var fullyQualifiedName = memberSymbol.ToDisplayString();
+            var genericArgumentsString = genericArguments.Length > 0
+                ? $"<{string.Join(", ", genericArguments.Select(x => x.ToDisplayString()))}>"
+                : string.Empty;
+
+            string caller = node.Expression.ToFullString();
+
+            fullyQualifiedName = $"{caller}.{memberSymbol.Name}{genericArgumentsString}";
+        }
 
 
         var newMemberAccess = SyntaxFactory.ParseExpression(fullyQualifiedName);
         var newMemberAccess = SyntaxFactory.ParseExpression(fullyQualifiedName);
 
 

+ 1 - 1
src/WasmSampleExtension/SampleExtension.cs

@@ -20,7 +20,7 @@ public class SampleExtension : WasmExtension
                 )
                 )
             );
             );
 
 
-        Api.WindowProvider.CreatePopupWindow("WASM SampleExtension", layout);
+        Api.WindowProvider.CreatePopupWindow("WASM SampleExtension", layout).Show();
     }
     }
 }
 }