diff --git a/.gitattributes b/.gitattributes index 627dcc833..5e5a77124 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,5 @@ -src/InfiniFrame.NativeBridge/Native/Dependencies/* linguist-vendored -src/InfiniFrame.NativeBridge/Native/Dependencies/**/* linguist-vendored +src/InfiniFrame.NativeBridge/Native/src/Dependencies/* linguist-vendored +src/InfiniFrame.NativeBridge/Native/src/Dependencies/**/* linguist-vendored *.sh text eol=lf .devcontainer/devcontainer.json text working-tree-encoding=UTF-8 eol=lf \ No newline at end of file diff --git a/.github/actions/setup-dependencies-native/action.yml b/.github/actions/setup-dependencies-native/action.yml index ead308bc3..c7c4373a2 100644 --- a/.github/actions/setup-dependencies-native/action.yml +++ b/.github/actions/setup-dependencies-native/action.yml @@ -1,5 +1,5 @@ name: Setup Native Dependencies -description: Install and cache Native related dependencies for Linux/macOS runners. +description: Install and cache Native related dependencies and optional NativeBridge NuGet restore. inputs: brew-cache-key: @@ -10,6 +10,10 @@ inputs: description: Homebrew cache restore key prefix for macOS runners required: false default: "" + restore-nativebridge-packages: + description: Restore InfiniFrame.NativeBridge NuGet packages on Windows + required: false + default: "false" runs: using: composite @@ -96,3 +100,9 @@ runs: if ! command -v pwsh >/dev/null 2>&1; then brew list --cask powershell >/dev/null 2>&1 || brew install --cask powershell fi + + - name: Restore NativeBridge NuGet packages (Windows) + if: runner.os == 'Windows' && inputs['restore-nativebridge-packages'] == 'true' + shell: pwsh + run: | + dotnet restore ./src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj diff --git a/.github/workflows/ci-codeql.yml b/.github/workflows/ci-codeql.yml index 2464640f8..cf07feba2 100644 --- a/.github/workflows/ci-codeql.yml +++ b/.github/workflows/ci-codeql.yml @@ -194,6 +194,7 @@ jobs: with: brew-cache-key: ${{ runner.os }}-brew-codeql-${{ hashFiles('.github/actions/setup-dependencies-native/action.yml', '.github/workflows/shared-testing-macos.yml') }} brew-restore-key: ${{ runner.os }}-brew-codeql- + restore-nativebridge-packages: 'true' - name: Initialize CodeQL uses: github/codeql-action/init@v4 @@ -269,6 +270,7 @@ jobs: with: brew-cache-key: ${{ matrix.os }}-${{ matrix.arch }}-brew-codeql-${{ hashFiles('.github/actions/setup-dependencies-native/action.yml', '.github/workflows/ci-codeql.yml') }} brew-restore-key: ${{ matrix.os }}-${{ matrix.arch }}-brew-codeql- + restore-nativebridge-packages: 'true' - name: Initialize CodeQL uses: github/codeql-action/init@v4 diff --git a/.github/workflows/shared-release-build.yml b/.github/workflows/shared-release-build.yml index 0f2069225..5be107d48 100644 --- a/.github/workflows/shared-release-build.yml +++ b/.github/workflows/shared-release-build.yml @@ -62,6 +62,7 @@ jobs: with: brew-cache-key: ${{ matrix.os }}-${{ matrix.arch }}-brew-native-${{ hashFiles('.github/actions/setup-dependencies-native/action.yml', '.github/workflows/shared-release-build.yml') }} brew-restore-key: ${{ matrix.os }}-${{ matrix.arch }}-brew-native- + restore-nativebridge-packages: 'true' - name: Build Native shell: bash diff --git a/.github/workflows/shared-testing-build.yml b/.github/workflows/shared-testing-build.yml index 10bcc7472..507621fa4 100644 --- a/.github/workflows/shared-testing-build.yml +++ b/.github/workflows/shared-testing-build.yml @@ -68,6 +68,7 @@ jobs: with: brew-cache-key: ${{ matrix.os }}-${{ matrix.arch }}-brew-native-${{ hashFiles('.github/actions/setup-dependencies-native/action.yml', '.github/workflows/shared-testing-build.yml') }} brew-restore-key: ${{ matrix.os }}-${{ matrix.arch }}-brew-native- + restore-nativebridge-packages: 'true' - name: Build Native shell: pwsh diff --git a/.gitignore b/.gitignore index db4b656ba..dc6e1bf7e 100644 --- a/.gitignore +++ b/.gitignore @@ -356,8 +356,8 @@ healthchecksdb /src/InfiniFrame.NativeBridge/Native/cmake-build-release-linux/ /src/InfiniFrame.NativeBridge/Native/cmake-build-release-linux-wsl/ /src/InfiniFrame.NativeBridge/Native/cmake-build-release-windows/ -/src/InfiniFrame.NativeBridge/Native/Embedded/InfiniFrameJs/InfiniFrameJs.cpp -/src/InfiniFrame.NativeBridge/Native/Embedded/InfiniFrameJs/InfiniFrameJs.h +/src/InfiniFrame.NativeBridge/Native/src/Embedded/InfiniFrameJs/InfiniFrameJs.cpp +/src/InfiniFrame.NativeBridge/Native/src/Embedded/InfiniFrameJs/InfiniFrameJs.h # wwwroot folders from js web based projects /examples/InfiniFrameExample.WebApp.React/wwwroot/ diff --git a/Directory.Packages.props b/Directory.Packages.props index ee789ec54..67cf251a7 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -26,6 +26,8 @@ + + @@ -38,4 +40,4 @@ - \ No newline at end of file + diff --git a/docs/docs/migration/photino-breaking-changes.md b/docs/docs/migration/photino-breaking-changes.md index cd0970993..ec0892fc5 100644 --- a/docs/docs/migration/photino-breaking-changes.md +++ b/docs/docs/migration/photino-breaking-changes.md @@ -26,12 +26,12 @@ This document walks through what changed to help you migrate. | Native DLL | `Photino.Native` | `InfiniFrame.Native` (internal) | | C++ class | `Photino` | `InfiniFrameWindow` | | C++ init params | `PhotinoInitParams` | `InfiniFrameInitParams` | -| Exported function prefix | `Photino_` | `InfiniFrame_` | +| Exported function prefix | `Photino_` | `InfiniFrameNative_` | | Default window title | `"Photino"` | `"InfiniFrame"` | | Default user agent | `"Photino WebView"` | `"InfiniFrame WebView"` | | Default temp path | `%LocalAppData%\Photino` (Windows only) | `%TEMP%\infiniframe` (all platforms) | -Every type that was prefixed `Photino` is now prefixed `InfiniFrame`. If you're calling the native DLL directly via P/Invoke, all exported symbol names need to change from `Photino_*` to `InfiniFrame_*`. +Every type that was prefixed `Photino` is now prefixed `InfiniFrame`. If you're calling the native DLL directly via P/Invoke, all exported symbol names need to change from `Photino_*` to `InfiniFrameNative_*`. ## Entry Point and Builder API @@ -288,7 +288,7 @@ static extern void Photino_SetTitle(IntPtr instance, string title); // InfiniFrame [LibraryImport("InfiniFrame.Native", ...)] -static partial void InfiniFrame_SetTitle(IntPtr instance, ...); +static partial void InfiniFrameNative_SetTitle(IntPtr instance, ...); ``` ### String ownership @@ -298,8 +298,8 @@ Photino has no explicit API for freeing native-allocated strings, which causes m InfiniFrame exports explicit free functions that must be called on any string returned from the native layer: ```csharp -InfiniFrame_FreeString(ptr); -InfiniFrame_FreeStringArray(ptr, count); +InfiniFrameNative_FreeString(ptr); +InfiniFrameNative_FreeStringArray(ptr, count); ``` The managed wrapper calls these automatically. If you're calling native exports directly, you're responsible for invoking them yourself. @@ -313,7 +313,7 @@ The native `SaveFileDialog` export gained a `defaultFileName` parameter: Photino_ShowSaveFile(title, defaultPath, filters, count) // InfiniFrame -InfiniFrame_ShowSaveFile(title, defaultPath, filters, count, defaultFileName) +InfiniFrameNative_ShowSaveFile(title, defaultPath, filters, count, defaultFileName) ``` ## Known Photino Issues Addressed @@ -321,8 +321,8 @@ InfiniFrame_ShowSaveFile(title, defaultPath, filters, count, defaultFileName) | Photino Issue | Description | How InfiniFrame addresses it | |------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------| | [photino.native #173/174](https://github.com/tryphotino/photino.native/issues/173) | Custom scheme handlers completely broken on Windows (`WebResourceRequested` never fires) | Rewritten registration path; scheme handlers tested end-to-end in examples | -| [photino.native #165](https://github.com/tryphotino/photino.native/issues/165) | Memory leak in `SendWebMessage` on Windows | Explicit `InfiniFrame_FreeString` ownership model; Pimpl isolates per-window native allocations | -| [photino.native #158](https://github.com/tryphotino/photino.native/issues/158) | No way to programmatically focus a window | `InfiniFrame_SetFocused` / `InfiniFrame_GetFocused` exported and exposed via `IInfiniFrameWindow.Focused` | +| [photino.native #165](https://github.com/tryphotino/photino.native/issues/165) | Memory leak in `SendWebMessage` on Windows | Explicit `InfiniFrameNative_FreeString` ownership model; Pimpl isolates per-window native allocations | +| [photino.native #158](https://github.com/tryphotino/photino.native/issues/158) | No way to programmatically focus a window | `InfiniFrameNative_SetFocused` / `InfiniFrameNative_GetFocused` exported and exposed via `IInfiniFrameWindow.Focused` | | [photino.native #163](https://github.com/tryphotino/photino.native/issues/163) | UTF encoding bug in `SetWebView2RuntimePath` silently corrupts non-ASCII paths | `simdutf` used for all UTF-8/UTF-16 conversions on Windows | | [photino.native #141](https://github.com/tryphotino/photino.native/issues/141) | Stack overflow in `WaitForExit` on Linux | Per-window independent message loops; no shared global `MessageLoopState` lock | | [photino.NET #75](https://github.com/tryphotino/photino.NET/issues/75) | `RegisterWindowClosingHandler` does not fire on Linux | Closing handler rewritten using the GTK `delete-event` signal correctly | diff --git a/native-vendor-deps.json b/native-vendor-deps.json index e9d736af1..b639bc384 100644 --- a/native-vendor-deps.json +++ b/native-vendor-deps.json @@ -7,18 +7,18 @@ "assets": [ { "asset": "simdjson.h", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/simdjson.h" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/simdjson.h" }, { "asset": "simdjson.cpp", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/simdjson.cpp" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/simdjson.cpp" } ], "source_files": [], "license_files": [ { "source": "https://raw.githubusercontent.com/simdjson/simdjson/{tag}/LICENSE", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/LICENSE" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/LICENSE" } ] }, @@ -29,26 +29,26 @@ "assets": [ { "asset": "simdutf.h", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf.h" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf.h" }, { "asset": "simdutf.cpp", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf.cpp" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf.cpp" }, { "asset": "simdutf_c.h", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf_c.h" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf_c.h" } ], "source_files": [], "license_files": [ { "source": "https://raw.githubusercontent.com/simdutf/simdutf/{tag}/LICENSE-MIT", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/LICENSE-MIT" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/LICENSE-MIT" }, { "source": "https://raw.githubusercontent.com/simdutf/simdutf/{tag}/LICENSE-APACHE", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/LICENSE-APACHE" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/LICENSE-APACHE" } ] }, @@ -60,17 +60,17 @@ "source_files": [ { "source": "https://raw.githubusercontent.com/mohabouje/WinToast/{tag}/include/wintoastlib.h", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/wintoastlib.h" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/wintoastlib.h" }, { "source": "https://raw.githubusercontent.com/mohabouje/WinToast/{tag}/src/wintoastlib.cpp", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/wintoastlib.cpp" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/wintoastlib.cpp" } ], "license_files": [ { "source": "https://raw.githubusercontent.com/mohabouje/WinToast/{tag}/LICENSE.txt", - "destination": "src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/LICENSE.txt" + "destination": "src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/LICENSE.txt" } ] } diff --git a/src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj b/src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj index ee24b38d4..a57bea433 100644 --- a/src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj +++ b/src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj @@ -39,6 +39,14 @@ + + diff --git a/src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj.DotSettings b/src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj.DotSettings index fd1a4a531..9a82f24d4 100644 --- a/src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj.DotSettings +++ b/src/InfiniFrame.NativeBridge/InfiniFrame.NativeBridge.csproj.DotSettings @@ -1,3 +1,6 @@  True - True \ No newline at end of file + True + True + True + True \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Managed/LibraryImports/InfiniFrameNative.cs b/src/InfiniFrame.NativeBridge/Managed/LibraryImports/InfiniFrameNative.cs deleted file mode 100644 index f3fae3bab..000000000 --- a/src/InfiniFrame.NativeBridge/Managed/LibraryImports/InfiniFrameNative.cs +++ /dev/null @@ -1,398 +0,0 @@ -// --------------------------------------------------------------------------------------------------------------------- -// Imports -// --------------------------------------------------------------------------------------------------------------------- -using InfiniFrame.NativeBridge.Delegates; -using InfiniFrame.NativeBridge.Dialogs; -using InfiniFrame.NativeBridge.Parameters; -using System.Drawing; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Runtime.InteropServices.Marshalling; -using static InfiniFrame.NativeBridge.ArtifactManifest; - -namespace InfiniFrame.NativeBridge; -// --------------------------------------------------------------------------------------------------------------------- -// Code -// --------------------------------------------------------------------------------------------------------------------- -public static partial class InfiniFrameNative { - - #region MARSHAL CALLS FROM Non-UI Thread to UI Thread - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_Invoke", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus Invoke(IntPtr instance, Action callback); - #endregion - #region Register - // ReSharper disable once UnusedMethodReturnValue.Local - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_register_win32", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus RegisterWin32(IntPtr hInstance); - - // ReSharper disable once UnusedMethodReturnValue.Local - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_register_mac", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus RegisterMac(); - #endregion - - #region CTOR-DTOR - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_ctor", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus Constructor([MarshalUsing(typeof(InfiniFrameNativeParametersMarshaller))] in InfiniFrameNativeParameters parameters, out IntPtr value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_dtor"), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus Destructor(IntPtr instance); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_AddCustomSchemeName", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus AddCustomSchemeName(IntPtr instance, string scheme); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_Close", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus Close(IntPtr instance); - #endregion - - #region Get - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_getHwnd_win32", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetWindowHandlerWin32(IntPtr instance, out IntPtr value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetAllMonitors", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetAllMonitors(IntPtr instance, CppGetAllMonitorsDelegate callback); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetTransparentEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetTransparentEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetContextMenuEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetContextMenuEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetDevToolsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetDevToolsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetFullScreen", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetFullScreen(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool fullScreen); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetGrantBrowserPermissions", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetGrantBrowserPermissions(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool grant); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetUserAgent", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetUserAgent(IntPtr instance, out IntPtr value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetMediaAutoplayEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetMediaAutoplayEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetFileSystemAccessEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetFileSystemAccessEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetWebSecurityEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetWebSecurityEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetJavascriptClipboardAccessEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetJavascriptClipboardAccessEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetMediaStreamEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetMediaStreamEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetSmoothScrollingEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetSmoothScrollingEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetIgnoreCertificateErrorsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetIgnoreCertificateErrorsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetNotificationsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetNotificationsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetPosition", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetPosition(IntPtr instance, out int x, out int y); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetResizable", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetResizable(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool resizable); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetScreenDpi", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetScreenDpi(IntPtr instance, out uint value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetSize(IntPtr instance, out int width, out int height); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetMaxSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetMaxSize(IntPtr instance, out int maxWidth, out int maxHeight); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetMinSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetMinSize(IntPtr instance, out int minWidth, out int minHeight); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetTitle", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetTitle(IntPtr instance, out IntPtr value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetTopmost", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetTopmost(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool topmost); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetZoom", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetZoom(IntPtr instance, out int zoom); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetMaximized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetMaximized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool maximized); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetMinimized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetMinimized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool minimized); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetZoomEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetZoomEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool zoomEnabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetIconFileName", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetIconFileName(IntPtr instance, out IntPtr value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetFocused", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus GetFocused(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool isFocused); - #endregion - - #region Navigate - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_NavigateToString", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus NavigateToString(IntPtr instance, string content); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_NavigateToUrl", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus NavigateToUrl(IntPtr instance, string url); - #endregion - - #region Set - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_setWebView2RuntimePath_win32", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetWebView2RuntimePath_win32(IntPtr instance, string webView2RuntimePath); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetTransparentEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetTransparentEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetContextMenuEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetContextMenuEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetDevToolsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetDevToolsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetFullScreen", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetFullScreen(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool fullScreen); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetMaximized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetMaximized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool maximized); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetMaxSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetMaxSize(IntPtr instance, int maxWidth, int maxHeight); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetMinimized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetMinimized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool minimized); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetMinSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetMinSize(IntPtr instance, int minWidth, int minHeight); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetResizable", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetResizable(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool resizable); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetPosition", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetPosition(IntPtr instance, int x, int y); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetSize(IntPtr instance, int width, int height); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetTitle", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetTitle(IntPtr instance, string? title); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetTopmost", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetTopmost(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool topmost); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetIconFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetIconFile(IntPtr instance, string filename); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetZoom", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetZoom(IntPtr instance, int zoom); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetZoomEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetZoomEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool zoomEnabled); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SetFocused", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SetFocused(IntPtr instance); - #endregion - - #region Misc - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_Center", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus Center(IntPtr instance); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_Restore", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus Restore(IntPtr instance); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_ClearBrowserAutoFill", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus ClearBrowserAutoFill(IntPtr instance); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_SendWebMessage", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus SendWebMessage(IntPtr instance, string message); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_ShowNotification", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus ShowNotification(IntPtr instance, string title, string body); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_WaitForExit", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus WaitForExit(IntPtr instance); - #endregion - - #region Dialog - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_ShowOpenFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus ShowOpenFile(IntPtr inst, string title, string defaultPath, [MarshalAs(UnmanagedType.I1)] bool multiSelect, string[] filters, int filtersCount, out int resultCount, out IntPtr values); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_ShowOpenFolder", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus ShowOpenFolder(IntPtr inst, string title, string defaultPath, [MarshalAs(UnmanagedType.I1)] bool multiSelect, out int resultCount, out IntPtr values); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_ShowSaveFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus ShowSaveFile(IntPtr inst, string title, string defaultPath, string[] filters, int filtersCount, string? defaultFileName, out IntPtr value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_ShowMessage", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus ShowMessage(IntPtr inst, string title, string text, InfiniFrameDialogButtons buttons, InfiniFrameDialogIcon icon, out InfiniFrameDialogResult value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_FreeString", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus FreeString(IntPtr value); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_FreeStringArray", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - internal static partial InfiniFrameNativeInteropStatus FreeStringArray(IntPtr values, int count); - - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrame_GetLastErrorMessage", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] - private static partial InfiniFrameNativeInteropStatus GetLastErrorMessagePtr(out IntPtr value); - #endregion - - #region Overloads - internal static string? PtrToNativeString(IntPtr ptr) { - if (ptr == IntPtr.Zero) return null; - - return OperatingSystem.IsWindows() - ? Marshal.PtrToStringUni(ptr) - : Marshal.PtrToStringUTF8(ptr); - } - - internal static InfiniFrameNativeInteropStatus GetHeight(IntPtr instance, out int height) - => GetSize(instance, out _, out height); - - internal static InfiniFrameNativeInteropStatus GetWidth(IntPtr instance, out int width) - => GetSize(instance, out width, out _); - - internal static InfiniFrameNativeInteropStatus GetMaxHeight(IntPtr instance, out int maxHeight) - => GetMaxSize(instance, out _, out maxHeight); - - internal static InfiniFrameNativeInteropStatus GetMaxWidth(IntPtr instance, out int maxWidth) - => GetMaxSize(instance, out maxWidth, out _); - - internal static InfiniFrameNativeInteropStatus GetMinHeight(IntPtr instance, out int minHeight) - => GetMinSize(instance, out _, out minHeight); - - internal static InfiniFrameNativeInteropStatus GetMinWidth(IntPtr instance, out int minWidth) - => GetMinSize(instance, out minWidth, out _); - - internal static InfiniFrameNativeInteropStatus GetLeft(IntPtr instance, out int left) - => GetPosition(instance, out left, out _); - - internal static InfiniFrameNativeInteropStatus GetTop(IntPtr instance, out int top) - => GetPosition(instance, out _, out top); - - internal static InfiniFrameNativeInteropStatus GetSize(IntPtr instance, out Size size) { - InfiniFrameNativeInteropStatus status = GetSize(instance, out int width, out int height); - size = new Size(width, height); - return status; - } - - internal static InfiniFrameNativeInteropStatus GetMaxSize(IntPtr instance, out Size size) { - InfiniFrameNativeInteropStatus status = GetMaxSize(instance, out int width, out int height); - size = new Size(width, height); - return status; - } - - internal static InfiniFrameNativeInteropStatus GetMinSize(IntPtr instance, out Size size) { - InfiniFrameNativeInteropStatus status = GetMinSize(instance, out int width, out int height); - size = new Size(width, height); - return status; - } - - internal static InfiniFrameNativeInteropStatus GetPosition(IntPtr instance, out Point position) { - InfiniFrameNativeInteropStatus status = GetPosition(instance, out int left, out int top); - position = new Point(left, top); - return status; - } - - internal static InfiniFrameNativeInteropStatus GetWindowRectangle(IntPtr instance, out int x, out int y, out int width, out int height) { - InfiniFrameNativeInteropStatus sizeStatus = GetSize(instance, out width, out height); - if (sizeStatus != InfiniFrameNativeInteropStatus.Success) { - x = 0; - y = 0; - return sizeStatus; - } - - return GetPosition(instance, out x, out y); - } - - internal static InfiniFrameNativeInteropStatus GetWindowRectangle(IntPtr instance, out Rectangle rectangle) { - InfiniFrameNativeInteropStatus status = GetWindowRectangle(instance, out int x, out int y, out int width, out int height); - rectangle = new Rectangle(x, y, width, height); - return status; - } - - internal static InfiniFrameNativeInteropStatus GetUserAgent(IntPtr instance, out string? userAgent) { - InfiniFrameNativeInteropStatus status = GetUserAgent(instance, out IntPtr ptr); - try { - userAgent = PtrToNativeString(ptr); - } - finally { - if (ptr != IntPtr.Zero) { - FreeString(ptr); - } - } - - return status; - } - - internal static InfiniFrameNativeInteropStatus GetTitle(IntPtr instance, out string? title) { - InfiniFrameNativeInteropStatus status = GetTitle(instance, out IntPtr ptr); - try { - title = PtrToNativeString(ptr); - } - finally { - if (ptr != IntPtr.Zero) { - FreeString(ptr); - } - } - - return status; - } - - internal static InfiniFrameNativeInteropStatus GetIconFileName(IntPtr instance, out string iconFileName) { - InfiniFrameNativeInteropStatus status = GetIconFileName(instance, out IntPtr ptr); - try { - iconFileName = PtrToNativeString(ptr) ?? string.Empty; - } - finally { - if (ptr != IntPtr.Zero) { - FreeString(ptr); - } - } - - return status; - } - - internal static string? GetLastErrorMessage() { - InfiniFrameNativeInteropStatus status = GetLastErrorMessagePtr(out IntPtr ptr); - if (status != InfiniFrameNativeInteropStatus.Success || ptr == IntPtr.Zero) return null; - - try { - return PtrToNativeString(ptr); - } - finally { - FreeString(ptr); - } - } - - internal static InfiniFrameNativeInteropStatus EnsureSucceeded(InfiniFrameNativeInteropStatus status, string operationName) { - - int fallbackLastError = Marshal.GetLastPInvokeError(); - - if (status is InfiniFrameNativeInteropStatus.Success && fallbackLastError is 0) return status; - - InfiniFrameNativeInteropStatus fallbackStatus = GetLastErrorMessagePtr(out IntPtr ptr); - - string? fallbackMessage; - if (fallbackStatus != InfiniFrameNativeInteropStatus.Success || ptr == IntPtr.Zero) { - fallbackMessage = "No native error message provided."; - } - else { - try { - fallbackMessage = PtrToNativeString(ptr); - } - finally { - FreeString(ptr); - } - } - - throw new ApplicationException($"Native interop call '{operationName}' failed with unknown status state. Fallback last error {fallbackLastError}. {fallbackMessage} {fallbackStatus}"); - } - #endregion -} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.CustomSchemes.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.CustomSchemes.cs new file mode 100644 index 000000000..3c1ab8959 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.CustomSchemes.cs @@ -0,0 +1,14 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_AddCustomSchemeName", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus AddCustomSchemeName(IntPtr instance, string scheme); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dialog.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dialog.cs new file mode 100644 index 000000000..8725f0910 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dialog.cs @@ -0,0 +1,68 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System; +using InfiniFrame.NativeBridge.Dialogs; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowOpenFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + private static partial InfiniFrameNativeInteropStatus ShowOpenFilePtr(IntPtr inst, string title, string defaultPath, [MarshalAs(UnmanagedType.I1)] bool multiSelect, string[] filters, int filtersCount, out int resultCount, out IntPtr values); + internal static InfiniFrameNativeInteropStatus ShowOpenFile(IntPtr instance, string title, string defaultPath, bool multiSelect, string[] filters, int filtersCount, out string?[] values) { + InfiniFrameNativeInteropStatus status = ShowOpenFilePtr(instance, title, defaultPath, multiSelect, filters, filtersCount, out int resultCount, out IntPtr ptrValues); + values = PtrToNativeStringArray(ptrValues, resultCount); + return status; + } + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowOpenFolder", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + private static partial InfiniFrameNativeInteropStatus ShowOpenFolderPtr(IntPtr inst, string title, string defaultPath, [MarshalAs(UnmanagedType.I1)] bool multiSelect, out int resultCount, out IntPtr values); + internal static InfiniFrameNativeInteropStatus ShowOpenFolder(IntPtr instance, string title, string defaultPath, bool multiSelect, out string?[] values) { + InfiniFrameNativeInteropStatus status = ShowOpenFolderPtr(instance, title, defaultPath, multiSelect, out int resultCount, out IntPtr ptrValues); + values = PtrToNativeStringArray(ptrValues, resultCount); + return status; + } + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowSaveFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + private static partial InfiniFrameNativeInteropStatus ShowSaveFilePtr(IntPtr inst, string title, string defaultPath, string[] filters, int filtersCount, string? defaultFileName, out IntPtr value); + internal static InfiniFrameNativeInteropStatus ShowSaveFile(IntPtr instance, string title, string defaultPath, string[] filters, int filtersCount, string? defaultFileName, out string? value) { + InfiniFrameNativeInteropStatus status = ShowSaveFilePtr(instance, title, defaultPath, filters, filtersCount, defaultFileName, out IntPtr ptrValue); + try { + value = PtrToNativeString(ptrValue); + } + finally { + if (ptrValue != IntPtr.Zero) { + FreeString(ptrValue); + } + } + + return status; + } + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowMessage", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus ShowMessage(IntPtr inst, string title, string text, InfiniFrameDialogButtons buttons, InfiniFrameDialogIcon icon, out InfiniFrameDialogResult value); + + private static string?[] PtrToNativeStringArray(IntPtr valuesPtr, int count) { + if (valuesPtr == IntPtr.Zero || count <= 0) { + return Array.Empty(); + } + + try { + IntPtr[] ptrArray = new IntPtr[count]; + string?[] values = new string?[count]; + Marshal.Copy(valuesPtr, ptrArray, 0, count); + for (int i = 0; i < count; i++) { + values[i] = PtrToNativeString(ptrArray[i]); + } + + return values; + } + finally { + FreeStringArray(valuesPtr, count); + } + } +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dispatch.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dispatch.cs new file mode 100644 index 000000000..f34e9718a --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Dispatch.cs @@ -0,0 +1,14 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Invoke", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus Invoke(IntPtr instance, Action callback); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Events.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Events.cs new file mode 100644 index 000000000..cc5e011a5 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Events.cs @@ -0,0 +1,30 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using InfiniFrame.NativeBridge.Delegates; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetClosingCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetClosingCallback(IntPtr instance, CppClosingDelegate callback); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_setClosedCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetClosedCallback(IntPtr instance, CppClosedDelegate callback); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocusInCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetFocusInCallback(IntPtr instance, CppFocusInDelegate callback); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocusOutCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetFocusOutCallback(IntPtr instance, CppFocusOutDelegate callback); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMovedCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetMovedCallback(IntPtr instance, CppMovedDelegate callback); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetResizedCallback", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetResizedCallback(IntPtr instance, CppResizedDelegate callback); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Lifecycle.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Lifecycle.cs new file mode 100644 index 000000000..9706fa3e9 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Lifecycle.cs @@ -0,0 +1,25 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using InfiniFrame.NativeBridge.Parameters; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.InteropServices.Marshalling; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ctor", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus Constructor([MarshalUsing(typeof(InfiniFrameNativeParametersMarshaller))] in InfiniFrameNativeParameters parameters, out IntPtr value); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_dtor"), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus Destructor(IntPtr instance); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Close", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus Close(IntPtr instance); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_WaitForExit", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus WaitForExit(IntPtr instance); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Memory.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Memory.cs new file mode 100644 index 000000000..ada2ca8e5 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Memory.cs @@ -0,0 +1,32 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_FreeString", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus FreeString(IntPtr value); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_FreeStringArray", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus FreeStringArray(IntPtr values, int count); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetLastErrorMessage", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + private static partial InfiniFrameNativeInteropStatus GetLastErrorMessagePtr(out IntPtr value); + + internal static string? GetLastErrorMessage() { + InfiniFrameNativeInteropStatus status = GetLastErrorMessagePtr(out IntPtr ptr); + if (status != InfiniFrameNativeInteropStatus.Success || ptr == IntPtr.Zero) return null; + + try { + return PtrToNativeString(ptr); + } + finally { + FreeString(ptr); + } + } +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Monitors.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Monitors.cs new file mode 100644 index 000000000..1b3e7f7b6 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Monitors.cs @@ -0,0 +1,15 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using InfiniFrame.NativeBridge.Delegates; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetAllMonitors", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetAllMonitors(IntPtr instance, CppGetAllMonitorsDelegate callback); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.MacOs.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.MacOs.cs new file mode 100644 index 000000000..c7efcc656 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.MacOs.cs @@ -0,0 +1,14 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_register_mac", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus RegisterMac(); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.Windows.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.Windows.cs new file mode 100644 index 000000000..7fbebb5e3 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Platform.Windows.cs @@ -0,0 +1,24 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_register_win32", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus RegisterWin32(IntPtr hInstance); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_getHwnd_win32", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetWindowHandlerWin32(IntPtr instance, out IntPtr value); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_setWebView2RuntimePath_win32", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetWebView2RuntimePath_win32(IntPtr instance, string webView2RuntimePath); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetNotificationsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetNotificationsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Actions.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Actions.cs new file mode 100644 index 000000000..0509a826b --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Actions.cs @@ -0,0 +1,27 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Center", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus Center(IntPtr instance); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_Restore", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus Restore(IntPtr instance); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ClearBrowserAutoFill", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus ClearBrowserAutoFill(IntPtr instance); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFocused", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetFocused(IntPtr instance); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_ShowNotification", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus ShowNotification(IntPtr instance, string title, string body); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Get.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Get.cs new file mode 100644 index 000000000..840ee9f0d --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Get.cs @@ -0,0 +1,132 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTransparentEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetTransparentEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetContextMenuEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetContextMenuEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetZoomEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetZoomEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool zoomEnabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetDevToolsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetDevToolsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFullScreen", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetFullScreen(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool fullScreen); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetGrantBrowserPermissions", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetGrantBrowserPermissions(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool grant); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMediaAutoplayEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetMediaAutoplayEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFileSystemAccessEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetFileSystemAccessEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetWebSecurityEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetWebSecurityEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetJavascriptClipboardAccessEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetJavascriptClipboardAccessEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMediaStreamEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetMediaStreamEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetSmoothScrollingEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetSmoothScrollingEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetIgnoreCertificateErrorsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetIgnoreCertificateErrorsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMaximized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetMaximized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool maximized); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMinimized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetMinimized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool minimized); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetResizable", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetResizable(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool resizable); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTopmost", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetTopmost(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool topmost); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetFocused", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetFocused(IntPtr instance, [MarshalAs(UnmanagedType.I1)] out bool isFocused); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetPosition", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetPosition(IntPtr instance, out int x, out int y); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetSize(IntPtr instance, out int width, out int height); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMaxSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetMaxSize(IntPtr instance, out int maxWidth, out int maxHeight); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetMinSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetMinSize(IntPtr instance, out int minWidth, out int minHeight); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetScreenDpi", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetScreenDpi(IntPtr instance, out uint value); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetZoom", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus GetZoom(IntPtr instance, out int zoom); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetUserAgent", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + private static partial InfiniFrameNativeInteropStatus GetUserAgentPtr(IntPtr instance, out IntPtr value); + internal static InfiniFrameNativeInteropStatus GetUserAgent(IntPtr instance, out string? userAgent) { + InfiniFrameNativeInteropStatus status = GetUserAgentPtr(instance, out IntPtr ptr); + try { + userAgent = PtrToNativeString(ptr); + } + finally { + if (ptr != IntPtr.Zero) { + FreeString(ptr); + } + } + + return status; + } + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetTitle", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + private static partial InfiniFrameNativeInteropStatus GetTitlePtr(IntPtr instance, out IntPtr value); + internal static InfiniFrameNativeInteropStatus GetTitle(IntPtr instance, out string? title) { + InfiniFrameNativeInteropStatus status = GetTitlePtr(instance, out IntPtr ptr); + try { + title = PtrToNativeString(ptr); + } + finally { + if (ptr != IntPtr.Zero) { + FreeString(ptr); + } + } + + return status; + } + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_GetIconFileName", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + private static partial InfiniFrameNativeInteropStatus GetIconFileNamePtr(IntPtr instance, out IntPtr value); + internal static InfiniFrameNativeInteropStatus GetIconFileName(IntPtr instance, out string iconFileName) { + InfiniFrameNativeInteropStatus status = GetIconFileNamePtr(instance, out IntPtr ptr); + try { + iconFileName = PtrToNativeString(ptr) ?? string.Empty; + } + finally { + if (ptr != IntPtr.Zero) { + FreeString(ptr); + } + } + + return status; + } +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Navigation.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Navigation.cs new file mode 100644 index 000000000..345b5a3f1 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Navigation.cs @@ -0,0 +1,21 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_NavigateToString", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus NavigateToString(IntPtr instance, string content); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_NavigateToUrl", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus NavigateToUrl(IntPtr instance, string url); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SendWebMessage", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SendWebMessage(IntPtr instance, string message); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Set.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Set.cs new file mode 100644 index 000000000..fb8ccfa79 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Exports/InfiniFrameNative.Window.Set.cs @@ -0,0 +1,60 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTransparentEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetTransparentEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetContextMenuEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetContextMenuEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetZoomEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetZoomEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool zoomEnabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetDevToolsEnabled", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetDevToolsEnabled(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool enabled); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetFullScreen", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetFullScreen(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool fullScreen); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMaximized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetMaximized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool maximized); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMinimized", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetMinimized(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool minimized); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetResizable", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetResizable(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool resizable); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTopmost", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetTopmost(IntPtr instance, [MarshalAs(UnmanagedType.I1)] bool topmost); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetIconFile", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetIconFile(IntPtr instance, string filename); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetTitle", SetLastError = true, StringMarshalling = StringMarshalling.Utf8), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetTitle(IntPtr instance, string? title); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetZoom", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetZoom(IntPtr instance, int zoom); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetPosition", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetPosition(IntPtr instance, int x, int y); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetSize(IntPtr instance, int width, int height); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMaxSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetMaxSize(IntPtr instance, int maxWidth, int maxHeight); + + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNative_SetMinSize", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + internal static partial InfiniFrameNativeInteropStatus SetMinSize(IntPtr instance, int minWidth, int minHeight); +} diff --git a/src/InfiniFrame.NativeBridge/Managed/NativeApi/InfiniFrameNative.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/InfiniFrameNative.cs new file mode 100644 index 000000000..5e874a70d --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/InfiniFrameNative.cs @@ -0,0 +1,99 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +using System.Drawing; +using System.Runtime.InteropServices; + +namespace InfiniFrame.NativeBridge; +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +public partial class InfiniFrameNative { + internal static string? PtrToNativeString(IntPtr ptr) { + if (ptr == IntPtr.Zero) return null; + + return OperatingSystem.IsWindows() + ? Marshal.PtrToStringUni(ptr) + : Marshal.PtrToStringUTF8(ptr); + } + + internal static InfiniFrameNativeInteropStatus GetHeight(IntPtr instance, out int height) + => GetSize(instance, out _, out height); + + internal static InfiniFrameNativeInteropStatus GetWidth(IntPtr instance, out int width) + => GetSize(instance, out width, out _); + + internal static InfiniFrameNativeInteropStatus GetMaxHeight(IntPtr instance, out int maxHeight) + => GetMaxSize(instance, out _, out maxHeight); + + internal static InfiniFrameNativeInteropStatus GetMaxWidth(IntPtr instance, out int maxWidth) + => GetMaxSize(instance, out maxWidth, out _); + + internal static InfiniFrameNativeInteropStatus GetMinHeight(IntPtr instance, out int minHeight) + => GetMinSize(instance, out _, out minHeight); + + internal static InfiniFrameNativeInteropStatus GetMinWidth(IntPtr instance, out int minWidth) + => GetMinSize(instance, out minWidth, out _); + + internal static InfiniFrameNativeInteropStatus GetLeft(IntPtr instance, out int left) + => GetPosition(instance, out left, out _); + + internal static InfiniFrameNativeInteropStatus GetTop(IntPtr instance, out int top) + => GetPosition(instance, out _, out top); + + internal static InfiniFrameNativeInteropStatus GetSize(IntPtr instance, out Size size) { + InfiniFrameNativeInteropStatus status = GetSize(instance, out int width, out int height); + size = new Size(width, height); + return status; + } + + internal static InfiniFrameNativeInteropStatus GetMaxSize(IntPtr instance, out Size size) { + InfiniFrameNativeInteropStatus status = GetMaxSize(instance, out int width, out int height); + size = new Size(width, height); + return status; + } + + internal static InfiniFrameNativeInteropStatus GetMinSize(IntPtr instance, out Size size) { + InfiniFrameNativeInteropStatus status = GetMinSize(instance, out int width, out int height); + size = new Size(width, height); + return status; + } + + internal static InfiniFrameNativeInteropStatus GetPosition(IntPtr instance, out Point position) { + InfiniFrameNativeInteropStatus status = GetPosition(instance, out int left, out int top); + position = new Point(left, top); + return status; + } + + internal static InfiniFrameNativeInteropStatus GetWindowRectangle(IntPtr instance, out int x, out int y, out int width, out int height) { + InfiniFrameNativeInteropStatus sizeStatus = GetSize(instance, out width, out height); + if (sizeStatus != InfiniFrameNativeInteropStatus.Success) { + x = 0; + y = 0; + return sizeStatus; + } + + return GetPosition(instance, out x, out y); + } + + internal static InfiniFrameNativeInteropStatus GetWindowRectangle(IntPtr instance, out Rectangle rectangle) { + InfiniFrameNativeInteropStatus status = GetWindowRectangle(instance, out int x, out int y, out int width, out int height); + rectangle = new Rectangle(x, y, width, height); + return status; + } + + internal static InfiniFrameNativeInteropStatus EnsureSucceeded(InfiniFrameNativeInteropStatus status, string operationName) { + + int fallbackLastError = Marshal.GetLastPInvokeError(); + + if (status is InfiniFrameNativeInteropStatus.Success && fallbackLastError is 0) return status; + + const string noNativeMessage = "No native error message provided."; + string fallbackMessage = GetLastErrorMessage() ?? noNativeMessage; + InfiniFrameNativeInteropStatus fallbackStatus = fallbackMessage == noNativeMessage + ? InfiniFrameNativeInteropStatus.OperationFailed + : InfiniFrameNativeInteropStatus.Success; + + throw new ApplicationException($"Native interop call '{operationName}' failed with unknown status state. Fallback last error {fallbackLastError}. {fallbackMessage} {fallbackStatus}"); + } +} diff --git a/src/InfiniFrame.NativeBridge/Managed/LibraryImports/InfiniFrameNativeInteropStatus.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/InfiniFrameNativeInteropStatus.cs similarity index 100% rename from src/InfiniFrame.NativeBridge/Managed/LibraryImports/InfiniFrameNativeInteropStatus.cs rename to src/InfiniFrame.NativeBridge/Managed/NativeApi/InfiniFrameNativeInteropStatus.cs diff --git a/src/InfiniFrame.NativeBridge/Managed/LibraryImports/InfiniFrameNativeTesting.cs b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Testing/InfiniFrameNative.Testing.cs similarity index 67% rename from src/InfiniFrame.NativeBridge/Managed/LibraryImports/InfiniFrameNativeTesting.cs rename to src/InfiniFrame.NativeBridge/Managed/NativeApi/Testing/InfiniFrameNative.Testing.cs index cb545f853..068dbd2bf 100644 --- a/src/InfiniFrame.NativeBridge/Managed/LibraryImports/InfiniFrameNativeTesting.cs +++ b/src/InfiniFrame.NativeBridge/Managed/NativeApi/Testing/InfiniFrameNative.Testing.cs @@ -5,22 +5,20 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.InteropServices.Marshalling; -using static InfiniFrame.NativeBridge.ArtifactManifest; namespace InfiniFrame.NativeBridge; // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- -public static partial class InfiniFrameNativeTesting { -// #if InfiniFrameNativeTestExports - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrameNativeTests_NativeParametersReturnAsIs", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] +public partial class InfiniFrameNativeTesting { + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNativeTests_NativeParametersReturnAsIs", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus NativeParametersReturnAsIsNative( [MarshalUsing(typeof(InfiniFrameNativeParametersMarshaller))] in InfiniFrameNativeParameters parameters, out IntPtr newParameters ); - [LibraryImport(NativeLibraryName, EntryPoint = "InfiniFrameNativeTests_FreeInitParams", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] + [LibraryImport(ArtifactManifest.NativeLibraryName, EntryPoint = "InfiniFrameNativeTests_FreeInitParams", SetLastError = true), UnmanagedCallConv(CallConvs = [typeof(CallConvCdecl)])] private static partial InfiniFrameNativeInteropStatus FreeInitParamsNative(IntPtr parameters); /// @@ -45,15 +43,4 @@ internal static void FreeInitParams(IntPtr newParametersPtr) { FreeInitParamsNative(newParametersPtr), nameof(FreeInitParamsNative)); } -// #else -// internal static IntPtr NativeParametersReturnAsIsPtr(ref InfiniFrameNativeParameters parameters) { -// throw new PlatformNotSupportedException("InfiniFrame native test exports are not enabled for this build."); -// } -// -// internal static void FreeInitParams(IntPtr newParametersPtr) { -// if (newParametersPtr != IntPtr.Zero) { -// throw new PlatformNotSupportedException("InfiniFrame native test exports are not enabled for this build."); -// } -// } -// #endif } diff --git a/src/InfiniFrame.NativeBridge/Native/.cmake/Embed.InfiniFrameJs.Impl.cmake b/src/InfiniFrame.NativeBridge/Native/.cmake/Embed.InfiniFrameJs.Impl.cmake index c8dbf964f..98a514271 100644 --- a/src/InfiniFrame.NativeBridge/Native/.cmake/Embed.InfiniFrameJs.Impl.cmake +++ b/src/InfiniFrame.NativeBridge/Native/.cmake/Embed.InfiniFrameJs.Impl.cmake @@ -38,7 +38,7 @@ file(WRITE "${OUTPUT_SOURCE}" "// ---------------------------------------------- // Generated at: ${GENERATED_AT} // ----------------------------------------------------------------------------- -#include \"Embedded/InfiniFrameJs/InfiniFrameJs.h\" +#include \"src/Embedded/InfiniFrameJs/InfiniFrameJs.h\" alignas(16) const unsigned char GInfiniframeJsData[] = {${BYTES}}; diff --git a/src/InfiniFrame.NativeBridge/Native/.cmake/Embed.InfiniFrameJs.cmake b/src/InfiniFrame.NativeBridge/Native/.cmake/Embed.InfiniFrameJs.cmake index c070b48e2..68ee86191 100644 --- a/src/InfiniFrame.NativeBridge/Native/.cmake/Embed.InfiniFrameJs.cmake +++ b/src/InfiniFrame.NativeBridge/Native/.cmake/Embed.InfiniFrameJs.cmake @@ -1,4 +1,4 @@ -function(infiniframe_setup_embed_js target_name) +function(infiniframe_setup_embed_js target_name) get_filename_component(native_dir "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/.." ABSOLUTE) get_filename_component(native_bridge_dir "${native_dir}/.." ABSOLUTE) get_filename_component(src_dir "${native_bridge_dir}/.." ABSOLUTE) @@ -18,7 +18,7 @@ set(js_input "${js_project_dir}/wwwroot/InfiniFrame.js") - set(embed_dir "${CMAKE_SOURCE_DIR}/Embedded/InfiniFrameJs") + set(embed_dir "${CMAKE_SOURCE_DIR}/src/Embedded/InfiniFrameJs") set(header_output "${embed_dir}/InfiniFrameJs.h") set(source_output "${embed_dir}/InfiniFrameJs.cpp") diff --git a/src/InfiniFrame.NativeBridge/Native/.cmake/NativeDependencies.cmake b/src/InfiniFrame.NativeBridge/Native/.cmake/NativeDependencies.cmake index 5a853febb..7c49a77a6 100644 --- a/src/InfiniFrame.NativeBridge/Native/.cmake/NativeDependencies.cmake +++ b/src/InfiniFrame.NativeBridge/Native/.cmake/NativeDependencies.cmake @@ -5,8 +5,8 @@ # - `simdjson::simdjson` # - `simdutf::simdutf` # - `wintoastlib::wintoastlib` (Windows only) -# - Restores NuGet packages needed for Windows SDK-style dependencies. -# - Reads `packages.config` as the single source of truth for package versions. +# - Resolves NuGet packages needed for Windows SDK-style dependencies. +# - Uses versions passed from CMake cache vars. # - Resolves and creates imported interface targets: # - `webview2::sdk` (Windows only) # - `wil::headers` (Windows only) @@ -43,27 +43,78 @@ function(_infiniframe_resolve_base_dir out_var required_relative_path) set(${out_var} "${_resolved}" PARENT_SCOPE) endfunction() -# Read a NuGet package version from `packages.config`. +# Walk parent directories from `${CMAKE_SOURCE_DIR}` to find `Directory.Packages.props`. # Params: -# - packages_config: absolute path to `packages.config` -# - package_id: package id as defined in `` -# - out_var: parent-scope variable receiving parsed version string -# Fails with `FATAL_ERROR` when the package/version entry is missing. -function(infiniframe_read_package_version packages_config package_id out_var) - message(STATUS "Reading package version for '${package_id}' from ${packages_config}") - file(READ "${packages_config}" _packages_content) +# - out_var: parent-scope variable receiving full path when found, otherwise empty +function(infiniframe_find_directory_packages_props out_var) + if (DEFINED INFINIFRAME_DIRECTORY_PACKAGES_PROPS AND NOT "${INFINIFRAME_DIRECTORY_PACKAGES_PROPS}" STREQUAL "") + if (EXISTS "${INFINIFRAME_DIRECTORY_PACKAGES_PROPS}") + set(${out_var} "${INFINIFRAME_DIRECTORY_PACKAGES_PROPS}" PARENT_SCOPE) + return() + endif () + endif () + + set(_current_dir "${CMAKE_SOURCE_DIR}") + while (TRUE) + set(_candidate "${_current_dir}/Directory.Packages.props") + if (EXISTS "${_candidate}") + set(${out_var} "${_candidate}" PARENT_SCOPE) + return() + endif () + + get_filename_component(_parent_dir "${_current_dir}" DIRECTORY) + if ("${_parent_dir}" STREQUAL "${_current_dir}") + break() + endif () + set(_current_dir "${_parent_dir}") + endwhile () + + set(${out_var} "" PARENT_SCOPE) +endfunction() + +# Read package version from a `` entry in +# `Directory.Packages.props`. +# Params: +# - props_path: full path to Directory.Packages.props +# - package_id: e.g. `Microsoft.Web.WebView2` +# - out_var: parent-scope variable receiving the value +function(infiniframe_read_central_package_version props_path package_id out_var) + file(READ "${props_path}" _props_content) string(REPLACE "." "\\." _package_id_regex "${package_id}") string( REGEX MATCH - "]*id=\"${_package_id_regex}\"[^>]*version=\"([^\"]+)\"" + "]*Include=\"${_package_id_regex}\"[^>]*Version=\"([^\"]+)\"" _match - "${_packages_content}" + "${_props_content}" ) if (NOT CMAKE_MATCH_1) - message(FATAL_ERROR "${package_id} package version not found in ${packages_config}") + message(FATAL_ERROR "PackageVersion for '${package_id}' not found in ${props_path}") endif () - message(STATUS " ${package_id} version: ${CMAKE_MATCH_1}") - set(${out_var} "${CMAKE_MATCH_1}" PARENT_SCOPE) + string(STRIP "${CMAKE_MATCH_1}" _value) + set(${out_var} "${_value}" PARENT_SCOPE) +endfunction() + +# Resolve package version from CMake cache variable or Directory.Packages.props. +# Params: +# - package_id: package id as defined in `` +# - cmake_var_name: cache variable expected to contain the package version +# - out_var: parent-scope variable receiving parsed version string +function(infiniframe_get_package_version package_id cmake_var_name out_var) + if (DEFINED ${cmake_var_name} AND NOT "${${cmake_var_name}}" STREQUAL "") + message(STATUS "Using ${package_id} version from -D${cmake_var_name}=${${cmake_var_name}}") + set(${out_var} "${${cmake_var_name}}" PARENT_SCOPE) + return() + endif () + + infiniframe_find_directory_packages_props(_directory_packages_props_path) + if (_directory_packages_props_path) + infiniframe_read_central_package_version("${_directory_packages_props_path}" "${package_id}" _version_from_props) + message(STATUS "Using ${package_id} version from ${_directory_packages_props_path}=${_version_from_props}") + set(${out_var} "${_version_from_props}" PARENT_SCOPE) + return() + endif () + + message(FATAL_ERROR "Missing ${package_id} version. Pass -D${cmake_var_name}= or set -DINFINIFRAME_DIRECTORY_PACKAGES_PROPS=.") endfunction() # Create a vendored static library target and namespaced alias from local source/header files. @@ -97,23 +148,6 @@ function(infiniframe_add_vendor_static_library vendor_name vendor_dir source_nam message(STATUS " created target '${_target_name}' and alias '${vendor_name}::${vendor_name}'") endfunction() -# Restore NuGet packages declared in `packages.config` into `${CMAKE_SOURCE_DIR}/packages`. -# Params: -# - packages_config_path: path to `packages.config` -# Fails with `FATAL_ERROR` when restore returns non-zero. -function(infiniframe_restore_nuget_packages packages_config_path) - message(STATUS "Restoring NuGet packages using ${packages_config_path}") - execute_process( - COMMAND nuget restore "${packages_config_path}" -PackagesDirectory "${CMAKE_SOURCE_DIR}/packages" - WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}" - RESULT_VARIABLE _nuget_result - ) - if (NOT _nuget_result EQUAL 0) - message(FATAL_ERROR "NuGet restore failed") - endif () - message(STATUS "NuGet restore succeeded") -endfunction() - # Determine Windows architecture folder token from current CMake generator platform. # Params: # - out_var: parent-scope variable receiving one of `x64` or `arm64` @@ -138,10 +172,24 @@ endfunction() # Fails with `FATAL_ERROR` if no candidate is valid. function(infiniframe_resolve_webview2_base_dir webview2_version out_var) message(STATUS "Resolving WebView2 SDK path for version ${webview2_version}") + set(_nuget_roots "") + if (DEFINED INFINIFRAME_NUGET_PACKAGES_ROOT AND NOT "${INFINIFRAME_NUGET_PACKAGES_ROOT}" STREQUAL "") + list(APPEND _nuget_roots "${INFINIFRAME_NUGET_PACKAGES_ROOT}") + endif () + if (DEFINED ENV{NUGET_PACKAGES} AND NOT "$ENV{NUGET_PACKAGES}" STREQUAL "") + list(APPEND _nuget_roots "$ENV{NUGET_PACKAGES}") + endif () + if (DEFINED ENV{USERPROFILE} AND NOT "$ENV{USERPROFILE}" STREQUAL "") + list(APPEND _nuget_roots "$ENV{USERPROFILE}/.nuget/packages") + endif () + set(_candidates "${CMAKE_SOURCE_DIR}/packages/Microsoft.Web.WebView2.${webview2_version}/build/native" - "$ENV{USERPROFILE}/.nuget/packages/microsoft.web.webview2/${webview2_version}/build/native" + "${CMAKE_SOURCE_DIR}/packages/microsoft.web.webview2/${webview2_version}/build/native" ) + foreach (_root IN LISTS _nuget_roots) + list(APPEND _candidates "${_root}/microsoft.web.webview2/${webview2_version}/build/native") + endforeach () _infiniframe_resolve_base_dir(_base_dir "include/WebView2.h" ${_candidates}) if (NOT _base_dir) message(FATAL_ERROR "WebView2 headers not found") @@ -159,10 +207,24 @@ endfunction() # Fails with `FATAL_ERROR` if neither layout exists. function(infiniframe_resolve_wil_include_dir winimpl_version out_var) message(STATUS "Resolving WIL include path for version ${winimpl_version}") + set(_nuget_roots "") + if (DEFINED INFINIFRAME_NUGET_PACKAGES_ROOT AND NOT "${INFINIFRAME_NUGET_PACKAGES_ROOT}" STREQUAL "") + list(APPEND _nuget_roots "${INFINIFRAME_NUGET_PACKAGES_ROOT}") + endif () + if (DEFINED ENV{NUGET_PACKAGES} AND NOT "$ENV{NUGET_PACKAGES}" STREQUAL "") + list(APPEND _nuget_roots "$ENV{NUGET_PACKAGES}") + endif () + if (DEFINED ENV{USERPROFILE} AND NOT "$ENV{USERPROFILE}" STREQUAL "") + list(APPEND _nuget_roots "$ENV{USERPROFILE}/.nuget/packages") + endif () + set(_candidates "${CMAKE_SOURCE_DIR}/packages/Microsoft.Windows.ImplementationLibrary.${winimpl_version}" - "$ENV{USERPROFILE}/.nuget/packages/microsoft.windows.implementationlibrary/${winimpl_version}" + "${CMAKE_SOURCE_DIR}/packages/microsoft.windows.implementationlibrary/${winimpl_version}" ) + foreach (_root IN LISTS _nuget_roots) + list(APPEND _candidates "${_root}/microsoft.windows.implementationlibrary/${winimpl_version}") + endforeach () _infiniframe_resolve_base_dir(_base_include "include/wil/com.h" ${_candidates}) if (_base_include) @@ -209,32 +271,26 @@ endfunction() # Main module entrypoint. Sets up all dependency targets used by `InfiniFrame.Native`. # Behavior: # - Always configures vendored `simdjson` and `simdutf`. -# - On Windows also configures vendored `wintoastlib`, restores NuGet, resolves +# - On Windows also configures vendored `wintoastlib`, resolves # WebView2/WIL from package versions, and creates imported SDK targets. # Exports to parent scope on Windows: # - `INFINIFRAME_WEBVIEW2_BASE_DIR` # - `INFINIFRAME_WINDOWS_ARCH_DIR` function(infiniframe_setup_dependencies) message(STATUS "Setting up InfiniFrame native dependencies") - infiniframe_add_vendor_static_library("simdjson" "${CMAKE_SOURCE_DIR}/Dependencies/simdjson" "simdjson.cpp" "simdjson.h") - infiniframe_add_vendor_static_library("simdutf" "${CMAKE_SOURCE_DIR}/Dependencies/simdutf" "simdutf.cpp" "simdutf.h") + infiniframe_add_vendor_static_library("simdjson" "${CMAKE_SOURCE_DIR}/src/Dependencies/simdjson" "simdjson.cpp" "simdjson.h") + infiniframe_add_vendor_static_library("simdutf" "${CMAKE_SOURCE_DIR}/src/Dependencies/simdutf" "simdutf.cpp" "simdutf.h") if (NOT WIN32) message(STATUS "Windows-specific dependencies skipped on non-Windows host") return() endif () - infiniframe_add_vendor_static_library("wintoastlib" "${CMAKE_SOURCE_DIR}/Dependencies/wintoastlib" "wintoastlib.cpp" "wintoastlib.h") - - set(_packages_config_path "${CMAKE_SOURCE_DIR}/packages.config") - if (NOT EXISTS "${_packages_config_path}") - message(FATAL_ERROR "packages.config not found at ${_packages_config_path}") - endif () + infiniframe_add_vendor_static_library("wintoastlib" "${CMAKE_SOURCE_DIR}/src/Dependencies/wintoastlib" "wintoastlib.cpp" "wintoastlib.h") - infiniframe_restore_nuget_packages("${_packages_config_path}") infiniframe_detect_windows_arch_dir(_win_arch_dir) - infiniframe_read_package_version("${_packages_config_path}" "Microsoft.Web.WebView2" _webview2_version) - infiniframe_read_package_version("${_packages_config_path}" "Microsoft.Windows.ImplementationLibrary" _winimpl_version) + infiniframe_get_package_version("Microsoft.Web.WebView2" "INFINIFRAME_WEBVIEW2_VERSION" _webview2_version) + infiniframe_get_package_version("Microsoft.Windows.ImplementationLibrary" "INFINIFRAME_WINDOWS_IMPLEMENTATION_LIBRARY_VERSION" _winimpl_version) infiniframe_resolve_webview2_base_dir("${_webview2_version}" _webview2_base_dir) infiniframe_resolve_wil_include_dir("${_winimpl_version}" _wil_include_dir) infiniframe_add_imported_windows_sdk_targets("${_webview2_base_dir}" "${_win_arch_dir}" "${_wil_include_dir}") diff --git a/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.Linux.cmake b/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.Linux.cmake index 65eb1aaec..4f388c370 100644 --- a/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.Linux.cmake +++ b/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.Linux.cmake @@ -32,6 +32,7 @@ function(infiniframe_configure_linux_target target_name common_sources test_sour target_include_directories(${target_name} PRIVATE "${CMAKE_SOURCE_DIR}" + "${CMAKE_SOURCE_DIR}/src" ${GTK3_INCLUDE_DIRS} ${WEBKIT2_INCLUDE_DIRS} ${LIBNOTIFY_INCLUDE_DIRS} diff --git a/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.MacOS.cmake b/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.MacOS.cmake index 90f94f39d..4d74d7bbe 100644 --- a/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.MacOS.cmake +++ b/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.MacOS.cmake @@ -18,7 +18,10 @@ function(infiniframe_configure_macos_target target_name common_sources test_sour LANGUAGE OBJCXX ) - target_include_directories(${target_name} PRIVATE "${CMAKE_SOURCE_DIR}") + target_include_directories(${target_name} PRIVATE + "${CMAKE_SOURCE_DIR}" + "${CMAKE_SOURCE_DIR}/src" + ) set_target_properties(${target_name} PROPERTIES PREFIX "" diff --git a/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.Windows.cmake b/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.Windows.cmake index 9d327792c..c1cb1f146 100644 --- a/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.Windows.cmake +++ b/src/InfiniFrame.NativeBridge/Native/.cmake/Platform.Windows.cmake @@ -23,6 +23,7 @@ function(infiniframe_configure_windows_target target_name common_sources test_so target_include_directories(${target_name} PRIVATE "${CMAKE_SOURCE_DIR}" + "${CMAKE_SOURCE_DIR}/src" ) target_link_libraries(${target_name} PRIVATE @@ -67,4 +68,4 @@ function(infiniframe_configure_windows_target target_name common_sources test_so "$/WebView2Loader.dll" COMMENT "Copying WebView2Loader.dll" ) -endfunction() \ No newline at end of file +endfunction() diff --git a/src/InfiniFrame.NativeBridge/Native/.idea/cmake.xml b/src/InfiniFrame.NativeBridge/Native/.idea/cmake.xml index 5231c7877..d4f39e3ac 100644 --- a/src/InfiniFrame.NativeBridge/Native/.idea/cmake.xml +++ b/src/InfiniFrame.NativeBridge/Native/.idea/cmake.xml @@ -7,7 +7,7 @@ - + \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Native/CMakeLists.txt b/src/InfiniFrame.NativeBridge/Native/CMakeLists.txt index 9c92fcbfb..ecd670c33 100644 --- a/src/InfiniFrame.NativeBridge/Native/CMakeLists.txt +++ b/src/InfiniFrame.NativeBridge/Native/CMakeLists.txt @@ -34,117 +34,128 @@ infiniframe_setup_dependencies() # Source Files # ---------------------------------------------------------------------------------------------------------------------- set(COMMON_SOURCES - Public/Exports/Exports.Platform.cpp - Public/Exports/Exports.Lifecycle.cpp - Public/Exports/Exports.WindowState.cpp - Public/Exports/Exports.WindowCommands.cpp - Public/Exports/Exports.Dialog.cpp - Public/Exports/Exports.Events.cpp - Public/Exports/Exports.Memory.cpp - Platform/Shared/WindowEvents.cpp - Platform/Shared/WindowState.cpp + src/Runtime/Shared/Window/WindowEvents.cpp + src/Runtime/Shared/Window/WindowState.cpp + src/Api/Exports/Exports.CustomSchemes.cpp + src/Api/Exports/Exports.Dispatch.cpp + src/Api/Exports/Exports.Dialog.cpp + src/Api/Exports/Exports.Events.cpp + src/Api/Exports/Exports.Lifecycle.cpp + src/Api/Exports/Exports.Memory.cpp + src/Api/Exports/Exports.Monitors.cpp + src/Api/Exports/Exports.Platform.MacOs.cpp + src/Api/Exports/Exports.Platform.Windows.cpp + src/Api/Exports/Exports.Window.Actions.cpp + src/Api/Exports/Exports.Window.Getters.cpp + src/Api/Exports/Exports.Window.Navigation.cpp + src/Api/Exports/Exports.Window.Setters.cpp ) set(TEST_SOURCES - Public/Exports/Exports.Tests.cpp + src/Api/Testing/Exports.Tests.cpp ) set(WINDOWS_SOURCES - Platform/Windows/Core/WindowCore.Win32.cpp - Platform/Windows/Core/WindowTracing.Win32.cpp - Platform/Windows/Core/WindowEncoding.Win32.cpp - Platform/Windows/Core/WindowStorage.Win32.cpp - Platform/Windows/Core/WindowOwnership.Win32.cpp - Platform/Windows/Core/WindowLifecycle.Win32.cpp - Platform/Windows/Core/WindowProc.Win32.cpp - Platform/Windows/Core/WindowState.Win32.cpp - Platform/Windows/Core/UiDispatcher.Win32.cpp - Platform/Windows/WebView/WebView2Host.Win32.cpp - Platform/Windows/WebView/WebView2Runtime.Win32.cpp - Platform/Windows/WebView/WebView2Controller.Win32.cpp - Platform/Windows/WebView/WebView2Attach.Win32.cpp - Platform/Windows/WebView/WebView2CustomSchemes.Win32.cpp - Platform/Windows/WebView/WebView2Settings.Win32.cpp - Platform/Windows/Monitors.Win32.cpp - Platform/Windows/Notifications.WinToast.cpp - Platform/Windows/Dpi.Win32.cpp - Platform/Windows/DarkMode.cpp - Platform/Windows/Dialog.cpp + src/Runtime/Platform/Windows/DarkMode.h + src/Runtime/Platform/Windows/ToastHandler.h + src/Runtime/Platform/Windows/Window.Win32.Context.h + src/Runtime/Platform/Windows/Window.Win32.Internal.h + + src/Runtime/Platform/Windows/Core/UiDispatcher.Win32.cpp + src/Runtime/Platform/Windows/Core/WindowCore.Win32.cpp + src/Runtime/Platform/Windows/Core/WindowEncoding.Win32.cpp + src/Runtime/Platform/Windows/Core/WindowLifecycle.Win32.cpp + src/Runtime/Platform/Windows/Core/WindowOwnership.Win32.cpp + src/Runtime/Platform/Windows/Core/WindowProc.Win32.cpp + src/Runtime/Platform/Windows/Core/WindowState.Win32.cpp + src/Runtime/Platform/Windows/Core/WindowStorage.Win32.cpp + src/Runtime/Platform/Windows/Core/WindowTracing.Win32.cpp + src/Runtime/Platform/Windows/DarkMode.cpp + src/Runtime/Platform/Windows/Dialog.cpp + src/Runtime/Platform/Windows/Dpi.Win32.cpp + src/Runtime/Platform/Windows/Monitors.Win32.cpp + src/Runtime/Platform/Windows/Notifications.WinToast.cpp + src/Runtime/Platform/Windows/WebView/WebView2Attach.Win32.cpp + src/Runtime/Platform/Windows/WebView/WebView2Controller.Win32.cpp + src/Runtime/Platform/Windows/WebView/WebView2CustomSchemes.Win32.cpp + src/Runtime/Platform/Windows/WebView/WebView2Host.Win32.cpp + src/Runtime/Platform/Windows/WebView/WebView2Runtime.Win32.cpp + src/Runtime/Platform/Windows/WebView/WebView2Settings.Win32.cpp ) set(LINUX_SOURCES - Platform/Linux/Core/WindowCore.Gtk.cpp - Platform/Linux/Core/WindowInitialization.Gtk.cpp - Platform/Linux/Core/WindowLifecycle.Gtk.cpp - Platform/Linux/Core/WindowState.Gtk.cpp - Platform/Linux/Core/WindowEvents.Gtk.cpp - Platform/Linux/Core/UiDispatcher.Gtk.cpp - Platform/Linux/Core/WindowSignals.Gtk.cpp - Platform/Linux/WebKit/WebKitHost.Gtk.cpp - Platform/Linux/WebKit/WebKitSettings.Gtk.cpp - Platform/Linux/WebKit/WebKitMessaging.Gtk.cpp - Platform/Linux/WebKit/WebKitCustomSchemes.Gtk.cpp - Platform/Linux/Notifications.LibNotify.cpp - Platform/Linux/Monitors.Gtk.cpp - Platform/Linux/Dialog.cpp + src/Runtime/Platform/Linux/WebKit/WebKit.Gtk.Internal.h + src/Runtime/Platform/Linux/Window.Gtk.Internal.h + + src/Runtime/Platform/Linux/Core/UiDispatcher.Gtk.cpp + src/Runtime/Platform/Linux/Core/WindowCore.Gtk.cpp + src/Runtime/Platform/Linux/Core/WindowEvents.Gtk.cpp + src/Runtime/Platform/Linux/Core/WindowInitialization.Gtk.cpp + src/Runtime/Platform/Linux/Core/WindowLifecycle.Gtk.cpp + src/Runtime/Platform/Linux/Core/WindowSignals.Gtk.cpp + src/Runtime/Platform/Linux/Core/WindowState.Gtk.cpp + src/Runtime/Platform/Linux/Dialog.cpp + src/Runtime/Platform/Linux/Monitors.Gtk.cpp + src/Runtime/Platform/Linux/Notifications.LibNotify.cpp + src/Runtime/Platform/Linux/WebKit/WebKitCustomSchemes.Gtk.cpp + src/Runtime/Platform/Linux/WebKit/WebKitHost.Gtk.cpp + src/Runtime/Platform/Linux/WebKit/WebKitMessaging.Gtk.cpp + src/Runtime/Platform/Linux/WebKit/WebKitSettings.Gtk.cpp ) set(MAC_SOURCES - Platform/Mac/Delegates/AppDelegate.mm - Platform/Mac/Delegates/UiDelegate.mm - Platform/Mac/Delegates/WindowDelegate.mm - Platform/Mac/Delegates/NavigationDelegate.mm - Platform/Mac/Delegates/UrlSchemeHandler.mm - Platform/Mac/NSWindowBorderless.mm - Platform/Mac/Dialog.mm - Platform/Mac/Notifications.UserNotifications.mm - Platform/Mac/Monitors.Cocoa.mm - Platform/Mac/Core/WindowCore.Cocoa.mm - Platform/Mac/Core/WindowLifecycle.Cocoa.mm - Platform/Mac/Core/WindowState.Cocoa.mm - Platform/Mac/Core/WindowEvents.Cocoa.mm - Platform/Mac/Core/UiDispatcher.Cocoa.mm - Platform/Mac/WebKit/WebKitBridge.Cocoa.mm - Platform/Mac/WebKit/WebKitCustomSchemes.Cocoa.mm - Platform/Mac/WebKit/WebKitHost.Cocoa.mm + src/Runtime/Platform/Mac/Delegates/AppDelegate.h + src/Runtime/Platform/Mac/Delegates/NavigationDelegate.h + src/Runtime/Platform/Mac/Delegates/UiDelegate.h + src/Runtime/Platform/Mac/Delegates/UrlSchemeHandler.h + src/Runtime/Platform/Mac/Delegates/WindowDelegate.h + src/Runtime/Platform/Mac/NSWindowBorderless.h + src/Runtime/Platform/Mac/Window.Cocoa.Internal.h + + src/Runtime/Platform/Mac/Core/UiDispatcher.Cocoa.mm + src/Runtime/Platform/Mac/Core/WindowCore.Cocoa.mm + src/Runtime/Platform/Mac/Core/WindowEvents.Cocoa.mm + src/Runtime/Platform/Mac/Core/WindowLifecycle.Cocoa.mm + src/Runtime/Platform/Mac/Core/WindowState.Cocoa.mm + src/Runtime/Platform/Mac/Delegates/AppDelegate.mm + src/Runtime/Platform/Mac/Delegates/NavigationDelegate.mm + src/Runtime/Platform/Mac/Delegates/UiDelegate.mm + src/Runtime/Platform/Mac/Delegates/UrlSchemeHandler.mm + src/Runtime/Platform/Mac/Delegates/WindowDelegate.mm + src/Runtime/Platform/Mac/Dialog.mm + src/Runtime/Platform/Mac/Monitors.Cocoa.mm + src/Runtime/Platform/Mac/NSWindowBorderless.mm + src/Runtime/Platform/Mac/Notifications.UserNotifications.mm + src/Runtime/Platform/Mac/WebKit/WebKitBridge.Cocoa.mm + src/Runtime/Platform/Mac/WebKit/WebKitCustomSchemes.Cocoa.mm + src/Runtime/Platform/Mac/WebKit/WebKitHost.Cocoa.mm ) set(HEADER_FILES - Public/InfiniFrame.h - Public/InfiniFrameWindow.h - Public/InfiniFrameDialog.h - Embedded/Embedded.h - Embedded/InfiniFrameJs/InfiniFrameJs.h - Types/Basic.h - Types/DialogResult.h - Types/DialogButtons.h - Types/DialogIcon.h - Types/Monitor.h - Public/InfiniFrameInitParams.h - Types/Callbacks.h - Utils/Dimensions.h - Utils/ErrorCode.h - Utils/Result.h - Utils/StringCopy.h - Utils/StringArrayCopy.h - Utils/WindowsHandles.h - Utils/Event.h - Public/Exports/Exports.h - Utils/ExportGuards.h - Platform/Shared/CustomSchemeResponse.h - Platform/Windows/ToastHandler.h - Platform/Windows/Window.Win32.Internal.h - Platform/Windows/Window.Win32.Context.h - Platform/Windows/DarkMode.h - Platform/Mac/Delegates/AppDelegate.h - Platform/Mac/Delegates/NavigationDelegate.h - Platform/Mac/NSWindowBorderless.h - Platform/Mac/Delegates/UiDelegate.h - Platform/Mac/Delegates/WindowDelegate.h - Platform/Mac/Delegates/UrlSchemeHandler.h - Platform/Linux/Window.Gtk.Internal.h - Platform/Linux/WebKit/WebKit.Gtk.Internal.h - Platform/Mac/Window.Cocoa.Internal.h + src/Embedded/Embedded.h + src/Embedded/InfiniFrameJs/InfiniFrameJs.h + src/Runtime/Shared/WebView/CustomSchemeResponse.h + src/Api/Exports/Exports.h + src/Api/Utilities/ExportErrorState.h + src/Api/Utilities/ExportExecution.h + src/Api/Utilities/ExportStringHelpers.h + src/Api/Utilities/ExportValidation.h + src/Api/Utilities/Utilities.h + src/Runtime/Shared/Window/InfiniFrame.h + src/Runtime/Shared/Window/InfiniFrameDialog.h + src/Runtime/Shared/Window/InfiniFrameInitParams.h + src/Runtime/Shared/Window/InfiniFrameWindow.h + src/Runtime/Shared/Types/Basic.h + src/Runtime/Shared/Types/Callbacks.h + src/Runtime/Shared/Types/DialogButtons.h + src/Runtime/Shared/Types/DialogIcon.h + src/Runtime/Shared/Types/DialogResult.h + src/Runtime/Shared/Types/Monitor.h + src/Runtime/Shared/Utilities/Dimensions.h + src/Runtime/Shared/Utilities/ErrorCode.h + src/Runtime/Shared/Utilities/InteropStatus.h + src/Runtime/Shared/Utilities/StringArrayCopy.h + src/Runtime/Shared/Utilities/StringCopy.h ) if (WIN32) diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Events.cpp b/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Events.cpp deleted file mode 100644 index b124e901c..000000000 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Events.cpp +++ /dev/null @@ -1,56 +0,0 @@ -// --------------------------------------------------------------------------------------------------------------------- -// Imports -// --------------------------------------------------------------------------------------------------------------------- -#include "Public/Exports/Exports.h" -// --------------------------------------------------------------------------------------------------------------------- -// Code -// --------------------------------------------------------------------------------------------------------------------- -extern "C" { -EXPORTED InteropStatus InfiniFrame_AddCustomSchemeName(InfiniFrameWindow* instance, const AutoString scheme) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { - if (!EnsureNotNull(scheme, "scheme")) - return; - window->AddCustomSchemeName(scheme); - }); -} - -EXPORTED InteropStatus InfiniFrame_GetAllMonitors(InfiniFrameWindow* instance, const GetAllMonitorsCallback callback) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { - if (callback == nullptr) - throw std::invalid_argument("Argument 'callback' is null."); - window->GetAllMonitors(callback); - }); -} - -EXPORTED InteropStatus InfiniFrame_SetClosingCallback(InfiniFrameWindow* instance, const ClosingCallback callback) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetClosingCallback(callback); }); -} - -EXPORTED InteropStatus InfiniFrame_setClosedClosedCallback(InfiniFrameWindow* instance, const ClosedCallback callback) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetClosedCallback(callback); }); -} - -EXPORTED InteropStatus InfiniFrame_SetFocusInCallback(InfiniFrameWindow* instance, const FocusInCallback callback) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetFocusInCallback(callback); }); -} - -EXPORTED InteropStatus InfiniFrame_SetFocusOutCallback(InfiniFrameWindow* instance, const FocusOutCallback callback) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetFocusOutCallback(callback); }); -} - -EXPORTED InteropStatus InfiniFrame_SetMovedCallback(InfiniFrameWindow* instance, const MovedCallback callback) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMovedCallback(callback); }); -} - -EXPORTED InteropStatus InfiniFrame_SetResizedCallback(InfiniFrameWindow* instance, const ResizedCallback callback) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetResizedCallback(callback); }); -} - -EXPORTED InteropStatus InfiniFrame_Invoke(InfiniFrameWindow* instance, const ACTION callback) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { - if (callback == nullptr) - throw std::invalid_argument("Argument 'callback' is null."); - window->Invoke(callback); - }); -} -} diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.WindowCommands.cpp b/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.WindowCommands.cpp deleted file mode 100644 index 4d3819fd8..000000000 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.WindowCommands.cpp +++ /dev/null @@ -1,119 +0,0 @@ -// --------------------------------------------------------------------------------------------------------------------- -// Imports -// --------------------------------------------------------------------------------------------------------------------- -#include "Public/Exports/Exports.h" -// --------------------------------------------------------------------------------------------------------------------- -// Code -// --------------------------------------------------------------------------------------------------------------------- -extern "C" { -EXPORTED InteropStatus InfiniFrame_Center(InfiniFrameWindow* instance) { - return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->Center(); }); -} - -EXPORTED InteropStatus InfiniFrame_ClearBrowserAutoFill(InfiniFrameWindow* instance) { - return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->ClearBrowserAutoFill(); }); -} - -EXPORTED InteropStatus InfiniFrame_NavigateToString(InfiniFrameWindow* instance, const AutoString content) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { - if (!EnsureNotNull(content, "content")) - return; - window->NavigateToString(content); - }); -} - -EXPORTED InteropStatus InfiniFrame_NavigateToUrl(InfiniFrameWindow* instance, const AutoString url) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { - if (!EnsureNotNull(url, "url")) - return; - window->NavigateToUrl(url); - }); -} - -EXPORTED InteropStatus InfiniFrame_Restore(InfiniFrameWindow* instance) { - return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->Restore(); }); -} - -EXPORTED InteropStatus InfiniFrame_SendWebMessage(InfiniFrameWindow* instance, const AutoString message) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { - window->SendWebMessage(NullToEmpty(message)); - }); -} - -EXPORTED InteropStatus InfiniFrame_SetTransparentEnabled(InfiniFrameWindow* instance, const bool enabled) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetTransparentEnabled(enabled); }); -} - -EXPORTED InteropStatus InfiniFrame_SetContextMenuEnabled(InfiniFrameWindow* instance, const bool enabled) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetContextMenuEnabled(enabled); }); -} - -EXPORTED InteropStatus InfiniFrame_SetZoomEnabled(InfiniFrameWindow* instance, const bool enabled) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetZoomEnabled(enabled); }); -} - -EXPORTED InteropStatus InfiniFrame_SetDevToolsEnabled(InfiniFrameWindow* instance, const bool enabled) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetDevToolsEnabled(enabled); }); -} - -EXPORTED InteropStatus InfiniFrame_SetFullScreen(InfiniFrameWindow* instance, const bool fullScreen) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetFullScreen(fullScreen); }); -} - -EXPORTED InteropStatus InfiniFrame_SetIconFile(InfiniFrameWindow* instance, const AutoString filename) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { - window->SetIconFile(NullToEmpty(filename)); - }); -} - -EXPORTED InteropStatus InfiniFrame_SetMaximized(InfiniFrameWindow* instance, const bool maximized) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMaximized(maximized); }); -} - -EXPORTED InteropStatus InfiniFrame_SetMaxSize(InfiniFrameWindow* instance, const int width, const int height) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMaxSize(width, height); }); -} - -EXPORTED InteropStatus InfiniFrame_SetMinimized(InfiniFrameWindow* instance, const bool minimized) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMinimized(minimized); }); -} - -EXPORTED InteropStatus InfiniFrame_SetMinSize(InfiniFrameWindow* instance, const int width, const int height) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMinSize(width, height); }); -} - -EXPORTED InteropStatus InfiniFrame_SetPosition(InfiniFrameWindow* instance, const int x, const int y) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetPosition(x, y); }); -} - -EXPORTED InteropStatus InfiniFrame_SetResizable(InfiniFrameWindow* instance, const bool resizable) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetResizable(resizable); }); -} - -EXPORTED InteropStatus InfiniFrame_SetSize(InfiniFrameWindow* instance, const int width, const int height) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetSize(width, height); }); -} - -EXPORTED InteropStatus InfiniFrame_SetTitle(InfiniFrameWindow* instance, const AutoString title) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetTitle(NullToEmpty(title)); }); -} - -EXPORTED InteropStatus InfiniFrame_SetTopmost(InfiniFrameWindow* instance, const bool topmost) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetTopmost(topmost); }); -} - -EXPORTED InteropStatus InfiniFrame_SetZoom(InfiniFrameWindow* instance, const int zoom) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetZoom(zoom); }); -} - -EXPORTED InteropStatus -InfiniFrame_ShowNotification(InfiniFrameWindow* instance, const AutoString title, const AutoString body) { - return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { - window->ShowNotification(NullToEmpty(title), NullToEmpty(body)); - }); -} - -EXPORTED InteropStatus InfiniFrame_SetFocused(InfiniFrameWindow* instance) { - return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->SetFocused(); }); -} -} diff --git a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrame.h b/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrame.h deleted file mode 100644 index 5ded59cf3..000000000 --- a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrame.h +++ /dev/null @@ -1,14 +0,0 @@ -#pragma once -// --------------------------------------------------------------------------------------------------------------------- -// Imports -// --------------------------------------------------------------------------------------------------------------------- -#include "Public/InfiniFrameInitParams.h" -#include "Public/InfiniFrameWindow.h" -#include "Public/InfiniFrameDialog.h" - -#include "Types/Basic.h" -#include "Types/Callbacks.h" - -#include "Utils/Dimensions.h" -#include "Utils/StringCopy.h" -#include "Utils/Event.h" diff --git a/src/InfiniFrame.NativeBridge/Native/Utils/Event.h b/src/InfiniFrame.NativeBridge/Native/Utils/Event.h deleted file mode 100644 index 54f9db76c..000000000 --- a/src/InfiniFrame.NativeBridge/Native/Utils/Event.h +++ /dev/null @@ -1,140 +0,0 @@ -#pragma once -// --------------------------------------------------------------------------------------------------------------------- -// Imports -// --------------------------------------------------------------------------------------------------------------------- -#include -#include -#include -#include -// --------------------------------------------------------------------------------------------------------------------- -// Code -// --------------------------------------------------------------------------------------------------------------------- -template class Event { - public: - using Handler = std::function; - using Token = size_t; - - Event() = default; - ~Event() = default; - - Event(const Event&) = delete; - Event& operator=(const Event&) = delete; - Event(Event&&) noexcept = default; - Event& operator=(Event&&) noexcept = default; - - /** - * @brief Subscribe to event - * @param handler Callback function to invoke when event is raised - * @return Token for unsubscribing - */ - [[nodiscard]] Token Subscribe(Handler handler) { - std::unique_lock lock(m_mutex); - const auto token = m_nextToken++; - m_handlers.emplace(token, std::move(handler)); - return token; - } - - /** - * @brief Unsubscribe from event - * @param token Token returned from Subscribe - */ - void Unsubscribe(Token token) { - std::unique_lock lock(m_mutex); - m_handlers.erase(token); - } - - /** - * @brief Raise event (invoke all handlers) - * @param args Arguments to pass to handlers - */ - void Raise(Args... args) { - std::shared_lock lock(m_mutex); - for (const auto& [_, handler] : m_handlers) { - if (handler) { - handler(args...); - } - } - } - - /** - * @brief Check if event has subscribers - * @return true if at least one handler is subscribed - */ - [[nodiscard]] bool HasSubscribers() const { - std::shared_lock lock(m_mutex); - return !m_handlers.empty(); - } - - /** - * @brief Clear all subscribers - */ - void Clear() { - std::unique_lock lock(m_mutex); - m_handlers.clear(); - } - - private: - mutable std::shared_mutex m_mutex; - std::map m_handlers; - Token m_nextToken = 1; -}; - -template class EventSubscription { - public: - using EventType = Event; - using Token = EventType::Token; - - EventSubscription() = default; - - EventSubscription(EventType& event, EventType::Handler handler) - : m_event(&event) - , m_token(event.Subscribe(std::move(handler))) {} - - ~EventSubscription() { - Unsubscribe(); - } - - EventSubscription(const EventSubscription&) = delete; - EventSubscription& operator=(const EventSubscription&) = delete; - - EventSubscription(EventSubscription&& other) noexcept - : m_event(other.m_event) - , m_token(other.m_token) { - other.m_event = nullptr; - other.m_token = 0; - } - - EventSubscription& operator=(EventSubscription&& other) noexcept { - if (this != &other) { - Unsubscribe(); - m_event = other.m_event; - m_token = other.m_token; - other.m_event = nullptr; - other.m_token = 0; - } - return *this; - } - - /** - * @brief Manually unsubscribe from event - */ - void Unsubscribe() { - if (m_event && m_token != 0) { - m_event->Unsubscribe(m_token); - m_event = nullptr; - m_token = 0; - } - } - - /** - * @brief Check if subscription is active - * @return true if still subscribed - */ - [[nodiscard]] bool IsActive() const noexcept { - return m_event != nullptr && m_token != 0; - } - - private: - EventType* m_event = nullptr; - Token m_token = 0; -}; diff --git a/src/InfiniFrame.NativeBridge/Native/Utils/ExportGuards.h b/src/InfiniFrame.NativeBridge/Native/Utils/ExportGuards.h deleted file mode 100644 index 537f25b7a..000000000 --- a/src/InfiniFrame.NativeBridge/Native/Utils/ExportGuards.h +++ /dev/null @@ -1,189 +0,0 @@ -#pragma once -// --------------------------------------------------------------------------------------------------------------------- -// Imports -// --------------------------------------------------------------------------------------------------------------------- -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#include -#endif - -#include "Public/InfiniFrame.h" -// --------------------------------------------------------------------------------------------------------------------- -// Code -// --------------------------------------------------------------------------------------------------------------------- -enum class InteropStatus : int { - Success = 0, - InvalidArgument = 22, - OutParameterSetToInvalidNull = 2001, - OperationFailed = 14 -}; - -namespace infiniframe::exports { - namespace detail { - inline thread_local std::string g_lastErrorMessage; - inline thread_local auto g_lastStatus = InteropStatus::Success; - - inline void SetLastErrorCode(const InteropStatus status) noexcept { -#ifdef _WIN32 - SetLastError(static_cast(status)); -#else - errno = static_cast(status); -#endif - } - - inline void ClearLastErrorCode() noexcept { -#ifdef _WIN32 - SetLastError(0); -#else - errno = 0; -#endif - } - - inline void SetFailure(const InteropStatus status, std::string message) noexcept { - g_lastErrorMessage = std::move(message); - g_lastStatus = status; - SetLastErrorCode(status); - } - - inline void SetSuccess() noexcept { - g_lastErrorMessage.clear(); - g_lastStatus = InteropStatus::Success; - ClearLastErrorCode(); - } - - inline InteropStatus TranslateException(const std::exception& ex) noexcept { - if (dynamic_cast(&ex) != nullptr) { - SetFailure(InteropStatus::InvalidArgument, ex.what()); - return InteropStatus::InvalidArgument; - } - - SetFailure(InteropStatus::OperationFailed, ex.what()); - return InteropStatus::OperationFailed; - } - -#ifdef _WIN32 - inline AutoString AllocateErrorMessageString(const std::string& value) { - if (value.empty()) { - return nullptr; - } - - const int wideCount = - MultiByteToWideChar(CP_UTF8, 0, value.c_str(), static_cast(value.size()), nullptr, 0); - if (wideCount <= 0) { - return nullptr; - } - - auto* buffer = new wchar_t[wideCount + 1]; - const int converted = - MultiByteToWideChar(CP_UTF8, 0, value.c_str(), static_cast(value.size()), buffer, wideCount); - if (converted <= 0) { - delete[] buffer; - return nullptr; - } - - buffer[converted] = L'\0'; - return buffer; - } -#else - inline AutoString AllocateErrorMessageString(const std::string& value) { - if (value.empty()) { - return nullptr; - } - - return AllocateStringCopy(value); - } -#endif - } // namespace detail - - inline AutoString GetLastErrorMessageCopy() { - return detail::AllocateErrorMessageString(detail::g_lastErrorMessage); - } - - template void ResetOut(T* outValue, const T fallback = {}) noexcept { - if (outValue != nullptr) { - *outValue = fallback; - } - } - - template void ResetOut2(T* first, T* second, const T fallback = {}) noexcept { - ResetOut(first, fallback); - ResetOut(second, fallback); - } - - template - bool EnsureNotNull( - T* value, const char* argumentName, const InteropStatus status = InteropStatus::InvalidArgument - ) noexcept { - if (value != nullptr) { - return true; - } - - detail::SetFailure(status, std::string("Argument '") + argumentName + "' is null."); - return false; - } - - template InteropStatus RunExportStatus(Fn&& fn) noexcept { - try { - detail::SetSuccess(); - std::forward(fn)(); - if (detail::g_lastStatus != InteropStatus::Success) { - return detail::g_lastStatus; - } - detail::SetSuccess(); - return InteropStatus::Success; - } catch (const std::exception& ex) { - return detail::TranslateException(ex); - } catch (...) { - detail::SetFailure(InteropStatus::OperationFailed, "Unknown native exception."); - return InteropStatus::OperationFailed; - } - } - - template InteropStatus RunWindowExportStatus(InfiniFrameWindow* instance, Fn&& fn) noexcept { - return RunExportStatus([&] { - if (!EnsureNotNull(instance, "instance")) { - return; - } - - std::forward(fn)(instance); - }); - } - - template - T RunWindowReturnExport(InfiniFrameWindow* instance, T fallback, Fn&& fn) noexcept { - try { - if (!EnsureNotNull(instance, "instance")) { - return fallback; - } - - T value = std::forward(fn)(instance); - detail::SetSuccess(); - return value; - } catch (const std::exception& ex) { - detail::TranslateException(ex); - return fallback; - } catch (...) { - detail::SetFailure(InteropStatus::OperationFailed, "Unknown native exception."); - return fallback; - } - } - - template T RunReturnExport(T fallback, Fn&& fn) noexcept { - try { - T value = std::forward(fn)(); - detail::SetSuccess(); - return value; - } catch (const std::exception& ex) { - detail::TranslateException(ex); - return fallback; - } catch (...) { - detail::SetFailure(InteropStatus::OperationFailed, "Unknown native exception."); - return fallback; - } - } -} diff --git a/src/InfiniFrame.NativeBridge/Native/Utils/WindowsHandles.h b/src/InfiniFrame.NativeBridge/Native/Utils/WindowsHandles.h deleted file mode 100644 index 9ed5445dd..000000000 --- a/src/InfiniFrame.NativeBridge/Native/Utils/WindowsHandles.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once -// --------------------------------------------------------------------------------------------------------------------- -// Imports -// --------------------------------------------------------------------------------------------------------------------- -#ifdef _WIN32 -#include -#include -#endif -// --------------------------------------------------------------------------------------------------------------------- -// Code -// --------------------------------------------------------------------------------------------------------------------- -#ifdef _WIN32 -struct HBRUSHDeleter { - void operator()(void* h) const noexcept { - if (h) - DeleteObject(h); - } -}; - -struct HICONDeleter { - void operator()(void* h) const noexcept { - if (h) - DestroyIcon(static_cast(h)); - } -}; - -struct HDCDeleter { - void operator()(void* h) const noexcept { - if (h) - DeleteDC(static_cast(h)); - } -}; - -using UniqueHBRUSH = std::unique_ptr; -using UniqueHICON = std::unique_ptr; -using UniqueHDC = std::unique_ptr; - -#endif \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Native/packages.config b/src/InfiniFrame.NativeBridge/Native/packages.config deleted file mode 100644 index d746a70f8..000000000 --- a/src/InfiniFrame.NativeBridge/Native/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.CustomSchemes.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.CustomSchemes.cpp new file mode 100644 index 000000000..ce2926b96 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.CustomSchemes.cpp @@ -0,0 +1,16 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Api/Exports/Exports.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +extern "C" { +EXPORTED InteropStatus InfiniFrameNative_AddCustomSchemeName(InfiniFrameWindow* instance, const AutoString scheme) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { + if (!EnsureNotNull(scheme, "scheme")) + return; + window->AddCustomSchemeName(scheme); + }); +} +} diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Dialog.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Dialog.cpp similarity index 89% rename from src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Dialog.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Dialog.cpp index f2b2fea22..42b90d451 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Dialog.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Dialog.cpp @@ -1,13 +1,13 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/Exports/Exports.h" +#include "Api/Exports/Exports.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- extern "C" { -/// @param[out] values Owned string array, caller must free with InfiniFrame_FreeStringArray(values, resultCount). -EXPORTED InteropStatus InfiniFrame_ShowOpenFile( +/// @param[out] values Owned string array, caller must free with InfiniFrameNative_FreeStringArray(values, resultCount). +EXPORTED InteropStatus InfiniFrameNative_ShowOpenFile( InfiniFrameWindow* inst, const AutoString title, const AutoString defaultPath, @@ -32,8 +32,8 @@ EXPORTED InteropStatus InfiniFrame_ShowOpenFile( }); } -/// @param[out] values Owned string array, caller must free with InfiniFrame_FreeStringArray(values, resultCount). -EXPORTED InteropStatus InfiniFrame_ShowOpenFolder( +/// @param[out] values Owned string array, caller must free with InfiniFrameNative_FreeStringArray(values, resultCount). +EXPORTED InteropStatus InfiniFrameNative_ShowOpenFolder( InfiniFrameWindow* inst, const AutoString title, const AutoString defaultPath, @@ -53,8 +53,8 @@ EXPORTED InteropStatus InfiniFrame_ShowOpenFolder( }); } -/// @param[out] value Owned string, caller must free with InfiniFrame_FreeString. -EXPORTED InteropStatus InfiniFrame_ShowSaveFile( +/// @param[out] value Owned string, caller must free with InfiniFrameNative_FreeString. +EXPORTED InteropStatus InfiniFrameNative_ShowSaveFile( InfiniFrameWindow* inst, const AutoString title, const AutoString defaultPath, @@ -75,7 +75,7 @@ EXPORTED InteropStatus InfiniFrame_ShowSaveFile( }); } -EXPORTED InteropStatus InfiniFrame_ShowMessage( +EXPORTED InteropStatus InfiniFrameNative_ShowMessage( InfiniFrameWindow* inst, const AutoString title, const AutoString text, diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Dispatch.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Dispatch.cpp new file mode 100644 index 000000000..138624971 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Dispatch.cpp @@ -0,0 +1,16 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Api/Exports/Exports.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +extern "C" { +EXPORTED InteropStatus InfiniFrameNative_Invoke(InfiniFrameWindow* instance, const ACTION callback) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { + if (callback == nullptr) + throw std::invalid_argument("Argument 'callback' is null."); + window->Invoke(callback); + }); +} +} diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Events.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Events.cpp new file mode 100644 index 000000000..05ce8d78c --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Events.cpp @@ -0,0 +1,32 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Api/Exports/Exports.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +extern "C" { +EXPORTED InteropStatus InfiniFrameNative_SetClosingCallback(InfiniFrameWindow* instance, const ClosingCallback callback) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetClosingCallback(callback); }); +} + +EXPORTED InteropStatus InfiniFrameNative_setClosedCallback(InfiniFrameWindow* instance, const ClosedCallback callback) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetClosedCallback(callback); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetFocusInCallback(InfiniFrameWindow* instance, const FocusInCallback callback) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetFocusInCallback(callback); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetFocusOutCallback(InfiniFrameWindow* instance, const FocusOutCallback callback) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetFocusOutCallback(callback); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetMovedCallback(InfiniFrameWindow* instance, const MovedCallback callback) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMovedCallback(callback); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetResizedCallback(InfiniFrameWindow* instance, const ResizedCallback callback) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetResizedCallback(callback); }); +} +} diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Lifecycle.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Lifecycle.cpp similarity index 80% rename from src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Lifecycle.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Lifecycle.cpp index 7da18814d..b6250fb85 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Lifecycle.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Lifecycle.cpp @@ -1,12 +1,12 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/Exports/Exports.h" +#include "Api/Exports/Exports.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- extern "C" { -EXPORTED InteropStatus InfiniFrame_ctor(InfiniFrameInitParams* initParams, InfiniFrameWindow** value) { +EXPORTED InteropStatus InfiniFrameNative_ctor(InfiniFrameInitParams* initParams, InfiniFrameWindow** value) { ResetOut(value, static_cast(nullptr)); return RunExportStatus([&] { if (!EnsureOutNotNull(value, "value")) @@ -21,7 +21,7 @@ EXPORTED InteropStatus InfiniFrame_ctor(InfiniFrameInitParams* initParams, Infin }); } -EXPORTED InteropStatus InfiniFrame_dtor(InfiniFrameWindow* instance) { +EXPORTED InteropStatus InfiniFrameNative_dtor(InfiniFrameWindow* instance) { return RunExportStatus([&] { if (!EnsureNotNull(instance, "instance")) return; @@ -29,11 +29,11 @@ EXPORTED InteropStatus InfiniFrame_dtor(InfiniFrameWindow* instance) { }); } -EXPORTED InteropStatus InfiniFrame_Close(InfiniFrameWindow* instance) { +EXPORTED InteropStatus InfiniFrameNative_Close(InfiniFrameWindow* instance) { return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->Close(); }); } -EXPORTED InteropStatus InfiniFrame_WaitForExit(InfiniFrameWindow* instance) { +EXPORTED InteropStatus InfiniFrameNative_WaitForExit(InfiniFrameWindow* instance) { return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->WaitForExit(); }); } } diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Memory.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Memory.cpp similarity index 81% rename from src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Memory.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Memory.cpp index d247f81a0..b1fa67fad 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Memory.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Memory.cpp @@ -1,12 +1,12 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/Exports/Exports.h" +#include "Api/Exports/Exports.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- extern "C" { -EXPORTED InteropStatus InfiniFrame_FreeString(AutoString value) { +EXPORTED InteropStatus InfiniFrameNative_FreeString(AutoString value) { return RunExportStatus([&] { if (!EnsureNotNull(value, "value")) return; @@ -20,7 +20,7 @@ EXPORTED InteropStatus InfiniFrame_FreeString(AutoString value) { }); } -EXPORTED InteropStatus InfiniFrame_FreeStringArray(AutoString* values, const int count) { +EXPORTED InteropStatus InfiniFrameNative_FreeStringArray(AutoString* values, const int count) { return RunExportStatus([&] { if (!EnsureNotNull(values, "values")) return; @@ -28,7 +28,7 @@ EXPORTED InteropStatus InfiniFrame_FreeStringArray(AutoString* values, const int throw std::invalid_argument("Argument 'count' must be >= 0."); for (int i = 0; i < count; ++i) { if (values[i] != nullptr) { - InfiniFrame_FreeString(values[i]); + InfiniFrameNative_FreeString(values[i]); } } #ifdef _WIN32 @@ -41,8 +41,8 @@ EXPORTED InteropStatus InfiniFrame_FreeStringArray(AutoString* values, const int }); } -/// @param[out] value Owned string, caller must free with InfiniFrame_FreeString. -EXPORTED InteropStatus InfiniFrame_GetLastErrorMessage(AutoString* value) { +/// @param[out] value Owned string, caller must free with InfiniFrameNative_FreeString. +EXPORTED InteropStatus InfiniFrameNative_GetLastErrorMessage(AutoString* value) { // Must NOT go through RunExportStatus, that helper calls SetSuccess() first, which would wipe g_lastErrorMessage // before we can read it. ResetOut(value, static_cast(nullptr)); diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Monitors.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Monitors.cpp new file mode 100644 index 000000000..fb2d4cacb --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Monitors.cpp @@ -0,0 +1,16 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Api/Exports/Exports.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +extern "C" { +EXPORTED InteropStatus InfiniFrameNative_GetAllMonitors(InfiniFrameWindow* instance, const GetAllMonitorsCallback callback) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { + if (callback == nullptr) + throw std::invalid_argument("Argument 'callback' is null."); + window->GetAllMonitors(callback); + }); +} +} diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Platform.MacOs.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Platform.MacOs.cpp new file mode 100644 index 000000000..6f3bc107d --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Platform.MacOs.cpp @@ -0,0 +1,14 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Api/Exports/Exports.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +extern "C" { +#ifdef __APPLE__ +EXPORTED InteropStatus InfiniFrameNative_register_mac() { + return RunExportStatus([] { InfiniFrameWindow::Register(); }); +} +#endif +} diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Platform.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Platform.Windows.cpp similarity index 72% rename from src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Platform.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Platform.Windows.cpp index 3befe9168..2a9cfea55 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Platform.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Platform.Windows.cpp @@ -1,13 +1,13 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/Exports/Exports.h" +#include "Api/Exports/Exports.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- extern "C" { #ifdef _WIN32 -EXPORTED InteropStatus InfiniFrame_register_win32(const HINSTANCE hInstance) { +EXPORTED InteropStatus InfiniFrameNative_register_win32(const HINSTANCE hInstance) { return RunExportStatus([&] { if (hInstance == nullptr) throw std::invalid_argument("Argument 'hInstance' is null."); @@ -15,7 +15,7 @@ EXPORTED InteropStatus InfiniFrame_register_win32(const HINSTANCE hInstance) { }); } -EXPORTED InteropStatus InfiniFrame_getHwnd_win32(InfiniFrameWindow* instance, HWND* value) { +EXPORTED InteropStatus InfiniFrameNative_getHwnd_win32(InfiniFrameWindow* instance, HWND* value) { ResetOut(value, static_cast(nullptr)); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(value, "value")) @@ -25,7 +25,7 @@ EXPORTED InteropStatus InfiniFrame_getHwnd_win32(InfiniFrameWindow* instance, HW } EXPORTED InteropStatus -InfiniFrame_setWebView2RuntimePath_win32(InfiniFrameWindow*, const AutoString webView2RuntimePath) { +InfiniFrameNative_setWebView2RuntimePath_win32(InfiniFrameWindow*, const AutoString webView2RuntimePath) { return RunExportStatus([&] { if (!EnsureNotNull(webView2RuntimePath, "webView2RuntimePath")) return; @@ -33,7 +33,7 @@ InfiniFrame_setWebView2RuntimePath_win32(InfiniFrameWindow*, const AutoString we }); } -EXPORTED InteropStatus InfiniFrame_GetNotificationsEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetNotificationsEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -41,9 +41,5 @@ EXPORTED InteropStatus InfiniFrame_GetNotificationsEnabled(InfiniFrameWindow* in window->GetNotificationsEnabled(enabled); }); } -#elif __APPLE__ -EXPORTED InteropStatus InfiniFrame_register_mac() { - return RunExportStatus([] { InfiniFrameWindow::Register(); }); -} #endif } diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Actions.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Actions.cpp new file mode 100644 index 000000000..5b0e6a8f3 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Actions.cpp @@ -0,0 +1,34 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Api/Exports/Exports.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +extern "C" { +EXPORTED InteropStatus InfiniFrameNative_Center(InfiniFrameWindow* instance) { + return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->Center(); }); +} + +EXPORTED InteropStatus InfiniFrameNative_ClearBrowserAutoFill(InfiniFrameWindow* instance) { + return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->ClearBrowserAutoFill(); }); +} + +EXPORTED InteropStatus InfiniFrameNative_Restore(InfiniFrameWindow* instance) { + return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->Restore(); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetFocused(InfiniFrameWindow* instance) { + return RunWindowExportStatus(instance, [](InfiniFrameWindow* window) { window->SetFocused(); }); +} + +EXPORTED InteropStatus InfiniFrameNative_ShowNotification( + InfiniFrameWindow* instance, + const AutoString title, + const AutoString body +) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { + window->ShowNotification(NullToEmpty(title), NullToEmpty(body)); + }); +} +} diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.WindowState.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Getters.cpp similarity index 70% rename from src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.WindowState.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Getters.cpp index feb3d39b3..7be48ec00 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.WindowState.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Getters.cpp @@ -1,12 +1,12 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/Exports/Exports.h" +#include "Api/Exports/Exports.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- extern "C" { -EXPORTED InteropStatus InfiniFrame_GetTransparentEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetTransparentEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -15,7 +15,7 @@ EXPORTED InteropStatus InfiniFrame_GetTransparentEnabled(InfiniFrameWindow* inst }); } -EXPORTED InteropStatus InfiniFrame_GetContextMenuEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetContextMenuEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -24,7 +24,7 @@ EXPORTED InteropStatus InfiniFrame_GetContextMenuEnabled(InfiniFrameWindow* inst }); } -EXPORTED InteropStatus InfiniFrame_GetZoomEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetZoomEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -33,7 +33,7 @@ EXPORTED InteropStatus InfiniFrame_GetZoomEnabled(InfiniFrameWindow* instance, b }); } -EXPORTED InteropStatus InfiniFrame_GetDevToolsEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetDevToolsEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -42,7 +42,7 @@ EXPORTED InteropStatus InfiniFrame_GetDevToolsEnabled(InfiniFrameWindow* instanc }); } -EXPORTED InteropStatus InfiniFrame_GetFullScreen(InfiniFrameWindow* instance, bool* fullScreen) { +EXPORTED InteropStatus InfiniFrameNative_GetFullScreen(InfiniFrameWindow* instance, bool* fullScreen) { ResetOut(fullScreen, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(fullScreen, "fullScreen")) @@ -51,7 +51,7 @@ EXPORTED InteropStatus InfiniFrame_GetFullScreen(InfiniFrameWindow* instance, bo }); } -EXPORTED InteropStatus InfiniFrame_GetGrantBrowserPermissions(InfiniFrameWindow* instance, bool* grant) { +EXPORTED InteropStatus InfiniFrameNative_GetGrantBrowserPermissions(InfiniFrameWindow* instance, bool* grant) { ResetOut(grant, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(grant, "grant")) @@ -60,8 +60,8 @@ EXPORTED InteropStatus InfiniFrame_GetGrantBrowserPermissions(InfiniFrameWindow* }); } -/// @param[out] value Owned string, caller must free with InfiniFrame_FreeString. -EXPORTED InteropStatus InfiniFrame_GetUserAgent(InfiniFrameWindow* instance, AutoString* value) { +/// @param[out] value Owned string, caller must free with InfiniFrameNative_FreeString. +EXPORTED InteropStatus InfiniFrameNative_GetUserAgent(InfiniFrameWindow* instance, AutoString* value) { ResetOut(value, static_cast(nullptr)); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(value, "value")) @@ -70,7 +70,7 @@ EXPORTED InteropStatus InfiniFrame_GetUserAgent(InfiniFrameWindow* instance, Aut }); } -EXPORTED InteropStatus InfiniFrame_GetMediaAutoplayEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetMediaAutoplayEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -79,7 +79,7 @@ EXPORTED InteropStatus InfiniFrame_GetMediaAutoplayEnabled(InfiniFrameWindow* in }); } -EXPORTED InteropStatus InfiniFrame_GetFileSystemAccessEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetFileSystemAccessEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -88,7 +88,7 @@ EXPORTED InteropStatus InfiniFrame_GetFileSystemAccessEnabled(InfiniFrameWindow* }); } -EXPORTED InteropStatus InfiniFrame_GetWebSecurityEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetWebSecurityEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -97,7 +97,7 @@ EXPORTED InteropStatus InfiniFrame_GetWebSecurityEnabled(InfiniFrameWindow* inst }); } -EXPORTED InteropStatus InfiniFrame_GetJavascriptClipboardAccessEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetJavascriptClipboardAccessEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -106,7 +106,7 @@ EXPORTED InteropStatus InfiniFrame_GetJavascriptClipboardAccessEnabled(InfiniFra }); } -EXPORTED InteropStatus InfiniFrame_GetMediaStreamEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetMediaStreamEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -115,7 +115,7 @@ EXPORTED InteropStatus InfiniFrame_GetMediaStreamEnabled(InfiniFrameWindow* inst }); } -EXPORTED InteropStatus InfiniFrame_GetSmoothScrollingEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetSmoothScrollingEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -124,7 +124,7 @@ EXPORTED InteropStatus InfiniFrame_GetSmoothScrollingEnabled(InfiniFrameWindow* }); } -EXPORTED InteropStatus InfiniFrame_GetMaximized(InfiniFrameWindow* instance, bool* isMaximized) { +EXPORTED InteropStatus InfiniFrameNative_GetMaximized(InfiniFrameWindow* instance, bool* isMaximized) { ResetOut(isMaximized, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(isMaximized, "isMaximized")) @@ -133,7 +133,7 @@ EXPORTED InteropStatus InfiniFrame_GetMaximized(InfiniFrameWindow* instance, boo }); } -EXPORTED InteropStatus InfiniFrame_GetMinimized(InfiniFrameWindow* instance, bool* isMinimized) { +EXPORTED InteropStatus InfiniFrameNative_GetMinimized(InfiniFrameWindow* instance, bool* isMinimized) { ResetOut(isMinimized, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(isMinimized, "isMinimized")) @@ -142,7 +142,7 @@ EXPORTED InteropStatus InfiniFrame_GetMinimized(InfiniFrameWindow* instance, boo }); } -EXPORTED InteropStatus InfiniFrame_GetIgnoreCertificateErrorsEnabled(InfiniFrameWindow* instance, bool* enabled) { +EXPORTED InteropStatus InfiniFrameNative_GetIgnoreCertificateErrorsEnabled(InfiniFrameWindow* instance, bool* enabled) { ResetOut(enabled, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(enabled, "enabled")) @@ -151,7 +151,7 @@ EXPORTED InteropStatus InfiniFrame_GetIgnoreCertificateErrorsEnabled(InfiniFrame }); } -EXPORTED InteropStatus InfiniFrame_GetPosition(InfiniFrameWindow* instance, int* x, int* y) { +EXPORTED InteropStatus InfiniFrameNative_GetPosition(InfiniFrameWindow* instance, int* x, int* y) { ResetOut2(x, y, 0); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(x, "x") || !EnsureOutNotNull(y, "y")) @@ -160,7 +160,7 @@ EXPORTED InteropStatus InfiniFrame_GetPosition(InfiniFrameWindow* instance, int* }); } -EXPORTED InteropStatus InfiniFrame_GetResizable(InfiniFrameWindow* instance, bool* resizable) { +EXPORTED InteropStatus InfiniFrameNative_GetResizable(InfiniFrameWindow* instance, bool* resizable) { ResetOut(resizable, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(resizable, "resizable")) @@ -169,7 +169,7 @@ EXPORTED InteropStatus InfiniFrame_GetResizable(InfiniFrameWindow* instance, boo }); } -EXPORTED InteropStatus InfiniFrame_GetScreenDpi(InfiniFrameWindow* instance, unsigned int* value) { +EXPORTED InteropStatus InfiniFrameNative_GetScreenDpi(InfiniFrameWindow* instance, unsigned int* value) { ResetOut(value, static_cast(0)); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(value, "value")) @@ -178,7 +178,7 @@ EXPORTED InteropStatus InfiniFrame_GetScreenDpi(InfiniFrameWindow* instance, uns }); } -EXPORTED InteropStatus InfiniFrame_GetSize(InfiniFrameWindow* instance, int* width, int* height) { +EXPORTED InteropStatus InfiniFrameNative_GetSize(InfiniFrameWindow* instance, int* width, int* height) { ResetOut2(width, height, 0); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(width, "width") || !EnsureOutNotNull(height, "height")) @@ -187,7 +187,7 @@ EXPORTED InteropStatus InfiniFrame_GetSize(InfiniFrameWindow* instance, int* wid }); } -EXPORTED InteropStatus InfiniFrame_GetMaxSize(InfiniFrameWindow* instance, int* width, int* height) { +EXPORTED InteropStatus InfiniFrameNative_GetMaxSize(InfiniFrameWindow* instance, int* width, int* height) { ResetOut2(width, height, 0); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(width, "width") || !EnsureOutNotNull(height, "height")) @@ -196,7 +196,7 @@ EXPORTED InteropStatus InfiniFrame_GetMaxSize(InfiniFrameWindow* instance, int* }); } -EXPORTED InteropStatus InfiniFrame_GetMinSize(InfiniFrameWindow* instance, int* width, int* height) { +EXPORTED InteropStatus InfiniFrameNative_GetMinSize(InfiniFrameWindow* instance, int* width, int* height) { ResetOut2(width, height, 0); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(width, "width") || !EnsureOutNotNull(height, "height")) @@ -205,8 +205,8 @@ EXPORTED InteropStatus InfiniFrame_GetMinSize(InfiniFrameWindow* instance, int* }); } -/// @param[out] value Owned string, caller must free with InfiniFrame_FreeString. -EXPORTED InteropStatus InfiniFrame_GetTitle(InfiniFrameWindow* instance, AutoString* value) { +/// @param[out] value Owned string, caller must free with InfiniFrameNative_FreeString. +EXPORTED InteropStatus InfiniFrameNative_GetTitle(InfiniFrameWindow* instance, AutoString* value) { ResetOut(value, static_cast(nullptr)); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(value, "value")) @@ -215,7 +215,7 @@ EXPORTED InteropStatus InfiniFrame_GetTitle(InfiniFrameWindow* instance, AutoStr }); } -EXPORTED InteropStatus InfiniFrame_GetTopmost(InfiniFrameWindow* instance, bool* topmost) { +EXPORTED InteropStatus InfiniFrameNative_GetTopmost(InfiniFrameWindow* instance, bool* topmost) { ResetOut(topmost, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(topmost, "topmost")) @@ -224,7 +224,7 @@ EXPORTED InteropStatus InfiniFrame_GetTopmost(InfiniFrameWindow* instance, bool* }); } -EXPORTED InteropStatus InfiniFrame_GetZoom(InfiniFrameWindow* instance, int* zoom) { +EXPORTED InteropStatus InfiniFrameNative_GetZoom(InfiniFrameWindow* instance, int* zoom) { ResetOut(zoom, 0); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(zoom, "zoom")) @@ -233,7 +233,7 @@ EXPORTED InteropStatus InfiniFrame_GetZoom(InfiniFrameWindow* instance, int* zoo }); } -EXPORTED InteropStatus InfiniFrame_GetFocused(InfiniFrameWindow* instance, bool* isFocused) { +EXPORTED InteropStatus InfiniFrameNative_GetFocused(InfiniFrameWindow* instance, bool* isFocused) { ResetOut(isFocused, false); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(isFocused, "isFocused")) @@ -242,8 +242,8 @@ EXPORTED InteropStatus InfiniFrame_GetFocused(InfiniFrameWindow* instance, bool* }); } -/// @param[out] value Owned string, caller must free with InfiniFrame_FreeString. -EXPORTED InteropStatus InfiniFrame_GetIconFileName(InfiniFrameWindow* instance, AutoString* value) { +/// @param[out] value Owned string, caller must free with InfiniFrameNative_FreeString. +EXPORTED InteropStatus InfiniFrameNative_GetIconFileName(InfiniFrameWindow* instance, AutoString* value) { ResetOut(value, static_cast(nullptr)); return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { if (!EnsureOutNotNull(value, "value")) diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Navigation.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Navigation.cpp new file mode 100644 index 000000000..679e9d1be --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Navigation.cpp @@ -0,0 +1,30 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Api/Exports/Exports.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +extern "C" { +EXPORTED InteropStatus InfiniFrameNative_NavigateToString(InfiniFrameWindow* instance, const AutoString content) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { + if (!EnsureNotNull(content, "content")) + return; + window->NavigateToString(content); + }); +} + +EXPORTED InteropStatus InfiniFrameNative_NavigateToUrl(InfiniFrameWindow* instance, const AutoString url) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { + if (!EnsureNotNull(url, "url")) + return; + window->NavigateToUrl(url); + }); +} + +EXPORTED InteropStatus InfiniFrameNative_SendWebMessage(InfiniFrameWindow* instance, const AutoString message) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { + window->SendWebMessage(NullToEmpty(message)); + }); +} +} diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Setters.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Setters.cpp new file mode 100644 index 000000000..e276f5aad --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.Window.Setters.cpp @@ -0,0 +1,74 @@ +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Api/Exports/Exports.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +extern "C" { +EXPORTED InteropStatus InfiniFrameNative_SetTransparentEnabled(InfiniFrameWindow* instance, const bool enabled) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetTransparentEnabled(enabled); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetContextMenuEnabled(InfiniFrameWindow* instance, const bool enabled) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetContextMenuEnabled(enabled); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetZoomEnabled(InfiniFrameWindow* instance, const bool enabled) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetZoomEnabled(enabled); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetDevToolsEnabled(InfiniFrameWindow* instance, const bool enabled) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetDevToolsEnabled(enabled); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetFullScreen(InfiniFrameWindow* instance, const bool fullScreen) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetFullScreen(fullScreen); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetIconFile(InfiniFrameWindow* instance, const AutoString filename) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { + window->SetIconFile(NullToEmpty(filename)); + }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetMaximized(InfiniFrameWindow* instance, const bool maximized) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMaximized(maximized); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetMaxSize(InfiniFrameWindow* instance, const int width, const int height) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMaxSize(width, height); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetMinimized(InfiniFrameWindow* instance, const bool minimized) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMinimized(minimized); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetMinSize(InfiniFrameWindow* instance, const int width, const int height) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetMinSize(width, height); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetPosition(InfiniFrameWindow* instance, const int x, const int y) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetPosition(x, y); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetResizable(InfiniFrameWindow* instance, const bool resizable) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetResizable(resizable); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetSize(InfiniFrameWindow* instance, const int width, const int height) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetSize(width, height); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetTitle(InfiniFrameWindow* instance, const AutoString title) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetTitle(NullToEmpty(title)); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetTopmost(InfiniFrameWindow* instance, const bool topmost) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetTopmost(topmost); }); +} + +EXPORTED InteropStatus InfiniFrameNative_SetZoom(InfiniFrameWindow* instance, const int zoom) { + return RunWindowExportStatus(instance, [&](InfiniFrameWindow* window) { window->SetZoom(zoom); }); +} +} diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.h b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.h similarity index 50% rename from src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.h rename to src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.h index bde8e0269..0096de734 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Exports/Exports.h @@ -12,8 +12,10 @@ #define EXPORTED #endif -#include "Public/InfiniFrame.h" -#include "Utils/ExportGuards.h" +#include "Runtime/Shared/Types/Basic.h" +#include "Runtime/Shared/Utilities/InteropStatus.h" +#include "Api/Utilities/Utilities.h" + // --------------------------------------------------------------------------------------------------------------------- // String Ownership Contract // --------------------------------------------------------------------------------------------------------------------- @@ -21,14 +23,9 @@ // // OWNED (caller-frees): // Any AutoString written to an out-parameter (AutoString*) is heap-allocated -// by the native layer. The caller MUST free it with InfiniFrame_FreeString(). +// by the native layer. The caller MUST free it with InfiniFrameNative_FreeString(). // Multi-string results (AutoString** from dialog APIs) must be freed with -// InfiniFrame_FreeStringArray(values, count). -// -// Affected exports: -// InfiniFrame_GetUserAgent, InfiniFrame_GetTitle, InfiniFrame_GetIconFileName, -// InfiniFrame_GetLastErrorMessage, InfiniFrame_ShowOpenFile, -// InfiniFrame_ShowOpenFolder, InfiniFrame_ShowSaveFile +// InfiniFrameNative_FreeStringArray(values, count). // // BORROWED (callee does not take ownership): // All AutoString input parameters (const AutoString) are borrowed for the @@ -38,27 +35,3 @@ // NULL semantics: // Returning nullptr from an owned-string function means "no value" (e.g. no // file selected). The caller must still check before calling FreeString. -// --------------------------------------------------------------------------------------------------------------------- -// Code -// --------------------------------------------------------------------------------------------------------------------- -using infiniframe::exports::EnsureNotNull; -using infiniframe::exports::GetLastErrorMessageCopy; -using infiniframe::exports::ResetOut; -using infiniframe::exports::ResetOut2; -using infiniframe::exports::RunExportStatus; -using infiniframe::exports::RunReturnExport; -using infiniframe::exports::RunWindowExportStatus; -using infiniframe::exports::RunWindowReturnExport; - -template bool EnsureOutNotNull(T* value, const char* argumentName) noexcept { - return infiniframe::exports::EnsureNotNull(value, argumentName, InteropStatus::OutParameterSetToInvalidNull); -} - -inline AutoString NullToEmpty(const AutoString value) noexcept { -#ifdef _WIN32 - static const wchar_t empty[] = L""; -#else - static const char empty[] = ""; -#endif - return value != nullptr ? value : const_cast(empty); -} diff --git a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Tests.cpp b/src/InfiniFrame.NativeBridge/Native/src/Api/Testing/Exports.Tests.cpp similarity index 80% rename from src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Tests.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Api/Testing/Exports.Tests.cpp index afcfb1938..71f640366 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/Exports/Exports.Tests.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Testing/Exports.Tests.cpp @@ -1,8 +1,8 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/InfiniFrame.h" -#include "Utils/ExportGuards.h" +#include "Runtime/Shared/Window/InfiniFrame.h" +#include "Api/Exports/Exports.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- @@ -14,33 +14,6 @@ #if defined(INFINIFRAME_BUILD_TEST_EXPORTS) -using infiniframe::exports::EnsureNotNull; -using infiniframe::exports::RunExportStatus; - -#ifdef _WIN32 -inline AutoString duplicateString(const AutoStringConst str) { - if (str == nullptr) { - return nullptr; - } - - const size_t len = wcslen(str); - auto* copy = new wchar_t[len + 1]; - wcscpy_s(copy, len + 1, str); - return copy; -} -#else -inline AutoString duplicateString(const AutoStringConst str) { - if (str == nullptr) { - return nullptr; - } - - const size_t len = strlen(str); - auto* copy = new char[len + 1]; - strcpy(copy, str); - return copy; -} -#endif - extern "C" { EXPORTED InteropStatus InfiniFrameNativeTests_NativeParametersReturnAsIs( const InfiniFrameInitParams* params, InfiniFrameInitParams** new_params @@ -57,14 +30,14 @@ EXPORTED InteropStatus InfiniFrameNativeTests_NativeParametersReturnAsIs( *new_params = new InfiniFrameInitParams(); - (*new_params)->StartString = duplicateString(params->StartString); - (*new_params)->StartUrl = duplicateString(params->StartUrl); - (*new_params)->Title = duplicateString(params->Title); - (*new_params)->WindowIconFile = duplicateString(params->WindowIconFile); - (*new_params)->TemporaryFilesPath = duplicateString(params->TemporaryFilesPath); - (*new_params)->UserAgent = duplicateString(params->UserAgent); - (*new_params)->BrowserControlInitParameters = duplicateString(params->BrowserControlInitParameters); - (*new_params)->NotificationRegistrationId = duplicateString(params->NotificationRegistrationId); + (*new_params)->StartString = DuplicateString(params->StartString); + (*new_params)->StartUrl = DuplicateString(params->StartUrl); + (*new_params)->Title = DuplicateString(params->Title); + (*new_params)->WindowIconFile = DuplicateString(params->WindowIconFile); + (*new_params)->TemporaryFilesPath = DuplicateString(params->TemporaryFilesPath); + (*new_params)->UserAgent = DuplicateString(params->UserAgent); + (*new_params)->BrowserControlInitParameters = DuplicateString(params->BrowserControlInitParameters); + (*new_params)->NotificationRegistrationId = DuplicateString(params->NotificationRegistrationId); (*new_params)->ParentInstance = params->ParentInstance; (*new_params)->ClosingHandler = params->ClosingHandler; diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportErrorState.h b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportErrorState.h new file mode 100644 index 000000000..c545c3481 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportErrorState.h @@ -0,0 +1,70 @@ +#pragma once +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#ifdef __linux__ +#include +#endif + +#ifdef _WIN32 +#include +#endif + +#include +#include +#include +#include +#include + +#include "Runtime/Shared/Window/InfiniFrame.h" +#include "Runtime/Shared/Utilities/InteropStatus.h" +#include "Api/Utilities/ExportStringHelpers.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +namespace infiniframe::exports { + inline thread_local std::string g_lastErrorMessage; + inline thread_local auto g_lastStatus = InteropStatus::Success; + + inline void SetLastErrorCode(const InteropStatus status) noexcept { +#ifdef _WIN32 + SetLastError(static_cast(status)); +#else + errno = static_cast(status); +#endif + } + + inline void ClearLastErrorCode() noexcept { +#ifdef _WIN32 + SetLastError(0); +#else + errno = 0; +#endif + } + + inline void SetFailure(const InteropStatus status, std::string message) noexcept { + g_lastErrorMessage = std::move(message); + g_lastStatus = status; + SetLastErrorCode(status); + } + + inline void SetSuccess() noexcept { + g_lastErrorMessage.clear(); + g_lastStatus = InteropStatus::Success; + ClearLastErrorCode(); + } + + inline InteropStatus TranslateException(const std::exception& ex) noexcept { + if (dynamic_cast(&ex) != nullptr) { + SetFailure(InteropStatus::InvalidArgument, ex.what()); + return InteropStatus::InvalidArgument; + } + + SetFailure(InteropStatus::OperationFailed, ex.what()); + return InteropStatus::OperationFailed; + } + + inline AutoString GetLastErrorMessageCopy() { + return AllocateErrorMessageString(g_lastErrorMessage); + } +} \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportExecution.h b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportExecution.h new file mode 100644 index 000000000..16b834a20 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportExecution.h @@ -0,0 +1,75 @@ +#pragma once +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include +#include + +#include "Runtime/Shared/Window/InfiniFrame.h" +#include "Runtime/Shared/Utilities/InteropStatus.h" +#include "ExportErrorState.h" +#include "ExportValidation.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +namespace infiniframe::exports { + template InteropStatus RunExportStatus(Fn&& fn) noexcept { + try { + SetSuccess(); + std::forward(fn)(); + if (g_lastStatus != InteropStatus::Success) { + return g_lastStatus; + } + SetSuccess(); + return InteropStatus::Success; + } catch (const std::exception& ex) { + return TranslateException(ex); + } catch (...) { + SetFailure(InteropStatus::OperationFailed, "Unknown native exception."); + return InteropStatus::OperationFailed; + } + } + + template InteropStatus RunWindowExportStatus(InfiniFrameWindow* instance, Fn&& fn) noexcept { + return RunExportStatus([&] { + if (!EnsureNotNull(instance, "instance")) { + return; + } + + std::forward(fn)(instance); + }); + } + + template + T RunWindowReturnExport(InfiniFrameWindow* instance, T fallback, Fn&& fn) noexcept { + try { + if (!EnsureNotNull(instance, "instance")) { + return fallback; + } + + T value = std::forward(fn)(instance); + SetSuccess(); + return value; + } catch (const std::exception& ex) { + TranslateException(ex); + return fallback; + } catch (...) { + SetFailure(InteropStatus::OperationFailed, "Unknown native exception."); + return fallback; + } + } + + template T RunReturnExport(T fallback, Fn&& fn) noexcept { + try { + T value = std::forward(fn)(); + SetSuccess(); + return value; + } catch (const std::exception& ex) { + TranslateException(ex); + return fallback; + } catch (...) { + SetFailure(InteropStatus::OperationFailed, "Unknown native exception."); + return fallback; + } + } +} \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportStringHelpers.h b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportStringHelpers.h new file mode 100644 index 000000000..6d60c1d1a --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportStringHelpers.h @@ -0,0 +1,85 @@ +#pragma once +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#ifdef __linux__ +#include +#endif + +#ifdef _WIN32 +#include +#endif + +#include + +#include "Runtime/Shared/Window/InfiniFrame.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +namespace infiniframe::exports { +#ifdef _WIN32 + inline AutoString AllocateErrorMessageString(const std::string& value) { + if (value.empty()) { + return nullptr; + } + + const int wideCount = + MultiByteToWideChar(CP_UTF8, 0, value.c_str(), static_cast(value.size()), nullptr, 0); + if (wideCount <= 0) { + return nullptr; + } + + auto* buffer = new wchar_t[wideCount + 1]; + const int converted = + MultiByteToWideChar(CP_UTF8, 0, value.c_str(), static_cast(value.size()), buffer, wideCount); + if (converted <= 0) { + delete[] buffer; + return nullptr; + } + + buffer[converted] = L'\0'; + return buffer; + } +#else + inline AutoString AllocateErrorMessageString(const std::string& value) { + if (value.empty()) { + return nullptr; + } + + return AllocateStringCopy(value); + } +#endif + + inline AutoString NullToEmpty(const AutoString value) noexcept { +#ifdef _WIN32 + static const wchar_t empty[] = L""; +#else + static const char empty[] = ""; +#endif + return value != nullptr ? value : const_cast(empty); + } + +#ifdef _WIN32 + inline AutoString DuplicateString(const AutoStringConst str) { + if (str == nullptr) { + return nullptr; + } + + const size_t len = wcslen(str); + auto* copy = new wchar_t[len + 1]; + wcscpy_s(copy, len + 1, str); + return copy; + } +#else + inline AutoString DuplicateString(const AutoStringConst str) { + if (str == nullptr) { + return nullptr; + } + + const size_t len = strlen(str); + auto* copy = new char[len + 1]; + strcpy(copy, str); + return copy; + } +#endif +} \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportValidation.h b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportValidation.h new file mode 100644 index 000000000..41d41ecb0 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/ExportValidation.h @@ -0,0 +1,52 @@ +#pragma once +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#ifdef __linux__ +#include +#endif + +#ifdef _WIN32 +#include +#endif + +#include +#include +#include +#include +#include + +#include "Runtime/Shared/Window/InfiniFrame.h" +#include "Runtime/Shared/Utilities/InteropStatus.h" +#include "ExportErrorState.h" +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +namespace infiniframe::exports { + + template void ResetOut(T* outValue, const T fallback = {}) noexcept { + if (outValue != nullptr) { + *outValue = fallback; + } + } + + template void ResetOut2(T* first, T* second, const T fallback = {}) noexcept { + ResetOut(first, fallback); + ResetOut(second, fallback); + } + + template bool EnsureNotNull( + T* value, const char* argumentName, const InteropStatus status = InteropStatus::InvalidArgument + ) noexcept { + if (value != nullptr) { + return true; + } + + SetFailure(status, std::string("Argument '") + argumentName + "' is null."); + return false; + } + + template bool EnsureOutNotNull(T* value, const char* argumentName) noexcept { + return exports::EnsureNotNull(value, argumentName, InteropStatus::OutParameterSetToInvalidNull); + } +} // namespace infiniframe::exports \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/Utilities.h b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/Utilities.h new file mode 100644 index 000000000..5e5c92069 --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Api/Utilities/Utilities.h @@ -0,0 +1,23 @@ +#pragma once +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "ExportErrorState.h" +#include "ExportExecution.h" +#include "ExportStringHelpers.h" +#include "ExportValidation.h" + +// --------------------------------------------------------------------------------------------------------------------- +// Code +// --------------------------------------------------------------------------------------------------------------------- +using infiniframe::exports::EnsureNotNull; +using infiniframe::exports::EnsureOutNotNull; +using infiniframe::exports::GetLastErrorMessageCopy; +using infiniframe::exports::ResetOut; +using infiniframe::exports::ResetOut2; +using infiniframe::exports::RunExportStatus; +using infiniframe::exports::RunReturnExport; +using infiniframe::exports::RunWindowExportStatus; +using infiniframe::exports::RunWindowReturnExport; +using infiniframe::exports::NullToEmpty; +using infiniframe::exports::DuplicateString; \ No newline at end of file diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/VENDORING.md b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/VENDORING.md similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/VENDORING.md rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/VENDORING.md diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/LICENSE b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/LICENSE similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/LICENSE rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/LICENSE diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/simdjson.cpp b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/simdjson.cpp similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/simdjson.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/simdjson.cpp diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/simdjson.h b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/simdjson.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/simdjson/simdjson.h rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdjson/simdjson.h diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/LICENSE-APACHE b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/LICENSE-APACHE similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/LICENSE-APACHE rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/LICENSE-APACHE diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/LICENSE-MIT b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/LICENSE-MIT similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/LICENSE-MIT rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/LICENSE-MIT diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf.cpp b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf.cpp similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf.cpp diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf.h b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf.h rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf.h diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf_c.h b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf_c.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/simdutf/simdutf_c.h rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/simdutf/simdutf_c.h diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/LICENSE.txt b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/LICENSE.txt similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/LICENSE.txt rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/LICENSE.txt diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/wintoastlib.cpp b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/wintoastlib.cpp similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/wintoastlib.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/wintoastlib.cpp diff --git a/src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/wintoastlib.h b/src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/wintoastlib.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Dependencies/wintoastlib/wintoastlib.h rename to src/InfiniFrame.NativeBridge/Native/src/Dependencies/wintoastlib/wintoastlib.h diff --git a/src/InfiniFrame.NativeBridge/Native/Embedded/Embedded.h b/src/InfiniFrame.NativeBridge/Native/src/Embedded/Embedded.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Embedded/Embedded.h rename to src/InfiniFrame.NativeBridge/Native/src/Embedded/Embedded.h diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/UiDispatcher.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/UiDispatcher.Gtk.cpp similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/UiDispatcher.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/UiDispatcher.Gtk.cpp index 03680e670..459a51af0 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/UiDispatcher.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/UiDispatcher.Gtk.cpp @@ -4,7 +4,7 @@ #include #include -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowCore.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowCore.Gtk.cpp similarity index 97% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowCore.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowCore.Gtk.cpp index bf9d21bb1..20b0fee71 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowCore.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowCore.Gtk.cpp @@ -7,7 +7,7 @@ #include #include -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowEvents.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowEvents.Gtk.cpp similarity index 94% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowEvents.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowEvents.Gtk.cpp index c705b409e..f180e27f7 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowEvents.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowEvents.Gtk.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowInitialization.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowInitialization.Gtk.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowInitialization.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowInitialization.Gtk.cpp index 246a1018b..081b9595f 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowInitialization.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowInitialization.Gtk.cpp @@ -4,8 +4,8 @@ #include #include -#include "Public/InfiniFrameDialog.h" -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Shared/Window/InfiniFrameDialog.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowLifecycle.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowLifecycle.Gtk.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowLifecycle.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowLifecycle.Gtk.cpp index e2f1c51e8..e477cba6c 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowLifecycle.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowLifecycle.Gtk.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowSignals.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowSignals.Gtk.cpp similarity index 99% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowSignals.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowSignals.Gtk.cpp index 7038925d2..35770c9aa 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowSignals.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowSignals.Gtk.cpp @@ -3,7 +3,7 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowState.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowState.Gtk.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowState.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowState.Gtk.cpp index db5453115..6f4d3adba 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Core/WindowState.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Core/WindowState.Gtk.cpp @@ -4,8 +4,8 @@ #include #include -#include "Utils/StringCopy.h" -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Shared/Utilities/StringCopy.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Dialog.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Dialog.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Dialog.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Dialog.cpp index 31874bf7a..6d0b11497 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Dialog.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Dialog.cpp @@ -3,8 +3,8 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Public/InfiniFrameDialog.h" -#include "Utils/StringArrayCopy.h" +#include "Runtime/Shared/Window/InfiniFrameDialog.h" +#include "Runtime/Shared/Utilities/StringArrayCopy.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Monitors.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Monitors.Gtk.cpp similarity index 95% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Monitors.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Monitors.Gtk.cpp index 717c5b9ff..80c06ebef 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Monitors.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Monitors.Gtk.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Notifications.LibNotify.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Notifications.LibNotify.cpp similarity index 94% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Notifications.LibNotify.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Notifications.LibNotify.cpp index a5cf29a3c..fa17ede0f 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Notifications.LibNotify.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Notifications.LibNotify.cpp @@ -3,7 +3,7 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKit.Gtk.Internal.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKit.Gtk.Internal.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKit.Gtk.Internal.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKit.Gtk.Internal.h diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitCustomSchemes.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitCustomSchemes.Gtk.cpp similarity index 95% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitCustomSchemes.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitCustomSchemes.Gtk.cpp index 08fb18952..1b7303092 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitCustomSchemes.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitCustomSchemes.Gtk.cpp @@ -4,8 +4,8 @@ #include #include -#include "Platform/Linux/Window.Gtk.Internal.h" -#include "Platform/Linux/WebKit/WebKit.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/WebKit/WebKit.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitHost.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitHost.Gtk.cpp similarity index 97% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitHost.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitHost.Gtk.cpp index fa73e3027..f51bb9f09 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitHost.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitHost.Gtk.cpp @@ -8,8 +8,8 @@ #include #include "Embedded/Embedded.h" -#include "Platform/Linux/WebKit/WebKit.Gtk.Internal.h" -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/WebKit/WebKit.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitMessaging.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitMessaging.Gtk.cpp similarity index 93% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitMessaging.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitMessaging.Gtk.cpp index 981322b9a..93d43876e 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitMessaging.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitMessaging.Gtk.cpp @@ -4,9 +4,9 @@ #include #include -#include "Types/Basic.h" -#include "Types/Callbacks.h" -#include "Platform/Linux/WebKit/WebKit.Gtk.Internal.h" +#include "Runtime/Shared/Types/Basic.h" +#include "Runtime/Shared/Types/Callbacks.h" +#include "Runtime/Platform/Linux/WebKit/WebKit.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitSettings.Gtk.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitSettings.Gtk.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitSettings.Gtk.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitSettings.Gtk.cpp index 40c0da1e8..4fc2076b6 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/WebKit/WebKitSettings.Gtk.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/WebKit/WebKitSettings.Gtk.cpp @@ -3,7 +3,7 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Platform/Linux/Window.Gtk.Internal.h" +#include "Runtime/Platform/Linux/Window.Gtk.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Window.Gtk.Internal.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Window.Gtk.Internal.h similarity index 94% rename from src/InfiniFrame.NativeBridge/Native/Platform/Linux/Window.Gtk.Internal.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Window.Gtk.Internal.h index 2e8b11c4a..00ad4f656 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Linux/Window.Gtk.Internal.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Linux/Window.Gtk.Internal.h @@ -8,8 +8,8 @@ #include #include -#include "Public/InfiniFrameWindow.h" -#include "Public/InfiniFrameWindowImpl.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" +#include "Runtime/Shared/Window/InfiniFrameWindowImpl.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/UiDispatcher.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/UiDispatcher.Cocoa.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/UiDispatcher.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/UiDispatcher.Cocoa.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowCore.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowCore.Cocoa.mm similarity index 99% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowCore.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowCore.Cocoa.mm index d77b661a0..552fe9e78 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowCore.Cocoa.mm +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowCore.Cocoa.mm @@ -5,8 +5,8 @@ #include #include "../Delegates/AppDelegate.h" -#include "../../../Public/InfiniFrameDialog.h" -#include "../../../Public/InfiniFrameWindow.h" +#include "Runtime/Shared/Window/InfiniFrameDialog.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" #include "../NSWindowBorderless.h" #include "../Window.Cocoa.Internal.h" #include "../Delegates/WindowDelegate.h" diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowEvents.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowEvents.Cocoa.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowEvents.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowEvents.Cocoa.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowLifecycle.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowLifecycle.Cocoa.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowLifecycle.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowLifecycle.Cocoa.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowState.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowState.Cocoa.mm similarity index 99% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowState.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowState.Cocoa.mm index b23740d6e..dfac509a6 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Core/WindowState.Cocoa.mm +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Core/WindowState.Cocoa.mm @@ -4,7 +4,7 @@ #include "../Window.Cocoa.Internal.h" -#include "Utils/StringCopy.h" +#include "Runtime/Shared/Utilities/StringCopy.h" // --------------------------------------------------------------------------------------------------------------------- // Code diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/AppDelegate.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/AppDelegate.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/AppDelegate.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/AppDelegate.h diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/AppDelegate.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/AppDelegate.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/AppDelegate.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/AppDelegate.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/NavigationDelegate.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/NavigationDelegate.h similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/NavigationDelegate.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/NavigationDelegate.h index 49cf13413..d28fa2795 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/NavigationDelegate.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/NavigationDelegate.h @@ -7,7 +7,7 @@ * @file NavigationDelegate.h * @brief WKNavigationDelegate that handles TLS certificate validation for the embedded WebView */ -#include "Public/InfiniFrame.h" +#include "Runtime/Shared/Window/InfiniFrame.h" // --------------------------------------------------------------------------------------------------------------------- // Code diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/NavigationDelegate.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/NavigationDelegate.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/NavigationDelegate.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/NavigationDelegate.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UiDelegate.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UiDelegate.h similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UiDelegate.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UiDelegate.h index ab58939df..39437541e 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UiDelegate.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UiDelegate.h @@ -7,7 +7,7 @@ * @file UiDelegate.h * @brief WKUIDelegate and WKScriptMessageHandler that routes JavaScript messages to the .NET layer */ -#include "Public/InfiniFrame.h" +#include "Runtime/Shared/Window/InfiniFrame.h" // --------------------------------------------------------------------------------------------------------------------- // Code diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UiDelegate.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UiDelegate.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UiDelegate.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UiDelegate.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UrlSchemeHandler.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UrlSchemeHandler.h similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UrlSchemeHandler.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UrlSchemeHandler.h index b339399e3..9e83d1c20 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UrlSchemeHandler.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UrlSchemeHandler.h @@ -7,7 +7,7 @@ * @file UrlSchemeHandler.h * @brief WKURLSchemeHandler that intercepts custom-scheme requests and serves responses from the .NET layer */ -#include "Public/InfiniFrame.h" +#include "Runtime/Shared/Window/InfiniFrame.h" // --------------------------------------------------------------------------------------------------------------------- // Code diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UrlSchemeHandler.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UrlSchemeHandler.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/UrlSchemeHandler.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/UrlSchemeHandler.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/WindowDelegate.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/WindowDelegate.h similarity index 95% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/WindowDelegate.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/WindowDelegate.h index 111c41d18..5457d8881 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/WindowDelegate.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/WindowDelegate.h @@ -7,7 +7,7 @@ * @file WindowDelegate.h * @brief NSWindow delegate that forwards window lifecycle events to InfiniFrameWindow callbacks */ -#include "Public/InfiniFrame.h" +#include "Runtime/Shared/Window/InfiniFrame.h" // --------------------------------------------------------------------------------------------------------------------- // Code diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/WindowDelegate.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/WindowDelegate.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Delegates/WindowDelegate.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Delegates/WindowDelegate.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Dialog.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Dialog.mm similarity index 99% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Dialog.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Dialog.mm index e462116ce..89eac57af 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Dialog.mm +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Dialog.mm @@ -7,7 +7,7 @@ * @brief macOS implementation of InfiniFrameDialog using NSOpenPanel, NSSavePanel, and NSAlert */ -#import "Public/InfiniFrameDialog.h" +#import "Runtime/Shared/Window/InfiniFrameDialog.h" #if defined(VSTGUI_USE_OBJC_UTTYPE) #import diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Monitors.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Monitors.Cocoa.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Monitors.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Monitors.Cocoa.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/NSWindowBorderless.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/NSWindowBorderless.h similarity index 95% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/NSWindowBorderless.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/NSWindowBorderless.h index 96cd4c49b..d897b54c0 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/NSWindowBorderless.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/NSWindowBorderless.h @@ -10,7 +10,7 @@ * Used when InfiniFrameInitParams::Transparent is set, allowing the WebView to render * over a fully transparent window background without the standard title bar and borders */ -#include "Public/InfiniFrame.h" +#include "Runtime/Shared/Window/InfiniFrame.h" // --------------------------------------------------------------------------------------------------------------------- // Code diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/NSWindowBorderless.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/NSWindowBorderless.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/NSWindowBorderless.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/NSWindowBorderless.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Notifications.UserNotifications.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Notifications.UserNotifications.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Notifications.UserNotifications.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Notifications.UserNotifications.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/WebKit/WebKitBridge.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/WebKit/WebKitBridge.Cocoa.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/WebKit/WebKitBridge.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/WebKit/WebKitBridge.Cocoa.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/WebKit/WebKitCustomSchemes.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/WebKit/WebKitCustomSchemes.Cocoa.mm similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/WebKit/WebKitCustomSchemes.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/WebKit/WebKitCustomSchemes.Cocoa.mm diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/WebKit/WebKitHost.Cocoa.mm b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/WebKit/WebKitHost.Cocoa.mm similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/WebKit/WebKitHost.Cocoa.mm rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/WebKit/WebKitHost.Cocoa.mm index a877de600..07cbcb03b 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/WebKit/WebKitHost.Cocoa.mm +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/WebKit/WebKitHost.Cocoa.mm @@ -2,7 +2,7 @@ // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "../../../Embedded/Embedded.h" +#include "Embedded/Embedded.h" #include "../Delegates/NavigationDelegate.h" #include "../Delegates/UiDelegate.h" #include "../Window.Cocoa.Internal.h" diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Window.Cocoa.Internal.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Window.Cocoa.Internal.h similarity index 93% rename from src/InfiniFrame.NativeBridge/Native/Platform/Mac/Window.Cocoa.Internal.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Window.Cocoa.Internal.h index f5175a7d3..40bde836a 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Mac/Window.Cocoa.Internal.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Mac/Window.Cocoa.Internal.h @@ -9,8 +9,8 @@ #include #include -#include "Public/InfiniFrameWindow.h" -#include "Public/InfiniFrameWindowImpl.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" +#include "Runtime/Shared/Window/InfiniFrameWindowImpl.h" // --------------------------------------------------------------------------------------------------------------------- // Code diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/UiDispatcher.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/UiDispatcher.Win32.cpp similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/UiDispatcher.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/UiDispatcher.Win32.cpp index 73ed74e62..55d126e33 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/UiDispatcher.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/UiDispatcher.Win32.cpp @@ -3,7 +3,7 @@ // --------------------------------------------------------------------------------------------------------------------- #include "chrono" -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowCore.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowCore.Win32.cpp similarity index 99% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowCore.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowCore.Win32.cpp index 3845f0cbc..6cbc79f59 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowCore.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowCore.Win32.cpp @@ -5,8 +5,8 @@ #include #include -#include "Platform/Windows/DarkMode.h" -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/DarkMode.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowEncoding.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowEncoding.Win32.cpp similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowEncoding.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowEncoding.Win32.cpp index fa35407f7..72775e1f9 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowEncoding.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowEncoding.Win32.cpp @@ -4,7 +4,7 @@ #include #include -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowLifecycle.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowLifecycle.Win32.cpp similarity index 97% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowLifecycle.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowLifecycle.Win32.cpp index f428762a9..2c8f875dd 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowLifecycle.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowLifecycle.Win32.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowOwnership.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowOwnership.Win32.cpp similarity index 93% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowOwnership.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowOwnership.Win32.cpp index 39f9941e1..2fd2a246e 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowOwnership.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowOwnership.Win32.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowProc.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowProc.Win32.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowProc.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowProc.Win32.cpp index fdf3a3517..3b340d2b9 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowProc.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowProc.Win32.cpp @@ -1,8 +1,8 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Windows/DarkMode.h" -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/DarkMode.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowState.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowState.Win32.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowState.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowState.Win32.cpp index 034166081..e46fbb9ff 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowState.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowState.Win32.cpp @@ -3,8 +3,8 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Platform/Windows/Window.Win32.Internal.h" -#include "Utils/StringCopy.h" +#include "Runtime/Platform/Windows/Window.Win32.Internal.h" +#include "Runtime/Shared/Utilities/StringCopy.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowStorage.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowStorage.Win32.cpp similarity index 95% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowStorage.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowStorage.Win32.cpp index d2777d8b3..a1a47ed6f 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowStorage.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowStorage.Win32.cpp @@ -4,7 +4,7 @@ #include #include -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowTracing.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowTracing.Win32.cpp similarity index 97% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowTracing.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowTracing.Win32.cpp index ba6991405..1ac906cbe 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Core/WindowTracing.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Core/WindowTracing.Win32.cpp @@ -6,7 +6,7 @@ #include #include -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/DarkMode.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/DarkMode.cpp similarity index 99% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/DarkMode.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/DarkMode.cpp index a39844573..1e8b7a99d 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/DarkMode.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/DarkMode.cpp @@ -3,7 +3,7 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Platform/Windows/DarkMode.h" +#include "Runtime/Platform/Windows/DarkMode.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/DarkMode.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/DarkMode.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/DarkMode.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/DarkMode.h diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Dialog.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Dialog.cpp similarity index 99% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Dialog.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Dialog.cpp index 8158c717b..217b6c198 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Dialog.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Dialog.cpp @@ -1,8 +1,8 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/InfiniFrame.h" -#include "Utils/StringArrayCopy.h" +#include "Runtime/Shared/Window/InfiniFrame.h" +#include "Runtime/Shared/Utilities/StringArrayCopy.h" #include #include diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Dpi.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Dpi.Win32.cpp similarity index 90% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Dpi.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Dpi.Win32.cpp index f14fe99a0..b028bf8d6 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Dpi.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Dpi.Win32.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Windows/Window.Win32.Internal.h" +#include "Runtime/Platform/Windows/Window.Win32.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Monitors.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Monitors.Win32.cpp similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Monitors.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Monitors.Win32.cpp index d95a66df4..4a4f3725c 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Monitors.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Monitors.Win32.cpp @@ -3,7 +3,7 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Platform/Windows/Window.Win32.Internal.h" +#include "Runtime/Platform/Windows/Window.Win32.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Notifications.WinToast.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Notifications.WinToast.cpp similarity index 95% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Notifications.WinToast.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Notifications.WinToast.cpp index c249e1759..16912410d 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Notifications.WinToast.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Notifications.WinToast.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/ToastHandler.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/ToastHandler.h similarity index 97% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/ToastHandler.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/ToastHandler.h index 17b87b40c..0d7def487 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/ToastHandler.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/ToastHandler.h @@ -4,7 +4,7 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Public/InfiniFrameWindow.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" #include "Dependencies/wintoastlib/wintoastlib.h" // --------------------------------------------------------------------------------------------------------------------- // Code diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Attach.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Attach.Win32.cpp similarity index 99% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Attach.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Attach.Win32.cpp index ac074d59c..8939f4e15 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Attach.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Attach.Win32.cpp @@ -8,7 +8,7 @@ #include #include "Embedded/Embedded.h" -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Controller.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Controller.Win32.cpp similarity index 97% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Controller.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Controller.Win32.cpp index 25b25a07b..af46408ca 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Controller.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Controller.Win32.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2CustomSchemes.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2CustomSchemes.Win32.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2CustomSchemes.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2CustomSchemes.Win32.cpp index b61e30625..f614b462a 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2CustomSchemes.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2CustomSchemes.Win32.cpp @@ -3,8 +3,8 @@ // --------------------------------------------------------------------------------------------------------------------- #include -#include "Platform/Windows/Window.Win32.Context.h" -#include "Platform/Shared/CustomSchemeResponse.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Shared/WebView/CustomSchemeResponse.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Host.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Host.Win32.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Host.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Host.Win32.cpp index 26dda12b1..883e76376 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Host.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Host.Win32.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Runtime.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Runtime.Win32.cpp similarity index 97% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Runtime.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Runtime.Win32.cpp index a0c6320a6..959d742e5 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Runtime.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Runtime.Win32.cpp @@ -4,7 +4,7 @@ #pragma comment(lib, "Urlmon.lib") #include -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Settings.Win32.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Settings.Win32.cpp similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Settings.Win32.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Settings.Win32.cpp index 8c5b209a1..f2da80de6 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/WebView/WebView2Settings.Win32.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/WebView/WebView2Settings.Win32.cpp @@ -1,7 +1,7 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Platform/Windows/Window.Win32.Context.h" +#include "Runtime/Platform/Windows/Window.Win32.Context.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Window.Win32.Context.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Window.Win32.Context.h similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Window.Win32.Context.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Window.Win32.Context.h index 38fb3bd89..831a1020d 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Window.Win32.Context.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Window.Win32.Context.h @@ -9,8 +9,8 @@ #include -#include "Public/InfiniFrameWindow.h" -#include "Platform/Windows/Window.Win32.Internal.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" +#include "Runtime/Platform/Windows/Window.Win32.Internal.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Window.Win32.Internal.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Window.Win32.Internal.h similarity index 92% rename from src/InfiniFrame.NativeBridge/Native/Platform/Windows/Window.Win32.Internal.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Window.Win32.Internal.h index d20c35587..22b648cfb 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Windows/Window.Win32.Internal.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Platform/Windows/Window.Win32.Internal.h @@ -10,10 +10,10 @@ #include #include -#include "Public/InfiniFrameWindow.h" -#include "Public/InfiniFrameWindowImpl.h" -#include "Platform/Windows/ToastHandler.h" -#include "Utils/Dimensions.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" +#include "Runtime/Shared/Window/InfiniFrameWindowImpl.h" +#include "Runtime/Platform/Windows/ToastHandler.h" +#include "Runtime/Shared/Utilities/Dimensions.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Types/Basic.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/Basic.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Types/Basic.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/Basic.h diff --git a/src/InfiniFrame.NativeBridge/Native/Types/Callbacks.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/Callbacks.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Types/Callbacks.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/Callbacks.h diff --git a/src/InfiniFrame.NativeBridge/Native/Types/DialogButtons.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/DialogButtons.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Types/DialogButtons.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/DialogButtons.h diff --git a/src/InfiniFrame.NativeBridge/Native/Types/DialogIcon.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/DialogIcon.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Types/DialogIcon.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/DialogIcon.h diff --git a/src/InfiniFrame.NativeBridge/Native/Types/DialogResult.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/DialogResult.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Types/DialogResult.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/DialogResult.h diff --git a/src/InfiniFrame.NativeBridge/Native/Types/Monitor.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/Monitor.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Types/Monitor.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Types/Monitor.h diff --git a/src/InfiniFrame.NativeBridge/Native/Utils/Dimensions.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/Dimensions.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Utils/Dimensions.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/Dimensions.h diff --git a/src/InfiniFrame.NativeBridge/Native/Utils/ErrorCode.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/ErrorCode.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Utils/ErrorCode.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/ErrorCode.h diff --git a/src/InfiniFrame.NativeBridge/Native/Utils/Result.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/InteropStatus.h similarity index 77% rename from src/InfiniFrame.NativeBridge/Native/Utils/Result.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/InteropStatus.h index 7ed7361b9..db498a2af 100644 --- a/src/InfiniFrame.NativeBridge/Native/Utils/Result.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/InteropStatus.h @@ -2,10 +2,15 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include -#include "Utils/ErrorCode.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- -template using Result = std::expected; +enum class InteropStatus : int { + Success = 0, + InvalidArgument = 22, + OutParameterSetToInvalidNull = 2001, + OperationFailed = 14 +}; + + diff --git a/src/InfiniFrame.NativeBridge/Native/Utils/StringArrayCopy.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/StringArrayCopy.h similarity index 94% rename from src/InfiniFrame.NativeBridge/Native/Utils/StringArrayCopy.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/StringArrayCopy.h index 4e147e96c..aee7141da 100644 --- a/src/InfiniFrame.NativeBridge/Native/Utils/StringArrayCopy.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/StringArrayCopy.h @@ -2,16 +2,15 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include #include #include -#include "Utils/StringCopy.h" +#include "Runtime/Shared/Utilities/StringCopy.h" // --------------------------------------------------------------------------------------------------------------------- // Owned string array allocation and free, consistent with StringCopy.h. // // The caller owns the returned array AND each element. Use FreeStringArray() -// or the platform-matched InfiniFrame_FreeStringArray export to release. +// or the platform-matched InfiniFrameNative_FreeStringArray export to release. // --------------------------------------------------------------------------------------------------------------------- /// Allocate a zero-initialized array of AutoString pointers. diff --git a/src/InfiniFrame.NativeBridge/Native/Utils/StringCopy.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/StringCopy.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Utils/StringCopy.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Utilities/StringCopy.h diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Shared/CustomSchemeResponse.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/WebView/CustomSchemeResponse.h similarity index 100% rename from src/InfiniFrame.NativeBridge/Native/Platform/Shared/CustomSchemeResponse.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/WebView/CustomSchemeResponse.h diff --git a/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrame.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrame.h new file mode 100644 index 000000000..ea9f8cdad --- /dev/null +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrame.h @@ -0,0 +1,13 @@ +#pragma once +// --------------------------------------------------------------------------------------------------------------------- +// Imports +// --------------------------------------------------------------------------------------------------------------------- +#include "Runtime/Shared/Window/InfiniFrameInitParams.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" +#include "Runtime/Shared/Window/InfiniFrameDialog.h" + +#include "Runtime/Shared/Types/Basic.h" +#include "Runtime/Shared/Types/Callbacks.h" + +#include "Runtime/Shared/Utilities/Dimensions.h" +#include "Runtime/Shared/Utilities/StringCopy.h" diff --git a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameDialog.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameDialog.h similarity index 94% rename from src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameDialog.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameDialog.h index fd2e5f33e..8afae91f2 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameDialog.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameDialog.h @@ -6,10 +6,10 @@ #include #endif -#include "Types/Basic.h" -#include "Types/DialogButtons.h" -#include "Types/DialogIcon.h" -#include "Types/DialogResult.h" +#include "Runtime/Shared/Types/Basic.h" +#include "Runtime/Shared/Types/DialogButtons.h" +#include "Runtime/Shared/Types/DialogIcon.h" +#include "Runtime/Shared/Types/DialogResult.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameInitParams.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameInitParams.h similarity index 96% rename from src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameInitParams.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameInitParams.h index 030d73e2c..a5f7405a3 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameInitParams.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameInitParams.h @@ -2,8 +2,8 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Types/Basic.h" -#include "Types/Callbacks.h" +#include "Runtime/Shared/Types/Basic.h" +#include "Runtime/Shared/Types/Callbacks.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameWindow.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameWindow.h similarity index 98% rename from src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameWindow.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameWindow.h index 3a03aeef2..8ad6e3d81 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameWindow.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameWindow.h @@ -27,11 +27,11 @@ #include #include -#include "Types/Basic.h" -#include "Types/DialogButtons.h" -#include "Types/DialogIcon.h" -#include "Types/DialogResult.h" -#include "Types/Callbacks.h" +#include "Runtime/Shared/Types/Basic.h" +#include "Runtime/Shared/Types/DialogButtons.h" +#include "Runtime/Shared/Types/DialogIcon.h" +#include "Runtime/Shared/Types/DialogResult.h" +#include "Runtime/Shared/Types/Callbacks.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- @@ -123,7 +123,7 @@ class InfiniFrameWindow { /** * @brief Get the custom user-agent string - * @return UTF-8 user-agent string; caller must free with InfiniFrame_FreeString + * @return UTF-8 user-agent string; caller must free with InfiniFrameNative_FreeString */ [[nodiscard]] AutoString GetUserAgent() const; @@ -165,7 +165,7 @@ class InfiniFrameWindow { /** * @brief Get the window icon file path - * @return UTF-8 path to the icon file; caller must free with InfiniFrame_FreeString + * @return UTF-8 path to the icon file; caller must free with InfiniFrameNative_FreeString */ [[nodiscard]] AutoString GetIconFileName() const; @@ -223,7 +223,7 @@ class InfiniFrameWindow { /** * @brief Get the window title bar text - * @return UTF-8 title string; caller must free with InfiniFrame_FreeString + * @return UTF-8 title string; caller must free with InfiniFrameNative_FreeString */ [[nodiscard]] AutoString GetTitle() const; diff --git a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameWindowImpl.h b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameWindowImpl.h similarity index 95% rename from src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameWindowImpl.h rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameWindowImpl.h index 97eb28c2a..a427ab639 100644 --- a/src/InfiniFrame.NativeBridge/Native/Public/InfiniFrameWindowImpl.h +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/InfiniFrameWindowImpl.h @@ -6,9 +6,9 @@ #include #include -#include "Types/Basic.h" -#include "Types/Callbacks.h" -#include "Public/InfiniFrameDialog.h" +#include "Runtime/Shared/Types/Basic.h" +#include "Runtime/Shared/Types/Callbacks.h" +#include "Runtime/Shared/Window/InfiniFrameDialog.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Shared/WindowEvents.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/WindowEvents.cpp similarity index 97% rename from src/InfiniFrame.NativeBridge/Native/Platform/Shared/WindowEvents.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/WindowEvents.cpp index 8b5c1f83f..a464e40be 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Shared/WindowEvents.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/WindowEvents.cpp @@ -1,8 +1,8 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/InfiniFrameWindow.h" -#include "Public/InfiniFrameWindowImpl.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" +#include "Runtime/Shared/Window/InfiniFrameWindowImpl.h" // --------------------------------------------------------------------------------------------------------------------- // Code // --------------------------------------------------------------------------------------------------------------------- diff --git a/src/InfiniFrame.NativeBridge/Native/Platform/Shared/WindowState.cpp b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/WindowState.cpp similarity index 92% rename from src/InfiniFrame.NativeBridge/Native/Platform/Shared/WindowState.cpp rename to src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/WindowState.cpp index e67c83393..1690896a5 100644 --- a/src/InfiniFrame.NativeBridge/Native/Platform/Shared/WindowState.cpp +++ b/src/InfiniFrame.NativeBridge/Native/src/Runtime/Shared/Window/WindowState.cpp @@ -1,9 +1,9 @@ // --------------------------------------------------------------------------------------------------------------------- // Imports // --------------------------------------------------------------------------------------------------------------------- -#include "Public/InfiniFrameWindow.h" -#include "Public/InfiniFrameWindowImpl.h" -#include "Utils/StringCopy.h" +#include "Runtime/Shared/Window/InfiniFrameWindow.h" +#include "Runtime/Shared/Window/InfiniFrameWindowImpl.h" +#include "Runtime/Shared/Utilities/StringCopy.h" // --------------------------------------------------------------------------------------------------------------------- // Pure property getters that read from InfiniFrameWindowImpl fields with no // platform-specific logic. Shared across all platforms. diff --git a/src/InfiniFrame/InfiniFrameSingleFileBootstrap.cs b/src/InfiniFrame/InfiniFrameSingleFileBootstrap.cs index 417188641..fae52a394 100644 --- a/src/InfiniFrame/InfiniFrameSingleFileBootstrap.cs +++ b/src/InfiniFrame/InfiniFrameSingleFileBootstrap.cs @@ -53,7 +53,7 @@ public static void Initialize() { try { Directory.CreateDirectory(_nativeDir); ExtractEmbeddedNative(entryAssembly, rid, GetNativeFileNamesForCurrentPlatform()); - NativeLibrary.SetDllImportResolver(typeof(InfiniFrameNativeTesting).Assembly, ResolveNativeLibrary); + NativeLibrary.SetDllImportResolver(typeof(InfiniFrameNative).Assembly, ResolveNativeLibrary); AppDomain.CurrentDomain.ProcessExit += (_, _) => TryCleanupNativeDirectory(); _initialized = 1; diff --git a/src/InfiniFrame/Window/InfiniFrameWindow.cs b/src/InfiniFrame/Window/InfiniFrameWindow.cs index 9d8714662..28eca32ab 100644 --- a/src/InfiniFrame/Window/InfiniFrameWindow.cs +++ b/src/InfiniFrame/Window/InfiniFrameWindow.cs @@ -286,16 +286,8 @@ public void SendNotification(string title, string body) { Invoke(() => { InfiniFrameNative.EnsureSucceeded( - InfiniFrameNative.ShowSaveFile(InstanceHandle, title, defaultPath, nativeFilters, filters.Length, null, out IntPtr ptrResult), + InfiniFrameNative.ShowSaveFile(InstanceHandle, title, defaultPath, nativeFilters, filters.Length, null, out result), nameof(InfiniFrameNative.ShowSaveFile)); - if (ptrResult == IntPtr.Zero) return; - - try { - result = InfiniFrameNative.PtrToNativeString(ptrResult); - } - finally { - InfiniFrameNative.FreeString(ptrResult); - } }); return result; @@ -423,23 +415,9 @@ public void Initialize() { Invoke(() => { InfiniFrameNativeInteropStatus status = foldersOnly - ? InfiniFrameNative.ShowOpenFolder(InstanceHandle, title, defaultPath, multiSelect, out int resultCount, out IntPtr ptrResults) - : InfiniFrameNative.ShowOpenFile(InstanceHandle, title, defaultPath, multiSelect, nativeFilters, nativeFilters.Length, out resultCount, out ptrResults); + ? InfiniFrameNative.ShowOpenFolder(InstanceHandle, title, defaultPath, multiSelect, out results) + : InfiniFrameNative.ShowOpenFile(InstanceHandle, title, defaultPath, multiSelect, nativeFilters, nativeFilters.Length, out results); InfiniFrameNative.EnsureSucceeded(status, foldersOnly ? nameof(InfiniFrameNative.ShowOpenFolder) : nameof(InfiniFrameNative.ShowOpenFile)); - - if (resultCount == 0 || ptrResults == IntPtr.Zero) return; - - try { - IntPtr[] ptrArray = new IntPtr[resultCount]; - results = new string?[resultCount]; - Marshal.Copy(ptrResults, ptrArray, 0, resultCount); - for (int i = 0; i < resultCount; i++) { - results[i] = InfiniFrameNative.PtrToNativeString(ptrArray[i]); - } - } - finally { - InfiniFrameNative.FreeStringArray(ptrResults, resultCount); - } }); return results; diff --git a/src/InfiniFrame/Window/InfiniFrameWindowExtensions.cs b/src/InfiniFrame/Window/InfiniFrameWindowExtensions.cs index 3aa7b3523..46c7761d4 100644 --- a/src/InfiniFrame/Window/InfiniFrameWindowExtensions.cs +++ b/src/InfiniFrame/Window/InfiniFrameWindowExtensions.cs @@ -757,19 +757,9 @@ public static T SetTitle(this T window, string? title) where T : class, IInfi window.Invoke(() => { InfiniFrameNative.EnsureSucceeded( - InfiniFrameNative.GetTitle(window.InstanceHandle, out IntPtr ptr), + InfiniFrameNative.GetTitle(window.InstanceHandle, out string? oldTitle), nameof(InfiniFrameNative.GetTitle)); - string? oldTitle; - try { - oldTitle = InfiniFrameNative.PtrToNativeString(ptr); - } - finally { - if (ptr != IntPtr.Zero) { - InfiniFrameNative.FreeString(ptr); - } - } - if (title == oldTitle) return; InfiniFrameNative.SetTitle(