diff --git a/Avalonia.sln b/Avalonia.sln
index 34ad19b41d..74a2dbb94b 100644
--- a/Avalonia.sln
+++ b/Avalonia.sln
@@ -226,6 +226,10 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Avalonia.ReactiveUI.Events"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Sandbox", "samples\Sandbox\Sandbox.csproj", "{11BE52AF-E2DD-4CF0-B19A-05285ACAF571}"
EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MicroComGenerator", "src\tools\MicroComGenerator\MicroComGenerator.csproj", "{AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Avalonia.MicroCom", "src\Avalonia.MicroCom\Avalonia.MicroCom.csproj", "{FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}"
+EndProject
Global
GlobalSection(SharedMSBuildProjectFiles) = preSolution
src\Shared\RenderHelpers\RenderHelpers.projitems*{3c4c0cb4-0c0f-4450-a37b-148c84ff905f}*SharedItemsImports = 13
@@ -2064,6 +2068,54 @@ Global
{11BE52AF-E2DD-4CF0-B19A-05285ACAF571}.Release|iPhone.Build.0 = Release|Any CPU
{11BE52AF-E2DD-4CF0-B19A-05285ACAF571}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{11BE52AF-E2DD-4CF0-B19A-05285ACAF571}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Release|Any CPU.Build.0 = Release|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Release|iPhone.Build.0 = Release|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Release|iPhone.Build.0 = Release|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {FE2F3E5E-1E34-4972-8DC1-5C2C588E5ECE}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -2123,6 +2175,7 @@ Global
{3C84E04B-36CF-4D0D-B965-C26DD649D1F3} = {A0CC0258-D18C-4AB3-854F-7101680FC3F9}
{909A8CBD-7D0E-42FD-B841-022AD8925820} = {8B6A8209-894F-4BA1-B880-965FD453982C}
{11BE52AF-E2DD-4CF0-B19A-05285ACAF571} = {9B9E3891-2366-4253-A952-D08BCEB71098}
+ {AEC9031E-06EA-4A9E-9E7F-7D7C719404DD} = {4ED8B739-6F4E-4CD4-B993-545E6B5CE637}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {87366D66-1391-4D90-8999-95A620AD786A}
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index e67fa14c57..ac1944b171 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -3,13 +3,6 @@ jobs:
pool:
vmImage: 'ubuntu-16.04'
steps:
- - task: CmdLine@2
- displayName: 'Install CastXML'
- inputs:
- script: |
- sudo apt-get update
- sudo apt-get install castxml
-
- task: CmdLine@2
displayName: 'Install Nuke'
inputs:
@@ -48,6 +41,12 @@ jobs:
curl -o ./mono.pkg https://download.mono-project.com/archive/5.18.0/macos-10-universal/MonoFramework-MDK-5.18.0.225.macos10.xamarin.universal.pkg
sudo installer -verbose -pkg ./mono.pkg -target /
+ - task: CmdLine@2
+ displayName: 'Generate avalonia-native'
+ inputs:
+ script: |
+ cd src/tools/MicroComGenerator; dotnet run -i ../../Avalonia.Native/avn.idl --cpp ../../../native/Avalonia.Native/inc/avalonia-native.h
+
- task: Xcode@5
inputs:
actions: 'build'
diff --git a/build/CoreLibraries.props b/build/CoreLibraries.props
index d17eec0135..fff00041c3 100644
--- a/build/CoreLibraries.props
+++ b/build/CoreLibraries.props
@@ -15,6 +15,7 @@
+
diff --git a/native/Avalonia.Native/inc/.gitignore b/native/Avalonia.Native/inc/.gitignore
new file mode 100644
index 0000000000..e7aa7fc6a5
--- /dev/null
+++ b/native/Avalonia.Native/inc/.gitignore
@@ -0,0 +1 @@
+avalonia-native.h
diff --git a/native/Avalonia.Native/inc/avalonia-native.h b/native/Avalonia.Native/inc/avalonia-native.h
deleted file mode 100644
index 9ff6130e5f..0000000000
--- a/native/Avalonia.Native/inc/avalonia-native.h
+++ /dev/null
@@ -1,516 +0,0 @@
-#include "com.h"
-#include "key.h"
-#include "stddef.h"
-
-#define AVNCOM(name, id) COMINTERFACE(name, 2e2cda0a, 9ae5, 4f1b, 8e, 20, 08, 1a, 04, 27, 9f, id)
-
-struct IAvnWindowEvents;
-struct IAvnWindow;
-struct IAvnPopup;
-struct IAvnMacOptions;
-struct IAvnPlatformThreadingInterface;
-struct IAvnSystemDialogEvents;
-struct IAvnSystemDialogs;
-struct IAvnScreens;
-struct IAvnClipboard;
-struct IAvnCursor;
-struct IAvnCursorFactory;
-struct IAvnGlFeature;
-struct IAvnGlContext;
-struct IAvnGlDisplay;
-struct IAvnGlSurfaceRenderTarget;
-struct IAvnGlSurfaceRenderingSession;
-struct IAvnMenu;
-struct IAvnMenuItem;
-struct IAvnStringArray;
-struct IAvnDndResultCallback;
-struct IAvnGCHandleDeallocatorCallback;
-struct IAvnMenuEvents;
-struct IAvnNativeControlHost;
-struct IAvnNativeControlHostTopLevelAttachment;
-enum SystemDecorations {
- SystemDecorationsNone = 0,
- SystemDecorationsBorderOnly = 1,
- SystemDecorationsFull = 2,
-};
-
-struct AvnSize
-{
- double Width, Height;
-};
-
-struct AvnPixelSize
-{
- int Width, Height;
-};
-
-struct AvnRect
-{
- double X, Y, Width, Height;
-};
-
-struct AvnVector
-{
- double X, Y;
-};
-
-struct AvnPoint
-{
- double X, Y;
-};
-
-struct AvnScreen
-{
- AvnRect Bounds;
- AvnRect WorkingArea;
- float PixelDensity;
- bool Primary;
-};
-
-enum AvnPixelFormat
-{
- kAvnRgb565,
- kAvnRgba8888,
- kAvnBgra8888
-};
-
-struct AvnFramebuffer
-{
- void* Data;
- int Width;
- int Height;
- int Stride;
- AvnVector Dpi;
- AvnPixelFormat PixelFormat;
-};
-
-struct AvnColor
-{
- unsigned char Alpha;
- unsigned char Red;
- unsigned char Green;
- unsigned char Blue;
-};
-
-enum AvnRawMouseEventType
-{
- LeaveWindow,
- LeftButtonDown,
- LeftButtonUp,
- RightButtonDown,
- RightButtonUp,
- MiddleButtonDown,
- MiddleButtonUp,
- XButton1Down,
- XButton1Up,
- XButton2Down,
- XButton2Up,
- Move,
- Wheel,
- NonClientLeftButtonDown,
- TouchBegin,
- TouchUpdate,
- TouchEnd,
- TouchCancel
-};
-
-enum AvnRawKeyEventType
-{
- KeyDown,
- KeyUp
-};
-
-enum AvnInputModifiers
-{
- AvnInputModifiersNone = 0,
- Alt = 1,
- Control = 2,
- Shift = 4,
- Windows = 8,
- LeftMouseButton = 16,
- RightMouseButton = 32,
- MiddleMouseButton = 64,
- XButton1MouseButton = 128,
- XButton2MouseButton = 256
-};
-
-enum class AvnDragDropEffects
-{
- None = 0,
- Copy = 1,
- Move = 2,
- Link = 4,
-};
-
-enum class AvnDragEventType
-{
- Enter,
- Over,
- Leave,
- Drop
-};
-
-enum AvnWindowState
-{
- Normal,
- Minimized,
- Maximized,
- FullScreen,
-};
-
-enum AvnStandardCursorType
-{
- CursorArrow,
- CursorIbeam,
- CursorWait,
- CursorCross,
- CursorUpArrow,
- CursorSizeWestEast,
- CursorSizeNorthSouth,
- CursorSizeAll,
- CursorNo,
- CursorHand,
- CursorAppStarting,
- CursorHelp,
- CursorTopSide,
- CursorBottomSize,
- CursorLeftSide,
- CursorRightSide,
- CursorTopLeftCorner,
- CursorTopRightCorner,
- CursorBottomLeftCorner,
- CursorBottomRightCorner,
- CursorDragMove,
- CursorDragCopy,
- CursorDragLink,
- CursorNone
-};
-
-enum AvnWindowEdge
-{
- WindowEdgeNorthWest,
- WindowEdgeNorth,
- WindowEdgeNorthEast,
- WindowEdgeWest,
- WindowEdgeEast,
- WindowEdgeSouthWest,
- WindowEdgeSouth,
- WindowEdgeSouthEast
-};
-
-enum AvnMenuItemToggleType
-{
- None,
- CheckMark,
- Radio
-};
-
-enum AvnExtendClientAreaChromeHints
-{
- AvnNoChrome = 0,
- AvnSystemChrome = 0x01,
- AvnPreferSystemChrome = 0x02,
- AvnOSXThickTitleBar = 0x08,
- AvnDefaultChrome = AvnSystemChrome,
-};
-
-AVNCOM(IAvaloniaNativeFactory, 01) : IUnknown
-{
-public:
- virtual HRESULT Initialize(IAvnGCHandleDeallocatorCallback* deallocator) = 0;
- virtual IAvnMacOptions* GetMacOptions() = 0;
- virtual HRESULT CreateWindow(IAvnWindowEvents* cb, IAvnGlContext* gl, IAvnWindow** ppv) = 0;
- virtual HRESULT CreatePopup (IAvnWindowEvents* cb, IAvnGlContext* gl, IAvnPopup** ppv) = 0;
- virtual HRESULT CreatePlatformThreadingInterface(IAvnPlatformThreadingInterface** ppv) = 0;
- virtual HRESULT CreateSystemDialogs (IAvnSystemDialogs** ppv) = 0;
- virtual HRESULT CreateScreens (IAvnScreens** ppv) = 0;
- virtual HRESULT CreateClipboard(IAvnClipboard** ppv) = 0;
- virtual HRESULT CreateDndClipboard(IAvnClipboard** ppv) = 0;
- virtual HRESULT CreateCursorFactory(IAvnCursorFactory** ppv) = 0;
- virtual HRESULT ObtainGlDisplay(IAvnGlDisplay** ppv) = 0;
- virtual HRESULT SetAppMenu(IAvnMenu* menu) = 0;
- virtual HRESULT CreateMenu (IAvnMenuEvents* cb, IAvnMenu** ppv) = 0;
- virtual HRESULT CreateMenuItem (IAvnMenuItem** ppv) = 0;
- virtual HRESULT CreateMenuItemSeperator (IAvnMenuItem** ppv) = 0;
-};
-
-AVNCOM(IAvnString, 17) : IUnknown
-{
- virtual HRESULT Pointer(void**retOut) = 0;
- virtual HRESULT Length(int*ret) = 0;
-};
-
-AVNCOM(IAvnWindowBase, 02) : IUnknown
-{
- virtual HRESULT Show() = 0;
- virtual HRESULT Hide () = 0;
- virtual HRESULT Close() = 0;
- virtual HRESULT Activate () = 0;
- virtual HRESULT GetClientSize(AvnSize*ret) = 0;
- virtual HRESULT GetScaling(double*ret)=0;
- virtual HRESULT SetMinMaxSize(AvnSize minSize, AvnSize maxSize) = 0;
- virtual HRESULT Resize(double width, double height) = 0;
- virtual HRESULT Invalidate (AvnRect rect) = 0;
- virtual HRESULT BeginMoveDrag () = 0;
- virtual HRESULT BeginResizeDrag (AvnWindowEdge edge) = 0;
- virtual HRESULT GetPosition (AvnPoint*ret) = 0;
- virtual HRESULT SetPosition (AvnPoint point) = 0;
- virtual HRESULT PointToClient (AvnPoint point, AvnPoint*ret) = 0;
- virtual HRESULT PointToScreen (AvnPoint point, AvnPoint*ret) = 0;
- virtual HRESULT ThreadSafeSetSwRenderedFrame(AvnFramebuffer* fb, IUnknown* dispose) = 0;
- virtual HRESULT SetTopMost (bool value) = 0;
- virtual HRESULT SetCursor(IAvnCursor* cursor) = 0;
- virtual HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ret) = 0;
- virtual HRESULT SetMainMenu(IAvnMenu* menu) = 0;
- virtual HRESULT ObtainNSWindowHandle(void** retOut) = 0;
- virtual HRESULT ObtainNSWindowHandleRetained(void** retOut) = 0;
- virtual HRESULT ObtainNSViewHandle(void** retOut) = 0;
- virtual HRESULT ObtainNSViewHandleRetained(void** retOut) = 0;
- virtual HRESULT CreateNativeControlHost(IAvnNativeControlHost** retOut) = 0;
- virtual HRESULT BeginDragAndDropOperation(AvnDragDropEffects effects, AvnPoint point,
- IAvnClipboard* clipboard, IAvnDndResultCallback* cb, void* sourceHandle) = 0;
- virtual HRESULT SetBlurEnabled (bool enable) = 0;
-};
-
-AVNCOM(IAvnPopup, 03) : virtual IAvnWindowBase
-{
-
-};
-
-AVNCOM(IAvnWindow, 04) : virtual IAvnWindowBase
-{
- virtual HRESULT SetEnabled (bool enable) = 0;
- virtual HRESULT SetParent (IAvnWindow* parent) = 0;
- virtual HRESULT SetCanResize(bool value) = 0;
- virtual HRESULT SetDecorations(SystemDecorations value) = 0;
- virtual HRESULT SetTitle (void* utf8Title) = 0;
- virtual HRESULT SetTitleBarColor (AvnColor color) = 0;
- virtual HRESULT SetWindowState(AvnWindowState state) = 0;
- virtual HRESULT GetWindowState(AvnWindowState*ret) = 0;
- virtual HRESULT TakeFocusFromChildren() = 0;
- virtual HRESULT SetExtendClientArea (bool enable) = 0;
- virtual HRESULT SetExtendClientAreaHints (AvnExtendClientAreaChromeHints hints) = 0;
- virtual HRESULT GetExtendTitleBarHeight (double*ret) = 0;
- virtual HRESULT SetExtendTitleBarHeight (double value) = 0;
-};
-
-AVNCOM(IAvnWindowBaseEvents, 05) : IUnknown
-{
- virtual HRESULT Paint() = 0;
- virtual void Closed() = 0;
- virtual void Activated() = 0;
- virtual void Deactivated() = 0;
- virtual void Resized(const AvnSize& size) = 0;
- virtual void PositionChanged (AvnPoint position) = 0;
- virtual void RawMouseEvent (AvnRawMouseEventType type,
- unsigned int timeStamp,
- AvnInputModifiers modifiers,
- AvnPoint point,
- AvnVector delta) = 0;
- virtual bool RawKeyEvent (AvnRawKeyEventType type, unsigned int timeStamp, AvnInputModifiers modifiers, unsigned int key) = 0;
- virtual bool RawTextInputEvent (unsigned int timeStamp, const char* text) = 0;
- virtual void ScalingChanged(double scaling) = 0;
- virtual void RunRenderPriorityJobs() = 0;
- virtual void LostFocus() = 0;
- virtual AvnDragDropEffects DragEvent(AvnDragEventType type, AvnPoint position,
- AvnInputModifiers modifiers, AvnDragDropEffects effects,
- IAvnClipboard* clipboard, void* dataObjectHandle) = 0;
-};
-
-
-AVNCOM(IAvnWindowEvents, 06) : IAvnWindowBaseEvents
-{
- /**
- * Closing Event
- * Called when the user presses the OS window close button.
- * return true to allow the close, return false to prevent close.
- */
- virtual bool Closing () = 0;
-
- virtual void WindowStateChanged (AvnWindowState state) = 0;
-
- virtual void GotInputWhenDisabled () = 0;
-};
-
-AVNCOM(IAvnMacOptions, 07) : IUnknown
-{
- virtual HRESULT SetShowInDock(int show) = 0;
- virtual HRESULT SetApplicationTitle (void* utf8string) = 0;
-};
-
-AVNCOM(IAvnActionCallback, 08) : IUnknown
-{
- virtual void Run() = 0;
-};
-
-AVNCOM(IAvnSignaledCallback, 09) : IUnknown
-{
- virtual void Signaled(int priority, bool priorityContainsMeaningfulValue) = 0;
-};
-
-AVNCOM(IAvnLoopCancellation, 0a) : IUnknown
-{
- virtual void Cancel() = 0;
-};
-
-AVNCOM(IAvnPlatformThreadingInterface, 0b) : IUnknown
-{
- virtual bool GetCurrentThreadIsLoopThread() = 0;
- virtual void SetSignaledCallback(IAvnSignaledCallback* cb) = 0;
- virtual IAvnLoopCancellation* CreateLoopCancellation() = 0;
- virtual HRESULT RunLoop(IAvnLoopCancellation* cancel) = 0;
- // Can't pass int* to sharpgentools for some reason
- virtual void Signal(int priority) = 0;
- virtual IUnknown* StartTimer(int priority, int ms, IAvnActionCallback* callback) = 0;
-};
-
-AVNCOM(IAvnSystemDialogEvents, 0c) : IUnknown
-{
- virtual void OnCompleted (int numResults, void* ptrFirstResult) = 0;
-};
-
-AVNCOM(IAvnSystemDialogs, 0d) : IUnknown
-{
- virtual void SelectFolderDialog (IAvnWindow* parentWindowHandle,
- IAvnSystemDialogEvents* events,
- const char* title,
- const char* initialPath) = 0;
-
- virtual void OpenFileDialog (IAvnWindow* parentWindowHandle,
- IAvnSystemDialogEvents* events,
- bool allowMultiple,
- const char* title,
- const char* initialDirectory,
- const char* initialFile,
- const char* filters) = 0;
-
- virtual void SaveFileDialog (IAvnWindow* parentWindowHandle,
- IAvnSystemDialogEvents* events,
- const char* title,
- const char* initialDirectory,
- const char* initialFile,
- const char* filters) = 0;
-};
-
-AVNCOM(IAvnScreens, 0e) : IUnknown
-{
- virtual HRESULT GetScreenCount (int* ret) = 0;
- virtual HRESULT GetScreen (int index, AvnScreen* ret) = 0;
-};
-
-AVNCOM(IAvnClipboard, 0f) : IUnknown
-{
- virtual HRESULT GetText (char* type, IAvnString**ppv) = 0;
- virtual HRESULT SetText (char* type, void* utf8Text) = 0;
- virtual HRESULT ObtainFormats(IAvnStringArray**ppv) = 0;
- virtual HRESULT GetStrings(char* type, IAvnStringArray**ppv) = 0;
- virtual HRESULT SetBytes(char* type, void* utf8Text, int len) = 0;
- virtual HRESULT GetBytes(char* type, IAvnString**ppv) = 0;
-
- virtual HRESULT Clear() = 0;
-};
-
-AVNCOM(IAvnCursor, 10) : IUnknown
-{
-};
-
-AVNCOM(IAvnCursorFactory, 11) : IUnknown
-{
- virtual HRESULT GetCursor (AvnStandardCursorType cursorType, IAvnCursor** retOut) = 0;
-};
-
-AVNCOM(IAvnGlDisplay, 13) : IUnknown
-{
- virtual HRESULT CreateContext(IAvnGlContext* share, IAvnGlContext**ppv) = 0;
- virtual void LegacyClearCurrentContext() = 0;
- virtual HRESULT WrapContext(void* native, IAvnGlContext**ppv) = 0;
- virtual void* GetProcAddress(char* proc) = 0;
-};
-
-AVNCOM(IAvnGlContext, 14) : IUnknown
-{
- virtual HRESULT MakeCurrent(IUnknown** ppv) = 0;
- virtual HRESULT LegacyMakeCurrent() = 0;
- virtual int GetSampleCount() = 0;
- virtual int GetStencilSize() = 0;
- virtual void* GetNativeHandle() = 0;
-};
-
-AVNCOM(IAvnGlSurfaceRenderTarget, 15) : IUnknown
-{
- virtual HRESULT BeginDrawing(IAvnGlSurfaceRenderingSession** ret) = 0;
-};
-
-AVNCOM(IAvnGlSurfaceRenderingSession, 16) : IUnknown
-{
- virtual HRESULT GetPixelSize(AvnPixelSize* ret) = 0;
- virtual HRESULT GetScaling(double* ret) = 0;
-};
-
-AVNCOM(IAvnMenu, 17) : IUnknown
-{
- virtual HRESULT InsertItem (int index, IAvnMenuItem* item) = 0;
- virtual HRESULT RemoveItem (IAvnMenuItem* item) = 0;
- virtual HRESULT SetTitle (void* utf8String) = 0;
- virtual HRESULT Clear () = 0;
-};
-
-AVNCOM(IAvnPredicateCallback, 18) : IUnknown
-{
- virtual bool Evaluate() = 0;
-};
-
-AVNCOM(IAvnMenuItem, 19) : IUnknown
-{
- virtual HRESULT SetSubMenu (IAvnMenu* menu) = 0;
- virtual HRESULT SetTitle (void* utf8String) = 0;
- virtual HRESULT SetGesture (void* utf8String, AvnInputModifiers modifiers) = 0;
- virtual HRESULT SetAction (IAvnPredicateCallback* predicate, IAvnActionCallback* callback) = 0;
- virtual HRESULT SetIsChecked (bool isChecked) = 0;
- virtual HRESULT SetToggleType (AvnMenuItemToggleType toggleType) = 0;
- virtual HRESULT SetIcon (void* data, size_t length) = 0;
-};
-
-AVNCOM(IAvnMenuEvents, 1A) : IUnknown
-{
- /**
- * NeedsUpdate
- */
- virtual void NeedsUpdate () = 0;
-};
-
-AVNCOM(IAvnStringArray, 20) : IUnknown
-{
- virtual unsigned int GetCount() = 0;
- virtual HRESULT Get(unsigned int index, IAvnString**ppv) = 0;
-};
-
-AVNCOM(IAvnDndResultCallback, 21) : IUnknown
-{
- virtual void OnDragAndDropComplete(AvnDragDropEffects effecct) = 0;
-};
-
-AVNCOM(IAvnGCHandleDeallocatorCallback, 22) : IUnknown
-{
- virtual void FreeGCHandle(void* handle) = 0;
-};
-
-AVNCOM(IAvnNativeControlHost, 20) : IUnknown
-{
- virtual HRESULT CreateDefaultChild(void* parent, void** retOut) = 0;
- virtual IAvnNativeControlHostTopLevelAttachment* CreateAttachment() = 0;
- virtual void DestroyDefaultChild(void* child) = 0;
-};
-
-AVNCOM(IAvnNativeControlHostTopLevelAttachment, 21) : IUnknown
-{
- virtual void* GetParentHandle() = 0;
- virtual HRESULT InitializeWithChildHandle(void* child) = 0;
- virtual HRESULT AttachTo(IAvnNativeControlHost* host) = 0;
- virtual void ShowInBounds(float x, float y, float width, float height) = 0;
- virtual void HideWithSize(float width, float height) = 0;
- virtual void ReleaseChild() = 0;
-};
-
-
-extern "C" IAvaloniaNativeFactory* CreateAvaloniaNative();
diff --git a/native/Avalonia.Native/src/OSX/clipboard.mm b/native/Avalonia.Native/src/OSX/clipboard.mm
index 116a08670e..303f727317 100644
--- a/native/Avalonia.Native/src/OSX/clipboard.mm
+++ b/native/Avalonia.Native/src/OSX/clipboard.mm
@@ -67,7 +67,7 @@ public:
}
}
- virtual HRESULT SetText (char* type, void* utf8String) override
+ virtual HRESULT SetText (char* type, char* utf8String) override
{
Clear();
@autoreleasepool
diff --git a/native/Avalonia.Native/src/OSX/main.mm b/native/Avalonia.Native/src/OSX/main.mm
index e6c4a861fd..cd6ef73826 100644
--- a/native/Avalonia.Native/src/OSX/main.mm
+++ b/native/Avalonia.Native/src/OSX/main.mm
@@ -104,9 +104,9 @@ class MacOptions : public ComSingleObject
public:
FORWARD_IUNKNOWN()
- virtual HRESULT SetApplicationTitle(void* utf8String) override
+ virtual HRESULT SetApplicationTitle(char* utf8String) override
{
- auto appTitle = [NSString stringWithUTF8String:(const char*)utf8String];
+ auto appTitle = [NSString stringWithUTF8String: utf8String];
[[NSProcessInfo processInfo] setProcessName:appTitle];
diff --git a/native/Avalonia.Native/src/OSX/menu.h b/native/Avalonia.Native/src/OSX/menu.h
index bfbc6801f8..0e43b22846 100644
--- a/native/Avalonia.Native/src/OSX/menu.h
+++ b/native/Avalonia.Native/src/OSX/menu.h
@@ -43,9 +43,9 @@ public:
virtual HRESULT SetSubMenu (IAvnMenu* menu) override;
- virtual HRESULT SetTitle (void* utf8String) override;
+ virtual HRESULT SetTitle (char* utf8String) override;
- virtual HRESULT SetGesture (void* key, AvnInputModifiers modifiers) override;
+ virtual HRESULT SetGesture (char* key, AvnInputModifiers modifiers) override;
virtual HRESULT SetAction (IAvnPredicateCallback* predicate, IAvnActionCallback* callback) override;
@@ -80,7 +80,7 @@ public:
virtual HRESULT RemoveItem (IAvnMenuItem* item) override;
- virtual HRESULT SetTitle (void* utf8String) override;
+ virtual HRESULT SetTitle (char* utf8String) override;
virtual HRESULT Clear () override;
};
diff --git a/native/Avalonia.Native/src/OSX/menu.mm b/native/Avalonia.Native/src/OSX/menu.mm
index dc1245cd23..1356388b85 100644
--- a/native/Avalonia.Native/src/OSX/menu.mm
+++ b/native/Avalonia.Native/src/OSX/menu.mm
@@ -109,7 +109,7 @@ HRESULT AvnAppMenuItem::SetSubMenu (IAvnMenu* menu)
}
}
-HRESULT AvnAppMenuItem::SetTitle (void* utf8String)
+HRESULT AvnAppMenuItem::SetTitle (char* utf8String)
{
@autoreleasepool
{
@@ -122,7 +122,7 @@ HRESULT AvnAppMenuItem::SetTitle (void* utf8String)
}
}
-HRESULT AvnAppMenuItem::SetGesture (void* key, AvnInputModifiers modifiers)
+HRESULT AvnAppMenuItem::SetGesture (char* key, AvnInputModifiers modifiers)
{
@autoreleasepool
{
@@ -296,7 +296,7 @@ HRESULT AvnAppMenu::RemoveItem (IAvnMenuItem* item)
}
}
-HRESULT AvnAppMenu::SetTitle (void* utf8String)
+HRESULT AvnAppMenu::SetTitle (char* utf8String)
{
@autoreleasepool
{
diff --git a/native/Avalonia.Native/src/OSX/window.mm b/native/Avalonia.Native/src/OSX/window.mm
index 67b1ea50a6..e3996a1fae 100644
--- a/native/Avalonia.Native/src/OSX/window.mm
+++ b/native/Avalonia.Native/src/OSX/window.mm
@@ -768,7 +768,7 @@ private:
}
}
- virtual HRESULT SetTitle (void* utf8title) override
+ virtual HRESULT SetTitle (char* utf8title) override
{
@autoreleasepool
{
diff --git a/nukebuild/MicroComGen.cs b/nukebuild/MicroComGen.cs
new file mode 100644
index 0000000000..06c8acbf23
--- /dev/null
+++ b/nukebuild/MicroComGen.cs
@@ -0,0 +1,14 @@
+using System.IO;
+using MicroComGenerator;
+using Nuke.Common;
+
+partial class Build : NukeBuild
+{
+ Target GenerateCppHeaders => _ => _.Executes(() =>
+ {
+ var text = File.ReadAllText(RootDirectory / "src" / "Avalonia.Native" / "avn.idl");
+ var ast = AstParser.Parse(text);
+ File.WriteAllText(RootDirectory / "native" / "Avalonia.Native" / "inc" / "avalonia-native.h",
+ CppGen.GenerateCpp(ast));
+ });
+}
\ No newline at end of file
diff --git a/nukebuild/_build.csproj b/nukebuild/_build.csproj
index 77cfb83427..745c727be2 100644
--- a/nukebuild/_build.csproj
+++ b/nukebuild/_build.csproj
@@ -39,4 +39,8 @@
+
+
+
+
diff --git a/packages/Avalonia/Avalonia.csproj b/packages/Avalonia/Avalonia.csproj
index cd3ce9adcd..75ee4a05cb 100644
--- a/packages/Avalonia/Avalonia.csproj
+++ b/packages/Avalonia/Avalonia.csproj
@@ -5,9 +5,8 @@
-
+
-
@@ -15,9 +14,7 @@
-
+
<_PackageFiles Include="$(DesignerHostAppPath)/Avalonia.Designer.HostApp/bin/$(Configuration)/netcoreapp2.0/Avalonia.Designer.HostApp.dll">
diff --git a/packages/Avalonia/AvaloniaBuildTasks.targets b/packages/Avalonia/AvaloniaBuildTasks.targets
index 612c368633..45a7f1aa44 100644
--- a/packages/Avalonia/AvaloniaBuildTasks.targets
+++ b/packages/Avalonia/AvaloniaBuildTasks.targets
@@ -3,6 +3,8 @@
<_AvaloniaUseExternalMSBuild>$(AvaloniaUseExternalMSBuild)
<_AvaloniaUseExternalMSBuild Condition="'$(_AvaloniaForceInternalMSBuild)' == 'true'">false
low
+ <_AvaloniaPatchComInterop Condition="'$(_AvaloniaPatchComInterop)' == ''">false
+ <_AvaloniaSkipXamlCompilation Condition="'$(_AvaloniaSkipXamlCompilation)' == ''">false
@@ -90,6 +92,8 @@
AssemblyOriginatorKeyFile="$(AssemblyOriginatorKeyFile)"
SignAssembly="$(SignAssembly)"
DelaySign="$(DelaySign)"
+ EnableComInteropPatching="$(_AvaloniaPatchComInterop)"
+ SkipXamlCompilation="$(_AvaloniaSkipXamlCompilation)"
/>
();
+ var initializers = new List();
+ foreach (var type in asm.MainModule.Types)
+ {
+ var i = type.Methods.FirstOrDefault(m => m.Name == "__MicroComModuleInit");
+ if (i != null)
+ initializers.Add(i);
+
+ PatchType(type, classToRemoveList);
+ }
+
+ // Remove All Interop classes
+ foreach (var type in classToRemoveList)
+ asm.MainModule.Types.Remove(type);
+
+
+ // Patch automatic registrations
+ if (initializers.Count != 0)
+ {
+ var moduleType = asm.MainModule.Types.First(x => x.Name == "");
+
+ // Needed for compatibility with upcoming .NET 5 feature, look for existing initializer first
+ var staticCtor = moduleType.Methods.FirstOrDefault(m => m.Name == ".cctor");
+ if (staticCtor == null)
+ {
+ // Create a new static ctor if none exists
+ staticCtor = new MethodDefinition(".cctor",
+ MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName |
+ MethodAttributes.Static | MethodAttributes.Private,
+ asm.MainModule.TypeSystem.Void);
+ staticCtor.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
+ moduleType.Methods.Add(staticCtor);
+ }
+
+ foreach (var i in initializers)
+ staticCtor.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Call, i));
+ }
+
+ }
+
+
+
+ static void PatchMethod(MethodDefinition method)
+ {
+ if (method.HasBody)
+ {
+ var ilProcessor = method.Body.GetILProcessor();
+
+ var instructions = method.Body.Instructions;
+ for (int i = 0; i < instructions.Count; i++)
+ {
+ Instruction instruction = instructions[i];
+
+ if (instruction.OpCode == OpCodes.Call && instruction.Operand is MethodReference)
+ {
+ var methodDescription = (MethodReference)instruction.Operand;
+
+ if (methodDescription.Name.StartsWith("Calli") && methodDescription.DeclaringType.Name == "LocalInterop")
+ {
+ var callSite = new CallSite(methodDescription.ReturnType) { CallingConvention = MethodCallingConvention.StdCall };
+
+ if (methodDescription.Name.StartsWith("CalliCdecl"))
+ {
+ callSite.CallingConvention = MethodCallingConvention.C;
+ }
+ else if(methodDescription.Name.StartsWith("CalliThisCall"))
+ {
+ callSite.CallingConvention = MethodCallingConvention.ThisCall;
+ }
+ else if(methodDescription.Name.StartsWith("CalliStdCall"))
+ {
+ callSite.CallingConvention = MethodCallingConvention.StdCall;
+ }
+ else if(methodDescription.Name.StartsWith("CalliFastCall"))
+ {
+ callSite.CallingConvention = MethodCallingConvention.FastCall;
+ }
+
+ // Last parameter is the function ptr, so we don't add it as a parameter for calli
+ // as it is already an implicit parameter for calli
+ for (int j = 0; j < methodDescription.Parameters.Count - 1; j++)
+ {
+ var parameterDefinition = methodDescription.Parameters[j];
+ callSite.Parameters.Add(parameterDefinition);
+ }
+
+ // Create calli Instruction
+ var callIInstruction = ilProcessor.Create(OpCodes.Calli, callSite);
+
+ // Replace instruction
+ ilProcessor.Replace(instruction, callIInstruction);
+ }
+ }
+ }
+ }
+ }
+
+ ///
+ /// Patches the type.
+ ///
+ /// The type.
+ static void PatchType(TypeDefinition type, List classToRemoveList)
+ {
+ // Patch methods
+ foreach (var method in type.Methods)
+ PatchMethod(method);
+
+ if (type.Name == "LocalInterop")
+ classToRemoveList.Add(type);
+
+ // Patch nested types
+ foreach (var typeDefinition in type.NestedTypes)
+ PatchType(typeDefinition, classToRemoveList);
+ }
+ }
+}
diff --git a/src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs b/src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs
index 8e1f6c257d..b85991fb77 100644
--- a/src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs
+++ b/src/Avalonia.Build.Tasks/CompileAvaloniaXamlTask.cs
@@ -40,8 +40,8 @@ namespace Avalonia.Build.Tasks
var res = XamlCompilerTaskExecutor.Compile(BuildEngine, input,
File.ReadAllLines(ReferencesFilePath).Where(l => !string.IsNullOrWhiteSpace(l)).ToArray(),
ProjectDirectory, OutputPath, VerifyIl, outputImportance,
- (SignAssembly && !DelaySign) ? AssemblyOriginatorKeyFile : null
- );
+ (SignAssembly && !DelaySign) ? AssemblyOriginatorKeyFile : null,
+ EnableComInteropPatching, SkipXamlCompilation);
if (!res.Success)
return false;
if (!res.WrittenFile)
@@ -76,6 +76,9 @@ namespace Avalonia.Build.Tasks
public bool VerifyIl { get; set; }
+ public bool EnableComInteropPatching { get; set; }
+ public bool SkipXamlCompilation { get; set; }
+
public string AssemblyOriginatorKeyFile { get; set; }
public bool SignAssembly { get; set; }
public bool DelaySign { get; set; }
diff --git a/src/Avalonia.Build.Tasks/Program.cs b/src/Avalonia.Build.Tasks/Program.cs
index 1909c4c6ec..b18c19cd63 100644
--- a/src/Avalonia.Build.Tasks/Program.cs
+++ b/src/Avalonia.Build.Tasks/Program.cs
@@ -29,7 +29,8 @@ namespace Avalonia.Build.Tasks
OutputPath = args[2],
BuildEngine = new ConsoleBuildEngine(),
ProjectDirectory = Directory.GetCurrentDirectory(),
- VerifyIl = true
+ VerifyIl = true,
+ EnableComInteropPatching = true
}.Execute() ?
0 :
2;
diff --git a/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs b/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs
index 6b01af2ede..0b9b50e771 100644
--- a/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs
+++ b/src/Avalonia.Build.Tasks/XamlCompilerTaskExecutor.cs
@@ -40,17 +40,48 @@ namespace Avalonia.Build.Tasks
WrittenFile = writtenFile;
}
}
+
+ public static CompileResult Compile(IBuildEngine engine, string input, string[] references,
+ string projectDirectory,
+ string output, bool verifyIl, MessageImportance logImportance, string strongNameKey, bool patchCom,
+ bool skipXamlCompilation)
+ {
+ var typeSystem = new CecilTypeSystem(references.Concat(new[] { input }), input);
+
+ var asm = typeSystem.TargetAssemblyDefinition;
+
+ if (!skipXamlCompilation)
+ {
+ var compileRes = CompileCore(engine, typeSystem, projectDirectory, verifyIl, logImportance);
+ if (compileRes == null && !patchCom)
+ return new CompileResult(true);
+ if (compileRes == false)
+ return new CompileResult(false);
+ }
+
+ if (patchCom)
+ ComInteropHelper.PatchAssembly(asm, typeSystem);
+
+ var writerParameters = new WriterParameters { WriteSymbols = asm.MainModule.HasSymbols };
+ if (!string.IsNullOrWhiteSpace(strongNameKey))
+ writerParameters.StrongNameKeyBlob = File.ReadAllBytes(strongNameKey);
+
+ asm.Write(output, writerParameters);
+
+ return new CompileResult(true, true);
+
+ }
- public static CompileResult Compile(IBuildEngine engine, string input, string[] references, string projectDirectory,
- string output, bool verifyIl, MessageImportance logImportance, string strongNameKey)
+ static bool? CompileCore(IBuildEngine engine, CecilTypeSystem typeSystem,
+ string projectDirectory, bool verifyIl,
+ MessageImportance logImportance)
{
- var typeSystem = new CecilTypeSystem(references.Concat(new[] {input}), input);
var asm = typeSystem.TargetAssemblyDefinition;
var emres = new EmbeddedResources(asm);
var avares = new AvaloniaResources(asm, projectDirectory);
if (avares.Resources.Count(CheckXamlName) == 0 && emres.Resources.Count(CheckXamlName) == 0)
// Nothing to do
- return new CompileResult(true);
+ return null;
var clrPropertiesDef = new TypeDefinition("CompiledAvaloniaXaml", "XamlIlHelpers",
TypeAttributes.Class, asm.MainModule.TypeSystem.Object);
@@ -364,25 +395,17 @@ namespace Avalonia.Build.Tasks
if (emres.Resources.Count(CheckXamlName) != 0)
if (!CompileGroup(emres))
- return new CompileResult(false);
+ return false;
if (avares.Resources.Count(CheckXamlName) != 0)
{
if (!CompileGroup(avares))
- return new CompileResult(false);
+ return false;
avares.Save();
}
loaderDispatcherMethod.Body.Instructions.Add(Instruction.Create(OpCodes.Ldnull));
loaderDispatcherMethod.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
-
-
- var writerParameters = new WriterParameters { WriteSymbols = asm.MainModule.HasSymbols };
- if (!string.IsNullOrWhiteSpace(strongNameKey))
- writerParameters.StrongNameKeyBlob = File.ReadAllBytes(strongNameKey);
-
- asm.Write(output, writerParameters);
-
- return new CompileResult(true, true);
+ return true;
}
}
diff --git a/src/Avalonia.MicroCom/Avalonia.MicroCom.csproj b/src/Avalonia.MicroCom/Avalonia.MicroCom.csproj
new file mode 100644
index 0000000000..6af3b4347a
--- /dev/null
+++ b/src/Avalonia.MicroCom/Avalonia.MicroCom.csproj
@@ -0,0 +1,17 @@
+
+
+ netstandard2.0
+ true
+
+
+ <_AvaloniaPatchComInterop>true
+
+
+
+ false
+ all
+ true
+
+
+
+
diff --git a/src/Avalonia.MicroCom/IMicroComExceptionCallback.cs b/src/Avalonia.MicroCom/IMicroComExceptionCallback.cs
new file mode 100644
index 0000000000..08f20339ec
--- /dev/null
+++ b/src/Avalonia.MicroCom/IMicroComExceptionCallback.cs
@@ -0,0 +1,9 @@
+using System;
+
+namespace Avalonia.MicroCom
+{
+ public interface IMicroComExceptionCallback
+ {
+ void RaiseException(Exception e);
+ }
+}
diff --git a/src/Avalonia.MicroCom/IMicroComShadowContainer.cs b/src/Avalonia.MicroCom/IMicroComShadowContainer.cs
new file mode 100644
index 0000000000..a33d3a9811
--- /dev/null
+++ b/src/Avalonia.MicroCom/IMicroComShadowContainer.cs
@@ -0,0 +1,9 @@
+namespace Avalonia.MicroCom
+{
+ public interface IMicroComShadowContainer
+ {
+ MicroComShadow Shadow { get; set; }
+ void OnReferencedFromNative();
+ void OnUnreferencedFromNative();
+ }
+}
diff --git a/src/Avalonia.MicroCom/IUnknown.cs b/src/Avalonia.MicroCom/IUnknown.cs
new file mode 100644
index 0000000000..0dc4106423
--- /dev/null
+++ b/src/Avalonia.MicroCom/IUnknown.cs
@@ -0,0 +1,8 @@
+using System;
+
+namespace Avalonia.MicroCom
+{
+ public interface IUnknown : IDisposable
+ {
+ }
+}
diff --git a/src/Avalonia.MicroCom/LocalInterop.cs b/src/Avalonia.MicroCom/LocalInterop.cs
new file mode 100644
index 0000000000..785f4e03a5
--- /dev/null
+++ b/src/Avalonia.MicroCom/LocalInterop.cs
@@ -0,0 +1,17 @@
+using System;
+
+namespace Avalonia.MicroCom
+{
+ unsafe class LocalInterop
+ {
+ public static unsafe void CalliStdCallvoid(void* thisObject, void* methodPtr)
+ {
+ throw null;
+ }
+
+ public static unsafe int CalliStdCallint(void* thisObject, Guid* guid, IntPtr* ppv, void* methodPtr)
+ {
+ throw null;
+ }
+ }
+}
diff --git a/src/Avalonia.MicroCom/MicroComProxyBase.cs b/src/Avalonia.MicroCom/MicroComProxyBase.cs
new file mode 100644
index 0000000000..681e278104
--- /dev/null
+++ b/src/Avalonia.MicroCom/MicroComProxyBase.cs
@@ -0,0 +1,110 @@
+using System;
+using System.Runtime.ConstrainedExecution;
+using System.Runtime.InteropServices;
+using System.Threading;
+
+namespace Avalonia.MicroCom
+{
+ public unsafe class MicroComProxyBase : CriticalFinalizerObject, IUnknown
+ {
+ private IntPtr _nativePointer;
+ private bool _ownsHandle;
+ private SynchronizationContext _synchronizationContext;
+
+ public IntPtr NativePointer
+ {
+ get
+ {
+ if (_nativePointer == IntPtr.Zero)
+ throw new ObjectDisposedException(this.GetType().FullName);
+ return _nativePointer;
+ }
+ }
+
+ public void*** PPV => (void***)NativePointer;
+
+ public MicroComProxyBase(IntPtr nativePointer, bool ownsHandle)
+ {
+ _nativePointer = nativePointer;
+ _ownsHandle = ownsHandle;
+ _synchronizationContext = SynchronizationContext.Current;
+ if(!_ownsHandle)
+ GC.SuppressFinalize(this);
+ }
+
+ protected virtual int VTableSize => 3;
+
+ public void AddRef()
+ {
+ LocalInterop.CalliStdCallvoid(PPV, (*PPV)[1]);
+ }
+
+ public void Release()
+ {
+ LocalInterop.CalliStdCallvoid(PPV, (*PPV)[2]);
+ }
+
+ public int QueryInterface(Guid guid, out IntPtr ppv)
+ {
+ IntPtr r = default;
+ var rv = LocalInterop.CalliStdCallint(PPV, &guid, &r, (*PPV)[0]);
+ ppv = r;
+ return rv;
+ }
+
+ public T QueryInterface() where T : IUnknown
+ {
+ var guid = MicroComRuntime.GetGuidFor(typeof(T));
+ var rv = QueryInterface(guid, out var ppv);
+ if (rv != 0)
+ return (T)MicroComRuntime.CreateProxyFor(typeof(T), ppv, true);
+ throw new COMException("QueryInterface failed", rv);
+ }
+
+ public bool IsDisposed => _nativePointer == IntPtr.Zero;
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if(_nativePointer == null)
+ return;
+ if (_ownsHandle)
+ {
+ Release();
+ _ownsHandle = false;
+ }
+ _nativePointer = IntPtr.Zero;
+ GC.SuppressFinalize(this);
+ }
+
+ public void Dispose() => Dispose(true);
+
+ public bool OwnsHandle => _ownsHandle;
+
+ public void EnsureOwned()
+ {
+ if (!_ownsHandle)
+ {
+ GC.ReRegisterForFinalize(true);
+ AddRef();
+ _ownsHandle = true;
+ }
+ }
+
+ private static readonly SendOrPostCallback _disposeDelegate = DisposeOnContext;
+
+ private static void DisposeOnContext(object state)
+ {
+ (state as MicroComProxyBase)?.Dispose(false);
+ }
+
+ ~MicroComProxyBase()
+ {
+ if(!_ownsHandle)
+ return;
+ if (_synchronizationContext == null)
+ Dispose();
+ else
+ _synchronizationContext.Post(_disposeDelegate, this);
+ }
+ }
+}
diff --git a/src/Avalonia.MicroCom/MicroComRuntime.cs b/src/Avalonia.MicroCom/MicroComRuntime.cs
new file mode 100644
index 0000000000..9d2c23f40a
--- /dev/null
+++ b/src/Avalonia.MicroCom/MicroComRuntime.cs
@@ -0,0 +1,98 @@
+using System;
+using System.Collections.Concurrent;
+using System.Runtime.InteropServices;
+
+namespace Avalonia.MicroCom
+{
+ public static unsafe class MicroComRuntime
+ {
+ private static ConcurrentDictionary _vtables = new ConcurrentDictionary();
+
+ private static ConcurrentDictionary> _factories =
+ new ConcurrentDictionary>();
+ private static ConcurrentDictionary _guids = new ConcurrentDictionary();
+ private static ConcurrentDictionary _guidsToTypes = new ConcurrentDictionary();
+
+ static MicroComRuntime()
+ {
+ Register(typeof(IUnknown), new Guid("00000000-0000-0000-C000-000000000046"),
+ (ppv, owns) => new MicroComProxyBase(ppv, owns));
+ RegisterVTable(typeof(IUnknown), MicroComVtblBase.Vtable);
+ }
+
+ public static void RegisterVTable(Type t, IntPtr vtable)
+ {
+ _vtables[t] = vtable;
+ }
+
+ public static void Register(Type t, Guid guid, Func proxyFactory)
+ {
+ _factories[t] = proxyFactory;
+ _guids[t] = guid;
+ _guidsToTypes[guid] = t;
+ }
+
+ public static Guid GetGuidFor(Type type) => _guids[type];
+
+ public static T CreateProxyFor(void* pObject, bool ownsHandle) => (T)CreateProxyFor(typeof(T), new IntPtr(pObject), ownsHandle);
+ public static T CreateProxyFor(IntPtr pObject, bool ownsHandle) => (T)CreateProxyFor(typeof(T), pObject, ownsHandle);
+
+ public static object CreateProxyFor(Type type, IntPtr pObject, bool ownsHandle) => _factories[type](pObject, ownsHandle);
+
+ public static void* GetNativePointer(T obj, bool owned = false) where T : IUnknown
+ {
+ if (obj == null)
+ return null;
+ if (obj is MicroComProxyBase proxy)
+ return (void*)proxy.NativePointer;
+ if (obj is IMicroComShadowContainer container)
+ {
+ container.Shadow ??= new MicroComShadow(container);
+ void* ptr = null;
+ var res = container.Shadow.GetOrCreateNativePointer(typeof(T), &ptr);
+ if (res != 0)
+ throw new COMException(
+ "Unable to create native callable wrapper for type " + typeof(T) + " for instance of type " +
+ obj.GetType(),
+ res);
+ if (owned)
+ container.Shadow.AddRef((Ccw*)ptr);
+ return ptr;
+ }
+ throw new ArgumentException("Unable to get a native pointer for " + obj);
+ }
+
+ public static object GetObjectFromCcw(IntPtr ccw)
+ {
+ var ptr = (Ccw*)ccw;
+ var shadow = (MicroComShadow)GCHandle.FromIntPtr(ptr->GcShadowHandle).Target;
+ return shadow.Target;
+ }
+
+ public static bool TryGetTypeForGuid(Guid guid, out Type t) => _guidsToTypes.TryGetValue(guid, out t);
+
+ public static bool GetVtableFor(Type type, out IntPtr ptr) => _vtables.TryGetValue(type, out ptr);
+
+ public static void UnhandledException(object target, Exception e)
+ {
+ if (target is IMicroComExceptionCallback cb)
+ {
+ try
+ {
+ cb.RaiseException(e);
+ }
+ catch
+ {
+ // We've tried
+ }
+ }
+
+ }
+
+ public static T CloneReference(T iface) where T : IUnknown
+ {
+ var ownedPointer = GetNativePointer(iface, true);
+ return CreateProxyFor(ownedPointer, true);
+ }
+ }
+}
diff --git a/src/Avalonia.MicroCom/MicroComShadow.cs b/src/Avalonia.MicroCom/MicroComShadow.cs
new file mode 100644
index 0000000000..a6a0fd519e
--- /dev/null
+++ b/src/Avalonia.MicroCom/MicroComShadow.cs
@@ -0,0 +1,171 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+using System.Threading;
+
+namespace Avalonia.MicroCom
+{
+ public unsafe class MicroComShadow : IDisposable
+ {
+ private readonly object _lock = new object();
+ private readonly Dictionary _shadows = new Dictionary();
+ private readonly Dictionary _backShadows = new Dictionary();
+ private GCHandle? _handle;
+ private volatile int _refCount;
+ internal IMicroComShadowContainer Target { get; }
+ internal MicroComShadow(IMicroComShadowContainer target)
+ {
+ Target = target;
+ Target.Shadow = this;
+ }
+
+ internal int QueryInterface(Ccw* ccw, Guid* guid, void** ppv)
+ {
+ if (MicroComRuntime.TryGetTypeForGuid(*guid, out var type))
+ return QueryInterface(type, ppv);
+ else
+ return unchecked((int)0x80004002u);
+ }
+
+ internal int QueryInterface(Type type, void** ppv)
+ {
+ if (!type.IsInstanceOfType(Target))
+ return unchecked((int)0x80004002u);
+
+ var rv = GetOrCreateNativePointer(type, ppv);
+ if (rv == 0)
+ AddRef((Ccw*)*ppv);
+ return rv;
+ }
+
+ internal int GetOrCreateNativePointer(Type type, void** ppv)
+ {
+ if (!MicroComRuntime.GetVtableFor(type, out var vtable))
+ return unchecked((int)0x80004002u);
+ lock (_lock)
+ {
+
+ if (_shadows.TryGetValue(type, out var shadow))
+ {
+ var targetCcw = (Ccw*)shadow;
+ AddRef(targetCcw);
+ *ppv = targetCcw;
+ return 0;
+ }
+ else
+ {
+ var intPtr = Marshal.AllocHGlobal(Marshal.SizeOf());
+ var targetCcw = (Ccw*)intPtr;
+ *targetCcw = default;
+ targetCcw->RefCount = 0;
+ targetCcw->VTable = vtable;
+ if (_handle == null)
+ _handle = GCHandle.Alloc(this);
+ targetCcw->GcShadowHandle = GCHandle.ToIntPtr(_handle.Value);
+ _shadows[type] = intPtr;
+ _backShadows[intPtr] = type;
+ *ppv = targetCcw;
+
+ return 0;
+ }
+ }
+ }
+
+ internal int AddRef(Ccw* ccw)
+ {
+ if (Interlocked.Increment(ref _refCount) == 1)
+ {
+ try
+ {
+ Target.OnReferencedFromNative();
+ }
+ catch (Exception e)
+ {
+ MicroComRuntime.UnhandledException(Target, e);
+ }
+ }
+
+ return Interlocked.Increment(ref ccw->RefCount);
+ }
+
+ internal int Release(Ccw* ccw)
+ {
+ Interlocked.Decrement(ref _refCount);
+ var cnt = Interlocked.Decrement(ref ccw->RefCount);
+ if (cnt == 0)
+ return FreeCcw(ccw);
+
+ return cnt;
+ }
+
+ int FreeCcw(Ccw* ccw)
+ {
+ lock (_lock)
+ {
+ // Shadow got resurrected by a call to QueryInterface from another thread
+ if (ccw->RefCount != 0)
+ return ccw->RefCount;
+
+ var intPtr = new IntPtr(ccw);
+ var type = _backShadows[intPtr];
+ _backShadows.Remove(intPtr);
+ _shadows.Remove(type);
+ Marshal.FreeHGlobal(intPtr);
+ if (_shadows.Count == 0)
+ {
+ _handle?.Free();
+ _handle = null;
+ try
+ {
+ Target.OnUnreferencedFromNative();
+ }
+ catch(Exception e)
+ {
+ MicroComRuntime.UnhandledException(Target, e);
+ }
+ }
+ }
+
+ return 0;
+ }
+
+ /*
+ Needs to be called to support the following scenario:
+ 1) Object created
+ 2) Object passed to native code, shadow is created, CCW is created
+ 3) Native side has never called AddRef
+
+ In that case the GC handle to the shadow object is still alive
+ */
+
+ public void Dispose()
+ {
+ lock (_lock)
+ {
+ List toRemove = null;
+ foreach (var kv in _backShadows)
+ {
+ var ccw = (Ccw*)kv.Key;
+ if (ccw->RefCount == 0)
+ {
+ toRemove ??= new List();
+ toRemove.Add(kv.Key);
+ }
+ }
+
+ if(toRemove != null)
+ foreach (var intPtr in toRemove)
+ FreeCcw((Ccw*)intPtr);
+ }
+ }
+ }
+
+ [StructLayout(LayoutKind.Sequential)]
+ struct Ccw
+ {
+ public IntPtr VTable;
+ public IntPtr GcShadowHandle;
+ public volatile int RefCount;
+ public MicroComShadow GetShadow() => (MicroComShadow)GCHandle.FromIntPtr(GcShadowHandle).Target;
+ }
+}
diff --git a/src/Avalonia.MicroCom/MicroComVtblBase.cs b/src/Avalonia.MicroCom/MicroComVtblBase.cs
new file mode 100644
index 0000000000..e06e2d4934
--- /dev/null
+++ b/src/Avalonia.MicroCom/MicroComVtblBase.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.InteropServices;
+
+namespace Avalonia.MicroCom
+{
+ public unsafe class MicroComVtblBase
+ {
+ private List _methods = new List();
+ [UnmanagedFunctionPointerAttribute(CallingConvention.ThisCall)]
+ private delegate int AddRefDelegate(Ccw* ccw);
+
+ [UnmanagedFunctionPointerAttribute(CallingConvention.ThisCall)]
+ private delegate int QueryInterfaceDelegate(Ccw* ccw, Guid* guid, void** ppv);
+
+ public static IntPtr Vtable { get; } = new MicroComVtblBase().CreateVTable();
+ public MicroComVtblBase()
+ {
+ AddMethod((QueryInterfaceDelegate)QueryInterface);
+ AddMethod((AddRefDelegate)AddRef);
+ AddMethod((AddRefDelegate)Release);
+ }
+
+ protected void AddMethod(Delegate d)
+ {
+ GCHandle.Alloc(d);
+ _methods.Add(Marshal.GetFunctionPointerForDelegate(d));
+ }
+
+ protected unsafe IntPtr CreateVTable()
+ {
+ var ptr = (IntPtr*)Marshal.AllocHGlobal((IntPtr.Size + 1) * _methods.Count);
+ for (var c = 0; c < _methods.Count; c++)
+ ptr[c] = _methods[c];
+ return new IntPtr(ptr);
+ }
+
+ static int QueryInterface(Ccw* ccw, Guid* guid, void** ppv) => ccw->GetShadow().QueryInterface(ccw, guid, ppv);
+ static int AddRef(Ccw* ccw) => ccw->GetShadow().AddRef(ccw);
+ static int Release(Ccw* ccw) => ccw->GetShadow().Release(ccw);
+ }
+}
diff --git a/src/Avalonia.Native/.gitignore b/src/Avalonia.Native/.gitignore
index b1153e777c..b270c05962 100644
--- a/src/Avalonia.Native/.gitignore
+++ b/src/Avalonia.Native/.gitignore
@@ -1 +1,2 @@
Generated/*.cs
+*.Generated.cs
diff --git a/src/Avalonia.Native/Avalonia.Native.csproj b/src/Avalonia.Native/Avalonia.Native.csproj
index 49bd578290..a08dc0f28f 100644
--- a/src/Avalonia.Native/Avalonia.Native.csproj
+++ b/src/Avalonia.Native/Avalonia.Native.csproj
@@ -5,10 +5,7 @@
$(PackAvaloniaNative)
true
netstandard2.0
- /usr/bin/castxml
- /usr/local/bin/castxml
true
- false
@@ -21,11 +18,38 @@
-
-
-
-
-
\ No newline at end of file
+
+
+
+
+ false
+ all
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ <_AvaloniaPatchComInterop>true
+
+
+
diff --git a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs
index 6d1b95b997..b192de95de 100644
--- a/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs
+++ b/src/Avalonia.Native/AvaloniaNativeMenuExporter.cs
@@ -4,6 +4,7 @@ using Avalonia.Controls.ApplicationLifetimes;
using Avalonia.Controls.Platform;
using Avalonia.Dialogs;
using Avalonia.Native.Interop;
+using Avalonia.Native.Interop.Impl;
using Avalonia.Threading;
namespace Avalonia.Native
@@ -15,7 +16,7 @@ namespace Avalonia.Native
private bool _exported = false;
private IAvnWindow _nativeWindow;
private NativeMenu _menu;
- private IAvnMenu _nativeMenu;
+ private __MicroComIAvnMenuProxy _nativeMenu;
public AvaloniaNativeMenuExporter(IAvnWindow nativeWindow, IAvaloniaNativeFactory factory)
{
@@ -135,7 +136,7 @@ namespace Avalonia.Native
if (_nativeMenu is null)
{
- _nativeMenu = IAvnMenu.Create(_factory);
+ _nativeMenu = (__MicroComIAvnMenuProxy)__MicroComIAvnMenuProxy.Create(_factory);
_nativeMenu.Initialise(this, appMenuHolder, "");
@@ -156,7 +157,7 @@ namespace Avalonia.Native
if (_nativeMenu is null)
{
- _nativeMenu = IAvnMenu.Create(_factory);
+ _nativeMenu = __MicroComIAvnMenuProxy.Create(_factory);
_nativeMenu.Initialise(this, menu, "");
diff --git a/src/Avalonia.Native/AvaloniaNativePlatform.cs b/src/Avalonia.Native/AvaloniaNativePlatform.cs
index e8b2f065c7..6ce55e17b3 100644
--- a/src/Avalonia.Native/AvaloniaNativePlatform.cs
+++ b/src/Avalonia.Native/AvaloniaNativePlatform.cs
@@ -4,6 +4,7 @@ using System.Security.Cryptography;
using Avalonia.Controls.Platform;
using Avalonia.Input;
using Avalonia.Input.Platform;
+using Avalonia.MicroCom;
using Avalonia.Native.Interop;
using Avalonia.OpenGL;
using Avalonia.Platform;
@@ -29,7 +30,7 @@ namespace Avalonia.Native
public static AvaloniaNativePlatform Initialize(IntPtr factory, AvaloniaNativePlatformOptions options)
{
- var result = new AvaloniaNativePlatform(new IAvaloniaNativeFactory(factory));
+ var result = new AvaloniaNativePlatform(MicroComRuntime.CreateProxyFor(factory, true));
result.DoInitialize(options);
return result;
@@ -65,10 +66,7 @@ namespace Avalonia.Native
{
if(!string.IsNullOrWhiteSpace(Application.Current.Name))
{
- using (var buffer = new Utf8Buffer(Application.Current.Name))
- {
- _factory.MacOptions.SetApplicationTitle(buffer.DangerousGetHandle());
- }
+ _factory.MacOptions.SetApplicationTitle(Application.Current.Name);
}
}
@@ -93,7 +91,7 @@ namespace Avalonia.Native
{
var macOpts = AvaloniaLocator.Current.GetService();
- _factory.MacOptions.ShowInDock = macOpts?.ShowInDock != false ? 1 : 0;
+ _factory.MacOptions.SetShowInDock(macOpts?.ShowInDock != false ? 1 : 0);
}
AvaloniaLocator.CurrentMutable
@@ -153,7 +151,7 @@ namespace Avalonia.Native
set
{
_showInDock = value;
- _opts.ShowInDock = value ? 1 : 0;
+ _opts.SetShowInDock(value ? 1 : 0);
}
}
}
diff --git a/src/Avalonia.Native/AvaloniaNativePlatformOpenGlInterface.cs b/src/Avalonia.Native/AvaloniaNativePlatformOpenGlInterface.cs
index dbe968b82f..3b3d8836fd 100644
--- a/src/Avalonia.Native/AvaloniaNativePlatformOpenGlInterface.cs
+++ b/src/Avalonia.Native/AvaloniaNativePlatformOpenGlInterface.cs
@@ -150,12 +150,12 @@ namespace Avalonia.Native
{
get
{
- var s = _session.GetPixelSize();
+ var s = _session.PixelSize;
return new PixelSize(s.Width, s.Height);
}
}
- public double Scaling => _session.GetScaling();
+ public double Scaling => _session.Scaling;
public bool IsYFlipped => true;
diff --git a/src/Avalonia.Native/AvnString.cs b/src/Avalonia.Native/AvnString.cs
index 11b1a33276..dcd473bae3 100644
--- a/src/Avalonia.Native/AvnString.cs
+++ b/src/Avalonia.Native/AvnString.cs
@@ -1,8 +1,22 @@
+using System;
using System.Runtime.InteropServices;
namespace Avalonia.Native.Interop
{
- unsafe partial class IAvnString
+ partial interface IAvnString
+ {
+ public string String { get; }
+ public byte[] Bytes { get; }
+ }
+
+ partial interface IAvnStringArray
+ {
+ string[] ToStringArray();
+ }
+}
+namespace Avalonia.Native.Interop.Impl
+{
+ unsafe partial class __MicroComIAvnStringProxy
{
private string _managed;
private byte[] _bytes;
@@ -16,7 +30,7 @@ namespace Avalonia.Native.Interop
var ptr = Pointer();
if (ptr == null)
return null;
- _managed = System.Text.Encoding.UTF8.GetString((byte*)ptr.ToPointer(), Length());
+ _managed = System.Text.Encoding.UTF8.GetString((byte*)ptr, Length());
}
return _managed;
@@ -30,7 +44,7 @@ namespace Avalonia.Native.Interop
if (_bytes == null)
{
_bytes = new byte[Length()];
- Marshal.Copy(Pointer(), _bytes, 0, _bytes.Length);
+ Marshal.Copy(new IntPtr(Pointer()), _bytes, 0, _bytes.Length);
}
return _bytes;
@@ -40,7 +54,7 @@ namespace Avalonia.Native.Interop
public override string ToString() => String;
}
- partial class IAvnStringArray
+ partial class __MicroComIAvnStringArrayProxy
{
public string[] ToStringArray()
{
diff --git a/src/Avalonia.Native/CallbackBase.cs b/src/Avalonia.Native/CallbackBase.cs
index 4cda358d0a..455ed4b159 100644
--- a/src/Avalonia.Native/CallbackBase.cs
+++ b/src/Avalonia.Native/CallbackBase.cs
@@ -1,44 +1,30 @@
using System;
using System.Runtime.ExceptionServices;
-using SharpGen.Runtime;
+using Avalonia.MicroCom;
using Avalonia.Platform;
namespace Avalonia.Native
{
- public class CallbackBase : SharpGen.Runtime.IUnknown, IExceptionCallback
+ public class CallbackBase : IUnknown, IMicroComShadowContainer, IMicroComExceptionCallback
{
- private uint _refCount;
- private bool _disposed;
private readonly object _lock = new object();
- private ShadowContainer _shadow;
+ private bool _referencedFromManaged = true;
+ private bool _referencedFromNative = false;
+ private bool _destroyed;
+
- public CallbackBase()
- {
- _refCount = 1;
- }
-
- public ShadowContainer Shadow
+ protected virtual void Destroyed()
{
- get => _shadow;
- set
- {
- lock (_lock)
- {
- if (_disposed && value != null)
- {
- throw new ObjectDisposedException("CallbackBase");
- }
- _shadow = value;
- }
- }
}
- public uint AddRef()
+ public void RaiseException(Exception e)
{
- lock (_lock)
+ if (AvaloniaLocator.Current.GetService() is PlatformThreadingInterface threadingInterface)
{
- return ++_refCount;
+ threadingInterface.TerminateNativeApp();
+
+ threadingInterface.DispatchException(ExceptionDispatchInfo.Capture(e));
}
}
@@ -46,43 +32,35 @@ namespace Avalonia.Native
{
lock (_lock)
{
- if (!_disposed)
- {
- _disposed = true;
- Release();
- }
+ _referencedFromManaged = false;
+ DestroyIfNeeded();
}
}
- public uint Release()
+ void DestroyIfNeeded()
{
- lock (_lock)
+ if(_destroyed)
+ return;
+ if (_referencedFromManaged == false && _referencedFromNative == false)
{
- _refCount--;
-
- if (_refCount == 0)
- {
- Shadow?.Dispose();
- Shadow = null;
- Destroyed();
- }
-
- return _refCount;
+ _destroyed = true;
+ Destroyed();
}
}
- protected virtual void Destroyed()
+ public MicroComShadow Shadow { get; set; }
+ public void OnReferencedFromNative()
{
-
+ lock (_lock)
+ _referencedFromNative = true;
}
- public void RaiseException(Exception e)
+ public void OnUnreferencedFromNative()
{
- if (AvaloniaLocator.Current.GetService() is PlatformThreadingInterface threadingInterface)
+ lock (_lock)
{
- threadingInterface.TerminateNativeApp();
-
- threadingInterface.DispatchException(ExceptionDispatchInfo.Capture(e));
+ _referencedFromNative = false;
+ DestroyIfNeeded();
}
}
}
diff --git a/src/Avalonia.Native/ClipboardImpl.cs b/src/Avalonia.Native/ClipboardImpl.cs
index 554e7a497a..4ee590516b 100644
--- a/src/Avalonia.Native/ClipboardImpl.cs
+++ b/src/Avalonia.Native/ClipboardImpl.cs
@@ -35,17 +35,12 @@ namespace Avalonia.Native
return Task.FromResult(text.String);
}
- public Task SetTextAsync(string text)
+ public unsafe Task SetTextAsync(string text)
{
_native.Clear();
- if (text != null)
- {
- using (var buffer = new Utf8Buffer(text))
- {
- _native.SetText(NSPasteboardTypeString, buffer.DangerousGetHandle());
- }
- }
+ if (text != null)
+ _native.SetText(NSPasteboardTypeString, text);
return Task.CompletedTask;
}
@@ -90,11 +85,10 @@ namespace Avalonia.Native
{
var o = data.Get(fmt);
if(o is string s)
- using (var b = new Utf8Buffer(s))
- _native.SetText(fmt, b.DangerousGetHandle());
+ _native.SetText(fmt, s);
else if(o is byte[] bytes)
fixed (byte* pbytes = bytes)
- _native.SetBytes(fmt, new IntPtr(pbytes), bytes.Length);
+ _native.SetBytes(fmt, pbytes, bytes.Length);
}
return Task.CompletedTask;
}
diff --git a/src/Avalonia.Native/DeferredFramebuffer.cs b/src/Avalonia.Native/DeferredFramebuffer.cs
index 8ea7b20b8c..950b6a3197 100644
--- a/src/Avalonia.Native/DeferredFramebuffer.cs
+++ b/src/Avalonia.Native/DeferredFramebuffer.cs
@@ -2,11 +2,10 @@
using System.Runtime.InteropServices;
using Avalonia.Native.Interop;
using Avalonia.Platform;
-using SharpGen.Runtime;
namespace Avalonia.Native
{
- public class DeferredFramebuffer : ILockedFramebuffer
+ internal unsafe class DeferredFramebuffer : ILockedFramebuffer
{
private readonly Func, bool> _lockWindow;
@@ -56,7 +55,7 @@ namespace Avalonia.Native
{
var fb = new AvnFramebuffer
{
- Data = Address,
+ Data = Address.ToPointer(),
Dpi = new AvnVector
{
X = Dpi.X,
@@ -70,7 +69,7 @@ namespace Avalonia.Native
using (var d = new Disposer(Address))
{
- win.ThreadSafeSetSwRenderedFrame(ref fb, d);
+ win.ThreadSafeSetSwRenderedFrame(&fb, d);
}
}))
{
diff --git a/src/Avalonia.Native/Generated/Enumerations.cs b/src/Avalonia.Native/Generated/Enumerations.cs
deleted file mode 100644
index 0b30ce50c0..0000000000
--- a/src/Avalonia.Native/Generated/Enumerations.cs
+++ /dev/null
@@ -1,628 +0,0 @@
-//
-
-namespace Avalonia.Native.Interop
-{
- ///
- /// No documentation.
- ///
- /// AvnDragDropEffects
- /// AvnDragDropEffects
- public enum AvnDragDropEffects : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// None
- /// None
- None = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// Copy
- /// Copy
- Copy = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// Move
- /// Move
- Move = unchecked ((System.Int32)(2)),
- ///
- /// No documentation.
- ///
- /// Link
- /// Link
- Link = unchecked ((System.Int32)(4))}
-
- ///
- /// No documentation.
- ///
- /// AvnDragEventType
- /// AvnDragEventType
- public enum AvnDragEventType : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// Enter
- /// Enter
- Enter = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// Over
- /// Over
- Over = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// Leave
- /// Leave
- Leave = unchecked ((System.Int32)(2)),
- ///
- /// No documentation.
- ///
- /// Drop
- /// Drop
- Drop = unchecked ((System.Int32)(3))}
-
- ///
- /// No documentation.
- ///
- /// AvnExtendClientAreaChromeHints
- /// AvnExtendClientAreaChromeHints
- public enum AvnExtendClientAreaChromeHints : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// AvnNoChrome
- /// AvnNoChrome
- AvnNoChrome = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// AvnSystemChrome
- /// AvnSystemChrome
- AvnSystemChrome = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// AvnPreferSystemChrome
- /// AvnPreferSystemChrome
- AvnPreferSystemChrome = unchecked ((System.Int32)(2)),
- ///
- /// No documentation.
- ///
- /// AvnOSXThickTitleBar
- /// AvnOSXThickTitleBar
- AvnOSXThickTitleBar = unchecked ((System.Int32)(8)),
- ///
- /// No documentation.
- ///
- /// AvnDefaultChrome
- /// AvnDefaultChrome
- AvnDefaultChrome = unchecked ((System.Int32)(1))}
-
- ///
- /// No documentation.
- ///
- /// AvnInputModifiers
- /// AvnInputModifiers
- public enum AvnInputModifiers : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// AvnInputModifiersNone
- /// AvnInputModifiersNone
- AvnInputModifiersNone = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// Alt
- /// Alt
- Alt = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// Control
- /// Control
- Control = unchecked ((System.Int32)(2)),
- ///
- /// No documentation.
- ///
- /// Shift
- /// Shift
- Shift = unchecked ((System.Int32)(4)),
- ///
- /// No documentation.
- ///
- /// Windows
- /// Windows
- Windows = unchecked ((System.Int32)(8)),
- ///
- /// No documentation.
- ///
- /// LeftMouseButton
- /// LeftMouseButton
- LeftMouseButton = unchecked ((System.Int32)(16)),
- ///
- /// No documentation.
- ///
- /// RightMouseButton
- /// RightMouseButton
- RightMouseButton = unchecked ((System.Int32)(32)),
- ///
- /// No documentation.
- ///
- /// MiddleMouseButton
- /// MiddleMouseButton
- MiddleMouseButton = unchecked ((System.Int32)(64)),
- ///
- /// No documentation.
- ///
- /// XButton1MouseButton
- /// XButton1MouseButton
- XButton1MouseButton = unchecked ((System.Int32)(128)),
- ///
- /// No documentation.
- ///
- /// XButton2MouseButton
- /// XButton2MouseButton
- XButton2MouseButton = unchecked ((System.Int32)(256))}
-
- ///
- /// No documentation.
- ///
- /// AvnMenuItemToggleType
- /// AvnMenuItemToggleType
- public enum AvnMenuItemToggleType : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// None
- /// None
- None = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// CheckMark
- /// CheckMark
- CheckMark = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// Radio
- /// Radio
- Radio = unchecked ((System.Int32)(2))}
-
- ///
- /// No documentation.
- ///
- /// AvnPixelFormat
- /// AvnPixelFormat
- public enum AvnPixelFormat : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// kAvnRgb565
- /// kAvnRgb565
- KAvnRgb565 = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// kAvnRgba8888
- /// kAvnRgba8888
- KAvnRgba8888 = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// kAvnBgra8888
- /// kAvnBgra8888
- KAvnBgra8888 = unchecked ((System.Int32)(2))}
-
- ///
- /// No documentation.
- ///
- /// AvnRawKeyEventType
- /// AvnRawKeyEventType
- public enum AvnRawKeyEventType : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// KeyDown
- /// KeyDown
- KeyDown = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// KeyUp
- /// KeyUp
- KeyUp = unchecked ((System.Int32)(1))}
-
- ///
- /// No documentation.
- ///
- /// AvnRawMouseEventType
- /// AvnRawMouseEventType
- public enum AvnRawMouseEventType : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// LeaveWindow
- /// LeaveWindow
- LeaveWindow = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// LeftButtonDown
- /// LeftButtonDown
- LeftButtonDown = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// LeftButtonUp
- /// LeftButtonUp
- LeftButtonUp = unchecked ((System.Int32)(2)),
- ///
- /// No documentation.
- ///
- /// RightButtonDown
- /// RightButtonDown
- RightButtonDown = unchecked ((System.Int32)(3)),
- ///
- /// No documentation.
- ///
- /// RightButtonUp
- /// RightButtonUp
- RightButtonUp = unchecked ((System.Int32)(4)),
- ///
- /// No documentation.
- ///
- /// MiddleButtonDown
- /// MiddleButtonDown
- MiddleButtonDown = unchecked ((System.Int32)(5)),
- ///
- /// No documentation.
- ///
- /// MiddleButtonUp
- /// MiddleButtonUp
- MiddleButtonUp = unchecked ((System.Int32)(6)),
- ///
- /// No documentation.
- ///
- /// XButton1Down
- /// XButton1Down
- XButton1Down = unchecked ((System.Int32)(7)),
- ///
- /// No documentation.
- ///
- /// XButton1Up
- /// XButton1Up
- XButton1Up = unchecked ((System.Int32)(8)),
- ///
- /// No documentation.
- ///
- /// XButton2Down
- /// XButton2Down
- XButton2Down = unchecked ((System.Int32)(9)),
- ///
- /// No documentation.
- ///
- /// XButton2Up
- /// XButton2Up
- XButton2Up = unchecked ((System.Int32)(10)),
- ///
- /// No documentation.
- ///
- /// Move
- /// Move
- Move = unchecked ((System.Int32)(11)),
- ///
- /// No documentation.
- ///
- /// Wheel
- /// Wheel
- Wheel = unchecked ((System.Int32)(12)),
- ///
- /// No documentation.
- ///
- /// NonClientLeftButtonDown
- /// NonClientLeftButtonDown
- NonClientLeftButtonDown = unchecked ((System.Int32)(13)),
- ///
- /// No documentation.
- ///
- /// TouchBegin
- /// TouchBegin
- TouchBegin = unchecked ((System.Int32)(14)),
- ///
- /// No documentation.
- ///
- /// TouchUpdate
- /// TouchUpdate
- TouchUpdate = unchecked ((System.Int32)(15)),
- ///
- /// No documentation.
- ///
- /// TouchEnd
- /// TouchEnd
- TouchEnd = unchecked ((System.Int32)(16)),
- ///
- /// No documentation.
- ///
- /// TouchCancel
- /// TouchCancel
- TouchCancel = unchecked ((System.Int32)(17))}
-
- ///
- /// No documentation.
- ///
- /// AvnStandardCursorType
- /// AvnStandardCursorType
- public enum AvnStandardCursorType : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// CursorArrow
- /// CursorArrow
- CursorArrow = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// CursorIbeam
- /// CursorIbeam
- CursorIbeam = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// CursorWait
- /// CursorWait
- CursorWait = unchecked ((System.Int32)(2)),
- ///
- /// No documentation.
- ///
- /// CursorCross
- /// CursorCross
- CursorCross = unchecked ((System.Int32)(3)),
- ///
- /// No documentation.
- ///
- /// CursorUpArrow
- /// CursorUpArrow
- CursorUpArrow = unchecked ((System.Int32)(4)),
- ///
- /// No documentation.
- ///
- /// CursorSizeWestEast
- /// CursorSizeWestEast
- CursorSizeWestEast = unchecked ((System.Int32)(5)),
- ///
- /// No documentation.
- ///
- /// CursorSizeNorthSouth
- /// CursorSizeNorthSouth
- CursorSizeNorthSouth = unchecked ((System.Int32)(6)),
- ///
- /// No documentation.
- ///
- /// CursorSizeAll
- /// CursorSizeAll
- CursorSizeAll = unchecked ((System.Int32)(7)),
- ///
- /// No documentation.
- ///
- /// CursorNo
- /// CursorNo
- CursorNo = unchecked ((System.Int32)(8)),
- ///
- /// No documentation.
- ///
- /// CursorHand
- /// CursorHand
- CursorHand = unchecked ((System.Int32)(9)),
- ///
- /// No documentation.
- ///
- /// CursorAppStarting
- /// CursorAppStarting
- CursorAppStarting = unchecked ((System.Int32)(10)),
- ///
- /// No documentation.
- ///
- /// CursorHelp
- /// CursorHelp
- CursorHelp = unchecked ((System.Int32)(11)),
- ///
- /// No documentation.
- ///
- /// CursorTopSide
- /// CursorTopSide
- CursorTopSide = unchecked ((System.Int32)(12)),
- ///
- /// No documentation.
- ///
- /// CursorBottomSize
- /// CursorBottomSize
- CursorBottomSize = unchecked ((System.Int32)(13)),
- ///
- /// No documentation.
- ///
- /// CursorLeftSide
- /// CursorLeftSide
- CursorLeftSide = unchecked ((System.Int32)(14)),
- ///
- /// No documentation.
- ///
- /// CursorRightSide
- /// CursorRightSide
- CursorRightSide = unchecked ((System.Int32)(15)),
- ///
- /// No documentation.
- ///
- /// CursorTopLeftCorner
- /// CursorTopLeftCorner
- CursorTopLeftCorner = unchecked ((System.Int32)(16)),
- ///
- /// No documentation.
- ///
- /// CursorTopRightCorner
- /// CursorTopRightCorner
- CursorTopRightCorner = unchecked ((System.Int32)(17)),
- ///
- /// No documentation.
- ///
- /// CursorBottomLeftCorner
- /// CursorBottomLeftCorner
- CursorBottomLeftCorner = unchecked ((System.Int32)(18)),
- ///
- /// No documentation.
- ///
- /// CursorBottomRightCorner
- /// CursorBottomRightCorner
- CursorBottomRightCorner = unchecked ((System.Int32)(19)),
- ///
- /// No documentation.
- ///
- /// CursorDragMove
- /// CursorDragMove
- CursorDragMove = unchecked ((System.Int32)(20)),
- ///
- /// No documentation.
- ///
- /// CursorDragCopy
- /// CursorDragCopy
- CursorDragCopy = unchecked ((System.Int32)(21)),
- ///
- /// No documentation.
- ///
- /// CursorDragLink
- /// CursorDragLink
- CursorDragLink = unchecked ((System.Int32)(22)),
- ///
- /// No documentation.
- ///
- /// CursorNone
- /// CursorNone
- CursorNone = unchecked ((System.Int32)(23))}
-
- ///
- /// No documentation.
- ///
- /// AvnWindowEdge
- /// AvnWindowEdge
- public enum AvnWindowEdge : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// WindowEdgeNorthWest
- /// WindowEdgeNorthWest
- WindowEdgeNorthWest = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// WindowEdgeNorth
- /// WindowEdgeNorth
- WindowEdgeNorth = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// WindowEdgeNorthEast
- /// WindowEdgeNorthEast
- WindowEdgeNorthEast = unchecked ((System.Int32)(2)),
- ///
- /// No documentation.
- ///
- /// WindowEdgeWest
- /// WindowEdgeWest
- WindowEdgeWest = unchecked ((System.Int32)(3)),
- ///
- /// No documentation.
- ///
- /// WindowEdgeEast
- /// WindowEdgeEast
- WindowEdgeEast = unchecked ((System.Int32)(4)),
- ///
- /// No documentation.
- ///
- /// WindowEdgeSouthWest
- /// WindowEdgeSouthWest
- WindowEdgeSouthWest = unchecked ((System.Int32)(5)),
- ///
- /// No documentation.
- ///
- /// WindowEdgeSouth
- /// WindowEdgeSouth
- WindowEdgeSouth = unchecked ((System.Int32)(6)),
- ///
- /// No documentation.
- ///
- /// WindowEdgeSouthEast
- /// WindowEdgeSouthEast
- WindowEdgeSouthEast = unchecked ((System.Int32)(7))}
-
- ///
- /// No documentation.
- ///
- /// AvnWindowState
- /// AvnWindowState
- public enum AvnWindowState : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// Normal
- /// Normal
- Normal = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// Minimized
- /// Minimized
- Minimized = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// Maximized
- /// Maximized
- Maximized = unchecked ((System.Int32)(2)),
- ///
- /// No documentation.
- ///
- /// FullScreen
- /// FullScreen
- FullScreen = unchecked ((System.Int32)(3))}
-
- ///
- /// No documentation.
- ///
- /// SystemDecorations
- /// SystemDecorations
- public enum SystemDecorations : System.Int32
- {
- ///
- /// No documentation.
- ///
- /// SystemDecorationsNone
- /// SystemDecorationsNone
- SystemDecorationsNone = unchecked ((System.Int32)(0)),
- ///
- /// No documentation.
- ///
- /// SystemDecorationsBorderOnly
- /// SystemDecorationsBorderOnly
- SystemDecorationsBorderOnly = unchecked ((System.Int32)(1)),
- ///
- /// No documentation.
- ///
- /// SystemDecorationsFull
- /// SystemDecorationsFull
- SystemDecorationsFull = unchecked ((System.Int32)(2))}
-}
\ No newline at end of file
diff --git a/src/Avalonia.Native/Generated/Functions.cs b/src/Avalonia.Native/Generated/Functions.cs
deleted file mode 100644
index 6ab648dc50..0000000000
--- a/src/Avalonia.Native/Generated/Functions.cs
+++ /dev/null
@@ -1,5 +0,0 @@
-//
-
-namespace Avalonia.Native.Interop
-{
-}
\ No newline at end of file
diff --git a/src/Avalonia.Native/Generated/Interfaces.cs b/src/Avalonia.Native/Generated/Interfaces.cs
deleted file mode 100644
index 161ada1e50..0000000000
--- a/src/Avalonia.Native/Generated/Interfaces.cs
+++ /dev/null
@@ -1,3092 +0,0 @@
-//
-
-namespace Avalonia.Native.Interop
-{
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f01")]
- public partial class IAvaloniaNativeFactory : SharpGen.Runtime.ComObject
- {
- public IAvaloniaNativeFactory(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvaloniaNativeFactory(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvaloniaNativeFactory(nativePtr);
- ///
- /// No documentation.
- ///
- /// GetMacOptions
- /// GetMacOptions
- public Avalonia.Native.Interop.IAvnMacOptions MacOptions
- {
- get => GetMacOptions();
- }
-
- ///
- /// No documentation.
- ///
- /// SetAppMenu
- /// SetAppMenu
- public Avalonia.Native.Interop.IAvnMenu AppMenu
- {
- set => SetAppMenu(value);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::Initialize([In] IAvnGCHandleDeallocatorCallback* deallocator)
- /// IAvaloniaNativeFactory::Initialize
- public unsafe void Initialize(Avalonia.Native.Interop.IAvnGCHandleDeallocatorCallback deallocator)
- {
- System.IntPtr deallocator_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- deallocator_ = SharpGen.Runtime.CppObject.ToCallbackPtr(deallocator);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)deallocator_, (*(void ***)this._nativePointer)[3]);
- System.GC.KeepAlive(deallocator);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// IAvnMacOptions* IAvaloniaNativeFactory::GetMacOptions()
- /// IAvaloniaNativeFactory::GetMacOptions
- internal unsafe Avalonia.Native.Interop.IAvnMacOptions GetMacOptions()
- {
- Avalonia.Native.Interop.IAvnMacOptions __result__;
- System.IntPtr __result__native = System.IntPtr.Zero;
- __result__native = Avalonia.Native.LocalInterop.CalliThisCallSystemIntPtr(this._nativePointer, (*(void ***)this._nativePointer)[4]);
- if (__result__native != System.IntPtr.Zero)
- __result__ = new Avalonia.Native.Interop.IAvnMacOptions(__result__native);
- else
- __result__ = null;
- return __result__;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateWindow([In] IAvnWindowEvents* cb,[In] IAvnGlContext* gl,[In] IAvnWindow** ppv)
- /// IAvaloniaNativeFactory::CreateWindow
- public unsafe Avalonia.Native.Interop.IAvnWindow CreateWindow(Avalonia.Native.Interop.IAvnWindowEvents cb, Avalonia.Native.Interop.IAvnGlContext gl)
- {
- System.IntPtr cb_ = System.IntPtr.Zero;
- System.IntPtr gl_ = System.IntPtr.Zero;
- Avalonia.Native.Interop.IAvnWindow vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- cb_ = SharpGen.Runtime.CppObject.ToCallbackPtr(cb);
- gl_ = SharpGen.Runtime.CppObject.ToCallbackPtr(gl);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)cb_, (void *)gl_, &vOut_, (*(void ***)this._nativePointer)[5]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnWindow(vOut_);
- else
- vOut = null;
- System.GC.KeepAlive(cb);
- System.GC.KeepAlive(gl);
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreatePopup([In] IAvnWindowEvents* cb,[In] IAvnGlContext* gl,[In] IAvnPopup** ppv)
- /// IAvaloniaNativeFactory::CreatePopup
- public unsafe Avalonia.Native.Interop.IAvnPopup CreatePopup(Avalonia.Native.Interop.IAvnWindowEvents cb, Avalonia.Native.Interop.IAvnGlContext gl)
- {
- System.IntPtr cb_ = System.IntPtr.Zero;
- System.IntPtr gl_ = System.IntPtr.Zero;
- Avalonia.Native.Interop.IAvnPopup vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- cb_ = SharpGen.Runtime.CppObject.ToCallbackPtr(cb);
- gl_ = SharpGen.Runtime.CppObject.ToCallbackPtr(gl);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)cb_, (void *)gl_, &vOut_, (*(void ***)this._nativePointer)[6]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnPopup(vOut_);
- else
- vOut = null;
- System.GC.KeepAlive(cb);
- System.GC.KeepAlive(gl);
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreatePlatformThreadingInterface([In] IAvnPlatformThreadingInterface** ppv)
- /// IAvaloniaNativeFactory::CreatePlatformThreadingInterface
- public unsafe Avalonia.Native.Interop.IAvnPlatformThreadingInterface CreatePlatformThreadingInterface()
- {
- Avalonia.Native.Interop.IAvnPlatformThreadingInterface vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[7]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnPlatformThreadingInterface(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateSystemDialogs([In] IAvnSystemDialogs** ppv)
- /// IAvaloniaNativeFactory::CreateSystemDialogs
- public unsafe Avalonia.Native.Interop.IAvnSystemDialogs CreateSystemDialogs()
- {
- Avalonia.Native.Interop.IAvnSystemDialogs vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[8]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnSystemDialogs(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateScreens([In] IAvnScreens** ppv)
- /// IAvaloniaNativeFactory::CreateScreens
- public unsafe Avalonia.Native.Interop.IAvnScreens CreateScreens()
- {
- Avalonia.Native.Interop.IAvnScreens vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[9]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnScreens(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateClipboard([In] IAvnClipboard** ppv)
- /// IAvaloniaNativeFactory::CreateClipboard
- public unsafe Avalonia.Native.Interop.IAvnClipboard CreateClipboard()
- {
- Avalonia.Native.Interop.IAvnClipboard vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[10]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnClipboard(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateDndClipboard([In] IAvnClipboard** ppv)
- /// IAvaloniaNativeFactory::CreateDndClipboard
- public unsafe Avalonia.Native.Interop.IAvnClipboard CreateDndClipboard()
- {
- Avalonia.Native.Interop.IAvnClipboard vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[11]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnClipboard(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateCursorFactory([In] IAvnCursorFactory** ppv)
- /// IAvaloniaNativeFactory::CreateCursorFactory
- public unsafe Avalonia.Native.Interop.IAvnCursorFactory CreateCursorFactory()
- {
- Avalonia.Native.Interop.IAvnCursorFactory vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[12]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnCursorFactory(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::ObtainGlDisplay([In] IAvnGlDisplay** ppv)
- /// IAvaloniaNativeFactory::ObtainGlDisplay
- public unsafe Avalonia.Native.Interop.IAvnGlDisplay ObtainGlDisplay()
- {
- Avalonia.Native.Interop.IAvnGlDisplay vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[13]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnGlDisplay(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::SetAppMenu([In] IAvnMenu* menu)
- /// IAvaloniaNativeFactory::SetAppMenu
- internal unsafe void SetAppMenu(Avalonia.Native.Interop.IAvnMenu menu)
- {
- System.IntPtr menu_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- menu_ = SharpGen.Runtime.CppObject.ToCallbackPtr(menu);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)menu_, (*(void ***)this._nativePointer)[14]);
- System.GC.KeepAlive(menu);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateMenu([In] IAvnMenuEvents* cb,[In] IAvnMenu** ppv)
- /// IAvaloniaNativeFactory::CreateMenu
- public unsafe Avalonia.Native.Interop.IAvnMenu CreateMenu(Avalonia.Native.Interop.IAvnMenuEvents cb)
- {
- System.IntPtr cb_ = System.IntPtr.Zero;
- Avalonia.Native.Interop.IAvnMenu vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- cb_ = SharpGen.Runtime.CppObject.ToCallbackPtr(cb);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)cb_, &vOut_, (*(void ***)this._nativePointer)[15]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnMenu(vOut_);
- else
- vOut = null;
- System.GC.KeepAlive(cb);
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateMenuItem([In] IAvnMenuItem** ppv)
- /// IAvaloniaNativeFactory::CreateMenuItem
- public unsafe Avalonia.Native.Interop.IAvnMenuItem CreateMenuItem()
- {
- Avalonia.Native.Interop.IAvnMenuItem vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[16]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnMenuItem(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvaloniaNativeFactory::CreateMenuItemSeperator([In] IAvnMenuItem** ppv)
- /// IAvaloniaNativeFactory::CreateMenuItemSeperator
- public unsafe Avalonia.Native.Interop.IAvnMenuItem CreateMenuItemSeperator()
- {
- Avalonia.Native.Interop.IAvnMenuItem vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[17]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnMenuItem(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
- }
-
- class IAvnActionCallbackShadow : SharpGen.Runtime.ComObjectShadow
- {
- protected unsafe class IAvnActionCallbackVtbl : SharpGen.Runtime.ComObjectShadow.ComObjectVtbl
- {
- public IAvnActionCallbackVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 1)
- {
- AddMethod(new RunDelegate(Run));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void RunDelegate(System.IntPtr thisObject);
- private static unsafe void Run(System.IntPtr thisObject)
- {
- try
- {
- IAvnActionCallback @this = (IAvnActionCallback)ToShadow(thisObject).Callback;
- @this.Run();
- }
- catch (System.Exception __exception__)
- {
- IAvnActionCallback @this = (IAvnActionCallback)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnActionCallbackShadow.IAvnActionCallbackVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f08"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnActionCallbackShadow))]
- public partial interface IAvnActionCallback : SharpGen.Runtime.IUnknown
- {
- void Run();
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f0f")]
- public partial class IAvnClipboard : SharpGen.Runtime.ComObject
- {
- public IAvnClipboard(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnClipboard(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnClipboard(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnClipboard::GetText([In] char* type,[In] IAvnString** ppv)
- /// IAvnClipboard::GetText
- public unsafe Avalonia.Native.Interop.IAvnString GetText(System.String type)
- {
- System.IntPtr type_;
- Avalonia.Native.Interop.IAvnString vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- type_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(type);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)type_, &vOut_, (*(void ***)this._nativePointer)[3]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnString(vOut_);
- else
- vOut = null;
- System.Runtime.InteropServices.Marshal.FreeHGlobal(type_);
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnClipboard::SetText([In] char* type,[In] void* utf8Text)
- /// IAvnClipboard::SetText
- public unsafe void SetText(System.String type, System.IntPtr utf8Text)
- {
- System.IntPtr type_;
- SharpGen.Runtime.Result __result__;
- type_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(type);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)type_, (void *)utf8Text, (*(void ***)this._nativePointer)[4]);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(type_);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnClipboard::ObtainFormats([In] IAvnStringArray** ppv)
- /// IAvnClipboard::ObtainFormats
- public unsafe Avalonia.Native.Interop.IAvnStringArray ObtainFormats()
- {
- Avalonia.Native.Interop.IAvnStringArray vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[5]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnStringArray(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnClipboard::GetStrings([In] char* type,[In] IAvnStringArray** ppv)
- /// IAvnClipboard::GetStrings
- public unsafe Avalonia.Native.Interop.IAvnStringArray GetStrings(System.String type)
- {
- System.IntPtr type_;
- Avalonia.Native.Interop.IAvnStringArray vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- type_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(type);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)type_, &vOut_, (*(void ***)this._nativePointer)[6]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnStringArray(vOut_);
- else
- vOut = null;
- System.Runtime.InteropServices.Marshal.FreeHGlobal(type_);
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnClipboard::SetBytes([In] char* type,[In] void* utf8Text,[In] int len)
- /// IAvnClipboard::SetBytes
- public unsafe void SetBytes(System.String type, System.IntPtr utf8Text, System.Int32 len)
- {
- System.IntPtr type_;
- SharpGen.Runtime.Result __result__;
- type_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(type);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)type_, (void *)utf8Text, len, (*(void ***)this._nativePointer)[7]);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(type_);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnClipboard::GetBytes([In] char* type,[In] IAvnString** ppv)
- /// IAvnClipboard::GetBytes
- public unsafe Avalonia.Native.Interop.IAvnString GetBytes(System.String type)
- {
- System.IntPtr type_;
- Avalonia.Native.Interop.IAvnString vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- type_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(type);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)type_, &vOut_, (*(void ***)this._nativePointer)[8]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnString(vOut_);
- else
- vOut = null;
- System.Runtime.InteropServices.Marshal.FreeHGlobal(type_);
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnClipboard::Clear()
- /// IAvnClipboard::Clear
- public unsafe void Clear()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[9]);
- __result__.CheckError();
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f10")]
- public partial class IAvnCursor : SharpGen.Runtime.ComObject
- {
- public IAvnCursor(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnCursor(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnCursor(nativePtr);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f11")]
- public partial class IAvnCursorFactory : SharpGen.Runtime.ComObject
- {
- public IAvnCursorFactory(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnCursorFactory(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnCursorFactory(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnCursorFactory::GetCursor([In] AvnStandardCursorType cursorType,[Out] IAvnCursor** retOut)
- /// IAvnCursorFactory::GetCursor
- public unsafe Avalonia.Native.Interop.IAvnCursor GetCursor(Avalonia.Native.Interop.AvnStandardCursorType cursorType)
- {
- Avalonia.Native.Interop.IAvnCursor retOut;
- System.IntPtr retOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, unchecked ((System.Int32)cursorType), &retOut_, (*(void ***)this._nativePointer)[3]);
- if (retOut_ != System.IntPtr.Zero)
- retOut = new Avalonia.Native.Interop.IAvnCursor(retOut_);
- else
- retOut = null;
- __result__.CheckError();
- return retOut;
- }
- }
-
- class IAvnDndResultCallbackShadow : SharpGen.Runtime.ComObjectShadow
- {
- protected unsafe class IAvnDndResultCallbackVtbl : SharpGen.Runtime.ComObjectShadow.ComObjectVtbl
- {
- public IAvnDndResultCallbackVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 1)
- {
- AddMethod(new OnDragAndDropCompleteDelegate(OnDragAndDropComplete));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void OnDragAndDropCompleteDelegate(System.IntPtr thisObject, int arg0);
- private static unsafe void OnDragAndDropComplete(System.IntPtr thisObject, int param0)
- {
- try
- {
- Avalonia.Native.Interop.AvnDragDropEffects effecct = default (Avalonia.Native.Interop.AvnDragDropEffects);
- effecct = (Avalonia.Native.Interop.AvnDragDropEffects)param0;
- IAvnDndResultCallback @this = (IAvnDndResultCallback)ToShadow(thisObject).Callback;
- @this.OnDragAndDropComplete(effecct);
- }
- catch (System.Exception __exception__)
- {
- IAvnDndResultCallback @this = (IAvnDndResultCallback)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnDndResultCallbackShadow.IAvnDndResultCallbackVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f21"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnDndResultCallbackShadow))]
- public partial interface IAvnDndResultCallback : SharpGen.Runtime.IUnknown
- {
- void OnDragAndDropComplete(Avalonia.Native.Interop.AvnDragDropEffects effecct);
- }
-
- class IAvnGCHandleDeallocatorCallbackShadow : SharpGen.Runtime.ComObjectShadow
- {
- protected unsafe class IAvnGCHandleDeallocatorCallbackVtbl : SharpGen.Runtime.ComObjectShadow.ComObjectVtbl
- {
- public IAvnGCHandleDeallocatorCallbackVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 1)
- {
- AddMethod(new FreeGCHandleDelegate(FreeGCHandle));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void FreeGCHandleDelegate(System.IntPtr thisObject, void *arg0);
- private static unsafe void FreeGCHandle(System.IntPtr thisObject, void *param0)
- {
- try
- {
- System.IntPtr handle = default (System.IntPtr);
- handle = (System.IntPtr)param0;
- IAvnGCHandleDeallocatorCallback @this = (IAvnGCHandleDeallocatorCallback)ToShadow(thisObject).Callback;
- @this.FreeGCHandle(handle);
- }
- catch (System.Exception __exception__)
- {
- IAvnGCHandleDeallocatorCallback @this = (IAvnGCHandleDeallocatorCallback)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnGCHandleDeallocatorCallbackShadow.IAvnGCHandleDeallocatorCallbackVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f22"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnGCHandleDeallocatorCallbackShadow))]
- public partial interface IAvnGCHandleDeallocatorCallback : SharpGen.Runtime.IUnknown
- {
- void FreeGCHandle(System.IntPtr handle);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f14")]
- public partial class IAvnGlContext : SharpGen.Runtime.ComObject
- {
- public IAvnGlContext(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnGlContext(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnGlContext(nativePtr);
- ///
- /// No documentation.
- ///
- /// GetSampleCount
- /// GetSampleCount
- public System.Int32 SampleCount
- {
- get => GetSampleCount();
- }
-
- ///
- /// No documentation.
- ///
- /// GetStencilSize
- /// GetStencilSize
- public System.Int32 StencilSize
- {
- get => GetStencilSize();
- }
-
- ///
- /// No documentation.
- ///
- /// GetNativeHandle
- /// GetNativeHandle
- public System.IntPtr NativeHandle
- {
- get => GetNativeHandle();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnGlContext::MakeCurrent([In] IUnknown** ppv)
- /// IAvnGlContext::MakeCurrent
- public unsafe SharpGen.Runtime.IUnknown MakeCurrent()
- {
- SharpGen.Runtime.IUnknown vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &vOut_, (*(void ***)this._nativePointer)[3]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new SharpGen.Runtime.ComObject(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnGlContext::LegacyMakeCurrent()
- /// IAvnGlContext::LegacyMakeCurrent
- public unsafe void LegacyMakeCurrent()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[4]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// int IAvnGlContext::GetSampleCount()
- /// IAvnGlContext::GetSampleCount
- internal unsafe System.Int32 GetSampleCount()
- {
- System.Int32 __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[5]);
- return __result__;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// int IAvnGlContext::GetStencilSize()
- /// IAvnGlContext::GetStencilSize
- internal unsafe System.Int32 GetStencilSize()
- {
- System.Int32 __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[6]);
- return __result__;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// void* IAvnGlContext::GetNativeHandle()
- /// IAvnGlContext::GetNativeHandle
- internal unsafe System.IntPtr GetNativeHandle()
- {
- System.IntPtr __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallSystemIntPtr(this._nativePointer, (*(void ***)this._nativePointer)[7]);
- return __result__;
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f13")]
- public partial class IAvnGlDisplay : SharpGen.Runtime.ComObject
- {
- public IAvnGlDisplay(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnGlDisplay(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnGlDisplay(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnGlDisplay::CreateContext([In] IAvnGlContext* share,[In] IAvnGlContext** ppv)
- /// IAvnGlDisplay::CreateContext
- public unsafe Avalonia.Native.Interop.IAvnGlContext CreateContext(Avalonia.Native.Interop.IAvnGlContext share)
- {
- System.IntPtr share_ = System.IntPtr.Zero;
- Avalonia.Native.Interop.IAvnGlContext vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- share_ = SharpGen.Runtime.CppObject.ToCallbackPtr(share);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)share_, &vOut_, (*(void ***)this._nativePointer)[3]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnGlContext(vOut_);
- else
- vOut = null;
- System.GC.KeepAlive(share);
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// void IAvnGlDisplay::LegacyClearCurrentContext()
- /// IAvnGlDisplay::LegacyClearCurrentContext
- public unsafe void LegacyClearCurrentContext()
- {
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, (*(void ***)this._nativePointer)[4]);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnGlDisplay::WrapContext([In] void* native,[In] IAvnGlContext** ppv)
- /// IAvnGlDisplay::WrapContext
- public unsafe Avalonia.Native.Interop.IAvnGlContext WrapContext(System.IntPtr native)
- {
- Avalonia.Native.Interop.IAvnGlContext vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)native, &vOut_, (*(void ***)this._nativePointer)[5]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnGlContext(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// void* IAvnGlDisplay::GetProcAddress([In] char* proc)
- /// IAvnGlDisplay::GetProcAddress
- public unsafe System.IntPtr GetProcAddress(System.String rocRef)
- {
- System.IntPtr rocRef_;
- System.IntPtr __result__;
- rocRef_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(rocRef);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallSystemIntPtr(this._nativePointer, (void *)rocRef_, (*(void ***)this._nativePointer)[6]);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(rocRef_);
- return __result__;
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f16")]
- public partial class IAvnGlSurfaceRenderingSession : SharpGen.Runtime.ComObject
- {
- public IAvnGlSurfaceRenderingSession(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnGlSurfaceRenderingSession(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnGlSurfaceRenderingSession(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnGlSurfaceRenderingSession::GetPixelSize([In] AvnPixelSize* ret)
- /// IAvnGlSurfaceRenderingSession::GetPixelSize
- public unsafe Avalonia.Native.Interop.AvnPixelSize GetPixelSize()
- {
- Avalonia.Native.Interop.AvnPixelSize ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[3]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnGlSurfaceRenderingSession::GetScaling([In] double* ret)
- /// IAvnGlSurfaceRenderingSession::GetScaling
- public unsafe System.Double GetScaling()
- {
- System.Double ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[4]);
- __result__.CheckError();
- return ret;
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f15")]
- public partial class IAvnGlSurfaceRenderTarget : SharpGen.Runtime.ComObject
- {
- public IAvnGlSurfaceRenderTarget(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnGlSurfaceRenderTarget(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnGlSurfaceRenderTarget(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnGlSurfaceRenderTarget::BeginDrawing([In] IAvnGlSurfaceRenderingSession** ret)
- /// IAvnGlSurfaceRenderTarget::BeginDrawing
- public unsafe Avalonia.Native.Interop.IAvnGlSurfaceRenderingSession BeginDrawing()
- {
- Avalonia.Native.Interop.IAvnGlSurfaceRenderingSession ret;
- System.IntPtr ret_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret_, (*(void ***)this._nativePointer)[3]);
- if (ret_ != System.IntPtr.Zero)
- ret = new Avalonia.Native.Interop.IAvnGlSurfaceRenderingSession(ret_);
- else
- ret = null;
- __result__.CheckError();
- return ret;
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f0a")]
- public partial class IAvnLoopCancellation : SharpGen.Runtime.ComObject
- {
- public IAvnLoopCancellation(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnLoopCancellation(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnLoopCancellation(nativePtr);
- ///
- /// No documentation.
- ///
- /// void IAvnLoopCancellation::Cancel()
- /// IAvnLoopCancellation::Cancel
- public unsafe void Cancel()
- {
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, (*(void ***)this._nativePointer)[3]);
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f07")]
- public partial class IAvnMacOptions : SharpGen.Runtime.ComObject
- {
- public IAvnMacOptions(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnMacOptions(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnMacOptions(nativePtr);
- ///
- /// No documentation.
- ///
- /// SetShowInDock
- /// SetShowInDock
- public System.Int32 ShowInDock
- {
- set => SetShowInDock(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetApplicationTitle
- /// SetApplicationTitle
- public System.IntPtr ApplicationTitle
- {
- set => SetApplicationTitle(value);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMacOptions::SetShowInDock([In] int show)
- /// IAvnMacOptions::SetShowInDock
- internal unsafe void SetShowInDock(System.Int32 show)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, show, (*(void ***)this._nativePointer)[3]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMacOptions::SetApplicationTitle([In] void* utf8string)
- /// IAvnMacOptions::SetApplicationTitle
- internal unsafe void SetApplicationTitle(System.IntPtr utf8string)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)utf8string, (*(void ***)this._nativePointer)[4]);
- __result__.CheckError();
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f17")]
- public partial class IAvnMenu : SharpGen.Runtime.ComObject
- {
- public IAvnMenu(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnMenu(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnMenu(nativePtr);
- ///
- /// No documentation.
- ///
- /// SetTitle
- /// SetTitle
- public System.IntPtr Title
- {
- set => SetTitle(value);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenu::InsertItem([In] int index,[In] IAvnMenuItem* item)
- /// IAvnMenu::InsertItem
- public unsafe void InsertItem(System.Int32 index, Avalonia.Native.Interop.IAvnMenuItem item)
- {
- System.IntPtr item_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- item_ = SharpGen.Runtime.CppObject.ToCallbackPtr(item);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, index, (void *)item_, (*(void ***)this._nativePointer)[3]);
- System.GC.KeepAlive(item);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenu::RemoveItem([In] IAvnMenuItem* item)
- /// IAvnMenu::RemoveItem
- public unsafe void RemoveItem(Avalonia.Native.Interop.IAvnMenuItem item)
- {
- System.IntPtr item_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- item_ = SharpGen.Runtime.CppObject.ToCallbackPtr(item);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)item_, (*(void ***)this._nativePointer)[4]);
- System.GC.KeepAlive(item);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenu::SetTitle([In] void* utf8String)
- /// IAvnMenu::SetTitle
- internal unsafe void SetTitle(System.IntPtr utf8String)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)utf8String, (*(void ***)this._nativePointer)[5]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnMenu::Clear()
- /// IAvnMenu::Clear
- public unsafe void Clear()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[6]);
- __result__.CheckError();
- }
- }
-
- class IAvnMenuEventsShadow : SharpGen.Runtime.ComObjectShadow
- {
- protected unsafe class IAvnMenuEventsVtbl : SharpGen.Runtime.ComObjectShadow.ComObjectVtbl
- {
- public IAvnMenuEventsVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 1)
- {
- AddMethod(new NeedsUpdateDelegate(NeedsUpdate));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void NeedsUpdateDelegate(System.IntPtr thisObject);
- private static unsafe void NeedsUpdate(System.IntPtr thisObject)
- {
- try
- {
- IAvnMenuEvents @this = (IAvnMenuEvents)ToShadow(thisObject).Callback;
- @this.NeedsUpdate();
- }
- catch (System.Exception __exception__)
- {
- IAvnMenuEvents @this = (IAvnMenuEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnMenuEventsShadow.IAvnMenuEventsVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f1A"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnMenuEventsShadow))]
- public partial interface IAvnMenuEvents : SharpGen.Runtime.IUnknown
- {
- void NeedsUpdate();
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f19")]
- public partial class IAvnMenuItem : SharpGen.Runtime.ComObject
- {
- public IAvnMenuItem(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnMenuItem(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnMenuItem(nativePtr);
- ///
- /// No documentation.
- ///
- /// SetSubMenu
- /// SetSubMenu
- public Avalonia.Native.Interop.IAvnMenu SubMenu
- {
- set => SetSubMenu(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetTitle
- /// SetTitle
- public System.IntPtr Title
- {
- set => SetTitle(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetIsChecked
- /// SetIsChecked
- public System.Boolean IsChecked
- {
- set => SetIsChecked(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetToggleType
- /// SetToggleType
- public Avalonia.Native.Interop.AvnMenuItemToggleType ToggleType
- {
- set => SetToggleType(value);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenuItem::SetSubMenu([In] IAvnMenu* menu)
- /// IAvnMenuItem::SetSubMenu
- internal unsafe void SetSubMenu(Avalonia.Native.Interop.IAvnMenu menu)
- {
- System.IntPtr menu_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- menu_ = SharpGen.Runtime.CppObject.ToCallbackPtr(menu);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)menu_, (*(void ***)this._nativePointer)[3]);
- System.GC.KeepAlive(menu);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenuItem::SetTitle([In] void* utf8String)
- /// IAvnMenuItem::SetTitle
- internal unsafe void SetTitle(System.IntPtr utf8String)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)utf8String, (*(void ***)this._nativePointer)[4]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenuItem::SetGesture([In] void* utf8String,[In] AvnInputModifiers modifiers)
- /// IAvnMenuItem::SetGesture
- public unsafe void SetGesture(System.IntPtr utf8String, Avalonia.Native.Interop.AvnInputModifiers modifiers)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)utf8String, unchecked ((System.Int32)modifiers), (*(void ***)this._nativePointer)[5]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenuItem::SetAction([In] IAvnPredicateCallback* predicate,[In] IAvnActionCallback* callback)
- /// IAvnMenuItem::SetAction
- public unsafe void SetAction(Avalonia.Native.Interop.IAvnPredicateCallback redicateRef, Avalonia.Native.Interop.IAvnActionCallback callback)
- {
- System.IntPtr redicateRef_ = System.IntPtr.Zero;
- System.IntPtr callback_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- redicateRef_ = SharpGen.Runtime.CppObject.ToCallbackPtr(redicateRef);
- callback_ = SharpGen.Runtime.CppObject.ToCallbackPtr(callback);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)redicateRef_, (void *)callback_, (*(void ***)this._nativePointer)[6]);
- System.GC.KeepAlive(redicateRef);
- System.GC.KeepAlive(callback);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenuItem::SetIsChecked([In] bool isChecked)
- /// IAvnMenuItem::SetIsChecked
- internal unsafe void SetIsChecked(System.Boolean isChecked)
- {
- System.Byte isChecked_;
- SharpGen.Runtime.Result __result__;
- isChecked_ = (System.Byte)(isChecked ? 1 : 0);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, isChecked_, (*(void ***)this._nativePointer)[7]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenuItem::SetToggleType([In] AvnMenuItemToggleType toggleType)
- /// IAvnMenuItem::SetToggleType
- internal unsafe void SetToggleType(Avalonia.Native.Interop.AvnMenuItemToggleType toggleType)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, unchecked ((System.Int32)toggleType), (*(void ***)this._nativePointer)[8]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnMenuItem::SetIcon([In] void* data,[In] size_t length)
- /// IAvnMenuItem::SetIcon
- public unsafe void SetIcon(System.IntPtr data, SharpGen.Runtime.PointerSize length)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)data, (void *)length, (*(void ***)this._nativePointer)[9]);
- __result__.CheckError();
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f20")]
- public partial class IAvnNativeControlHost : SharpGen.Runtime.ComObject
- {
- public IAvnNativeControlHost(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnNativeControlHost(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnNativeControlHost(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnNativeControlHost::CreateDefaultChild([In] void* parent,[Out] void** retOut)
- /// IAvnNativeControlHost::CreateDefaultChild
- public unsafe System.IntPtr CreateDefaultChild(System.IntPtr arentRef)
- {
- System.IntPtr retOut;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)arentRef, &retOut, (*(void ***)this._nativePointer)[3]);
- __result__.CheckError();
- return retOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// IAvnNativeControlHostTopLevelAttachment* IAvnNativeControlHost::CreateAttachment()
- /// IAvnNativeControlHost::CreateAttachment
- public unsafe Avalonia.Native.Interop.IAvnNativeControlHostTopLevelAttachment CreateAttachment()
- {
- Avalonia.Native.Interop.IAvnNativeControlHostTopLevelAttachment __result__;
- System.IntPtr __result__native = System.IntPtr.Zero;
- __result__native = Avalonia.Native.LocalInterop.CalliThisCallSystemIntPtr(this._nativePointer, (*(void ***)this._nativePointer)[4]);
- if (__result__native != System.IntPtr.Zero)
- __result__ = new Avalonia.Native.Interop.IAvnNativeControlHostTopLevelAttachment(__result__native);
- else
- __result__ = null;
- return __result__;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// void IAvnNativeControlHost::DestroyDefaultChild([In] void* child)
- /// IAvnNativeControlHost::DestroyDefaultChild
- public unsafe void DestroyDefaultChild(System.IntPtr child)
- {
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, (void *)child, (*(void ***)this._nativePointer)[5]);
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f21")]
- public partial class IAvnNativeControlHostTopLevelAttachment : SharpGen.Runtime.ComObject
- {
- public IAvnNativeControlHostTopLevelAttachment(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnNativeControlHostTopLevelAttachment(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnNativeControlHostTopLevelAttachment(nativePtr);
- ///
- /// No documentation.
- ///
- /// GetParentHandle
- /// GetParentHandle
- public System.IntPtr ParentHandle
- {
- get => GetParentHandle();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// void* IAvnNativeControlHostTopLevelAttachment::GetParentHandle()
- /// IAvnNativeControlHostTopLevelAttachment::GetParentHandle
- internal unsafe System.IntPtr GetParentHandle()
- {
- System.IntPtr __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallSystemIntPtr(this._nativePointer, (*(void ***)this._nativePointer)[3]);
- return __result__;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnNativeControlHostTopLevelAttachment::InitializeWithChildHandle([In] void* child)
- /// IAvnNativeControlHostTopLevelAttachment::InitializeWithChildHandle
- public unsafe void InitializeWithChildHandle(System.IntPtr child)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)child, (*(void ***)this._nativePointer)[4]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnNativeControlHostTopLevelAttachment::AttachTo([In] IAvnNativeControlHost* host)
- /// IAvnNativeControlHostTopLevelAttachment::AttachTo
- public unsafe void AttachTo(Avalonia.Native.Interop.IAvnNativeControlHost host)
- {
- System.IntPtr host_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- host_ = SharpGen.Runtime.CppObject.ToCallbackPtr(host);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)host_, (*(void ***)this._nativePointer)[5]);
- System.GC.KeepAlive(host);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// void IAvnNativeControlHostTopLevelAttachment::ShowInBounds([In] float x,[In] float y,[In] float width,[In] float height)
- /// IAvnNativeControlHostTopLevelAttachment::ShowInBounds
- public unsafe void ShowInBounds(System.Single x, System.Single y, System.Single width, System.Single height)
- {
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, x, y, width, height, (*(void ***)this._nativePointer)[6]);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// void IAvnNativeControlHostTopLevelAttachment::HideWithSize([In] float width,[In] float height)
- /// IAvnNativeControlHostTopLevelAttachment::HideWithSize
- public unsafe void HideWithSize(System.Single width, System.Single height)
- {
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, width, height, (*(void ***)this._nativePointer)[7]);
- }
-
- ///
- /// No documentation.
- ///
- /// void IAvnNativeControlHostTopLevelAttachment::ReleaseChild()
- /// IAvnNativeControlHostTopLevelAttachment::ReleaseChild
- public unsafe void ReleaseChild()
- {
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, (*(void ***)this._nativePointer)[8]);
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f0b")]
- public partial class IAvnPlatformThreadingInterface : SharpGen.Runtime.ComObject
- {
- public IAvnPlatformThreadingInterface(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnPlatformThreadingInterface(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnPlatformThreadingInterface(nativePtr);
- ///
- /// No documentation.
- ///
- /// GetCurrentThreadIsLoopThread
- /// GetCurrentThreadIsLoopThread
- public System.Boolean CurrentThreadIsLoopThread
- {
- get => GetCurrentThreadIsLoopThread();
- }
-
- ///
- /// No documentation.
- ///
- /// SetSignaledCallback
- /// SetSignaledCallback
- public Avalonia.Native.Interop.IAvnSignaledCallback SignaledCallback
- {
- set => SetSignaledCallback(value);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// bool IAvnPlatformThreadingInterface::GetCurrentThreadIsLoopThread()
- /// IAvnPlatformThreadingInterface::GetCurrentThreadIsLoopThread
- internal unsafe System.Boolean GetCurrentThreadIsLoopThread()
- {
- System.Boolean __result__;
- System.Byte __result__native;
- __result__native = Avalonia.Native.LocalInterop.CalliThisCallSystemByte(this._nativePointer, (*(void ***)this._nativePointer)[3]);
- __result__ = __result__native != 0;
- return __result__;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// void IAvnPlatformThreadingInterface::SetSignaledCallback([In] IAvnSignaledCallback* cb)
- /// IAvnPlatformThreadingInterface::SetSignaledCallback
- internal unsafe void SetSignaledCallback(Avalonia.Native.Interop.IAvnSignaledCallback cb)
- {
- System.IntPtr cb_ = System.IntPtr.Zero;
- cb_ = SharpGen.Runtime.CppObject.ToCallbackPtr(cb);
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, (void *)cb_, (*(void ***)this._nativePointer)[4]);
- System.GC.KeepAlive(cb);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// IAvnLoopCancellation* IAvnPlatformThreadingInterface::CreateLoopCancellation()
- /// IAvnPlatformThreadingInterface::CreateLoopCancellation
- public unsafe Avalonia.Native.Interop.IAvnLoopCancellation CreateLoopCancellation()
- {
- Avalonia.Native.Interop.IAvnLoopCancellation __result__;
- System.IntPtr __result__native = System.IntPtr.Zero;
- __result__native = Avalonia.Native.LocalInterop.CalliThisCallSystemIntPtr(this._nativePointer, (*(void ***)this._nativePointer)[5]);
- if (__result__native != System.IntPtr.Zero)
- __result__ = new Avalonia.Native.Interop.IAvnLoopCancellation(__result__native);
- else
- __result__ = null;
- return __result__;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnPlatformThreadingInterface::RunLoop([In] IAvnLoopCancellation* cancel)
- /// IAvnPlatformThreadingInterface::RunLoop
- public unsafe void RunLoop(Avalonia.Native.Interop.IAvnLoopCancellation cancel)
- {
- System.IntPtr cancel_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- cancel_ = SharpGen.Runtime.CppObject.ToCallbackPtr(cancel);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)cancel_, (*(void ***)this._nativePointer)[6]);
- System.GC.KeepAlive(cancel);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// void IAvnPlatformThreadingInterface::Signal([In] int priority)
- /// IAvnPlatformThreadingInterface::Signal
- public unsafe void Signal(System.Int32 priority)
- {
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, priority, (*(void ***)this._nativePointer)[7]);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// IUnknown* IAvnPlatformThreadingInterface::StartTimer([In] int priority,[In] int ms,[In] IAvnActionCallback* callback)
- /// IAvnPlatformThreadingInterface::StartTimer
- public unsafe SharpGen.Runtime.ComObject StartTimer(System.Int32 priority, System.Int32 ms, Avalonia.Native.Interop.IAvnActionCallback callback)
- {
- System.IntPtr callback_ = System.IntPtr.Zero;
- SharpGen.Runtime.ComObject __result__;
- System.IntPtr __result__native = System.IntPtr.Zero;
- callback_ = SharpGen.Runtime.CppObject.ToCallbackPtr(callback);
- __result__native = Avalonia.Native.LocalInterop.CalliThisCallSystemIntPtr(this._nativePointer, priority, ms, (void *)callback_, (*(void ***)this._nativePointer)[8]);
- if (__result__native != System.IntPtr.Zero)
- __result__ = new SharpGen.Runtime.ComObject(__result__native);
- else
- __result__ = null;
- System.GC.KeepAlive(callback);
- return __result__;
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f03")]
- public partial class IAvnPopup : Avalonia.Native.Interop.IAvnWindowBase
- {
- public IAvnPopup(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnPopup(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnPopup(nativePtr);
- }
-
- class IAvnPredicateCallbackShadow : SharpGen.Runtime.ComObjectShadow
- {
- protected unsafe class IAvnPredicateCallbackVtbl : SharpGen.Runtime.ComObjectShadow.ComObjectVtbl
- {
- public IAvnPredicateCallbackVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 1)
- {
- AddMethod(new EvaluateDelegate(Evaluate));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate System.Byte EvaluateDelegate(System.IntPtr thisObject);
- private static unsafe System.Byte Evaluate(System.IntPtr thisObject)
- {
- try
- {
- System.Boolean __result__ = default (System.Boolean);
- System.Byte __result__native;
- IAvnPredicateCallback @this = (IAvnPredicateCallback)ToShadow(thisObject).Callback;
- __result__ = @this.Evaluate();
- __result__native = (System.Byte)(__result__ ? 1 : 0);
- return __result__native;
- }
- catch (System.Exception __exception__)
- {
- IAvnPredicateCallback @this = (IAvnPredicateCallback)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- return default (System.Byte);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnPredicateCallbackShadow.IAvnPredicateCallbackVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f18"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnPredicateCallbackShadow))]
- public partial interface IAvnPredicateCallback : SharpGen.Runtime.IUnknown
- {
- System.Boolean Evaluate();
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f0e")]
- public partial class IAvnScreens : SharpGen.Runtime.ComObject
- {
- public IAvnScreens(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnScreens(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnScreens(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnScreens::GetScreenCount([In] int* ret)
- /// IAvnScreens::GetScreenCount
- public unsafe System.Int32 GetScreenCount()
- {
- System.Int32 ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[3]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnScreens::GetScreen([In] int index,[In] AvnScreen* ret)
- /// IAvnScreens::GetScreen
- public unsafe Avalonia.Native.Interop.AvnScreen GetScreen(System.Int32 index)
- {
- Avalonia.Native.Interop.AvnScreen ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, index, &ret, (*(void ***)this._nativePointer)[4]);
- __result__.CheckError();
- return ret;
- }
- }
-
- class IAvnSignaledCallbackShadow : SharpGen.Runtime.ComObjectShadow
- {
- protected unsafe class IAvnSignaledCallbackVtbl : SharpGen.Runtime.ComObjectShadow.ComObjectVtbl
- {
- public IAvnSignaledCallbackVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 1)
- {
- AddMethod(new SignaledDelegate(Signaled));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void SignaledDelegate(System.IntPtr thisObject, int arg0, System.Byte arg1);
- private static unsafe void Signaled(System.IntPtr thisObject, int param0, System.Byte param1)
- {
- try
- {
- System.Int32 priority = default (System.Int32);
- priority = (System.Int32)param0;
- System.Boolean priorityContainsMeaningfulValue = default (System.Boolean);
- System.Byte priorityContainsMeaningfulValue_ = (System.Byte)param1;
- IAvnSignaledCallback @this = (IAvnSignaledCallback)ToShadow(thisObject).Callback;
- priorityContainsMeaningfulValue = priorityContainsMeaningfulValue_ != 0;
- @this.Signaled(priority, priorityContainsMeaningfulValue);
- }
- catch (System.Exception __exception__)
- {
- IAvnSignaledCallback @this = (IAvnSignaledCallback)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnSignaledCallbackShadow.IAvnSignaledCallbackVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f09"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnSignaledCallbackShadow))]
- public partial interface IAvnSignaledCallback : SharpGen.Runtime.IUnknown
- {
- void Signaled(System.Int32 priority, System.Boolean priorityContainsMeaningfulValue);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f17")]
- public partial class IAvnString : SharpGen.Runtime.ComObject
- {
- public IAvnString(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnString(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnString(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnString::Pointer([Out] void** retOut)
- /// IAvnString::Pointer
- public unsafe System.IntPtr Pointer()
- {
- System.IntPtr retOut;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &retOut, (*(void ***)this._nativePointer)[3]);
- __result__.CheckError();
- return retOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnString::Length([In] int* ret)
- /// IAvnString::Length
- public unsafe System.Int32 Length()
- {
- System.Int32 ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[4]);
- __result__.CheckError();
- return ret;
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f20")]
- public partial class IAvnStringArray : SharpGen.Runtime.ComObject
- {
- public IAvnStringArray(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnStringArray(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnStringArray(nativePtr);
- ///
- /// No documentation.
- ///
- /// GetCount
- /// GetCount
- public System.UInt32 Count
- {
- get => GetCount();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// unsigned int IAvnStringArray::GetCount()
- /// IAvnStringArray::GetCount
- internal unsafe System.UInt32 GetCount()
- {
- System.UInt32 __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallSystemUInt32(this._nativePointer, (*(void ***)this._nativePointer)[3]);
- return __result__;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnStringArray::Get([In] unsigned int index,[In] IAvnString** ppv)
- /// IAvnStringArray::Get
- public unsafe Avalonia.Native.Interop.IAvnString Get(System.UInt32 index)
- {
- Avalonia.Native.Interop.IAvnString vOut;
- System.IntPtr vOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, index, &vOut_, (*(void ***)this._nativePointer)[4]);
- if (vOut_ != System.IntPtr.Zero)
- vOut = new Avalonia.Native.Interop.IAvnString(vOut_);
- else
- vOut = null;
- __result__.CheckError();
- return vOut;
- }
- }
-
- class IAvnSystemDialogEventsShadow : SharpGen.Runtime.ComObjectShadow
- {
- protected unsafe class IAvnSystemDialogEventsVtbl : SharpGen.Runtime.ComObjectShadow.ComObjectVtbl
- {
- public IAvnSystemDialogEventsVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 1)
- {
- AddMethod(new OnCompletedDelegate(OnCompleted));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void OnCompletedDelegate(System.IntPtr thisObject, int arg0, void *arg1);
- private static unsafe void OnCompleted(System.IntPtr thisObject, int param0, void *param1)
- {
- try
- {
- System.Int32 numResults = default (System.Int32);
- numResults = (System.Int32)param0;
- System.IntPtr trFirstResultRef = default (System.IntPtr);
- trFirstResultRef = (System.IntPtr)param1;
- IAvnSystemDialogEvents @this = (IAvnSystemDialogEvents)ToShadow(thisObject).Callback;
- @this.OnCompleted(numResults, trFirstResultRef);
- }
- catch (System.Exception __exception__)
- {
- IAvnSystemDialogEvents @this = (IAvnSystemDialogEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnSystemDialogEventsShadow.IAvnSystemDialogEventsVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f0c"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnSystemDialogEventsShadow))]
- public partial interface IAvnSystemDialogEvents : SharpGen.Runtime.IUnknown
- {
- void OnCompleted(System.Int32 numResults, System.IntPtr trFirstResultRef);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f0d")]
- public partial class IAvnSystemDialogs : SharpGen.Runtime.ComObject
- {
- public IAvnSystemDialogs(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnSystemDialogs(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnSystemDialogs(nativePtr);
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// void IAvnSystemDialogs::SelectFolderDialog([In] IAvnWindow* parentWindowHandle,[In] IAvnSystemDialogEvents* events,[In] const char* title,[In] const char* initialPath)
- /// IAvnSystemDialogs::SelectFolderDialog
- public unsafe void SelectFolderDialog(Avalonia.Native.Interop.IAvnWindow arentWindowHandleRef, Avalonia.Native.Interop.IAvnSystemDialogEvents events, System.String title, System.String initialPath)
- {
- System.IntPtr arentWindowHandleRef_ = System.IntPtr.Zero;
- System.IntPtr events_ = System.IntPtr.Zero;
- System.IntPtr title_;
- System.IntPtr initialPath_;
- arentWindowHandleRef_ = SharpGen.Runtime.CppObject.ToCallbackPtr(arentWindowHandleRef);
- events_ = SharpGen.Runtime.CppObject.ToCallbackPtr(events);
- title_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(title);
- initialPath_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(initialPath);
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, (void *)arentWindowHandleRef_, (void *)events_, (void *)title_, (void *)initialPath_, (*(void ***)this._nativePointer)[3]);
- System.GC.KeepAlive(arentWindowHandleRef);
- System.GC.KeepAlive(events);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(title_);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(initialPath_);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// void IAvnSystemDialogs::OpenFileDialog([In] IAvnWindow* parentWindowHandle,[In] IAvnSystemDialogEvents* events,[In] bool allowMultiple,[In] const char* title,[In] const char* initialDirectory,[In] const char* initialFile,[In] const char* filters)
- /// IAvnSystemDialogs::OpenFileDialog
- public unsafe void OpenFileDialog(Avalonia.Native.Interop.IAvnWindow arentWindowHandleRef, Avalonia.Native.Interop.IAvnSystemDialogEvents events, System.Boolean allowMultiple, System.String title, System.String initialDirectory, System.String initialFile, System.String filters)
- {
- System.IntPtr arentWindowHandleRef_ = System.IntPtr.Zero;
- System.IntPtr events_ = System.IntPtr.Zero;
- System.Byte allowMultiple_;
- System.IntPtr title_;
- System.IntPtr initialDirectory_;
- System.IntPtr initialFile_;
- System.IntPtr filters_;
- arentWindowHandleRef_ = SharpGen.Runtime.CppObject.ToCallbackPtr(arentWindowHandleRef);
- events_ = SharpGen.Runtime.CppObject.ToCallbackPtr(events);
- allowMultiple_ = (System.Byte)(allowMultiple ? 1 : 0);
- title_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(title);
- initialDirectory_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(initialDirectory);
- initialFile_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(initialFile);
- filters_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(filters);
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, (void *)arentWindowHandleRef_, (void *)events_, allowMultiple_, (void *)title_, (void *)initialDirectory_, (void *)initialFile_, (void *)filters_, (*(void ***)this._nativePointer)[4]);
- System.GC.KeepAlive(arentWindowHandleRef);
- System.GC.KeepAlive(events);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(title_);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(initialDirectory_);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(initialFile_);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(filters_);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// void IAvnSystemDialogs::SaveFileDialog([In] IAvnWindow* parentWindowHandle,[In] IAvnSystemDialogEvents* events,[In] const char* title,[In] const char* initialDirectory,[In] const char* initialFile,[In] const char* filters)
- /// IAvnSystemDialogs::SaveFileDialog
- public unsafe void SaveFileDialog(Avalonia.Native.Interop.IAvnWindow arentWindowHandleRef, Avalonia.Native.Interop.IAvnSystemDialogEvents events, System.String title, System.String initialDirectory, System.String initialFile, System.String filters)
- {
- System.IntPtr arentWindowHandleRef_ = System.IntPtr.Zero;
- System.IntPtr events_ = System.IntPtr.Zero;
- System.IntPtr title_;
- System.IntPtr initialDirectory_;
- System.IntPtr initialFile_;
- System.IntPtr filters_;
- arentWindowHandleRef_ = SharpGen.Runtime.CppObject.ToCallbackPtr(arentWindowHandleRef);
- events_ = SharpGen.Runtime.CppObject.ToCallbackPtr(events);
- title_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(title);
- initialDirectory_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(initialDirectory);
- initialFile_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(initialFile);
- filters_ = System.Runtime.InteropServices.Marshal.StringToHGlobalAnsi(filters);
- Avalonia.Native.LocalInterop.CalliThisCallvoid(this._nativePointer, (void *)arentWindowHandleRef_, (void *)events_, (void *)title_, (void *)initialDirectory_, (void *)initialFile_, (void *)filters_, (*(void ***)this._nativePointer)[5]);
- System.GC.KeepAlive(arentWindowHandleRef);
- System.GC.KeepAlive(events);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(title_);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(initialDirectory_);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(initialFile_);
- System.Runtime.InteropServices.Marshal.FreeHGlobal(filters_);
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f04")]
- public partial class IAvnWindow : Avalonia.Native.Interop.IAvnWindowBase
- {
- public IAvnWindow(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnWindow(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnWindow(nativePtr);
- ///
- /// No documentation.
- ///
- /// SetEnabled
- /// SetEnabled
- public System.Boolean Enabled
- {
- set => SetEnabled(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetParent
- /// SetParent
- public Avalonia.Native.Interop.IAvnWindow Parent
- {
- set => SetParent(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetCanResize
- /// SetCanResize
- public System.Boolean CanResize
- {
- set => SetCanResize(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetDecorations
- /// SetDecorations
- public Avalonia.Native.Interop.SystemDecorations Decorations
- {
- set => SetDecorations(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetTitle
- /// SetTitle
- public System.IntPtr Title
- {
- set => SetTitle(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetTitleBarColor
- /// SetTitleBarColor
- public Avalonia.Native.Interop.AvnColor TitleBarColor
- {
- set => SetTitleBarColor(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetExtendClientArea
- /// SetExtendClientArea
- public System.Boolean ExtendClientArea
- {
- set => SetExtendClientArea(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetExtendClientAreaHints
- /// SetExtendClientAreaHints
- public Avalonia.Native.Interop.AvnExtendClientAreaChromeHints ExtendClientAreaHints
- {
- set => SetExtendClientAreaHints(value);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetEnabled([In] bool enable)
- /// IAvnWindow::SetEnabled
- internal unsafe void SetEnabled(System.Boolean enable)
- {
- System.Byte enable_;
- SharpGen.Runtime.Result __result__;
- enable_ = (System.Byte)(enable ? 1 : 0);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, enable_, (*(void ***)this._nativePointer)[30]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetParent([In] IAvnWindow* parent)
- /// IAvnWindow::SetParent
- internal unsafe void SetParent(Avalonia.Native.Interop.IAvnWindow arentRef)
- {
- System.IntPtr arentRef_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- arentRef_ = SharpGen.Runtime.CppObject.ToCallbackPtr(arentRef);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)arentRef_, (*(void ***)this._nativePointer)[31]);
- System.GC.KeepAlive(arentRef);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetCanResize([In] bool value)
- /// IAvnWindow::SetCanResize
- internal unsafe void SetCanResize(System.Boolean value)
- {
- System.Byte value_;
- SharpGen.Runtime.Result __result__;
- value_ = (System.Byte)(value ? 1 : 0);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, value_, (*(void ***)this._nativePointer)[32]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetDecorations([In] SystemDecorations value)
- /// IAvnWindow::SetDecorations
- internal unsafe void SetDecorations(Avalonia.Native.Interop.SystemDecorations value)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, unchecked ((System.Int32)value), (*(void ***)this._nativePointer)[33]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetTitle([In] void* utf8Title)
- /// IAvnWindow::SetTitle
- internal unsafe void SetTitle(System.IntPtr utf8Title)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)utf8Title, (*(void ***)this._nativePointer)[34]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetTitleBarColor([In] AvnColor color)
- /// IAvnWindow::SetTitleBarColor
- internal unsafe void SetTitleBarColor(Avalonia.Native.Interop.AvnColor color)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint0(this._nativePointer, color, (*(void ***)this._nativePointer)[35]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetWindowState([In] AvnWindowState state)
- /// IAvnWindow::SetWindowState
- public unsafe void SetWindowState(Avalonia.Native.Interop.AvnWindowState state)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, unchecked ((System.Int32)state), (*(void ***)this._nativePointer)[36]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindow::GetWindowState([In] AvnWindowState* ret)
- /// IAvnWindow::GetWindowState
- public unsafe Avalonia.Native.Interop.AvnWindowState GetWindowState()
- {
- Avalonia.Native.Interop.AvnWindowState ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[37]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindow::TakeFocusFromChildren()
- /// IAvnWindow::TakeFocusFromChildren
- public unsafe void TakeFocusFromChildren()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[38]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetExtendClientArea([In] bool enable)
- /// IAvnWindow::SetExtendClientArea
- internal unsafe void SetExtendClientArea(System.Boolean enable)
- {
- System.Byte enable_;
- SharpGen.Runtime.Result __result__;
- enable_ = (System.Byte)(enable ? 1 : 0);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, enable_, (*(void ***)this._nativePointer)[39]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetExtendClientAreaHints([In] AvnExtendClientAreaChromeHints hints)
- /// IAvnWindow::SetExtendClientAreaHints
- internal unsafe void SetExtendClientAreaHints(Avalonia.Native.Interop.AvnExtendClientAreaChromeHints hints)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, unchecked ((System.Int32)hints), (*(void ***)this._nativePointer)[40]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindow::GetExtendTitleBarHeight([In] double* ret)
- /// IAvnWindow::GetExtendTitleBarHeight
- public unsafe System.Double GetExtendTitleBarHeight()
- {
- System.Double ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[41]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindow::SetExtendTitleBarHeight([In] double value)
- /// IAvnWindow::SetExtendTitleBarHeight
- public unsafe void SetExtendTitleBarHeight(System.Double value)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, value, (*(void ***)this._nativePointer)[42]);
- __result__.CheckError();
- }
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f02")]
- public partial class IAvnWindowBase : SharpGen.Runtime.ComObject
- {
- public IAvnWindowBase(System.IntPtr nativePtr): base (nativePtr)
- {
- }
-
- public static explicit operator IAvnWindowBase(System.IntPtr nativePtr) => nativePtr == System.IntPtr.Zero ? null : new IAvnWindowBase(nativePtr);
- ///
- /// No documentation.
- ///
- /// SetTopMost
- /// SetTopMost
- public System.Boolean TopMost
- {
- set => SetTopMost(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetCursor
- /// SetCursor
- public Avalonia.Native.Interop.IAvnCursor Cursor
- {
- set => SetCursor(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetMainMenu
- /// SetMainMenu
- public Avalonia.Native.Interop.IAvnMenu MainMenu
- {
- set => SetMainMenu(value);
- }
-
- ///
- /// No documentation.
- ///
- /// SetBlurEnabled
- /// SetBlurEnabled
- public System.Boolean BlurEnabled
- {
- set => SetBlurEnabled(value);
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::Show()
- /// IAvnWindowBase::Show
- public unsafe void Show()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[3]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::Hide()
- /// IAvnWindowBase::Hide
- public unsafe void Hide()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[4]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::Close()
- /// IAvnWindowBase::Close
- public unsafe void Close()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[5]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::Activate()
- /// IAvnWindowBase::Activate
- public unsafe void Activate()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[6]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::GetClientSize([In] AvnSize* ret)
- /// IAvnWindowBase::GetClientSize
- public unsafe Avalonia.Native.Interop.AvnSize GetClientSize()
- {
- Avalonia.Native.Interop.AvnSize ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[7]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::GetScaling([In] double* ret)
- /// IAvnWindowBase::GetScaling
- public unsafe System.Double GetScaling()
- {
- System.Double ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[8]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::SetMinMaxSize([In] AvnSize minSize,[In] AvnSize maxSize)
- /// IAvnWindowBase::SetMinMaxSize
- public unsafe void SetMinMaxSize(Avalonia.Native.Interop.AvnSize minSize, Avalonia.Native.Interop.AvnSize maxSize)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint0(this._nativePointer, minSize, maxSize, (*(void ***)this._nativePointer)[9]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::Resize([In] double width,[In] double height)
- /// IAvnWindowBase::Resize
- public unsafe void Resize(System.Double width, System.Double height)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, width, height, (*(void ***)this._nativePointer)[10]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::Invalidate([In] AvnRect rect)
- /// IAvnWindowBase::Invalidate
- public unsafe void Invalidate(Avalonia.Native.Interop.AvnRect rect)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint0(this._nativePointer, rect, (*(void ***)this._nativePointer)[11]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::BeginMoveDrag()
- /// IAvnWindowBase::BeginMoveDrag
- public unsafe void BeginMoveDrag()
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (*(void ***)this._nativePointer)[12]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::BeginResizeDrag([In] AvnWindowEdge edge)
- /// IAvnWindowBase::BeginResizeDrag
- public unsafe void BeginResizeDrag(Avalonia.Native.Interop.AvnWindowEdge edge)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, unchecked ((System.Int32)edge), (*(void ***)this._nativePointer)[13]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::GetPosition([In] AvnPoint* ret)
- /// IAvnWindowBase::GetPosition
- public unsafe Avalonia.Native.Interop.AvnPoint GetPosition()
- {
- Avalonia.Native.Interop.AvnPoint ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret, (*(void ***)this._nativePointer)[14]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::SetPosition([In] AvnPoint point)
- /// IAvnWindowBase::SetPosition
- public unsafe void SetPosition(Avalonia.Native.Interop.AvnPoint point)
- {
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint0(this._nativePointer, point, (*(void ***)this._nativePointer)[15]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::PointToClient([In] AvnPoint point,[In] AvnPoint* ret)
- /// IAvnWindowBase::PointToClient
- public unsafe Avalonia.Native.Interop.AvnPoint PointToClient(Avalonia.Native.Interop.AvnPoint point)
- {
- Avalonia.Native.Interop.AvnPoint ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint0(this._nativePointer, point, &ret, (*(void ***)this._nativePointer)[16]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::PointToScreen([In] AvnPoint point,[In] AvnPoint* ret)
- /// IAvnWindowBase::PointToScreen
- public unsafe Avalonia.Native.Interop.AvnPoint PointToScreen(Avalonia.Native.Interop.AvnPoint point)
- {
- Avalonia.Native.Interop.AvnPoint ret;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint0(this._nativePointer, point, &ret, (*(void ***)this._nativePointer)[17]);
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::ThreadSafeSetSwRenderedFrame([In] AvnFramebuffer* fb,[In] IUnknown* dispose)
- /// IAvnWindowBase::ThreadSafeSetSwRenderedFrame
- public unsafe void ThreadSafeSetSwRenderedFrame(ref Avalonia.Native.Interop.AvnFramebuffer fb, SharpGen.Runtime.IUnknown dispose)
- {
- System.IntPtr dispose_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- dispose_ = SharpGen.Runtime.CppObject.ToCallbackPtr(dispose);
- fixed (void *fb_ = &fb)
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, fb_, (void *)dispose_, (*(void ***)this._nativePointer)[18]);
- System.GC.KeepAlive(dispose);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::SetTopMost([In] bool value)
- /// IAvnWindowBase::SetTopMost
- internal unsafe void SetTopMost(System.Boolean value)
- {
- System.Byte value_;
- SharpGen.Runtime.Result __result__;
- value_ = (System.Byte)(value ? 1 : 0);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, value_, (*(void ***)this._nativePointer)[19]);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::SetCursor([In] IAvnCursor* cursor)
- /// IAvnWindowBase::SetCursor
- internal unsafe void SetCursor(Avalonia.Native.Interop.IAvnCursor cursor)
- {
- System.IntPtr cursor_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- cursor_ = SharpGen.Runtime.CppObject.ToCallbackPtr(cursor);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)cursor_, (*(void ***)this._nativePointer)[20]);
- System.GC.KeepAlive(cursor);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::CreateGlRenderTarget([In] IAvnGlSurfaceRenderTarget** ret)
- /// IAvnWindowBase::CreateGlRenderTarget
- public unsafe Avalonia.Native.Interop.IAvnGlSurfaceRenderTarget CreateGlRenderTarget()
- {
- Avalonia.Native.Interop.IAvnGlSurfaceRenderTarget ret;
- System.IntPtr ret_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &ret_, (*(void ***)this._nativePointer)[21]);
- if (ret_ != System.IntPtr.Zero)
- ret = new Avalonia.Native.Interop.IAvnGlSurfaceRenderTarget(ret_);
- else
- ret = null;
- __result__.CheckError();
- return ret;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::SetMainMenu([In] IAvnMenu* menu)
- /// IAvnWindowBase::SetMainMenu
- internal unsafe void SetMainMenu(Avalonia.Native.Interop.IAvnMenu menu)
- {
- System.IntPtr menu_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- menu_ = SharpGen.Runtime.CppObject.ToCallbackPtr(menu);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, (void *)menu_, (*(void ***)this._nativePointer)[22]);
- System.GC.KeepAlive(menu);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::ObtainNSWindowHandle([Out] void** retOut)
- /// IAvnWindowBase::ObtainNSWindowHandle
- public unsafe System.IntPtr ObtainNSWindowHandle()
- {
- System.IntPtr retOut;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &retOut, (*(void ***)this._nativePointer)[23]);
- __result__.CheckError();
- return retOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::ObtainNSWindowHandleRetained([Out] void** retOut)
- /// IAvnWindowBase::ObtainNSWindowHandleRetained
- public unsafe System.IntPtr ObtainNSWindowHandleRetained()
- {
- System.IntPtr retOut;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &retOut, (*(void ***)this._nativePointer)[24]);
- __result__.CheckError();
- return retOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::ObtainNSViewHandle([Out] void** retOut)
- /// IAvnWindowBase::ObtainNSViewHandle
- public unsafe System.IntPtr ObtainNSViewHandle()
- {
- System.IntPtr retOut;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &retOut, (*(void ***)this._nativePointer)[25]);
- __result__.CheckError();
- return retOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::ObtainNSViewHandleRetained([Out] void** retOut)
- /// IAvnWindowBase::ObtainNSViewHandleRetained
- public unsafe System.IntPtr ObtainNSViewHandleRetained()
- {
- System.IntPtr retOut;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &retOut, (*(void ***)this._nativePointer)[26]);
- __result__.CheckError();
- return retOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// HRESULT IAvnWindowBase::CreateNativeControlHost([Out] IAvnNativeControlHost** retOut)
- /// IAvnWindowBase::CreateNativeControlHost
- public unsafe Avalonia.Native.Interop.IAvnNativeControlHost CreateNativeControlHost()
- {
- Avalonia.Native.Interop.IAvnNativeControlHost retOut;
- System.IntPtr retOut_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, &retOut_, (*(void ***)this._nativePointer)[27]);
- if (retOut_ != System.IntPtr.Zero)
- retOut = new Avalonia.Native.Interop.IAvnNativeControlHost(retOut_);
- else
- retOut = null;
- __result__.CheckError();
- return retOut;
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::BeginDragAndDropOperation([In] AvnDragDropEffects effects,[In] AvnPoint point,[In] IAvnClipboard* clipboard,[In] IAvnDndResultCallback* cb,[In] void* sourceHandle)
- /// IAvnWindowBase::BeginDragAndDropOperation
- public unsafe void BeginDragAndDropOperation(Avalonia.Native.Interop.AvnDragDropEffects effects, Avalonia.Native.Interop.AvnPoint point, Avalonia.Native.Interop.IAvnClipboard clipboard, Avalonia.Native.Interop.IAvnDndResultCallback cb, System.IntPtr sourceHandle)
- {
- System.IntPtr clipboard_ = System.IntPtr.Zero;
- System.IntPtr cb_ = System.IntPtr.Zero;
- SharpGen.Runtime.Result __result__;
- clipboard_ = SharpGen.Runtime.CppObject.ToCallbackPtr(clipboard);
- cb_ = SharpGen.Runtime.CppObject.ToCallbackPtr(cb);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint0(this._nativePointer, unchecked ((System.Int32)effects), point, (void *)clipboard_, (void *)cb_, (void *)sourceHandle, (*(void ***)this._nativePointer)[28]);
- System.GC.KeepAlive(clipboard);
- System.GC.KeepAlive(cb);
- __result__.CheckError();
- }
-
- ///
- /// No documentation.
- ///
- /// No documentation.
- /// No documentation.
- /// HRESULT IAvnWindowBase::SetBlurEnabled([In] bool enable)
- /// IAvnWindowBase::SetBlurEnabled
- internal unsafe void SetBlurEnabled(System.Boolean enable)
- {
- System.Byte enable_;
- SharpGen.Runtime.Result __result__;
- enable_ = (System.Byte)(enable ? 1 : 0);
- __result__ = Avalonia.Native.LocalInterop.CalliThisCallint(this._nativePointer, enable_, (*(void ***)this._nativePointer)[29]);
- __result__.CheckError();
- }
- }
-
- class IAvnWindowBaseEventsShadow : SharpGen.Runtime.ComObjectShadow
- {
- protected unsafe class IAvnWindowBaseEventsVtbl : SharpGen.Runtime.ComObjectShadow.ComObjectVtbl
- {
- public IAvnWindowBaseEventsVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 13)
- {
- AddMethod(new PaintDelegate(Paint));
- AddMethod(new ClosedDelegate(Closed));
- AddMethod(new ActivatedDelegate(Activated));
- AddMethod(new DeactivatedDelegate(Deactivated));
- AddMethod(new ResizedDelegate(Resized));
- AddMethod(new PositionChangedDelegate(PositionChanged));
- AddMethod(new RawMouseEventDelegate(RawMouseEvent));
- AddMethod(new RawKeyEventDelegate(RawKeyEvent));
- AddMethod(new RawTextInputEventDelegate(RawTextInputEvent));
- AddMethod(new ScalingChangedDelegate(ScalingChanged));
- AddMethod(new RunRenderPriorityJobsDelegate(RunRenderPriorityJobs));
- AddMethod(new LostFocusDelegate(LostFocus));
- AddMethod(new DragEventDelegate(DragEvent));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate int PaintDelegate(System.IntPtr thisObject);
- private static unsafe int Paint(System.IntPtr thisObject)
- {
- try
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.Paint();
- return SharpGen.Runtime.Result.Ok.Code;
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- return SharpGen.Runtime.Result.GetResultFromException(__exception__).Code;
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void ClosedDelegate(System.IntPtr thisObject);
- private static unsafe void Closed(System.IntPtr thisObject)
- {
- try
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.Closed();
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void ActivatedDelegate(System.IntPtr thisObject);
- private static unsafe void Activated(System.IntPtr thisObject)
- {
- try
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.Activated();
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void DeactivatedDelegate(System.IntPtr thisObject);
- private static unsafe void Deactivated(System.IntPtr thisObject)
- {
- try
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.Deactivated();
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void ResizedDelegate(System.IntPtr thisObject, void *arg0);
- private static unsafe void Resized(System.IntPtr thisObject, void *param0)
- {
- try
- {
- Avalonia.Native.Interop.AvnSize size = System.Runtime.CompilerServices.Unsafe.AsRef(param0);
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.Resized(size);
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void PositionChangedDelegate(System.IntPtr thisObject, Avalonia.Native.Interop.AvnPoint arg0);
- private static unsafe void PositionChanged(System.IntPtr thisObject, Avalonia.Native.Interop.AvnPoint param0)
- {
- try
- {
- Avalonia.Native.Interop.AvnPoint position = default (Avalonia.Native.Interop.AvnPoint);
- position = (Avalonia.Native.Interop.AvnPoint)param0;
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.PositionChanged(position);
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void RawMouseEventDelegate(System.IntPtr thisObject, int arg0, System.UInt32 arg1, int arg2, Avalonia.Native.Interop.AvnPoint arg3, Avalonia.Native.Interop.AvnVector arg4);
- private static unsafe void RawMouseEvent(System.IntPtr thisObject, int param0, System.UInt32 param1, int param2, Avalonia.Native.Interop.AvnPoint param3, Avalonia.Native.Interop.AvnVector param4)
- {
- try
- {
- Avalonia.Native.Interop.AvnRawMouseEventType type = default (Avalonia.Native.Interop.AvnRawMouseEventType);
- type = (Avalonia.Native.Interop.AvnRawMouseEventType)param0;
- System.UInt32 timeStamp = default (System.UInt32);
- timeStamp = (System.UInt32)param1;
- Avalonia.Native.Interop.AvnInputModifiers modifiers = default (Avalonia.Native.Interop.AvnInputModifiers);
- modifiers = (Avalonia.Native.Interop.AvnInputModifiers)param2;
- Avalonia.Native.Interop.AvnPoint point = default (Avalonia.Native.Interop.AvnPoint);
- point = (Avalonia.Native.Interop.AvnPoint)param3;
- Avalonia.Native.Interop.AvnVector delta = default (Avalonia.Native.Interop.AvnVector);
- delta = (Avalonia.Native.Interop.AvnVector)param4;
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.RawMouseEvent(type, timeStamp, modifiers, point, delta);
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate System.Byte RawKeyEventDelegate(System.IntPtr thisObject, int arg0, System.UInt32 arg1, int arg2, System.UInt32 arg3);
- private static unsafe System.Byte RawKeyEvent(System.IntPtr thisObject, int param0, System.UInt32 param1, int param2, System.UInt32 param3)
- {
- try
- {
- System.Boolean __result__ = default (System.Boolean);
- System.Byte __result__native;
- Avalonia.Native.Interop.AvnRawKeyEventType type = default (Avalonia.Native.Interop.AvnRawKeyEventType);
- type = (Avalonia.Native.Interop.AvnRawKeyEventType)param0;
- System.UInt32 timeStamp = default (System.UInt32);
- timeStamp = (System.UInt32)param1;
- Avalonia.Native.Interop.AvnInputModifiers modifiers = default (Avalonia.Native.Interop.AvnInputModifiers);
- modifiers = (Avalonia.Native.Interop.AvnInputModifiers)param2;
- System.UInt32 key = default (System.UInt32);
- key = (System.UInt32)param3;
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- __result__ = @this.RawKeyEvent(type, timeStamp, modifiers, key);
- __result__native = (System.Byte)(__result__ ? 1 : 0);
- return __result__native;
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- return default (System.Byte);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate System.Byte RawTextInputEventDelegate(System.IntPtr thisObject, System.UInt32 arg0, void *arg1);
- private static unsafe System.Byte RawTextInputEvent(System.IntPtr thisObject, System.UInt32 param0, void *param1)
- {
- try
- {
- System.Boolean __result__ = default (System.Boolean);
- System.Byte __result__native;
- System.UInt32 timeStamp = default (System.UInt32);
- timeStamp = (System.UInt32)param0;
- System.String text = default (System.String);
- System.IntPtr text_ = (System.IntPtr)param1;
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- text = System.Runtime.InteropServices.Marshal.PtrToStringAnsi(text_);
- __result__ = @this.RawTextInputEvent(timeStamp, text);
- __result__native = (System.Byte)(__result__ ? 1 : 0);
- return __result__native;
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- return default (System.Byte);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void ScalingChangedDelegate(System.IntPtr thisObject, double arg0);
- private static unsafe void ScalingChanged(System.IntPtr thisObject, double param0)
- {
- try
- {
- System.Double scaling = default (System.Double);
- scaling = (System.Double)param0;
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.ScalingChanged(scaling);
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void RunRenderPriorityJobsDelegate(System.IntPtr thisObject);
- private static unsafe void RunRenderPriorityJobs(System.IntPtr thisObject)
- {
- try
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.RunRenderPriorityJobs();
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void LostFocusDelegate(System.IntPtr thisObject);
- private static unsafe void LostFocus(System.IntPtr thisObject)
- {
- try
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- @this.LostFocus();
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate Avalonia.Native.Interop.AvnDragDropEffects DragEventDelegate(System.IntPtr thisObject, int arg0, Avalonia.Native.Interop.AvnPoint arg1, int arg2, int arg3, void *arg4, void *arg5);
- private static unsafe Avalonia.Native.Interop.AvnDragDropEffects DragEvent(System.IntPtr thisObject, int param0, Avalonia.Native.Interop.AvnPoint param1, int param2, int param3, void *param4, void *param5)
- {
- try
- {
- Avalonia.Native.Interop.AvnDragDropEffects __result__ = default (Avalonia.Native.Interop.AvnDragDropEffects);
- Avalonia.Native.Interop.AvnDragEventType type = default (Avalonia.Native.Interop.AvnDragEventType);
- type = (Avalonia.Native.Interop.AvnDragEventType)param0;
- Avalonia.Native.Interop.AvnPoint position = default (Avalonia.Native.Interop.AvnPoint);
- position = (Avalonia.Native.Interop.AvnPoint)param1;
- Avalonia.Native.Interop.AvnInputModifiers modifiers = default (Avalonia.Native.Interop.AvnInputModifiers);
- modifiers = (Avalonia.Native.Interop.AvnInputModifiers)param2;
- Avalonia.Native.Interop.AvnDragDropEffects effects = default (Avalonia.Native.Interop.AvnDragDropEffects);
- effects = (Avalonia.Native.Interop.AvnDragDropEffects)param3;
- Avalonia.Native.Interop.IAvnClipboard clipboard = default (Avalonia.Native.Interop.IAvnClipboard);
- System.IntPtr clipboard_ = (System.IntPtr)param4;
- System.IntPtr dataObjectHandle = default (System.IntPtr);
- dataObjectHandle = (System.IntPtr)param5;
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- if (clipboard_ != System.IntPtr.Zero)
- clipboard = new Avalonia.Native.Interop.IAvnClipboard(clipboard_);
- else
- clipboard = null;
- __result__ = @this.DragEvent(type, position, modifiers, effects, clipboard, dataObjectHandle);
- return __result__;
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowBaseEvents @this = (IAvnWindowBaseEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- return default (Avalonia.Native.Interop.AvnDragDropEffects);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnWindowBaseEventsShadow.IAvnWindowBaseEventsVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f05"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnWindowBaseEventsShadow))]
- public partial interface IAvnWindowBaseEvents : SharpGen.Runtime.IUnknown
- {
- void Paint();
- void Closed();
- void Activated();
- void Deactivated();
- void Resized(Avalonia.Native.Interop.AvnSize size);
- void PositionChanged(Avalonia.Native.Interop.AvnPoint position);
- void RawMouseEvent(Avalonia.Native.Interop.AvnRawMouseEventType type, System.UInt32 timeStamp, Avalonia.Native.Interop.AvnInputModifiers modifiers, Avalonia.Native.Interop.AvnPoint point, Avalonia.Native.Interop.AvnVector delta);
- System.Boolean RawKeyEvent(Avalonia.Native.Interop.AvnRawKeyEventType type, System.UInt32 timeStamp, Avalonia.Native.Interop.AvnInputModifiers modifiers, System.UInt32 key);
- System.Boolean RawTextInputEvent(System.UInt32 timeStamp, System.String text);
- void ScalingChanged(System.Double scaling);
- void RunRenderPriorityJobs();
- void LostFocus();
- Avalonia.Native.Interop.AvnDragDropEffects DragEvent(Avalonia.Native.Interop.AvnDragEventType type, Avalonia.Native.Interop.AvnPoint position, Avalonia.Native.Interop.AvnInputModifiers modifiers, Avalonia.Native.Interop.AvnDragDropEffects effects, Avalonia.Native.Interop.IAvnClipboard clipboard, System.IntPtr dataObjectHandle);
- }
-
- class IAvnWindowEventsShadow : Avalonia.Native.Interop.IAvnWindowBaseEventsShadow
- {
- protected unsafe class IAvnWindowEventsVtbl : Avalonia.Native.Interop.IAvnWindowBaseEventsShadow.IAvnWindowBaseEventsVtbl
- {
- public IAvnWindowEventsVtbl(int numberOfCallbackMethods): base (numberOfCallbackMethods + 3)
- {
- AddMethod(new ClosingDelegate(Closing));
- AddMethod(new WindowStateChangedDelegate(WindowStateChanged));
- AddMethod(new GotInputWhenDisabledDelegate(GotInputWhenDisabled));
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate System.Byte ClosingDelegate(System.IntPtr thisObject);
- private static unsafe System.Byte Closing(System.IntPtr thisObject)
- {
- try
- {
- System.Boolean __result__ = default (System.Boolean);
- System.Byte __result__native;
- IAvnWindowEvents @this = (IAvnWindowEvents)ToShadow(thisObject).Callback;
- __result__ = @this.Closing();
- __result__native = (System.Byte)(__result__ ? 1 : 0);
- return __result__native;
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowEvents @this = (IAvnWindowEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- return default (System.Byte);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void WindowStateChangedDelegate(System.IntPtr thisObject, int arg0);
- private static unsafe void WindowStateChanged(System.IntPtr thisObject, int param0)
- {
- try
- {
- Avalonia.Native.Interop.AvnWindowState state = default (Avalonia.Native.Interop.AvnWindowState);
- state = (Avalonia.Native.Interop.AvnWindowState)param0;
- IAvnWindowEvents @this = (IAvnWindowEvents)ToShadow(thisObject).Callback;
- @this.WindowStateChanged(state);
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowEvents @this = (IAvnWindowEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
-
- [System.Runtime.InteropServices.UnmanagedFunctionPointerAttribute(System.Runtime.InteropServices.CallingConvention.ThisCall)]
- private delegate void GotInputWhenDisabledDelegate(System.IntPtr thisObject);
- private static unsafe void GotInputWhenDisabled(System.IntPtr thisObject)
- {
- try
- {
- IAvnWindowEvents @this = (IAvnWindowEvents)ToShadow(thisObject).Callback;
- @this.GotInputWhenDisabled();
- }
- catch (System.Exception __exception__)
- {
- IAvnWindowEvents @this = (IAvnWindowEvents)ToShadow(thisObject).Callback;
- (@this as SharpGen.Runtime.IExceptionCallback)?.RaiseException(__exception__);
- }
- }
- }
-
- protected override SharpGen.Runtime.CppObjectVtbl Vtbl
- {
- get;
- }
-
- = new Avalonia.Native.Interop.IAvnWindowEventsShadow.IAvnWindowEventsVtbl(0);
- }
-
- [System.Runtime.InteropServices.GuidAttribute("2e2cda0a-9ae5-4f1b-8e20-081a04279f06"), SharpGen.Runtime.ShadowAttribute(typeof (Avalonia.Native.Interop.IAvnWindowEventsShadow))]
- public partial interface IAvnWindowEvents : Avalonia.Native.Interop.IAvnWindowBaseEvents
- {
- System.Boolean Closing();
- void WindowStateChanged(Avalonia.Native.Interop.AvnWindowState state);
- void GotInputWhenDisabled();
- }
-}
\ No newline at end of file
diff --git a/src/Avalonia.Native/Generated/LocalInterop.cs b/src/Avalonia.Native/Generated/LocalInterop.cs
deleted file mode 100644
index 41e69a6bdc..0000000000
--- a/src/Avalonia.Native/Generated/LocalInterop.cs
+++ /dev/null
@@ -1,202 +0,0 @@
-//
-
-namespace Avalonia.Native
-{
- internal static partial class LocalInterop
- {
- public static unsafe int CalliThisCallint(void *thisObject, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, void *param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid0(void *thisObject, Avalonia.Native.Interop.AvnPoint param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid0(void *thisObject, int param0, System.UInt32 param1, int param2, Avalonia.Native.Interop.AvnPoint param3, Avalonia.Native.Interop.AvnVector param4, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe System.Byte CalliThisCallSystemByte(void *thisObject, int param0, System.UInt32 param1, int param2, System.UInt32 param3, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe System.Byte CalliThisCallSystemByte(void *thisObject, System.UInt32 param0, void *param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, double param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe Avalonia.Native.Interop.AvnDragDropEffects CalliThisCallAvaloniaNativeInteropAvnDragDropEffects0(void *thisObject, int param0, Avalonia.Native.Interop.AvnPoint param1, int param2, int param3, void *param4, void *param5, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe System.Byte CalliThisCallSystemByte(void *thisObject, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, int param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, void *param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint0(void *thisObject, Avalonia.Native.Interop.AvnSize param0, Avalonia.Native.Interop.AvnSize param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, double param0, double param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint0(void *thisObject, Avalonia.Native.Interop.AvnRect param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, int param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint0(void *thisObject, Avalonia.Native.Interop.AvnPoint param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint0(void *thisObject, Avalonia.Native.Interop.AvnPoint param0, void *param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, void *param0, void *param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, System.Byte param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint0(void *thisObject, int param0, Avalonia.Native.Interop.AvnPoint param1, void *param2, void *param3, void *param4, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint0(void *thisObject, Avalonia.Native.Interop.AvnColor param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, double param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe System.IntPtr CalliThisCallSystemIntPtr(void *thisObject, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe System.IntPtr CalliThisCallSystemIntPtr(void *thisObject, int param0, int param1, void *param2, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, int param0, void *param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, void *param0, void *param1, void *param2, void *param3, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, void *param0, void *param1, System.Byte param2, void *param3, void *param4, void *param5, void *param6, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, void *param0, void *param1, void *param2, void *param3, void *param4, void *param5, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, int param0, void *param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, void *param0, void *param1, int param2, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe System.IntPtr CalliThisCallSystemIntPtr(void *thisObject, void *param0, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, void *param0, int param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe System.UInt32 CalliThisCallSystemUInt32(void *thisObject, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, System.UInt32 param0, void *param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, float param0, float param1, float param2, float param3, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, float param0, float param1, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe int CalliThisCallint(void *thisObject, void *param0, void *param1, void *param2, void *methodPtr)
- {
- throw null;
- }
-
- public static unsafe void CalliThisCallvoid(void *thisObject, int param0, System.Byte param1, void *methodPtr)
- {
- throw null;
- }
- }
-}
\ No newline at end of file
diff --git a/src/Avalonia.Native/Generated/Structures.cs b/src/Avalonia.Native/Generated/Structures.cs
deleted file mode 100644
index fc871a2516..0000000000
--- a/src/Avalonia.Native/Generated/Structures.cs
+++ /dev/null
@@ -1,246 +0,0 @@
-//
-
-namespace Avalonia.Native.Interop
-{
- ///
- /// No documentation.
- ///
- /// AvnColor
- /// AvnColor
- [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 0, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- public partial struct AvnColor
- {
- ///
- /// No documentation.
- ///
- /// Alpha
- /// Alpha
- public System.Byte Alpha;
- ///
- /// No documentation.
- ///
- /// Red
- /// Red
- public System.Byte Red;
- ///
- /// No documentation.
- ///
- /// Green
- /// Green
- public System.Byte Green;
- ///
- /// No documentation.
- ///
- /// Blue
- /// Blue
- public System.Byte Blue;
- }
-
- ///
- /// No documentation.
- ///
- /// AvnFramebuffer
- /// AvnFramebuffer
- [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 0, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- public partial struct AvnFramebuffer
- {
- ///
- /// No documentation.
- ///
- /// Data
- /// Data
- public System.IntPtr Data;
- ///
- /// No documentation.
- ///
- /// Width
- /// Width
- public System.Int32 Width;
- ///
- /// No documentation.
- ///
- /// Height
- /// Height
- public System.Int32 Height;
- ///
- /// No documentation.
- ///
- /// Stride
- /// Stride
- public System.Int32 Stride;
- ///
- /// No documentation.
- ///
- /// Dpi
- /// Dpi
- public Avalonia.Native.Interop.AvnVector Dpi;
- ///
- /// No documentation.
- ///
- /// PixelFormat
- /// PixelFormat
- public Avalonia.Native.Interop.AvnPixelFormat PixelFormat;
- }
-
- ///
- /// No documentation.
- ///
- /// AvnPixelSize
- /// AvnPixelSize
- [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 0, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- public partial struct AvnPixelSize
- {
- ///
- /// No documentation.
- ///
- /// Width
- /// Width
- public System.Int32 Width;
- ///
- /// No documentation.
- ///
- /// Height
- /// Height
- public System.Int32 Height;
- }
-
- ///
- /// No documentation.
- ///
- /// AvnPoint
- /// AvnPoint
- [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 0, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- public partial struct AvnPoint
- {
- ///
- /// No documentation.
- ///
- /// X
- /// X
- public System.Double X;
- ///
- /// No documentation.
- ///
- /// Y
- /// Y
- public System.Double Y;
- }
-
- ///
- /// No documentation.
- ///
- /// AvnRect
- /// AvnRect
- [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 0, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- public partial struct AvnRect
- {
- ///
- /// No documentation.
- ///
- /// X
- /// X
- public System.Double X;
- ///
- /// No documentation.
- ///
- /// Y
- /// Y
- public System.Double Y;
- ///
- /// No documentation.
- ///
- /// Width
- /// Width
- public System.Double Width;
- ///
- /// No documentation.
- ///
- /// Height
- /// Height
- public System.Double Height;
- }
-
- ///
- /// No documentation.
- ///
- /// AvnScreen
- /// AvnScreen
- [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 0, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- public partial struct AvnScreen
- {
- ///
- /// No documentation.
- ///
- /// Bounds
- /// Bounds
- public Avalonia.Native.Interop.AvnRect Bounds;
- ///
- /// No documentation.
- ///
- /// WorkingArea
- /// WorkingArea
- public Avalonia.Native.Interop.AvnRect WorkingArea;
- ///
- /// No documentation.
- ///
- /// PixelDensity
- /// PixelDensity
- public System.Single PixelDensity;
- ///
- /// No documentation.
- ///
- /// Primary
- /// Primary
- public bool Primary
- {
- get => 0 != _Primary;
- set => _Primary = (System.Byte)(value ? 1 : 0);
- }
-
- internal System.Byte _Primary;
- }
-
- ///
- /// No documentation.
- ///
- /// AvnSize
- /// AvnSize
- [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 0, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- public partial struct AvnSize
- {
- ///
- /// No documentation.
- ///
- /// Width
- /// Width
- public System.Double Width;
- ///
- /// No documentation.
- ///
- /// Height
- /// Height
- public System.Double Height;
- }
-
- ///
- /// No documentation.
- ///
- /// AvnVector
- /// AvnVector
- [System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential, Pack = 0, CharSet = System.Runtime.InteropServices.CharSet.Unicode)]
- public partial struct AvnVector
- {
- ///
- /// No documentation.
- ///
- /// X
- /// X
- public System.Double X;
- ///
- /// No documentation.
- ///
- /// Y
- /// Y
- public System.Double Y;
- }
-}
\ No newline at end of file
diff --git a/src/Avalonia.Native/Helpers.cs b/src/Avalonia.Native/Helpers.cs
index 25e8250232..564434a04c 100644
--- a/src/Avalonia.Native/Helpers.cs
+++ b/src/Avalonia.Native/Helpers.cs
@@ -2,7 +2,7 @@
namespace Avalonia.Native
{
- public static class Helpers
+ internal static class Helpers
{
public static Point ToAvaloniaPoint (this AvnPoint pt)
{
diff --git a/src/Avalonia.Native/IAvnMenu.cs b/src/Avalonia.Native/IAvnMenu.cs
index 8a49559a02..dd9464284f 100644
--- a/src/Avalonia.Native/IAvnMenu.cs
+++ b/src/Avalonia.Native/IAvnMenu.cs
@@ -22,15 +22,23 @@ namespace Avalonia.Native.Interop
}
}
- public partial class IAvnMenu
+ partial interface IAvnMenu
+ {
+ void RaiseNeedsUpdate();
+ void Deinitialise();
+ }
+}
+namespace Avalonia.Native.Interop.Impl
+{
+ partial class __MicroComIAvnMenuProxy
{
private MenuEvents _events;
private AvaloniaNativeMenuExporter _exporter;
- private List _menuItems = new List();
- private Dictionary _menuItemLookup = new Dictionary();
+ private List<__MicroComIAvnMenuItemProxy> _menuItems = new List<__MicroComIAvnMenuItemProxy>();
+ private Dictionary _menuItemLookup = new Dictionary();
private CompositeDisposable _propertyDisposables = new CompositeDisposable();
- internal void RaiseNeedsUpdate()
+ public void RaiseNeedsUpdate()
{
(ManagedMenu as INativeMenuExporterEventsImplBridge).RaiseNeedsUpdate();
@@ -39,11 +47,11 @@ namespace Avalonia.Native.Interop
internal NativeMenu ManagedMenu { get; private set; }
- public static IAvnMenu Create(IAvaloniaNativeFactory factory)
+ public static __MicroComIAvnMenuProxy Create(IAvaloniaNativeFactory factory)
{
var events = new MenuEvents();
- var menu = factory.CreateMenu(events);
+ var menu = (__MicroComIAvnMenuProxy)factory.CreateMenu(events);
events.Initialise(menu);
@@ -60,7 +68,7 @@ namespace Avalonia.Native.Interop
}
}
- private void RemoveAndDispose(IAvnMenuItem item)
+ private void RemoveAndDispose(__MicroComIAvnMenuItemProxy item)
{
_menuItemLookup.Remove(item.ManagedMenuItem);
_menuItems.Remove(item);
@@ -70,7 +78,7 @@ namespace Avalonia.Native.Interop
item.Dispose();
}
- private void MoveExistingTo(int index, IAvnMenuItem item)
+ private void MoveExistingTo(int index, __MicroComIAvnMenuItemProxy item)
{
_menuItems.Remove(item);
_menuItems.Insert(index, item);
@@ -79,7 +87,7 @@ namespace Avalonia.Native.Interop
InsertItem(index, item);
}
- private IAvnMenuItem CreateNewAt(IAvaloniaNativeFactory factory, int index, NativeMenuItemBase item)
+ private __MicroComIAvnMenuItemProxy CreateNewAt(IAvaloniaNativeFactory factory, int index, NativeMenuItemBase item)
{
var result = CreateNew(factory, item);
@@ -93,9 +101,11 @@ namespace Avalonia.Native.Interop
return result;
}
- private IAvnMenuItem CreateNew(IAvaloniaNativeFactory factory, NativeMenuItemBase item)
+ private __MicroComIAvnMenuItemProxy CreateNew(IAvaloniaNativeFactory factory, NativeMenuItemBase item)
{
- var nativeItem = item is NativeMenuItemSeperator ? factory.CreateMenuItemSeperator() : factory.CreateMenuItem();
+ var nativeItem = (__MicroComIAvnMenuItemProxy)(item is NativeMenuItemSeperator ?
+ factory.CreateMenuItemSeperator() :
+ factory.CreateMenuItem());
nativeItem.ManagedMenuItem = item;
return nativeItem;
@@ -108,16 +118,11 @@ namespace Avalonia.Native.Interop
((INotifyCollectionChanged)ManagedMenu.Items).CollectionChanged += OnMenuItemsChanged;
- if (!string.IsNullOrWhiteSpace(title))
- {
- using (var buffer = new Utf8Buffer(title))
- {
- Title = buffer.DangerousGetHandle();
- }
- }
+ if (!string.IsNullOrWhiteSpace(title))
+ SetTitle(title);
}
- internal void Deinitialise()
+ public void Deinitialise()
{
((INotifyCollectionChanged)ManagedMenu.Items).CollectionChanged -= OnMenuItemsChanged;
@@ -137,7 +142,7 @@ namespace Avalonia.Native.Interop
for (int i = 0; i < menu.Items.Count; i++)
{
- IAvnMenuItem nativeItem;
+ __MicroComIAvnMenuItemProxy nativeItem;
if (i >= _menuItems.Count)
{
diff --git a/src/Avalonia.Native/IAvnMenuItem.cs b/src/Avalonia.Native/IAvnMenuItem.cs
index c8819d1994..e2feffaa33 100644
--- a/src/Avalonia.Native/IAvnMenuItem.cs
+++ b/src/Avalonia.Native/IAvnMenuItem.cs
@@ -7,37 +7,35 @@ using Avalonia.Platform.Interop;
namespace Avalonia.Native.Interop
{
- public partial class IAvnMenuItem
+ partial interface IAvnMenuItem
{
- private IAvnMenu _subMenu;
+
+ }
+}
+namespace Avalonia.Native.Interop.Impl
+{
+ partial class __MicroComIAvnMenuItemProxy
+ {
+ private __MicroComIAvnMenuProxy _subMenu;
private CompositeDisposable _propertyDisposables = new CompositeDisposable();
private IDisposable _currentActionDisposable;
public NativeMenuItemBase ManagedMenuItem { get; set; }
- private void UpdateTitle(string title)
- {
- using (var buffer = new Utf8Buffer(string.IsNullOrWhiteSpace(title) ? "" : title))
- {
- Title = buffer.DangerousGetHandle();
- }
- }
+ private void UpdateTitle(string title) => SetTitle(title ?? "");
- private void UpdateIsChecked(bool isChecked)
- {
- IsChecked = isChecked;
- }
+ private void UpdateIsChecked(bool isChecked) => SetIsChecked(isChecked);
private void UpdateToggleType(NativeMenuItemToggleType toggleType)
{
- ToggleType = (AvnMenuItemToggleType)toggleType;
+ SetToggleType((AvnMenuItemToggleType)toggleType);
}
private unsafe void UpdateIcon (IBitmap icon)
{
if(icon is null)
{
- SetIcon(IntPtr.Zero, 0);
+ SetIcon(null, IntPtr.Zero);
}
else
{
@@ -49,7 +47,7 @@ namespace Avalonia.Native.Interop
fixed(void* ptr = imageData)
{
- SetIcon(new IntPtr(ptr), imageData.Length);
+ SetIcon(ptr, new IntPtr(imageData.Length));
}
}
}
@@ -57,12 +55,9 @@ namespace Avalonia.Native.Interop
private void UpdateGesture(Input.KeyGesture gesture)
{
- // todo ensure backend can cope with setting null gesture.
- using (var buffer = new Utf8Buffer(gesture == null ? "" : OsxUnicodeKeys.ConvertOSXSpecialKeyCodes(gesture.Key)))
- {
- var modifiers = gesture == null ? AvnInputModifiers.AvnInputModifiersNone : (AvnInputModifiers)gesture.KeyModifiers;
- SetGesture(buffer.DangerousGetHandle(), modifiers);
- }
+ var text = gesture == null ? "" : OsxUnicodeKeys.ConvertOSXSpecialKeyCodes(gesture.Key);
+ var modifiers = gesture == null ? AvnInputModifiers.AvnInputModifiersNone : (AvnInputModifiers)gesture.KeyModifiers;
+ SetGesture(text, modifiers);
}
private void UpdateAction(NativeMenuItem item)
@@ -153,7 +148,7 @@ namespace Avalonia.Native.Interop
{
if (_subMenu == null)
{
- _subMenu = IAvnMenu.Create(factory);
+ _subMenu = __MicroComIAvnMenuProxy.Create(factory);
_subMenu.Initialise(exporter, item.Menu, item.Header);
diff --git a/src/Avalonia.Native/NativeControlHostImpl.cs b/src/Avalonia.Native/NativeControlHostImpl.cs
index a46528dc48..2c9c1728d3 100644
--- a/src/Avalonia.Native/NativeControlHostImpl.cs
+++ b/src/Avalonia.Native/NativeControlHostImpl.cs
@@ -1,5 +1,6 @@
using System;
using Avalonia.Controls.Platform;
+using Avalonia.MicroCom;
using Avalonia.Native.Interop;
using Avalonia.Platform;
using Avalonia.VisualTree;
@@ -28,8 +29,7 @@ namespace Avalonia.Native
public DestroyableNSView(IAvnNativeControlHost impl)
{
- _impl = new IAvnNativeControlHost(impl.NativePointer);
- _impl.AddRef();
+ _impl = MicroComRuntime.CloneReference(impl);
_nsView = _impl.CreateDefaultChild(IntPtr.Zero);
}
diff --git a/src/Avalonia.Native/PlatformThreadingInterface.cs b/src/Avalonia.Native/PlatformThreadingInterface.cs
index 5a81f6a3bf..df69f2eafb 100644
--- a/src/Avalonia.Native/PlatformThreadingInterface.cs
+++ b/src/Avalonia.Native/PlatformThreadingInterface.cs
@@ -4,11 +4,10 @@ using System.Threading;
using Avalonia.Native.Interop;
using Avalonia.Platform;
using Avalonia.Threading;
-using SharpGen.Runtime;
namespace Avalonia.Native
{
- public class PlatformThreadingInterface : IPlatformThreadingInterface
+ internal class PlatformThreadingInterface : IPlatformThreadingInterface
{
class TimerCallback : CallbackBase, IAvnActionCallback
{
@@ -48,7 +47,7 @@ namespace Avalonia.Native
{
_native = native;
using (var cb = new SignaledCallback(this))
- _native.SignaledCallback = cb;
+ _native.SetSignaledCallback(cb);
}
public bool CurrentThreadIsLoopThread => _native.CurrentThreadIsLoopThread;
diff --git a/src/Avalonia.Native/ScreenImpl.cs b/src/Avalonia.Native/ScreenImpl.cs
index f28be52dd5..ae6da01388 100644
--- a/src/Avalonia.Native/ScreenImpl.cs
+++ b/src/Avalonia.Native/ScreenImpl.cs
@@ -14,7 +14,7 @@ namespace Avalonia.Native
_native = native;
}
- public int ScreenCount => _native.GetScreenCount();
+ public int ScreenCount => _native.ScreenCount;
public IReadOnlyList AllScreens
{
diff --git a/src/Avalonia.Native/SystemDialogs.cs b/src/Avalonia.Native/SystemDialogs.cs
index 98e3e383dc..0239fc680d 100644
--- a/src/Avalonia.Native/SystemDialogs.cs
+++ b/src/Avalonia.Native/SystemDialogs.cs
@@ -8,7 +8,7 @@ using Avalonia.Native.Interop;
namespace Avalonia.Native
{
- public class SystemDialogs : ISystemDialogImpl
+ internal class SystemDialogs : ISystemDialogImpl
{
IAvnSystemDialogs _native;
@@ -62,7 +62,7 @@ namespace Avalonia.Native
}
}
- public class SystemDialogEvents : CallbackBase, IAvnSystemDialogEvents
+ internal unsafe class SystemDialogEvents : CallbackBase, IAvnSystemDialogEvents
{
private TaskCompletionSource _tcs;
@@ -73,13 +73,13 @@ namespace Avalonia.Native
public Task Task => _tcs.Task;
- public void OnCompleted(int numResults, IntPtr trFirstResultRef)
+ public void OnCompleted(int numResults, void* trFirstResultRef)
{
string[] results = new string[numResults];
unsafe
{
- var ptr = (IntPtr*)trFirstResultRef.ToPointer();
+ var ptr = (IntPtr*)trFirstResultRef;
for (int i = 0; i < numResults; i++)
{
diff --git a/src/Avalonia.Native/WindowImpl.cs b/src/Avalonia.Native/WindowImpl.cs
index 11a0ebce61..b42831854d 100644
--- a/src/Avalonia.Native/WindowImpl.cs
+++ b/src/Avalonia.Native/WindowImpl.cs
@@ -10,7 +10,7 @@ using Avalonia.Platform.Interop;
namespace Avalonia.Native
{
- public class WindowImpl : WindowBaseImpl, IWindowImpl, ITopLevelImplWithNativeMenuExporter
+ internal class WindowImpl : WindowBaseImpl, IWindowImpl, ITopLevelImplWithNativeMenuExporter
{
private readonly IAvaloniaNativeFactory _factory;
private readonly AvaloniaNativePlatformOptions _opts;
@@ -69,12 +69,12 @@ namespace Avalonia.Native
public void CanResize(bool value)
{
- _native.CanResize = value;
+ _native.SetCanResize(value);
}
public void SetSystemDecorations(Controls.SystemDecorations enabled)
{
- _native.Decorations = (Interop.SystemDecorations)enabled;
+ _native.SetDecorations((Interop.SystemDecorations)enabled);
}
public void SetTitleBarColor(Avalonia.Media.Color color)
@@ -82,24 +82,12 @@ namespace Avalonia.Native
_native.SetTitleBarColor(new AvnColor { Alpha = color.A, Red = color.R, Green = color.G, Blue = color.B });
}
- public void SetTitle(string title)
- {
- using (var buffer = new Utf8Buffer(title))
- {
- _native.SetTitle(buffer.DangerousGetHandle());
- }
- }
+ public void SetTitle(string title) => _native.SetTitle(title);
public WindowState WindowState
{
- get
- {
- return (WindowState)_native.GetWindowState();
- }
- set
- {
- _native.SetWindowState((AvnWindowState)value);
- }
+ get => (WindowState)_native.WindowState;
+ set => _native.SetWindowState((AvnWindowState)value);
}
public Action WindowStateChanged { get; set; }
@@ -146,7 +134,7 @@ namespace Avalonia.Native
}
else
{
- ExtendedMargins = _isExtended ? new Thickness(0, _extendTitleBarHeight == -1 ? _native.GetExtendTitleBarHeight() : _extendTitleBarHeight, 0, 0) : new Thickness();
+ ExtendedMargins = _isExtended ? new Thickness(0, _extendTitleBarHeight == -1 ? _native.ExtendTitleBarHeight : _extendTitleBarHeight, 0, 0) : new Thickness();
}
ExtendClientAreaToDecorationsChanged?.Invoke(_isExtended);
@@ -174,7 +162,7 @@ namespace Avalonia.Native
_extendTitleBarHeight = titleBarHeight;
_native.SetExtendTitleBarHeight(titleBarHeight);
- ExtendedMargins = _isExtended ? new Thickness(0, titleBarHeight == -1 ? _native.GetExtendTitleBarHeight() : titleBarHeight, 0, 0) : new Thickness();
+ ExtendedMargins = _isExtended ? new Thickness(0, titleBarHeight == -1 ? _native.ExtendTitleBarHeight : titleBarHeight, 0, 0) : new Thickness();
ExtendClientAreaToDecorationsChanged?.Invoke(_isExtended);
}
diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs
index 0ecf8f856a..2cf1fe2963 100644
--- a/src/Avalonia.Native/WindowImplBase.cs
+++ b/src/Avalonia.Native/WindowImplBase.cs
@@ -15,7 +15,7 @@ using Avalonia.Threading;
namespace Avalonia.Native
{
- public class MacOSTopLevelWindowHandle : IPlatformHandle, IMacOSTopLevelPlatformHandle
+ internal class MacOSTopLevelWindowHandle : IPlatformHandle, IMacOSTopLevelPlatformHandle
{
IAvnWindowBase _native;
@@ -43,7 +43,7 @@ namespace Avalonia.Native
}
}
- public abstract class WindowBaseImpl : IWindowBaseImpl,
+ internal abstract class WindowBaseImpl : IWindowBaseImpl,
IFramebufferPlatformSurface, ITopLevelImplWithNativeControlHost
{
protected IInputRoot _inputRoot;
@@ -96,7 +96,7 @@ namespace Avalonia.Native
{
if (_native != null)
{
- var s = _native.GetClientSize();
+ var s = _native.ClientSize;
return new Size(s.Width, s.Height);
}
@@ -137,7 +137,7 @@ namespace Avalonia.Native
public IMouseDevice MouseDevice => _mouse;
public abstract IPopupImpl CreatePopup();
- protected class WindowBaseEvents : CallbackBase, IAvnWindowBaseEvents
+ protected unsafe class WindowBaseEvents : CallbackBase, IAvnWindowBaseEvents
{
private readonly WindowBaseImpl _parent;
@@ -172,11 +172,11 @@ namespace Avalonia.Native
_parent.Paint?.Invoke(new Rect(0, 0, s.Width, s.Height));
}
- void IAvnWindowBaseEvents.Resized(AvnSize size)
+ void IAvnWindowBaseEvents.Resized(AvnSize* size)
{
if (_parent._native != null)
{
- var s = new Size(size.Width, size.Height);
+ var s = new Size(size->Width, size->Height);
_parent._savedLogicalSize = s;
_parent.Resized?.Invoke(s);
}
@@ -358,7 +358,7 @@ namespace Avalonia.Native
public PixelPoint Position
{
- get => _native.GetPosition().ToAvaloniaPixelPoint();
+ get => _native.Position.ToAvaloniaPixelPoint();
set => _native.SetPosition(value.ToAvnPoint());
}
@@ -390,7 +390,7 @@ namespace Avalonia.Native
_native.SetTopMost(value);
}
- public double RenderScaling => _native?.GetScaling() ?? 1;
+ public double RenderScaling => _native?.Scaling ?? 1;
public double DesktopScaling => 1;
@@ -406,7 +406,7 @@ namespace Avalonia.Native
var newCursor = cursor as AvaloniaNativeCursor;
newCursor = newCursor ?? (_cursorFactory.GetCursor(StandardCursorType.Arrow) as AvaloniaNativeCursor);
- _native.Cursor = newCursor.Cursor;
+ _native.SetCursor(newCursor.Cursor);
}
public Action PositionChanged { get; set; }
diff --git a/src/Avalonia.Native/avn.idl b/src/Avalonia.Native/avn.idl
new file mode 100644
index 0000000000..1d36cce20d
--- /dev/null
+++ b/src/Avalonia.Native/avn.idl
@@ -0,0 +1,522 @@
+@clr-namespace Avalonia.Native.Interop
+@clr-access internal
+@cpp-preamble @@
+#include "com.h"
+#include "key.h"
+#include "stddef.h"
+@@
+
+enum SystemDecorations {
+ SystemDecorationsNone = 0,
+ SystemDecorationsBorderOnly = 1,
+ SystemDecorationsFull = 2,
+}
+
+struct AvnSize
+{
+ double Width, Height;
+}
+
+struct AvnPixelSize
+{
+ int Width, Height;
+}
+
+struct AvnRect
+{
+ double X, Y, Width, Height;
+}
+
+struct AvnVector
+{
+ double X, Y;
+}
+
+struct AvnPoint
+{
+ double X, Y;
+}
+
+struct AvnScreen
+{
+ AvnRect Bounds;
+ AvnRect WorkingArea;
+ float PixelDensity;
+ bool Primary;
+}
+
+enum AvnPixelFormat
+{
+ kAvnRgb565,
+ kAvnRgba8888,
+ kAvnBgra8888
+}
+
+struct AvnFramebuffer
+{
+ void* Data;
+ int Width;
+ int Height;
+ int Stride;
+ AvnVector Dpi;
+ AvnPixelFormat PixelFormat;
+}
+
+struct AvnColor
+{
+ byte Alpha;
+ byte Red;
+ byte Green;
+ byte Blue;
+}
+
+enum AvnRawMouseEventType
+{
+ LeaveWindow,
+ LeftButtonDown,
+ LeftButtonUp,
+ RightButtonDown,
+ RightButtonUp,
+ MiddleButtonDown,
+ MiddleButtonUp,
+ XButton1Down,
+ XButton1Up,
+ XButton2Down,
+ XButton2Up,
+ Move,
+ Wheel,
+ NonClientLeftButtonDown,
+ TouchBegin,
+ TouchUpdate,
+ TouchEnd,
+ TouchCancel
+}
+
+enum AvnRawKeyEventType
+{
+ KeyDown,
+ KeyUp
+}
+
+enum AvnInputModifiers
+{
+ AvnInputModifiersNone = 0,
+ Alt = 1,
+ Control = 2,
+ Shift = 4,
+ Windows = 8,
+ LeftMouseButton = 16,
+ RightMouseButton = 32,
+ MiddleMouseButton = 64,
+ XButton1MouseButton = 128,
+ XButton2MouseButton = 256
+}
+
+[class-enum]
+enum AvnDragDropEffects
+{
+ None = 0,
+ Copy = 1,
+ Move = 2,
+ Link = 4,
+}
+
+[class-enum]
+enum AvnDragEventType
+{
+ Enter,
+ Over,
+ Leave,
+ Drop
+}
+
+enum AvnWindowState
+{
+ Normal,
+ Minimized,
+ Maximized,
+ FullScreen,
+}
+
+enum AvnStandardCursorType
+{
+ CursorArrow,
+ CursorIbeam,
+ CursorWait,
+ CursorCross,
+ CursorUpArrow,
+ CursorSizeWestEast,
+ CursorSizeNorthSouth,
+ CursorSizeAll,
+ CursorNo,
+ CursorHand,
+ CursorAppStarting,
+ CursorHelp,
+ CursorTopSide,
+ CursorBottomSize,
+ CursorLeftSide,
+ CursorRightSide,
+ CursorTopLeftCorner,
+ CursorTopRightCorner,
+ CursorBottomLeftCorner,
+ CursorBottomRightCorner,
+ CursorDragMove,
+ CursorDragCopy,
+ CursorDragLink,
+ CursorNone
+}
+
+enum AvnWindowEdge
+{
+ WindowEdgeNorthWest,
+ WindowEdgeNorth,
+ WindowEdgeNorthEast,
+ WindowEdgeWest,
+ WindowEdgeEast,
+ WindowEdgeSouthWest,
+ WindowEdgeSouth,
+ WindowEdgeSouthEast
+}
+
+enum AvnMenuItemToggleType
+{
+ None,
+ CheckMark,
+ Radio
+}
+
+enum AvnExtendClientAreaChromeHints
+{
+ AvnNoChrome = 0,
+ AvnSystemChrome = 0x01,
+ AvnPreferSystemChrome = 0x02,
+ AvnOSXThickTitleBar = 0x08,
+ AvnDefaultChrome = AvnSystemChrome,
+}
+
+[uuid(809c652e-7396-11d2-9771-00a0c9b4d50c)]
+interface IAvaloniaNativeFactory : IUnknown
+{
+ HRESULT Initialize(IAvnGCHandleDeallocatorCallback* deallocator);
+ IAvnMacOptions* GetMacOptions();
+ HRESULT CreateWindow(IAvnWindowEvents* cb, IAvnGlContext* gl, IAvnWindow** ppv);
+ HRESULT CreatePopup(IAvnWindowEvents* cb, IAvnGlContext* gl, IAvnPopup** ppv);
+ HRESULT CreatePlatformThreadingInterface(IAvnPlatformThreadingInterface** ppv);
+ HRESULT CreateSystemDialogs(IAvnSystemDialogs** ppv);
+ HRESULT CreateScreens(IAvnScreens** ppv);
+ HRESULT CreateClipboard(IAvnClipboard** ppv);
+ HRESULT CreateDndClipboard(IAvnClipboard** ppv);
+ HRESULT CreateCursorFactory(IAvnCursorFactory** ppv);
+ HRESULT ObtainGlDisplay(IAvnGlDisplay** ppv);
+ HRESULT SetAppMenu(IAvnMenu* menu);
+ HRESULT CreateMenu(IAvnMenuEvents* cb, IAvnMenu** ppv);
+ HRESULT CreateMenuItem(IAvnMenuItem** ppv);
+ HRESULT CreateMenuItemSeperator(IAvnMenuItem** ppv);
+}
+
+[uuid(233e094f-9b9f-44a3-9a6e-6948bbdd9fb1)]
+interface IAvnString : IUnknown
+{
+ HRESULT Pointer(void**retOut);
+ HRESULT Length(int*ret);
+}
+
+[uuid(e5aca675-02b7-4129-aa79-d6e417210bda)]
+interface IAvnWindowBase : IUnknown
+{
+ HRESULT Show();
+ HRESULT Hide();
+ HRESULT Close();
+ HRESULT Activate();
+ HRESULT GetClientSize(AvnSize*ret);
+ HRESULT GetScaling(double*ret);
+ HRESULT SetMinMaxSize(AvnSize minSize, AvnSize maxSize);
+ HRESULT Resize(double width, double height);
+ HRESULT Invalidate(AvnRect rect);
+ HRESULT BeginMoveDrag();
+ HRESULT BeginResizeDrag(AvnWindowEdge edge);
+ HRESULT GetPosition(AvnPoint*ret);
+ HRESULT SetPosition(AvnPoint point);
+ HRESULT PointToClient(AvnPoint point, AvnPoint*ret);
+ HRESULT PointToScreen(AvnPoint point, AvnPoint*ret);
+ HRESULT ThreadSafeSetSwRenderedFrame(AvnFramebuffer* fb, IUnknown* dispose);
+ HRESULT SetTopMost(bool value);
+ HRESULT SetCursor(IAvnCursor* cursor);
+ HRESULT CreateGlRenderTarget(IAvnGlSurfaceRenderTarget** ret);
+ HRESULT SetMainMenu(IAvnMenu* menu);
+ HRESULT ObtainNSWindowHandle([intptr]void** retOut);
+ HRESULT ObtainNSWindowHandleRetained([intptr]void** retOut);
+ HRESULT ObtainNSViewHandle([intptr]void** retOut);
+ HRESULT ObtainNSViewHandleRetained([intptr]void** retOut);
+ HRESULT CreateNativeControlHost(IAvnNativeControlHost** retOut);
+ HRESULT BeginDragAndDropOperation(AvnDragDropEffects effects, AvnPoint point,
+ IAvnClipboard* clipboard, IAvnDndResultCallback* cb, [intptr]void* sourceHandle);
+ HRESULT SetBlurEnabled(bool enable);
+}
+
+[uuid(83e588f3-6981-4e48-9ea0-e1e569f79a91), cpp-virtual-inherits]
+interface IAvnPopup : IAvnWindowBase
+{
+
+}
+
+[uuid(cab661de-49d6-4ead-b59c-eac9b2b6c28d), cpp-virtual-inherits]
+interface IAvnWindow : IAvnWindowBase
+{
+ HRESULT SetEnabled(bool enable);
+ HRESULT SetParent(IAvnWindow* parent);
+ HRESULT SetCanResize(bool value);
+ HRESULT SetDecorations(SystemDecorations value);
+ HRESULT SetTitle(char* utf8Title);
+ HRESULT SetTitleBarColor(AvnColor color);
+ HRESULT SetWindowState(AvnWindowState state);
+ HRESULT GetWindowState(AvnWindowState*ret);
+ HRESULT TakeFocusFromChildren();
+ HRESULT SetExtendClientArea(bool enable);
+ HRESULT SetExtendClientAreaHints(AvnExtendClientAreaChromeHints hints);
+ HRESULT GetExtendTitleBarHeight(double*ret);
+ HRESULT SetExtendTitleBarHeight(double value);
+}
+
+[uuid(939b6599-40a8-4710-a4c8-5d72d8f174fb)]
+interface IAvnWindowBaseEvents : IUnknown
+{
+ HRESULT Paint();
+ void Closed();
+ void Activated();
+ void Deactivated();
+ void Resized([const] AvnSize& size);
+ void PositionChanged(AvnPoint position);
+ void RawMouseEvent(AvnRawMouseEventType type,
+ uint timeStamp,
+ AvnInputModifiers modifiers,
+ AvnPoint point,
+ AvnVector delta);
+ bool RawKeyEvent(AvnRawKeyEventType type, uint timeStamp, AvnInputModifiers modifiers, uint key);
+ bool RawTextInputEvent(uint timeStamp, [const] char* text);
+ void ScalingChanged(double scaling);
+ void RunRenderPriorityJobs();
+ void LostFocus();
+ AvnDragDropEffects DragEvent(AvnDragEventType type, AvnPoint position,
+ AvnInputModifiers modifiers, AvnDragDropEffects effects,
+ IAvnClipboard* clipboard, [intptr]void* dataObjectHandle);
+}
+
+[uuid(1ae178ee-1fcc-447f-b6dd-b7bb727f934c)]
+interface IAvnWindowEvents : IAvnWindowBaseEvents
+{
+ /**
+ * Closing Event
+ * Called when the user presses the OS window close button.
+ * return true to allow the close, return false to prevent close.
+ */
+ bool Closing();
+
+ void WindowStateChanged(AvnWindowState state);
+
+ void GotInputWhenDisabled();
+}
+
+[uuid(e34ae0f8-18b4-48a3-b09d-2e6b19a3cf5e)]
+interface IAvnMacOptions : IUnknown
+{
+ HRESULT SetShowInDock(int show);
+ HRESULT SetApplicationTitle(char* utf8string);
+}
+
+[uuid(04c1b049-1f43-418a-9159-cae627ec1367)]
+interface IAvnActionCallback : IUnknown
+{
+ void Run();
+}
+
+[uuid(6df4d2db-0b80-4f59-ad88-0baa5e21eb14)]
+interface IAvnSignaledCallback : IUnknown
+{
+ void Signaled(int priority, bool priorityContainsMeaningfulValue);
+}
+
+[uuid(97330f88-c22b-4a8e-a130-201520091b01)]
+interface IAvnLoopCancellation : IUnknown
+{
+ void Cancel();
+}
+
+[uuid(fbc06f3d-7860-42df-83fd-53c4b02dd9c3)]
+interface IAvnPlatformThreadingInterface : IUnknown
+{
+ bool GetCurrentThreadIsLoopThread();
+ void SetSignaledCallback(IAvnSignaledCallback* cb);
+ IAvnLoopCancellation* CreateLoopCancellation();
+ HRESULT RunLoop(IAvnLoopCancellation* cancel);
+ // Can't pass int* to sharpgentools for some reason
+ void Signal(int priority);
+ IUnknown* StartTimer(int priority, int ms, IAvnActionCallback* callback);
+}
+
+[uuid(6c621a6e-e4c1-4ae3-9749-83eeeffa09b6)]
+interface IAvnSystemDialogEvents : IUnknown
+{
+ void OnCompleted(int numResults, void* ptrFirstResult);
+}
+
+[uuid(4d7a47db-a944-4061-abe7-62cb6aa0ffd5)]
+interface IAvnSystemDialogs : IUnknown
+{
+ void SelectFolderDialog(IAvnWindow* parentWindowHandle,
+ IAvnSystemDialogEvents* events,
+ [const] char* title,
+ [const] char* initialPath);
+
+ void OpenFileDialog(IAvnWindow* parentWindowHandle,
+ IAvnSystemDialogEvents* events,
+ bool allowMultiple,
+ [const] char* title,
+ [const] char* initialDirectory,
+ [const] char* initialFile,
+ [const] char* filters);
+
+ void SaveFileDialog(IAvnWindow* parentWindowHandle,
+ IAvnSystemDialogEvents* events,
+ [const] char* title,
+ [const] char* initialDirectory,
+ [const] char* initialFile,
+ [const] char* filters);
+}
+
+[uuid(9a52bc7a-d8c7-4230-8d34-704a0b70a933)]
+interface IAvnScreens : IUnknown
+{
+ HRESULT GetScreenCount(int* ret);
+ HRESULT GetScreen(int index, AvnScreen* ret);
+}
+
+[uuid(792b1bd4-76cc-46ea-bfd0-9d642154b1b3)]
+interface IAvnClipboard : IUnknown
+{
+ HRESULT GetText(char* type, IAvnString**ppv);
+ HRESULT SetText(char* type, char* utf8Text);
+ HRESULT ObtainFormats(IAvnStringArray**ppv);
+ HRESULT GetStrings(char* type, IAvnStringArray**ppv);
+ HRESULT SetBytes(char* type, void* utf8Text, int len);
+ HRESULT GetBytes(char* type, IAvnString**ppv);
+
+ HRESULT Clear();
+}
+
+[uuid(3f998545-f027-4d4d-bd2a-1a80926d984e)]
+interface IAvnCursor : IUnknown
+{
+}
+
+[uuid(51ecfb12-c427-4757-a2c9-1596bfce53ef)]
+interface IAvnCursorFactory : IUnknown
+{
+ HRESULT GetCursor(AvnStandardCursorType cursorType, IAvnCursor** retOut);
+}
+
+[uuid(60452465-8616-40af-bc00-042e69828ce7)]
+interface IAvnGlDisplay : IUnknown
+{
+ HRESULT CreateContext(IAvnGlContext* share, IAvnGlContext**ppv);
+ void LegacyClearCurrentContext();
+ HRESULT WrapContext([intptr]void* native, IAvnGlContext**ppv);
+ [intptr]void* GetProcAddress(char* proc);
+}
+
+[uuid(78c5711e-2a98-40d2-bac4-0cc9a49dc4f3)]
+interface IAvnGlContext : IUnknown
+{
+ HRESULT MakeCurrent(IUnknown** ppv);
+ HRESULT LegacyMakeCurrent();
+ int GetSampleCount();
+ int GetStencilSize();
+ [intptr]void* GetNativeHandle();
+}
+
+[uuid(931062d2-5bc8-4062-8588-83dd8deb99c2)]
+interface IAvnGlSurfaceRenderTarget : IUnknown
+{
+ HRESULT BeginDrawing(IAvnGlSurfaceRenderingSession** ret);
+}
+
+[uuid(e625b406-f04c-484e-946a-4abd2c6015ad)]
+interface IAvnGlSurfaceRenderingSession : IUnknown
+{
+ HRESULT GetPixelSize(AvnPixelSize* ret);
+ HRESULT GetScaling(double* ret);
+}
+
+[uuid(a7724dc1-cf6b-4fa8-9d23-228bf2593edc)]
+interface IAvnMenu : IUnknown
+{
+ HRESULT InsertItem(int index, IAvnMenuItem* item);
+ HRESULT RemoveItem(IAvnMenuItem* item);
+ HRESULT SetTitle(char* utf8String);
+ HRESULT Clear();
+}
+
+[uuid(59e0586d-bd1c-4b85-9882-80d448b0fed9)]
+interface IAvnPredicateCallback : IUnknown
+{
+ bool Evaluate();
+}
+
+[uuid(f890219a-1720-4cd5-9a26-cd95fccbf53c)]
+interface IAvnMenuItem : IUnknown
+{
+ HRESULT SetSubMenu(IAvnMenu* menu);
+ HRESULT SetTitle(char* utf8String);
+ HRESULT SetGesture(char* utf8String, AvnInputModifiers modifiers);
+ HRESULT SetAction(IAvnPredicateCallback* predicate, IAvnActionCallback* callback);
+ HRESULT SetIsChecked(bool isChecked);
+ HRESULT SetToggleType(AvnMenuItemToggleType toggleType);
+ HRESULT SetIcon(void* data, size_t length);
+}
+
+[uuid(0af7df53-7632-42f4-a650-0992c361b477)]
+interface IAvnMenuEvents : IUnknown
+{
+ /**
+ * NeedsUpdate
+ */
+ void NeedsUpdate();
+}
+
+[uuid(5142bb41-66ab-49e7-bb37-cd079c000f27)]
+interface IAvnStringArray : IUnknown
+{
+ uint GetCount();
+ HRESULT Get(uint index, IAvnString**ppv);
+}
+
+[uuid(a13d2382-3b3a-4d1c-9b27-8f34653d3f01)]
+interface IAvnDndResultCallback : IUnknown
+{
+ void OnDragAndDropComplete(AvnDragDropEffects effecct);
+}
+
+[uuid(f07c608e-52e9-422d-836e-c70f6e9b80f5)]
+interface IAvnGCHandleDeallocatorCallback : IUnknown
+{
+ void FreeGCHandle([intptr]void* handle);
+}
+
+[uuid(91c7f677-f26b-4ff3-93cc-cf15aa966ffa)]
+interface IAvnNativeControlHost : IUnknown
+{
+ HRESULT CreateDefaultChild([intptr]void* parent, [intptr]void** retOut);
+ IAvnNativeControlHostTopLevelAttachment* CreateAttachment();
+ void DestroyDefaultChild([intptr]void* child);
+}
+
+[uuid(14a9e164-1aae-4271-bb78-7b5230999b52)]
+interface IAvnNativeControlHostTopLevelAttachment : IUnknown
+{
+ [intptr]void* GetParentHandle();
+ HRESULT InitializeWithChildHandle([intptr]void* child);
+ HRESULT AttachTo(IAvnNativeControlHost* host);
+ void ShowInBounds(float x, float y, float width, float height);
+ void HideWithSize(float width, float height);
+ void ReleaseChild();
+}
diff --git a/src/tools/MicroComGenerator/Ast.cs b/src/tools/MicroComGenerator/Ast.cs
new file mode 100644
index 0000000000..e9a55308be
--- /dev/null
+++ b/src/tools/MicroComGenerator/Ast.cs
@@ -0,0 +1,241 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+
+namespace MicroComGenerator.Ast
+{
+ public class AstAttributeNode
+ {
+ public string Name { get; set; }
+ public string Value { get; set; }
+
+ public AstAttributeNode(string name, string value)
+ {
+ Name = name;
+ Value = value;
+ }
+
+ public override string ToString() => $"{Name} = {Value}";
+ public AstAttributeNode Clone() => new AstAttributeNode(Name, Value);
+ }
+
+ public class AstAttributes : List
+ {
+ public bool HasAttribute(string a) => this.Any(x => x.Name == a);
+
+ public AstAttributes Clone()
+ {
+ var rv= new AstAttributes();
+ rv.AddRange(this.Select(x => x.Clone()));
+ return rv;
+ }
+ }
+
+ public interface IAstNodeWithAttributes
+ {
+ public AstAttributes Attributes { get; set; }
+ }
+
+ public class AstEnumNode : List, IAstNodeWithAttributes
+ {
+ public AstAttributes Attributes { get; set; } = new AstAttributes();
+ public string Name { get; set; }
+ public override string ToString() => "Enum " + Name;
+
+ public AstEnumNode Clone()
+ {
+ var rv = new AstEnumNode { Name = Name, Attributes = Attributes.Clone() };
+ rv.AddRange(this.Select(x => x.Clone()));
+ return rv;
+ }
+ }
+
+ public class AstEnumMemberNode
+ {
+ public string Name { get; set; }
+ public string Value { get; set; }
+
+ public AstEnumMemberNode(string name, string value)
+ {
+ Name = name;
+ Value = value;
+ }
+
+ public override string ToString() => $"Enum member {Name} = {Value}";
+ public AstEnumMemberNode Clone() => new AstEnumMemberNode(Name, Value);
+ }
+
+ public class AstStructNode : List, IAstNodeWithAttributes
+ {
+ public AstAttributes Attributes { get; set; } = new AstAttributes();
+ public string Name { get; set; }
+ public override string ToString() => "Struct " + Name;
+
+ public AstStructNode Clone()
+ {
+ var rv = new AstStructNode { Name = Name, Attributes = Attributes.Clone() };
+ rv.AddRange(this.Select(x => x.Clone()));
+ return rv;
+ }
+ }
+
+ public class AstTypeNode
+ {
+ public string Name { get; set; }
+ public int PointerLevel { get; set; }
+ public bool IsLink { get; set; }
+
+ public string Format() => Name + new string('*', PointerLevel)
+ + (IsLink ? "&" : "");
+ public override string ToString() => Format();
+ public AstTypeNode Clone() => new AstTypeNode() {
+ Name = Name,
+ PointerLevel = PointerLevel,
+ IsLink = IsLink
+ };
+ }
+
+ public class AstStructMemberNode : IAstNodeWithAttributes
+ {
+ public string Name { get; set; }
+ public AstTypeNode Type { get; set; }
+
+ public override string ToString() => $"Struct member {Type.Format()} {Name}";
+ public AstStructMemberNode Clone() => new AstStructMemberNode() { Name = Name, Type = Type.Clone() };
+ public AstAttributes Attributes { get; set; } = new AstAttributes();
+ }
+
+ public class AstInterfaceNode : List, IAstNodeWithAttributes
+ {
+ public AstAttributes Attributes { get; set; } = new AstAttributes();
+ public string Name { get; set; }
+ public string Inherits { get; set; }
+
+ public override string ToString()
+ {
+ if (Inherits == null)
+ return Name;
+ return $"Interface {Name} : {Inherits}";
+ }
+ public AstInterfaceNode Clone()
+ {
+ var rv = new AstInterfaceNode { Name = Name, Inherits = Inherits, Attributes = Attributes.Clone() };
+ rv.AddRange(this.Select(x => x.Clone()));
+ return rv;
+ }
+ }
+
+ public class AstInterfaceMemberNode : List, IAstNodeWithAttributes
+ {
+ public string Name { get; set; }
+ public AstTypeNode ReturnType { get; set; }
+ public AstAttributes Attributes { get; set; } = new AstAttributes();
+
+ public AstInterfaceMemberNode Clone()
+ {
+ var rv = new AstInterfaceMemberNode()
+ {
+ Name = Name, Attributes = Attributes.Clone(), ReturnType = ReturnType
+ };
+ rv.AddRange(this.Select(x => x.Clone()));
+ return rv;
+ }
+
+ public override string ToString() =>
+ $"Interface member {ReturnType.Format()} {Name} ({string.Join(", ", this.Select(x => x.Format()))})";
+ }
+
+ public class AstInterfaceMemberArgumentNode : IAstNodeWithAttributes
+ {
+ public string Name { get; set; }
+ public AstTypeNode Type { get; set; }
+ public AstAttributes Attributes { get; set; } = new AstAttributes();
+
+
+ public string Format() => $"{Type.Format()} {Name}";
+ public override string ToString() => "Argument " + Format();
+
+ public AstInterfaceMemberArgumentNode Clone() => new AstInterfaceMemberArgumentNode
+ {
+ Name = Name, Type = Type.Clone(), Attributes = Attributes.Clone()
+ };
+ }
+
+ public static class AstExtensions
+ {
+ public static bool HasAttribute(this IAstNodeWithAttributes node, string s) => node.Attributes.HasAttribute(s);
+
+ public static string GetAttribute(this IAstNodeWithAttributes node, string s)
+ {
+ var value = node.Attributes.FirstOrDefault(a => a.Name == s)?.Value;
+ if (value == null)
+ throw new CodeGenException("Expected attribute " + s + " for node " + node);
+ return value;
+ }
+
+ public static string GetAttributeOrDefault(this IAstNodeWithAttributes node, string s)
+ => node.Attributes.FirstOrDefault(a => a.Name == s)?.Value;
+ }
+
+ class AstVisitor
+ {
+ protected virtual void VisitType(AstTypeNode type)
+ {
+ }
+
+ protected virtual void VisitArgument(AstInterfaceMemberArgumentNode argument)
+ {
+ VisitType(argument.Type);
+ }
+
+ protected virtual void VisitInterfaceMember(AstInterfaceMemberNode member)
+ {
+ foreach(var a in member)
+ VisitArgument(a);
+ VisitType(member.ReturnType);
+ }
+
+ protected virtual void VisitInterface(AstInterfaceNode iface)
+ {
+ foreach(var m in iface)
+ VisitInterfaceMember(m);
+ }
+
+ protected virtual void VisitStructMember(AstStructMemberNode member)
+ {
+ VisitType(member.Type);
+ }
+
+ protected virtual void VisitStruct(AstStructNode node)
+ {
+ foreach(var m in node)
+ VisitStructMember(m);
+ }
+
+ public virtual void VisitAst(AstIdlNode ast)
+ {
+ foreach(var iface in ast.Interfaces)
+ VisitInterface(iface);
+ foreach (var s in ast.Structs)
+ VisitStruct(s);
+ }
+
+
+ }
+
+ public class AstIdlNode : IAstNodeWithAttributes
+ {
+ public AstAttributes Attributes { get; set; } = new AstAttributes();
+ public List Enums { get; set; } = new List();
+ public List Structs { get; set; } = new List();
+ public List Interfaces { get; set; } = new List();
+
+ public AstIdlNode Clone() => new AstIdlNode()
+ {
+ Attributes = Attributes.Clone(),
+ Enums = Enums.Select(x => x.Clone()).ToList(),
+ Structs = Structs.Select(x => x.Clone()).ToList(),
+ Interfaces = Interfaces.Select(x => x.Clone()).ToList()
+ };
+ }
+}
diff --git a/src/tools/MicroComGenerator/AstParser.cs b/src/tools/MicroComGenerator/AstParser.cs
new file mode 100644
index 0000000000..732c0496b3
--- /dev/null
+++ b/src/tools/MicroComGenerator/AstParser.cs
@@ -0,0 +1,231 @@
+using System.Collections.Generic;
+using MicroComGenerator.Ast;
+
+namespace MicroComGenerator
+{
+ public class AstParser
+ {
+ public static AstIdlNode Parse(string source)
+ {
+ var parser = new TokenParser(source);
+ var idl = new AstIdlNode { Attributes = ParseGlobalAttributes(ref parser) };
+
+ while (!parser.Eof)
+ {
+ var attrs = ParseLocalAttributes(ref parser);
+
+ if (parser.TryParseKeyword("enum"))
+ idl.Enums.Add(ParseEnum(attrs, ref parser));
+ else if (parser.TryParseKeyword("struct"))
+ idl.Structs.Add(ParseStruct(attrs, ref parser));
+ else if (parser.TryParseKeyword("interface"))
+ idl.Interfaces.Add(ParseInterface(attrs, ref parser));
+ else
+ throw new ParseException("Unexpected character", ref parser);
+ }
+
+ return idl;
+ }
+
+ static AstAttributes ParseGlobalAttributes(ref TokenParser parser)
+ {
+ var rv = new AstAttributes();
+ while (!parser.Eof)
+ {
+ parser.SkipWhitespace();
+ if (parser.TryConsume('@'))
+ {
+ var ident = parser.ParseIdentifier("-");
+ var value = parser.ReadToEol().Trim();
+ if (value == "@@")
+ {
+ parser.Advance(1);
+ value = "";
+ while (true)
+ {
+ var l = parser.ReadToEol();
+ if (l == "@@")
+ break;
+ else
+ value = value.Length == 0 ? l : (value + "\n" + l);
+ parser.Advance(1);
+ }
+
+ }
+ rv.Add(new AstAttributeNode(ident, value));
+ }
+ else
+ return rv;
+ }
+
+ return rv;
+ }
+
+ static AstAttributes ParseLocalAttributes(ref TokenParser parser)
+ {
+ var rv = new AstAttributes();
+ if (parser.TryConsume("["))
+ {
+ while (!parser.TryConsume("]") && !parser.Eof)
+ {
+ if (parser.TryConsume(','))
+ continue;
+
+ // Get identifier
+ var ident = parser.ParseIdentifier("-");
+
+ // No value, end of attribute list
+ if (parser.TryConsume(']'))
+ {
+ rv.Add(new AstAttributeNode(ident, null));
+ return rv;
+ }
+ // No value, next attribute
+ else if (parser.TryConsume(','))
+ rv.Add(new AstAttributeNode(ident, null));
+ // Has value
+ else if (parser.TryConsume('('))
+ {
+ var value = parser.ReadTo(')');
+ parser.Consume(')');
+ rv.Add(new AstAttributeNode(ident, value));
+ }
+ else
+ throw new ParseException("Unexpected character", ref parser);
+ }
+
+ if (parser.Eof)
+ throw new ParseException("Unexpected EOF", ref parser);
+ }
+
+ return rv;
+ }
+
+ static void EnsureOpenBracket(ref TokenParser parser)
+ {
+ if (!parser.TryConsume('{'))
+ throw new ParseException("{ expected", ref parser);
+ }
+
+ static AstEnumNode ParseEnum(AstAttributes attrs, ref TokenParser parser)
+ {
+ var name = parser.ParseIdentifier();
+ EnsureOpenBracket(ref parser);
+ var rv = new AstEnumNode { Name = name, Attributes = attrs };
+ while (!parser.TryConsume('}') && !parser.Eof)
+ {
+ if (parser.TryConsume(','))
+ continue;
+
+ var ident = parser.ParseIdentifier();
+
+ // Automatic value
+ if (parser.TryConsume(',') || parser.Peek == '}')
+ {
+ rv.Add(new AstEnumMemberNode(ident, null));
+ continue;
+ }
+
+ if (!parser.TryConsume('='))
+ throw new ParseException("Unexpected character", ref parser);
+
+ var value = parser.ReadToAny(",}").Trim();
+ rv.Add(new AstEnumMemberNode(ident, value));
+
+ if (parser.Eof)
+ throw new ParseException("Unexpected EOF", ref parser);
+ }
+
+
+ return rv;
+ }
+
+ static AstTypeNode ParseType(ref TokenParser parser)
+ {
+ var ident = parser.ParseIdentifier();
+ var t = new AstTypeNode { Name = ident };
+ while (parser.TryConsume('*'))
+ t.PointerLevel++;
+ if (parser.TryConsume("&"))
+ t.IsLink = true;
+ return t;
+ }
+
+ static AstStructNode ParseStruct(AstAttributes attrs, ref TokenParser parser)
+ {
+ var name = parser.ParseIdentifier();
+ EnsureOpenBracket(ref parser);
+ var rv = new AstStructNode { Name = name, Attributes = attrs };
+ while (!parser.TryConsume('}') && !parser.Eof)
+ {
+ var memberAttrs = ParseLocalAttributes(ref parser);
+ var t = ParseType(ref parser);
+ bool parsedAtLeastOneMember = false;
+ while (!parser.TryConsume(';'))
+ {
+ // Skip any ,
+ while (parser.TryConsume(',')) { }
+
+ var ident = parser.ParseIdentifier();
+ parsedAtLeastOneMember = true;
+ rv.Add(new AstStructMemberNode { Name = ident, Type = t, Attributes = memberAttrs});
+ }
+
+ if (!parsedAtLeastOneMember)
+ throw new ParseException("Expected at least one enum member with declared type " + t, ref parser);
+ }
+
+ return rv;
+ }
+
+ static AstInterfaceNode ParseInterface(AstAttributes interfaceAttrs, ref TokenParser parser)
+ {
+ var interfaceName = parser.ParseIdentifier();
+ string inheritsFrom = null;
+ if (parser.TryConsume(":"))
+ inheritsFrom = parser.ParseIdentifier();
+
+ EnsureOpenBracket(ref parser);
+ var rv = new AstInterfaceNode
+ {
+ Name = interfaceName, Attributes = interfaceAttrs, Inherits = inheritsFrom
+ };
+ while (!parser.TryConsume('}') && !parser.Eof)
+ {
+ var memberAttrs = ParseLocalAttributes(ref parser);
+ var returnType = ParseType(ref parser);
+ var name = parser.ParseIdentifier();
+ var member = new AstInterfaceMemberNode
+ {
+ Name = name, ReturnType = returnType, Attributes = memberAttrs
+ };
+ rv.Add(member);
+
+ parser.Consume('(');
+ while (true)
+ {
+ if (parser.TryConsume(')'))
+ break;
+
+ var argumentAttrs = ParseLocalAttributes(ref parser);
+ var type = ParseType(ref parser);
+ var argName = parser.ParseIdentifier();
+ member.Add(new AstInterfaceMemberArgumentNode
+ {
+ Name = argName, Type = type, Attributes = argumentAttrs
+ });
+
+ if (parser.TryConsume(')'))
+ break;
+ if (parser.TryConsume(','))
+ continue;
+ throw new ParseException("Unexpected character", ref parser);
+ }
+
+ parser.Consume(';');
+ }
+
+ return rv;
+ }
+ }
+}
diff --git a/src/tools/MicroComGenerator/CSharpGen.InterfaceGen.cs b/src/tools/MicroComGenerator/CSharpGen.InterfaceGen.cs
new file mode 100644
index 0000000000..91ece81bd0
--- /dev/null
+++ b/src/tools/MicroComGenerator/CSharpGen.InterfaceGen.cs
@@ -0,0 +1,459 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+using MicroComGenerator.Ast;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+
+// ReSharper disable CoVariantArrayConversion
+
+// HERE BE DRAGONS
+
+namespace MicroComGenerator
+{
+ public partial class CSharpGen
+ {
+ abstract class Arg
+ {
+ public string Name;
+ public string NativeType;
+
+ public virtual StatementSyntax CreateFixed(StatementSyntax inner) => inner;
+
+ public virtual void PreMarshal(List body)
+ {
+ }
+
+ public virtual void PreMarshalForReturn(List body) =>
+ throw new InvalidOperationException("Don't know how to use " + NativeType + " as HRESULT-return");
+
+ public virtual ExpressionSyntax Value(bool isHresultReturn) => ParseExpression(Name);
+ public abstract string ManagedType { get; }
+ public virtual string ReturnManagedType => ManagedType;
+
+ public virtual StatementSyntax[] ReturnMarshalResult() => new[] { ParseStatement("return " + Name + ";") };
+
+
+ public virtual void BackPreMarshal(List body)
+ {
+ }
+
+ public virtual ExpressionSyntax BackMarshalValue() => ParseExpression(Name);
+ public virtual ExpressionSyntax BackMarshalReturn(string resultVar) => ParseExpression(resultVar);
+
+ }
+
+ class InterfaceReturnArg : Arg
+ {
+ public string InterfaceType;
+ public override ExpressionSyntax Value(bool isHresultReturn) => ParseExpression("&" + PName);
+ public override string ManagedType => InterfaceType;
+
+ private string PName => "__marshal_" + Name;
+
+ public override void PreMarshalForReturn(List body)
+ {
+ body.Add(ParseStatement("void* " + PName + " = null;"));
+ }
+
+ public override StatementSyntax[] ReturnMarshalResult() => new[]
+ {
+ ParseStatement("return Avalonia.MicroCom.MicroComRuntime.CreateProxyFor<" + InterfaceType + ">(" +
+ PName + ", true);")
+ };
+
+ public override ExpressionSyntax BackMarshalValue()
+ {
+ return ParseExpression("INVALID");
+ }
+
+ public override ExpressionSyntax BackMarshalReturn(string resultVar)
+ {
+ return ParseExpression($"Avalonia.MicroCom.MicroComRuntime.GetNativePointer({resultVar}, true)");
+ }
+ }
+
+ class InterfaceArg : Arg
+ {
+ public string InterfaceType;
+
+ public override ExpressionSyntax Value(bool isHresultReturn) =>
+ ParseExpression("Avalonia.MicroCom.MicroComRuntime.GetNativePointer(" + Name + ")");
+
+ public override string ManagedType => InterfaceType;
+
+ public override StatementSyntax[] ReturnMarshalResult() => new[]
+ {
+ ParseStatement("return Avalonia.MicroCom.MicroComRuntime.CreateProxyFor<" + InterfaceType + ">(" +
+ Name + ", true);")
+ };
+
+ public override ExpressionSyntax BackMarshalValue()
+ {
+ return ParseExpression("Avalonia.MicroCom.MicroComRuntime.CreateProxyFor<" + InterfaceType + ">(" +
+ Name + ", false)");
+ }
+
+ public override ExpressionSyntax BackMarshalReturn(string resultVar)
+ {
+ return ParseExpression($"Avalonia.MicroCom.MicroComRuntime.GetNativePointer({resultVar}, true)");
+ }
+ }
+
+ class BypassArg : Arg
+ {
+ public string Type { get; set; }
+ public int PointerLevel;
+ public override string ManagedType => Type + new string('*', PointerLevel);
+ public override string ReturnManagedType => Type + new string('*', PointerLevel - 1);
+
+ public override ExpressionSyntax Value(bool isHresultReturn)
+ {
+ if (isHresultReturn)
+ return ParseExpression("&" + Name);
+ return base.Value(false);
+ }
+
+ public override void PreMarshalForReturn(List body)
+ {
+ if (PointerLevel == 0)
+ base.PreMarshalForReturn(body);
+ else
+ body.Add(ParseStatement(Type + new string('*', PointerLevel - 1) + " " + Name + "=default;"));
+ }
+ }
+
+ class StringArg : Arg
+ {
+ private string BName => "__bytemarshal_" + Name;
+ private string FName => "__fixedmarshal_" + Name;
+
+ public override void PreMarshal(List body)
+ {
+ body.Add(ParseStatement($"var {BName} = new byte[System.Text.Encoding.UTF8.GetByteCount({Name})+1];"));
+ body.Add(ParseStatement($"System.Text.Encoding.UTF8.GetBytes({Name}, 0, {Name}.Length, {BName}, 0);"));
+ }
+
+ public override StatementSyntax CreateFixed(StatementSyntax inner)
+ {
+ return FixedStatement(DeclareVar("byte*", FName, ParseExpression(BName)), inner);
+ }
+
+ public override ExpressionSyntax Value(bool isHresultReturn) => ParseExpression(FName);
+ public override string ManagedType => "string";
+ public override ExpressionSyntax BackMarshalValue()
+ {
+ return ParseExpression(
+ $"({Name} == null ? null : System.Runtime.InteropServices.Marshal.PtrToStringAnsi(new IntPtr(" + Name + ")))");
+ }
+ }
+
+ string ConvertNativeType(string type)
+ {
+ if (type == "size_t")
+ return "System.IntPtr";
+ if (type == "HRESULT")
+ return "int";
+ return type;
+ }
+
+ Arg ConvertArg(string name, AstTypeNode type)
+ {
+ type = new AstTypeNode { Name = ConvertNativeType(type.Name), PointerLevel = type.PointerLevel };
+
+ if (type.PointerLevel == 2)
+ {
+ if (IsInterface(type))
+ return new InterfaceReturnArg { Name = name, InterfaceType = type.Name, NativeType = "void**" };
+ }
+ else if (type.PointerLevel == 1)
+ {
+ if (IsInterface(type))
+ return new InterfaceArg { Name = name, InterfaceType = type.Name, NativeType = "void*" };
+ if (type.Name == "char")
+ return new StringArg { Name = name, NativeType = "byte*" };
+ }
+
+ return new BypassArg
+ {
+ Name = name, Type = type.Name, PointerLevel = type.PointerLevel, NativeType = type.ToString()
+ };
+ }
+
+
+ void GenerateInterfaceMember(AstInterfaceMemberNode member, ref InterfaceDeclarationSyntax iface,
+ ref ClassDeclarationSyntax proxy, ref ClassDeclarationSyntax vtbl,
+ List vtblCtor, int num)
+ {
+ // Prepare method information
+ var args = member.Select(a => ConvertArg(a.Name, a.Type)).ToList();
+ var returnArg = ConvertArg("__result", member.ReturnType);
+ bool isHresult = member.ReturnType.Name == "HRESULT";
+ bool isHresultLastArgumentReturn = isHresult
+ && args.Count > 0
+ && (args.Last().Name == "ppv" || args.Last().Name == "retOut" || args.Last().Name == "ret")
+ && ((member.Last().Type.PointerLevel > 0
+ && !IsInterface(member.Last().Type))
+ || member.Last().Type.PointerLevel == 2);
+
+ bool isVoidReturn = member.ReturnType.Name == "void" && member.ReturnType.PointerLevel == 0;
+
+
+ // Generate method signature
+ MethodDeclarationSyntax GenerateManagedSig(string returnType, string name,
+ IEnumerable<(string n, string t)> args)
+ => MethodDeclaration(ParseTypeName(returnType), name).WithParameterList(
+ ParameterList(
+ SeparatedList(args.Select(x => Parameter(Identifier(x.n)).WithType(ParseTypeName(x.t))))));
+
+ var managedSig =
+ isHresult ?
+ GenerateManagedSig(isHresultLastArgumentReturn ? args.Last().ReturnManagedType : "void",
+ member.Name,
+ (isHresultLastArgumentReturn ? args.SkipLast(1) : args).Select(a => (a.Name, a.ManagedType))) :
+ GenerateManagedSig(returnArg.ManagedType, member.Name, args.Select(a => (a.Name, a.ManagedType)));
+
+ iface = iface.AddMembers(managedSig.WithSemicolonToken(Semicolon()));
+
+ // Prepare args for marshaling
+ var preMarshal = new List();
+ if (!isVoidReturn)
+ preMarshal.Add(ParseStatement(returnArg.NativeType + " __result;"));
+
+ for (var idx = 0; idx < args.Count; idx++)
+ {
+ if (isHresultLastArgumentReturn && idx == args.Count - 1)
+ args[idx].PreMarshalForReturn(preMarshal);
+ else
+ args[idx].PreMarshal(preMarshal);
+ }
+
+ // Generate call expression
+ ExpressionSyntax callExpr = InvocationExpression(_localInterop.GetCaller(returnArg.NativeType,
+ args.Select(x => x.NativeType).ToList()))
+ .AddArgumentListArguments(Argument(ParseExpression("PPV")))
+ .AddArgumentListArguments(args
+ .Select((a, i) => Argument(a.Value(isHresultLastArgumentReturn && i == args.Count - 1))).ToArray())
+ .AddArgumentListArguments(Argument(ParseExpression("(*PPV)[base.VTableSize + " + num + "]")));
+
+ if (!isVoidReturn)
+ callExpr = CastExpression(ParseTypeName(returnArg.NativeType), callExpr);
+
+ // Save call result if needed
+ if (!isVoidReturn)
+ callExpr = AssignmentExpression(SyntaxKind.SimpleAssignmentExpression, ParseExpression("__result"),
+ callExpr);
+
+
+ // Wrap call into fixed() blocks
+ StatementSyntax callStatement = ExpressionStatement(callExpr);
+ foreach (var arg in args)
+ callStatement = arg.CreateFixed(callStatement);
+
+ // Build proxy body
+ var proxyBody = Block()
+ .AddStatements(preMarshal.ToArray())
+ .AddStatements(callStatement);
+
+ // Process return value
+ if (!isVoidReturn)
+ {
+ if (isHresult)
+ {
+ proxyBody = proxyBody.AddStatements(
+ ParseStatement(
+ $"if(__result != 0) throw new System.Runtime.InteropServices.COMException(\"{member.Name} failed\", __result);"));
+
+ if (isHresultLastArgumentReturn)
+ proxyBody = proxyBody.AddStatements(args.Last().ReturnMarshalResult());
+ }
+ else
+ proxyBody = proxyBody.AddStatements(returnArg.ReturnMarshalResult());
+ }
+
+ // Add the proxy method
+ proxy = proxy.AddMembers(managedSig.AddModifiers(SyntaxKind.PublicKeyword)
+ .WithBody(proxyBody));
+
+
+ // Generate VTable method
+ var shadowDelegate = DelegateDeclaration(ParseTypeName(returnArg.NativeType), member.Name + "Delegate")
+ .AddParameterListParameters(Parameter(Identifier("@this")).WithType(ParseTypeName("IntPtr")))
+ .AddParameterListParameters(args.Select(x =>
+ Parameter(Identifier(x.Name)).WithType(ParseTypeName(x.NativeType))).ToArray())
+ .AddAttribute("System.Runtime.InteropServices.UnmanagedFunctionPointer",
+ "System.Runtime.InteropServices.CallingConvention.StdCall");
+
+ var shadowMethod = MethodDeclaration(shadowDelegate.ReturnType, member.Name)
+ .WithParameterList(shadowDelegate.ParameterList)
+ .AddModifiers(Token(SyntaxKind.StaticKeyword));
+
+ var backPreMarshal = new List();
+ foreach (var arg in args)
+ arg.BackPreMarshal(backPreMarshal);
+
+ backPreMarshal.Add(
+ ParseStatement($"__target = ({iface.Identifier.Text})Avalonia.MicroCom.MicroComRuntime.GetObjectFromCcw(@this);"));
+
+ var isBackVoidReturn = isVoidReturn || (isHresult && !isHresultLastArgumentReturn);
+
+ StatementSyntax backCallStatement;
+
+ var backCallExpr =
+ IsPropertyRewriteCandidate(managedSig) ?
+ ParseExpression("__target." + member.Name.Substring(3)) :
+ InvocationExpression(ParseExpression("__target." + member.Name))
+ .WithArgumentList(ArgumentList(SeparatedList(
+ (isHresultLastArgumentReturn ? args.SkipLast(1) : args)
+ .Select(a =>
+ Argument(a.BackMarshalValue())))));
+
+ if (isBackVoidReturn)
+ backCallStatement = ExpressionStatement(backCallExpr);
+ else
+ {
+ backCallStatement = LocalDeclarationStatement(DeclareVar("var", "__result", backCallExpr));
+ if (isHresultLastArgumentReturn)
+ {
+ backCallStatement = Block(backCallStatement,
+ ExpressionStatement(AssignmentExpression(SyntaxKind.SimpleAssignmentExpression,
+ ParseExpression("*" + args.Last().Name),
+ args.Last().BackMarshalReturn("__result")
+ )));
+
+ }
+ else
+ backCallStatement = Block(backCallStatement,
+ ReturnStatement(returnArg.BackMarshalReturn("__result")));
+ }
+
+ BlockSyntax backBodyBlock = Block().AddStatements(backPreMarshal.ToArray()).AddStatements(backCallStatement);
+
+
+ backBodyBlock = Block(
+ TryStatement(
+ SingletonList(CatchClause(
+ CatchDeclaration(ParseTypeName("System.Exception"), Identifier("__exception__")), null,
+ Block(
+ ParseStatement(
+ "Avalonia.MicroCom.MicroComRuntime.UnhandledException(__target, __exception__);"),
+ isHresult ? ParseStatement("return unchecked((int)0x80004005u);")
+ : isVoidReturn ? EmptyStatement() : ParseStatement("return default;")
+ ))))
+ .WithBlock(Block(backBodyBlock))
+ );
+ if (isHresult)
+ backBodyBlock = backBodyBlock.AddStatements(ParseStatement("return 0;"));
+
+
+ backBodyBlock = Block()
+ .AddStatements(ParseStatement($"{iface.Identifier.Text} __target = null;"))
+ .AddStatements(backBodyBlock.Statements.ToArray());
+
+ shadowMethod = shadowMethod.WithBody(backBodyBlock);
+
+ vtbl = vtbl.AddMembers(shadowDelegate).AddMembers(shadowMethod);
+ vtblCtor.Add(ParseStatement("base.AddMethod((" + shadowDelegate.Identifier.Text + ")" +
+ shadowMethod.Identifier.Text + ");"));
+
+
+
+
+ }
+
+ class LocalInteropHelper
+ {
+ public ClassDeclarationSyntax Class { get; private set; } = ClassDeclaration("LocalInterop");
+ private HashSet _existing = new HashSet();
+
+ public ExpressionSyntax GetCaller(string returnType, List args)
+ {
+ string ConvertType(string t) => t.EndsWith("*") ? "void*" : t;
+ returnType = ConvertType(returnType);
+ args = args.Select(ConvertType).ToList();
+
+ var name = "CalliStdCall" + returnType.Replace("*", "_ptr");
+ var signature = returnType + "::" + name + "::" + string.Join("::", args);
+ if (_existing.Add(signature))
+ {
+ Class = Class.AddMembers(MethodDeclaration(ParseTypeName(returnType), name)
+ .AddModifiers(SyntaxKind.StaticKeyword, SyntaxKind.UnsafeKeyword, SyntaxKind.PublicKeyword)
+ .AddParameterListParameters(Parameter(Identifier("thisObj")).WithType(ParseTypeName("void*")))
+ .AddParameterListParameters(args.Select((x, i) =>
+ Parameter(Identifier("arg" + i)).WithType(ParseTypeName(x))).ToArray())
+ .AddParameterListParameters(Parameter(Identifier("methodPtr")).WithType(ParseTypeName("void*")))
+ .WithBody(Block(ExpressionStatement(ThrowExpression(ParseExpression("null"))))));
+ }
+
+ return ParseExpression("LocalInterop." + name);
+ }
+ }
+
+
+ void GenerateInterface(ref NamespaceDeclarationSyntax ns, ref NamespaceDeclarationSyntax implNs,
+ AstInterfaceNode iface)
+ {
+ var guidString = iface.GetAttribute("uuid");
+ var inheritsUnknown = iface.Inherits == null || iface.Inherits == "IUnknown";
+
+ var ifaceDec = InterfaceDeclaration(iface.Name)
+ .WithBaseType(inheritsUnknown ? "Avalonia.MicroCom.IUnknown" : iface.Inherits)
+ .AddModifiers(Token(_visibility), Token(SyntaxKind.UnsafeKeyword), Token(SyntaxKind.PartialKeyword));
+
+ var proxyClassName = "__MicroCom" + iface.Name + "Proxy";
+ var proxy = ClassDeclaration(proxyClassName)
+ .AddModifiers(Token(SyntaxKind.UnsafeKeyword), Token(_visibility), Token(SyntaxKind.PartialKeyword))
+ .WithBaseType(inheritsUnknown ?
+ "Avalonia.MicroCom.MicroComProxyBase" :
+ ("__MicroCom" + iface.Inherits + "Proxy"))
+ .AddBaseListTypes(SimpleBaseType(ParseTypeName(iface.Name)));
+
+
+ // Generate vtable
+ var vtbl = ClassDeclaration("__MicroCom" + iface.Name + "VTable")
+ .AddModifiers(Token(SyntaxKind.UnsafeKeyword));
+
+ vtbl = vtbl.WithBaseType(inheritsUnknown ?
+ "Avalonia.MicroCom.MicroComVtblBase" :
+ "__MicroCom" + iface.Inherits + "VTable");
+
+ var vtblCtor = new List();
+ for (var idx = 0; idx < iface.Count; idx++)
+ GenerateInterfaceMember(iface[idx], ref ifaceDec, ref proxy, ref vtbl, vtblCtor, idx);
+
+ vtbl = vtbl.AddMembers(
+ ConstructorDeclaration(vtbl.Identifier.Text)
+ .AddModifiers(Token(SyntaxKind.PublicKeyword))
+ .WithBody(Block(vtblCtor))
+ )
+ .AddMembers(MethodDeclaration(ParseTypeName("void"), "__MicroComModuleInit")
+ .AddModifiers(Token(SyntaxKind.StaticKeyword), Token(SyntaxKind.InternalKeyword))
+ .WithExpressionBody(ArrowExpressionClause(
+ ParseExpression("Avalonia.MicroCom.MicroComRuntime.RegisterVTable(typeof(" +
+ iface.Name + "), new " + vtbl.Identifier.Text + "().CreateVTable())")))
+ .WithSemicolonToken(Semicolon()));
+
+
+ // Finalize proxy code
+ proxy = proxy.AddMembers(
+ MethodDeclaration(ParseTypeName("void"), "__MicroComModuleInit")
+ .AddModifiers(Token(SyntaxKind.StaticKeyword), Token(SyntaxKind.InternalKeyword))
+ .WithBody(Block(
+ ParseStatement("Avalonia.MicroCom.MicroComRuntime.Register(typeof(" +
+ iface.Name + "), new Guid(\"" + guidString + "\"), (p, owns) => new " +
+ proxyClassName + "(p, owns));")
+ )))
+ .AddMembers(ParseMemberDeclaration("public " + proxyClassName +
+ "(IntPtr nativePointer, bool ownsHandle) : base(nativePointer, ownsHandle) {}"))
+ .AddMembers(ParseMemberDeclaration("protected override int VTableSize => base.VTableSize + " +
+ iface.Count + ";"));
+
+ ns = ns.AddMembers(RewriteMethodsToProperties(ifaceDec));
+ implNs = implNs.AddMembers(RewriteMethodsToProperties(proxy), RewriteMethodsToProperties(vtbl));
+ }
+ }
+}
diff --git a/src/tools/MicroComGenerator/CSharpGen.Utils.cs b/src/tools/MicroComGenerator/CSharpGen.Utils.cs
new file mode 100644
index 0000000000..3a62220d12
--- /dev/null
+++ b/src/tools/MicroComGenerator/CSharpGen.Utils.cs
@@ -0,0 +1,110 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using MicroComGenerator.Ast;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Formatting;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+
+using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+namespace MicroComGenerator
+{
+ public partial class CSharpGen
+ {
+
+ CompilationUnitSyntax Unit()
+ => CompilationUnit().WithUsings(List(new[]
+ {
+ "System", "System.Text", "System.Collections", "System.Collections.Generic", "Avalonia.MicroCom"
+ }
+ .Concat(_extraUsings).Select(u => UsingDirective(IdentifierName(u)))));
+
+ string Format(CompilationUnitSyntax unit)
+ {
+ var cw = new AdhocWorkspace();
+ return
+ "#pragma warning disable 108\n" +
+ Microsoft.CodeAnalysis.Formatting.Formatter.Format(unit.NormalizeWhitespace(), cw, cw.Options
+ .WithChangedOption(CSharpFormattingOptions.NewLineForMembersInObjectInit, true)
+ .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInObjectCollectionArrayInitializers,
+ true)
+ .WithChangedOption(CSharpFormattingOptions.NewLineForMembersInAnonymousTypes, true)
+ .WithChangedOption(CSharpFormattingOptions.NewLinesForBracesInMethods, true)
+
+ ).ToFullString();
+ }
+
+
+ SyntaxToken Semicolon() => Token(SyntaxKind.SemicolonToken);
+
+ static VariableDeclarationSyntax DeclareVar(string type, string name,
+ ExpressionSyntax? initializer = null)
+ => VariableDeclaration(ParseTypeName(type),
+ SingletonSeparatedList(VariableDeclarator(name)
+ .WithInitializer(initializer == null ? null : EqualsValueClause(initializer))));
+
+ FieldDeclarationSyntax DeclareConstant(string type, string name, LiteralExpressionSyntax value)
+ => FieldDeclaration(
+ VariableDeclaration(ParseTypeName(type),
+ SingletonSeparatedList(
+ VariableDeclarator(name).WithInitializer(EqualsValueClause(value))
+ ))
+ ).WithSemicolonToken(Semicolon())
+ .WithModifiers(TokenList(Token(SyntaxKind.PublicKeyword), Token(SyntaxKind.ConstKeyword)));
+
+ FieldDeclarationSyntax DeclareField(string type, string name, params SyntaxKind[] modifiers) =>
+ DeclareField(type, name, null, modifiers);
+
+ FieldDeclarationSyntax DeclareField(string type, string name, EqualsValueClauseSyntax initializer,
+ params SyntaxKind[] modifiers) =>
+ FieldDeclaration(
+ VariableDeclaration(ParseTypeName(type),
+ SingletonSeparatedList(
+ VariableDeclarator(name).WithInitializer(initializer))))
+ .WithSemicolonToken(Semicolon())
+ .WithModifiers(TokenList(modifiers.Select(x => Token(x))));
+
+ bool IsPropertyRewriteCandidate(MethodDeclarationSyntax method)
+ {
+ if(method.Identifier.Text.Contains("GetScaling"))
+ Console.WriteLine();
+ return (method.Identifier.Text.StartsWith("Get") &&
+ method.ParameterList.Parameters.Count == 0);
+ }
+
+ TypeDeclarationSyntax RewriteMethodsToProperties(T decl) where T : TypeDeclarationSyntax
+ {
+ var replace = new Dictionary();
+ foreach (var method in decl.Members.OfType().ToList())
+ {
+ if (IsPropertyRewriteCandidate(method))
+ {
+ var getter = AccessorDeclaration(SyntaxKind.GetAccessorDeclaration);
+ if (method.Body != null)
+ getter = getter.WithBody(method.Body);
+ else
+ getter = getter.WithSemicolonToken(Semicolon());
+
+ replace[method] = PropertyDeclaration(method.ReturnType,
+ method.Identifier.Text.Substring(3))
+ .WithModifiers(method.Modifiers).AddAccessorListAccessors(getter);
+
+ }
+ }
+
+ return decl.ReplaceNodes(replace.Keys, (m, m2) => replace[m]);
+ }
+
+ bool IsInterface(string name)
+ {
+ if (name == "IUnknown")
+ return true;
+ return _idl.Interfaces.Any(i => i.Name == name);
+ }
+
+ private bool IsInterface(AstTypeNode type) => IsInterface(type.Name);
+
+ }
+}
diff --git a/src/tools/MicroComGenerator/CSharpGen.cs b/src/tools/MicroComGenerator/CSharpGen.cs
new file mode 100644
index 0000000000..688036ffc2
--- /dev/null
+++ b/src/tools/MicroComGenerator/CSharpGen.cs
@@ -0,0 +1,133 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Runtime.CompilerServices;
+using MicroComGenerator.Ast;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+// ReSharper disable CoVariantArrayConversion
+
+namespace MicroComGenerator
+{
+ public partial class CSharpGen
+ {
+ private readonly AstIdlNode _idl;
+ private List _extraUsings;
+ private string _namespace;
+ private SyntaxKind _visibility;
+ private LocalInteropHelper _localInterop = new LocalInteropHelper();
+
+ public CSharpGen(AstIdlNode idl)
+ {
+ _idl = idl.Clone();
+ new AstRewriter().VisitAst(_idl);
+ _extraUsings = _idl.Attributes.Where(u => u.Name == "clr-using").Select(u => u.Value).ToList();
+ _namespace = _idl.GetAttribute("clr-namespace");
+ var visibilityString = _idl.GetAttribute("clr-access");
+
+ if (visibilityString == "internal")
+ _visibility = SyntaxKind.InternalKeyword;
+ else if (visibilityString == "public")
+ _visibility = SyntaxKind.PublicKeyword;
+ else
+ throw new CodeGenException("Invalid clr-access attribute");
+ }
+
+ class AstRewriter : AstVisitor
+ {
+ void ConvertIntPtr(AstTypeNode type)
+ {
+ if (type.Name == "void" && type.PointerLevel > 0)
+ {
+ type.Name = "IntPtr";
+ type.PointerLevel--;
+ }
+ }
+
+ protected override void VisitStructMember(AstStructMemberNode member)
+ {
+ if (member.HasAttribute("intptr"))
+ ConvertIntPtr(member.Type);
+ base.VisitStructMember(member);
+ }
+
+ protected override void VisitType(AstTypeNode type)
+ {
+ if (type.IsLink)
+ {
+ type.PointerLevel++;
+ type.IsLink = false;
+ }
+
+ base.VisitType(type);
+ }
+
+ protected override void VisitArgument(AstInterfaceMemberArgumentNode argument)
+ {
+ if (argument.HasAttribute("intptr"))
+ {
+ if(argument.Name == "retOut")
+ Console.WriteLine();
+ ConvertIntPtr(argument.Type);
+ }
+
+ base.VisitArgument(argument);
+ }
+
+ protected override void VisitInterfaceMember(AstInterfaceMemberNode member)
+ {
+ if (member.HasAttribute("intptr"))
+ ConvertIntPtr(member.ReturnType);
+ base.VisitInterfaceMember(member);
+ }
+ }
+
+
+ public string Generate()
+ {
+ var ns = NamespaceDeclaration(ParseName(_namespace));
+ var implNs = NamespaceDeclaration(ParseName(_namespace + ".Impl"));
+ ns = GenerateEnums(ns);
+ ns = GenerateStructs(ns);
+ foreach (var i in _idl.Interfaces)
+ GenerateInterface(ref ns, ref implNs, i);
+
+ implNs = implNs.AddMembers(_localInterop.Class);
+ var unit = Unit().AddMembers(ns, implNs);
+
+ return Format(unit);
+ }
+
+ NamespaceDeclarationSyntax GenerateEnums(NamespaceDeclarationSyntax ns)
+ {
+ return ns.AddMembers(_idl.Enums.Select(e =>
+ EnumDeclaration(e.Name)
+ .WithModifiers(TokenList(Token(_visibility)))
+ .WithMembers(SeparatedList(e.Select(m =>
+ {
+ var member = EnumMemberDeclaration(m.Name);
+ if (m.Value != null)
+ return member.WithEqualsValue(EqualsValueClause(ParseExpression(m.Value)));
+ return member;
+ })))
+ ).ToArray());
+ }
+
+ NamespaceDeclarationSyntax GenerateStructs(NamespaceDeclarationSyntax ns)
+ {
+ return ns.AddMembers(_idl.Structs.Select(e =>
+ StructDeclaration(e.Name)
+ .WithModifiers(TokenList(Token(_visibility)))
+ .AddAttribute("System.Runtime.InteropServices.StructLayout", "System.Runtime.InteropServices.LayoutKind.Sequential")
+ .AddModifiers(Token(SyntaxKind.UnsafeKeyword))
+ .WithMembers(new SyntaxList(SeparatedList(e.Select(m =>
+ DeclareField(m.Type.ToString(), m.Name, SyntaxKind.PublicKeyword)))))
+ ).ToArray());
+ }
+
+
+
+ }
+}
diff --git a/src/tools/MicroComGenerator/CppGen.cs b/src/tools/MicroComGenerator/CppGen.cs
new file mode 100644
index 0000000000..68192ebffe
--- /dev/null
+++ b/src/tools/MicroComGenerator/CppGen.cs
@@ -0,0 +1,116 @@
+using System;
+using System.Linq;
+using System.Text;
+using MicroComGenerator.Ast;
+
+namespace MicroComGenerator
+{
+ public class CppGen
+ {
+ static string ConvertType(AstTypeNode type)
+ {
+ var name = type.Name;
+ if (name == "byte")
+ name = "unsigned char";
+ else if(name == "uint")
+ name = "unsigned int";
+ return name + new string('*', type.PointerLevel);
+ }
+
+ public static string GenerateCpp(AstIdlNode idl)
+ {
+ var sb = new StringBuilder();
+ var preamble = idl.GetAttributeOrDefault("cpp-preamble");
+ if (preamble != null)
+ sb.AppendLine(preamble);
+
+ foreach (var s in idl.Structs)
+ sb.AppendLine("struct " + s.Name + ";");
+
+ foreach (var s in idl.Interfaces)
+ sb.AppendLine("struct " + s.Name + ";");
+
+ foreach (var en in idl.Enums)
+ {
+ sb.Append("enum ");
+ if (en.Attributes.Any(a => a.Name == "class-enum"))
+ sb.Append("class ");
+ sb.AppendLine(en.Name).AppendLine("{");
+
+ foreach (var m in en)
+ {
+ sb.Append(" ").Append(m.Name);
+ if (m.Value != null)
+ sb.Append(" = ").Append(m.Value);
+ sb.AppendLine(",");
+ }
+
+ sb.AppendLine("};");
+ }
+
+ foreach (var s in idl.Structs)
+ {
+ sb.Append("struct ").AppendLine(s.Name).AppendLine("{");
+ foreach (var m in s)
+ sb.Append(" ").Append(ConvertType(m.Type)).Append(" ").Append(m.Name).AppendLine(";");
+
+ sb.AppendLine("};");
+ }
+
+ foreach (var i in idl.Interfaces)
+ {
+ var guidString = i.GetAttribute("uuid");
+ var guid = Guid.Parse(guidString).ToString().Replace("-", "");
+
+
+ sb.Append("COMINTERFACE(").Append(i.Name).Append(", ")
+ .Append(guid.Substring(0, 8)).Append(", ")
+ .Append(guid.Substring(8, 4)).Append(", ")
+ .Append(guid.Substring(12, 4));
+ for (var c = 0; c < 8; c++)
+ {
+ sb.Append(", ").Append(guid.Substring(16 + c * 2, 2));
+ }
+
+ sb.Append(") : ");
+ if (i.HasAttribute("cpp-virtual-inherits"))
+ sb.Append("virtual ");
+ sb.AppendLine(i.Inherits ?? "IUnknown")
+ .AppendLine("{");
+
+ foreach (var m in i)
+ {
+ sb.Append(" ")
+ .Append("virtual ")
+ .Append(ConvertType(m.ReturnType))
+ .Append(" ").Append(m.Name).Append(" (");
+ if (m.Count == 0)
+ sb.AppendLine(") = 0;");
+ else
+ {
+ sb.AppendLine();
+ for (var c = 0; c < m.Count; c++)
+ {
+ var arg = m[c];
+ sb.Append(" ");
+ if (arg.Attributes.Any(a => a.Name == "const"))
+ sb.Append("const ");
+ sb.Append(ConvertType(arg.Type))
+ .Append(" ")
+ .Append(arg.Name);
+ if (c != m.Count - 1)
+ sb.Append(", ");
+ sb.AppendLine();
+ }
+
+ sb.AppendLine(" ) = 0;");
+ }
+ }
+
+ sb.AppendLine("};");
+ }
+
+ return sb.ToString();
+ }
+ }
+}
diff --git a/src/tools/MicroComGenerator/Extensions.cs b/src/tools/MicroComGenerator/Extensions.cs
new file mode 100644
index 0000000000..c8a4c8f45c
--- /dev/null
+++ b/src/tools/MicroComGenerator/Extensions.cs
@@ -0,0 +1,97 @@
+
+using System;
+using System.Linq;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+using Microsoft.CodeAnalysis.CSharp.Syntax;
+using static Microsoft.CodeAnalysis.CSharp.SyntaxFactory;
+namespace MicroComGenerator
+{
+ public static class Extensions
+ {
+ public static ClassDeclarationSyntax AddModifiers(this ClassDeclarationSyntax cl, params SyntaxKind[] modifiers)
+ {
+ if (modifiers == null)
+ return cl;
+ return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray());
+ }
+
+ public static MethodDeclarationSyntax AddModifiers(this MethodDeclarationSyntax cl, params SyntaxKind[] modifiers)
+ {
+ if (modifiers == null)
+ return cl;
+ return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray());
+ }
+
+ public static PropertyDeclarationSyntax AddModifiers(this PropertyDeclarationSyntax cl, params SyntaxKind[] modifiers)
+ {
+ if (modifiers == null)
+ return cl;
+ return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray());
+ }
+
+ public static ConstructorDeclarationSyntax AddModifiers(this ConstructorDeclarationSyntax cl, params SyntaxKind[] modifiers)
+ {
+ if (modifiers == null)
+ return cl;
+ return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray());
+ }
+
+ public static AccessorDeclarationSyntax AddModifiers(this AccessorDeclarationSyntax cl, params SyntaxKind[] modifiers)
+ {
+ if (modifiers == null)
+ return cl;
+ return cl.AddModifiers(modifiers.Select(x => SyntaxFactory.Token(x)).ToArray());
+ }
+
+ public static string WithLowerFirst(this string s)
+ {
+ if (string.IsNullOrEmpty(s))
+ return s;
+ return char.ToLowerInvariant(s[0]) + s.Substring(1);
+ }
+
+ public static ExpressionSyntax MemberAccess(params string[] identifiers)
+ {
+ if (identifiers == null || identifiers.Length == 0)
+ throw new ArgumentException();
+ var expr = (ExpressionSyntax)IdentifierName(identifiers[0]);
+ for (var c = 1; c < identifiers.Length; c++)
+ expr = MemberAccess(expr, identifiers[c]);
+ return expr;
+ }
+
+ public static ExpressionSyntax MemberAccess(ExpressionSyntax expr, params string[] identifiers)
+ {
+ foreach (var i in identifiers)
+ expr = MemberAccess(expr, i);
+ return expr;
+ }
+
+ public static MemberAccessExpressionSyntax MemberAccess(ExpressionSyntax expr, string identifier) =>
+ MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression, expr, IdentifierName(identifier));
+
+ public static ClassDeclarationSyntax WithBaseType(this ClassDeclarationSyntax cl, string bt)
+ {
+ return cl.AddBaseListTypes(SimpleBaseType(SyntaxFactory.ParseTypeName(bt)));
+ }
+
+ public static InterfaceDeclarationSyntax WithBaseType(this InterfaceDeclarationSyntax cl, string bt)
+ {
+ return cl.AddBaseListTypes(SimpleBaseType(SyntaxFactory.ParseTypeName(bt)));
+ }
+
+ public static T AddAttribute(this T member, string attribute, params string[] args) where T : MemberDeclarationSyntax
+ {
+ return (T)member.AddAttributeLists(AttributeList(SingletonSeparatedList(
+ Attribute(ParseName(attribute), AttributeArgumentList(
+ SeparatedList(args.Select(a => AttributeArgument(ParseExpression(a)))))))));
+ }
+
+ public static string StripPrefix(this string s, string prefix) => string.IsNullOrEmpty(s)
+ ? s
+ : s.StartsWith(prefix)
+ ? s.Substring(prefix.Length)
+ : s;
+ }
+}
diff --git a/src/tools/MicroComGenerator/MicroComGenerator.csproj b/src/tools/MicroComGenerator/MicroComGenerator.csproj
new file mode 100644
index 0000000000..5ae431b4b9
--- /dev/null
+++ b/src/tools/MicroComGenerator/MicroComGenerator.csproj
@@ -0,0 +1,10 @@
+
+
+ Exe
+ netcoreapp3.1
+
+
+
+
+
+
diff --git a/src/tools/MicroComGenerator/ParseException.cs b/src/tools/MicroComGenerator/ParseException.cs
new file mode 100644
index 0000000000..dfa8dcfe54
--- /dev/null
+++ b/src/tools/MicroComGenerator/ParseException.cs
@@ -0,0 +1,27 @@
+using System;
+
+namespace MicroComGenerator
+{
+ class ParseException : Exception
+ {
+ public int Line { get; }
+ public int Position { get; }
+
+ public ParseException(string message, int line, int position) : base(message)
+ {
+ Line = line;
+ Position = position;
+ }
+
+ public ParseException(string message, ref TokenParser parser) : this(message, parser.Line, parser.Position)
+ {
+ }
+ }
+
+ class CodeGenException : Exception
+ {
+ public CodeGenException(string message) : base(message)
+ {
+ }
+ }
+}
diff --git a/src/tools/MicroComGenerator/Program.cs b/src/tools/MicroComGenerator/Program.cs
new file mode 100644
index 0000000000..578ba1465d
--- /dev/null
+++ b/src/tools/MicroComGenerator/Program.cs
@@ -0,0 +1,44 @@
+using System;
+using System.IO;
+using System.Linq;
+using CommandLine;
+
+namespace MicroComGenerator
+{
+ class Program
+ {
+ public class Options
+ {
+ [Option('i', "input", Required = true, HelpText = "Input IDL file")]
+ public string Input { get; set; }
+
+ [Option("cpp", Required = false, HelpText = "C++ output file")]
+ public string CppOutput { get; set; }
+
+ [Option("cs", Required = false, HelpText = "C# output file")]
+ public string CSharpOutput { get; set; }
+
+ }
+
+ static int Main(string[] args)
+ {
+ var p = Parser.Default.ParseArguments(args);
+ if (p is NotParsed)
+ {
+ return 1;
+ }
+
+ var opts = ((Parsed)p).Value;
+
+ var text = File.ReadAllText(opts.Input);
+ var ast = AstParser.Parse(text);
+
+ if (opts.CppOutput != null)
+ File.WriteAllText(opts.CppOutput, CppGen.GenerateCpp(ast));
+ if (opts.CSharpOutput != null)
+ File.WriteAllText(opts.CSharpOutput, new CSharpGen(ast).Generate());
+
+ return 0;
+ }
+ }
+}
diff --git a/src/tools/MicroComGenerator/TokenParser.cs b/src/tools/MicroComGenerator/TokenParser.cs
new file mode 100644
index 0000000000..ea8850b8e4
--- /dev/null
+++ b/src/tools/MicroComGenerator/TokenParser.cs
@@ -0,0 +1,417 @@
+using System;
+using System.Globalization;
+using System.IO;
+
+namespace MicroComGenerator
+{
+ internal ref struct TokenParser
+ {
+ private ReadOnlySpan _s;
+ public int Position { get; private set; }
+ public int Line { get; private set; }
+ public TokenParser(ReadOnlySpan s)
+ {
+ _s = s;
+ Position = 0;
+ Line = 0;
+ }
+
+ public void SkipWhitespace()
+ {
+ while (true)
+ {
+ if(_s.Length == 0)
+ return;
+ if (char.IsWhiteSpace(_s[0]))
+ Advance(1);
+ else if (_s[0] == '/' && _s.Length>1)
+ {
+ if (_s[1] == '/')
+ SkipOneLineComment();
+ else if (_s[1] == '*')
+ SkipMultiLineComment();
+ else
+ return;
+ }
+ else
+ return;
+ }
+ }
+
+ void SkipOneLineComment()
+ {
+ while (true)
+ {
+ if (_s.Length > 0 && _s[0] != '\n' && _s[0] != '\r')
+ Advance(1);
+ else
+ return;
+ }
+ }
+
+ void SkipMultiLineComment()
+ {
+ var l = Line;
+ var p = Position;
+ while (true)
+ {
+ if (_s.Length == 0)
+ throw new ParseException("No matched */ found for /*", l, p);
+
+ if (_s[0] == '*' && _s.Length > 1 && _s[1] == '/')
+ {
+ Advance(2);
+ return;
+ }
+
+ Advance(1);
+ }
+ }
+
+ static bool IsAlphaNumeric(char ch) => (ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') ||
+ (ch >= 'A' && ch <= 'Z');
+
+ public void Consume(char c)
+ {
+ if (!TryConsume(c))
+ throw new ParseException("Expected " + c, Line, Position);
+ }
+ public bool TryConsume(char c)
+ {
+ SkipWhitespace();
+ if (_s.Length == 0 || _s[0] != c)
+ return false;
+
+ Advance(1);
+ return true;
+ }
+
+ public bool TryConsume(string s)
+ {
+ SkipWhitespace();
+ if (_s.Length < s.Length)
+ return false;
+ for (var c = 0; c < s.Length; c++)
+ {
+ if (_s[c] != s[c])
+ return false;
+ }
+
+ Advance(s.Length);
+ return true;
+ }
+
+ public bool TryConsumeAny(ReadOnlySpan chars, out char token)
+ {
+ SkipWhitespace();
+ token = default;
+ if (_s.Length == 0)
+ return false;
+
+ foreach (var c in chars)
+ {
+ if (c == _s[0])
+ {
+ token = c;
+ Advance(1);
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+
+ public bool TryParseKeyword(string keyword)
+ {
+ SkipWhitespace();
+ if (keyword.Length > _s.Length)
+ return false;
+ for(var c=0; c keyword.Length && IsAlphaNumeric(_s[keyword.Length]))
+ return false;
+
+ Advance(keyword.Length);
+ return true;
+ }
+
+ public bool TryParseKeywordLowerCase(string keywordInLowerCase)
+ {
+ SkipWhitespace();
+ if (keywordInLowerCase.Length > _s.Length)
+ return false;
+ for(var c=0; c keywordInLowerCase.Length && IsAlphaNumeric(_s[keywordInLowerCase.Length]))
+ return false;
+
+ Advance(keywordInLowerCase.Length);
+ return true;
+ }
+
+ public void Advance(int c)
+ {
+ while (c > 0)
+ {
+ if (_s[0] == '\n')
+ {
+ Line++;
+ Position = 0;
+ }
+ else
+ Position++;
+
+ _s = _s.Slice(1);
+ c--;
+ }
+ }
+
+ public int Length => _s.Length;
+ public bool Eof
+ {
+ get
+ {
+ SkipWhitespace();
+ return Length == 0;
+ }
+ }
+
+ public char Peek
+ {
+ get
+ {
+ if (_s.Length == 0)
+ throw new ParseException("Unexpected EOF", Line, Position);
+ return _s[0];
+ }
+ }
+
+ public string ParseIdentifier(ReadOnlySpan extraValidChars)
+ {
+ if (!TryParseIdentifier(extraValidChars, out var ident))
+ throw new ParseException("Identifier expected", Line, Position);
+ return ident.ToString();
+ }
+
+ public string ParseIdentifier()
+ {
+ if (!TryParseIdentifier(out var ident))
+ throw new ParseException("Identifier expected", Line, Position);
+ return ident.ToString();
+ }
+
+ public bool TryParseIdentifier(ReadOnlySpan extraValidChars, out ReadOnlySpan res)
+ {
+ res = ReadOnlySpan.Empty;
+ SkipWhitespace();
+ if (_s.Length == 0)
+ return false;
+ var first = _s[0];
+ if (!((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z') || first == '_'))
+ return false;
+ int len = 1;
+ for (var c = 1; c < _s.Length; c++)
+ {
+ var ch = _s[c];
+ if (IsAlphaNumeric(ch) || ch == '_')
+ len++;
+ else
+ {
+ var found = false;
+ foreach(var vc in extraValidChars)
+ if (vc == ch)
+ {
+ found = true;
+ break;
+ }
+
+ if (found)
+ len++;
+ else
+ break;
+ }
+ }
+
+ res = _s.Slice(0, len);
+ Advance(len);
+ return true;
+ }
+
+ public bool TryParseIdentifier(out ReadOnlySpan res)
+ {
+ res = ReadOnlySpan.Empty;
+ SkipWhitespace();
+ if (_s.Length == 0)
+ return false;
+ var first = _s[0];
+ if (!((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z') || first == '_'))
+ return false;
+ int len = 1;
+ for (var c = 1; c < _s.Length; c++)
+ {
+ var ch = _s[c];
+ if (IsAlphaNumeric(ch) || ch == '_')
+ len++;
+ else
+ break;
+ }
+
+ res = _s.Slice(0, len);
+ Advance(len);
+ return true;
+ }
+
+ public string ReadToEol()
+ {
+ var initial = _s;
+ var len = 0;
+ while (true)
+ {
+ if (_s.Length > 0 && _s[0] != '\n' && _s[0] != '\r')
+ {
+ len++;
+ Advance(1);
+ }
+ else
+ return initial.Slice(0, len).ToString();
+ }
+ }
+
+ public string ReadTo(char c)
+ {
+ var initial = _s;
+ var len = 0;
+ var l = Line;
+ var p = Position;
+ while (true)
+ {
+ if (_s.Length == 0)
+ throw new ParseException("Expected " + c + " before EOF", l, p);
+
+ if (_s[0] != c)
+ {
+ len++;
+ Advance(1);
+ }
+ else
+ return initial.Slice(0, len).ToString();
+ }
+ }
+
+ public string ReadToAny(ReadOnlySpan chars)
+ {
+ var initial = _s;
+ var len = 0;
+ var l = Line;
+ var p = Position;
+ while (true)
+ {
+ if (_s.Length == 0)
+ throw new ParseException("Expected any of '" + chars.ToString() + "' before EOF", l, p);
+
+ var foundTerminator = false;
+ foreach (var term in chars)
+ {
+ if (_s[0] == term)
+ {
+ foundTerminator = true;
+ break;
+ }
+ }
+
+ if (!foundTerminator)
+ {
+ len++;
+ Advance(1);
+ }
+ else
+ return initial.Slice(0, len).ToString();
+ }
+ }
+
+ public bool TryParseCall(out ReadOnlySpan res)
+ {
+ res = ReadOnlySpan.Empty;
+ SkipWhitespace();
+ if (_s.Length == 0)
+ return false;
+ var first = _s[0];
+ if (!((first >= 'a' && first <= 'z') || (first >= 'A' && first <= 'Z')))
+ return false;
+ int len = 1;
+ for (var c = 1; c < _s.Length; c++)
+ {
+ var ch = _s[c];
+ if ((ch >= '0' && ch <= '9') || (ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch<= 'Z') || ch == '.')
+ len++;
+ else
+ break;
+ }
+
+ res = _s.Slice(0, len);
+
+ // Find '('
+ for (var c = len; c < _s.Length; c++)
+ {
+ if(char.IsWhiteSpace(_s[c]))
+ continue;
+ if(_s[c]=='(')
+ {
+ Advance(c + 1);
+ return true;
+ }
+
+ return false;
+
+ }
+
+ return false;
+
+ }
+
+
+ public bool TryParseFloat(out float res)
+ {
+ res = 0;
+ SkipWhitespace();
+ if (_s.Length == 0)
+ return false;
+
+ var len = 0;
+ var dotCount = 0;
+ for (var c = 0; c < _s.Length; c++)
+ {
+ var ch = _s[c];
+ if (ch >= '0' && ch <= '9')
+ len = c + 1;
+ else if (ch == '.' && dotCount == 0)
+ {
+ len = c + 1;
+ dotCount++;
+ }
+ else
+ break;
+ }
+
+ var span = _s.Slice(0, len);
+
+#if NETSTANDARD2_0
+ if (!float.TryParse(span.ToString(), NumberStyles.Number, CultureInfo.InvariantCulture, out res))
+ return false;
+#else
+ if (!float.TryParse(span, NumberStyles.Number, CultureInfo.InvariantCulture, out res))
+ return false;
+#endif
+ Advance(len);
+ return true;
+ }
+
+ public override string ToString() => _s.ToString();
+
+ }
+}