Introduction
PAL 2 consists of a number of components that allows the user to create windows and interact with the user system. These interfaces are designed to work cross-platform. But sometimes there are functions and settings that are so platform specific that these is no good cross-platform API for them.
Platform specific component APIs can be accessed by casting the component interface to it's concrete platform type. For example, Toolkit.Clipboard
has windows specific settings related to cloud clipboard syncing and history, which can be accessed like follows:
// By using 'as' and ?. we can run this code on all platforms
// but the effects will only take effect on windows.
(Toolkit.Clipboard as Native.Windows.WindowComponent)?.CanUploadToCloudClipboard = false;
(Toolkit.Clipboard as Native.Windows.WindowComponent)?.CanIncludeInClipboardHistory = true;
Windows
The following is a list of windows specific settings and functions.
Function | Description |
---|---|
WindowComponent |
|
WindowComponent.GetHWND |
Gets the native Win32 HWND handle for the window. |
OpenGLComponent |
|
OpenGLComponent.UseDwmFlushIfApplicable |
Sets if SwapBuffers should call DwmFlush() to sync if DWM compositing is enabled. |
OpenGLComponent.GetHGLRC |
Gets the native Win32 HGLRC handle for the OpenGL context. |
DisplayComponent |
|
DisplayComponent.GetAdapter |
Gets the native Win32 adapter name (e.g. \\.\DISPLAY1 ) for the display handle. |
DisplayComponent.GetMonitor |
Gets the native Win32 monitor name (e.g. \\.\DISPLAY1\Monitor0 ) for the display handle. |
ShellComponent |
|
ShellComponent.SetImmersiveDarkMode |
Sets the DWMWA_USE_IMMERSIVE_DARK_MODE flag on the window causing the titlebar be rendered in dark mode colors. This is only officially supported from Window 11 Build 220000, but can sometimes work on Windows 10. |
ShellComponent.SetCaptionTextColor |
Used to set the text color in the windows titlebar. This is only officially supported from Window 11 Build 220000, but can sometimes work on Windows 10. |
ShellComponent.SetCaptionColor |
Used to set the color of the window titlebar. This is only officially supported from Window 11 Build 220000, but can sometimes work on Windows 10. |
ShellComponent.SetWindowCornerPreference |
Used to set the rounded corner preference on Windows 11. |
IconComponent |
|
IconComponent.CreateFromIcoFile |
Used to create an IconHandle from a .ico file. An icon created using this function will be able to dynamically pick resolution if the file contains multiple resolutions. |
IconComponent.CreateFromIcoResource(byte[]) |
Used to create an IconHandle from a .ico file embedded as a .resx resource. An Icon created using this function will not be able to dynamically pick resolution. |
IconComponent.CreateFromIcoResource(String) |
Used to create an IconHandle from a win32 embedded resource created using an .rc file and <Win32Resource> . |
IconComponent.GetBitmapData |
Allows for extracting icon data. Works with system icons. |
IconComponent.GetBitmapByteSize |
Returns the size in bytes of the bitmap data. For use with IconComponent.GetBitmapData . |
CursorComponent |
|
CursorComponent.CreateFromCurFile |
Used to create a CursorHandle from a .cur file. |
CursorComponent.CreateFromCurResorce(byte[]) |
Used to create a CursorHandle from a .cur file embedded in a .resx file. Does not support .ani files. |
CursorComponent.CreateFromCurResorce(String) |
Used to create a CursorHandle from a .cur file embedded in a .rc file and using <Win32Resource> . |
CursorComponent.GetImage |
Allows for extracting cursor data. Works with system cursors. |
ClipboardComponent |
|
ClipboardComponent.CanIncludeInClipboardHistory |
Toggles whether clipboard data set using SetClipboardText is allowed to be stored in the clipboard history. |
ClipboardComponent.CanUploadToCloudClipboard |
Toggles whether clipboard data set using SetClipboardText can be by synced between the users devices. |
ClipboardComponent.SetClipboardAudio |
Allows uploading audio data to the clipboard. Audio clipboard support is generally poorly supported by audio applications. |
ClipboardComponent.SetClipboardBitmap |
Allows uploading image data to the clipboard. |
Linux X11
The following is a list of linux x11 specific settings and functions.
Function | Description |
---|---|
WindowComponent |
|
X11WindowComponent.GetIconifiedTitle |
Gets the iconified window title. |
X11WindowComponent.SetIconifiedTitle |
Sets the iconified window title. |
X11WindowComponent.DemandAttention |
Shows a popup to the user that the window is ready. |
X11WindowComponent.GetX11Display |
Gets the X11 Display used by OpenTK. |
X11WindowComponent.GetX11Window |
Gets the X11 Window for this window handle. |
X11OpenGLComponent |
|
X11OpenGLComponent.EXT_swap_control_GetMaxSwapInterval |
Queries EXT_swap_control for the maximum supported swap interval. |
X11OpenGLComponent.GetGLXContext |
Get the GLX GLXContext for the OpenGL context. |
X11OpenGLComponent.GetGLXWindow |
Get the GLX GLXWindow for the OpenGL context. |
X11DisplayComponent |
|
X11DisplayComponent.GetRRCrtc |
Get the X11 RandR RRCrtc for the display handle. |
X11DisplayComponent.GetRROutput |
Get the X11 RandR RROutput for the display handle. |
X11IconComponent |
|
X11IconComponent.Create(int, int, IconImage[]) |
Used to create multi-resolution icons. |
macOS
The following is a list of macOS specific settings and functions.
Function | Description |
---|---|
MacOSWindowComponent |
|
MacOSWindowComponent.SetDockIcon |
Sets the dock icon of the application |
MacOSWindowComponent.SetFullscreenDisplayNoSpace |
Make the window fullscreen without creating a new space for the window. |
MacOSWindowComponent.GetNSWindow |
Gets the NSWindow of the window handle. This is an instance of the NSOpenTKWindow subclass of NSWindow . |
MacOSWindowComponent.GetNSView |
Gets the NSView of the window handle. This is an instance of the NSOpenTKView subclass of NSView . |
MacOSOpenGLComponent |
|
MacOSOpenGLComponent.GetNSOpenGLContext |
Gets the NSOpenGLContext of the OpenGL context handle. |
MacOSIconComponent |
|
MacOSIconComponent.CreateSFSymbol |
Creates a IconHandle from a SF symbol name. |
MacOSDisplayComponent |
|
MacOSDisplayComponent.GetSafeArea |
Gets the area of the screen that is not covered by things like camera housings. |
MacOSDisplayComponent.GetSafeLeftAuxArea |
Gets the visible area of the screen to the left of the camera housing or an empty area if there is no camera housing. |
MacOSDisplayComponent.GetSafeRightAuxArea |
Gets the visible area of the screen to the right of the camera housing or an empty area of there is no camera housing. |
MacOSDisplayComponent.GetDirectDisplayID |
Gets the CGDirectDisplayID for the display handle. |
MacOSCursorComponent |
|
MacOSCursorComponent.Create(Frame[] frames, float delay) |
Used to create an animated cursor. |
MacOSCursorComponent.IsAnimatedCursor |
Used to check if a given cursor is animated. |
MacOSCursorComponent.UpdateAnimation |
Used to update the animation of a given cursor. |
ANGLE
When using ANGLE to create OpenGL contexts ANGLEOpenGLComponent
exposes a few ANGLE specific functions.
Function | Description |
---|---|
ANGLEOpenGLComponent |
|
ANGLEOpenGLComponent.GetEglDisplay |
Gets the EGLDisplay used by OpenTK. |
ANGLEOpenGLComponent.GetEglContext |
Gets the EGLContext for the OpenGL context. |
ANGLEOpenGLComponent.GetEglSurface |
Gets the EGLSurface for the OpenGL context. |