15 changed files with 86 additions and 547 deletions
@ -0,0 +1 @@ |
|||
avalonia-native.h |
|||
@ -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(); |
|||
@ -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)); |
|||
}); |
|||
} |
|||
Loading…
Reference in new issue