mirror of
https://github.com/glfw/glfw.git
synced 2025-04-20 15:42:51 +00:00
This moves the X11 polling implementation to a separate file where it can be used by either the X11 or Wayland backend or both. This code should be POSIX compatible where necessary but will use the lower latency but non-standard polling functions ppoll or pollts where those are available. This commit is based on work by OlivierSohn and kovidgoyal. Fixes #1281 Closes #1285
1004 lines
44 KiB
C
1004 lines
44 KiB
C
//========================================================================
|
|
// GLFW 3.4 X11 - www.glfw.org
|
|
//------------------------------------------------------------------------
|
|
// Copyright (c) 2002-2006 Marcus Geelnard
|
|
// Copyright (c) 2006-2019 Camilla Löwy <elmindreda@glfw.org>
|
|
//
|
|
// This software is provided 'as-is', without any express or implied
|
|
// warranty. In no event will the authors be held liable for any damages
|
|
// arising from the use of this software.
|
|
//
|
|
// Permission is granted to anyone to use this software for any purpose,
|
|
// including commercial applications, and to alter it and redistribute it
|
|
// freely, subject to the following restrictions:
|
|
//
|
|
// 1. The origin of this software must not be misrepresented; you must not
|
|
// claim that you wrote the original software. If you use this software
|
|
// in a product, an acknowledgment in the product documentation would
|
|
// be appreciated but is not required.
|
|
//
|
|
// 2. Altered source versions must be plainly marked as such, and must not
|
|
// be misrepresented as being the original software.
|
|
//
|
|
// 3. This notice may not be removed or altered from any source
|
|
// distribution.
|
|
//
|
|
//========================================================================
|
|
|
|
#include <unistd.h>
|
|
#include <signal.h>
|
|
#include <stdint.h>
|
|
|
|
#include <X11/Xlib.h>
|
|
#include <X11/keysym.h>
|
|
#include <X11/Xatom.h>
|
|
#include <X11/Xresource.h>
|
|
#include <X11/Xcursor/Xcursor.h>
|
|
|
|
// The XRandR extension provides mode setting and gamma control
|
|
#include <X11/extensions/Xrandr.h>
|
|
|
|
// The Xkb extension provides improved keyboard support
|
|
#include <X11/XKBlib.h>
|
|
|
|
// The Xinerama extension provides legacy monitor indices
|
|
#include <X11/extensions/Xinerama.h>
|
|
|
|
// The XInput extension provides raw mouse motion input
|
|
#include <X11/extensions/XInput2.h>
|
|
|
|
// The Shape extension provides custom window shapes
|
|
#include <X11/extensions/shape.h>
|
|
|
|
#define GLX_VENDOR 1
|
|
#define GLX_RGBA_BIT 0x00000001
|
|
#define GLX_WINDOW_BIT 0x00000001
|
|
#define GLX_DRAWABLE_TYPE 0x8010
|
|
#define GLX_RENDER_TYPE 0x8011
|
|
#define GLX_RGBA_TYPE 0x8014
|
|
#define GLX_DOUBLEBUFFER 5
|
|
#define GLX_STEREO 6
|
|
#define GLX_AUX_BUFFERS 7
|
|
#define GLX_RED_SIZE 8
|
|
#define GLX_GREEN_SIZE 9
|
|
#define GLX_BLUE_SIZE 10
|
|
#define GLX_ALPHA_SIZE 11
|
|
#define GLX_DEPTH_SIZE 12
|
|
#define GLX_STENCIL_SIZE 13
|
|
#define GLX_ACCUM_RED_SIZE 14
|
|
#define GLX_ACCUM_GREEN_SIZE 15
|
|
#define GLX_ACCUM_BLUE_SIZE 16
|
|
#define GLX_ACCUM_ALPHA_SIZE 17
|
|
#define GLX_SAMPLES 0x186a1
|
|
#define GLX_VISUAL_ID 0x800b
|
|
|
|
#define GLX_FRAMEBUFFER_SRGB_CAPABLE_ARB 0x20b2
|
|
#define GLX_CONTEXT_DEBUG_BIT_ARB 0x00000001
|
|
#define GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB 0x00000002
|
|
#define GLX_CONTEXT_CORE_PROFILE_BIT_ARB 0x00000001
|
|
#define GLX_CONTEXT_PROFILE_MASK_ARB 0x9126
|
|
#define GLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB 0x00000002
|
|
#define GLX_CONTEXT_MAJOR_VERSION_ARB 0x2091
|
|
#define GLX_CONTEXT_MINOR_VERSION_ARB 0x2092
|
|
#define GLX_CONTEXT_FLAGS_ARB 0x2094
|
|
#define GLX_CONTEXT_ES2_PROFILE_BIT_EXT 0x00000004
|
|
#define GLX_CONTEXT_ROBUST_ACCESS_BIT_ARB 0x00000004
|
|
#define GLX_LOSE_CONTEXT_ON_RESET_ARB 0x8252
|
|
#define GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB 0x8256
|
|
#define GLX_NO_RESET_NOTIFICATION_ARB 0x8261
|
|
#define GLX_CONTEXT_RELEASE_BEHAVIOR_ARB 0x2097
|
|
#define GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB 0
|
|
#define GLX_CONTEXT_RELEASE_BEHAVIOR_FLUSH_ARB 0x2098
|
|
#define GLX_CONTEXT_OPENGL_NO_ERROR_ARB 0x31b3
|
|
|
|
typedef XID GLXWindow;
|
|
typedef XID GLXDrawable;
|
|
typedef struct __GLXFBConfig* GLXFBConfig;
|
|
typedef struct __GLXcontext* GLXContext;
|
|
typedef void (*__GLXextproc)(void);
|
|
|
|
typedef XClassHint* (* PFN_XAllocClassHint)(void);
|
|
typedef XSizeHints* (* PFN_XAllocSizeHints)(void);
|
|
typedef XWMHints* (* PFN_XAllocWMHints)(void);
|
|
typedef int (* PFN_XChangeProperty)(Display*,Window,Atom,Atom,int,int,const unsigned char*,int);
|
|
typedef int (* PFN_XChangeWindowAttributes)(Display*,Window,unsigned long,XSetWindowAttributes*);
|
|
typedef Bool (* PFN_XCheckIfEvent)(Display*,XEvent*,Bool(*)(Display*,XEvent*,XPointer),XPointer);
|
|
typedef Bool (* PFN_XCheckTypedWindowEvent)(Display*,Window,int,XEvent*);
|
|
typedef int (* PFN_XCloseDisplay)(Display*);
|
|
typedef Status (* PFN_XCloseIM)(XIM);
|
|
typedef int (* PFN_XConvertSelection)(Display*,Atom,Atom,Atom,Window,Time);
|
|
typedef Colormap (* PFN_XCreateColormap)(Display*,Window,Visual*,int);
|
|
typedef Cursor (* PFN_XCreateFontCursor)(Display*,unsigned int);
|
|
typedef XIC (* PFN_XCreateIC)(XIM,...);
|
|
typedef Region (* PFN_XCreateRegion)(void);
|
|
typedef Window (* PFN_XCreateWindow)(Display*,Window,int,int,unsigned int,unsigned int,unsigned int,int,unsigned int,Visual*,unsigned long,XSetWindowAttributes*);
|
|
typedef int (* PFN_XDefineCursor)(Display*,Window,Cursor);
|
|
typedef int (* PFN_XDeleteContext)(Display*,XID,XContext);
|
|
typedef int (* PFN_XDeleteProperty)(Display*,Window,Atom);
|
|
typedef void (* PFN_XDestroyIC)(XIC);
|
|
typedef int (* PFN_XDestroyRegion)(Region);
|
|
typedef int (* PFN_XDestroyWindow)(Display*,Window);
|
|
typedef int (* PFN_XDisplayKeycodes)(Display*,int*,int*);
|
|
typedef int (* PFN_XEventsQueued)(Display*,int);
|
|
typedef Bool (* PFN_XFilterEvent)(XEvent*,Window);
|
|
typedef int (* PFN_XFindContext)(Display*,XID,XContext,XPointer*);
|
|
typedef int (* PFN_XFlush)(Display*);
|
|
typedef int (* PFN_XFree)(void*);
|
|
typedef int (* PFN_XFreeColormap)(Display*,Colormap);
|
|
typedef int (* PFN_XFreeCursor)(Display*,Cursor);
|
|
typedef void (* PFN_XFreeEventData)(Display*,XGenericEventCookie*);
|
|
typedef int (* PFN_XGetErrorText)(Display*,int,char*,int);
|
|
typedef Bool (* PFN_XGetEventData)(Display*,XGenericEventCookie*);
|
|
typedef char* (* PFN_XGetICValues)(XIC,...);
|
|
typedef char* (* PFN_XGetIMValues)(XIM,...);
|
|
typedef int (* PFN_XGetInputFocus)(Display*,Window*,int*);
|
|
typedef KeySym* (* PFN_XGetKeyboardMapping)(Display*,KeyCode,int,int*);
|
|
typedef int (* PFN_XGetScreenSaver)(Display*,int*,int*,int*,int*);
|
|
typedef Window (* PFN_XGetSelectionOwner)(Display*,Atom);
|
|
typedef XVisualInfo* (* PFN_XGetVisualInfo)(Display*,long,XVisualInfo*,int*);
|
|
typedef Status (* PFN_XGetWMNormalHints)(Display*,Window,XSizeHints*,long*);
|
|
typedef Status (* PFN_XGetWindowAttributes)(Display*,Window,XWindowAttributes*);
|
|
typedef int (* PFN_XGetWindowProperty)(Display*,Window,Atom,long,long,Bool,Atom,Atom*,int*,unsigned long*,unsigned long*,unsigned char**);
|
|
typedef int (* PFN_XGrabPointer)(Display*,Window,Bool,unsigned int,int,int,Window,Cursor,Time);
|
|
typedef Status (* PFN_XIconifyWindow)(Display*,Window,int);
|
|
typedef Status (* PFN_XInitThreads)(void);
|
|
typedef Atom (* PFN_XInternAtom)(Display*,const char*,Bool);
|
|
typedef int (* PFN_XLookupString)(XKeyEvent*,char*,int,KeySym*,XComposeStatus*);
|
|
typedef int (* PFN_XMapRaised)(Display*,Window);
|
|
typedef int (* PFN_XMapWindow)(Display*,Window);
|
|
typedef int (* PFN_XMoveResizeWindow)(Display*,Window,int,int,unsigned int,unsigned int);
|
|
typedef int (* PFN_XMoveWindow)(Display*,Window,int,int);
|
|
typedef int (* PFN_XNextEvent)(Display*,XEvent*);
|
|
typedef Display* (* PFN_XOpenDisplay)(const char*);
|
|
typedef XIM (* PFN_XOpenIM)(Display*,XrmDatabase*,char*,char*);
|
|
typedef int (* PFN_XPeekEvent)(Display*,XEvent*);
|
|
typedef int (* PFN_XPending)(Display*);
|
|
typedef Bool (* PFN_XQueryExtension)(Display*,const char*,int*,int*,int*);
|
|
typedef Bool (* PFN_XQueryPointer)(Display*,Window,Window*,Window*,int*,int*,int*,int*,unsigned int*);
|
|
typedef int (* PFN_XRaiseWindow)(Display*,Window);
|
|
typedef Bool (* PFN_XRegisterIMInstantiateCallback)(Display*,void*,char*,char*,XIDProc,XPointer);
|
|
typedef int (* PFN_XResizeWindow)(Display*,Window,unsigned int,unsigned int);
|
|
typedef char* (* PFN_XResourceManagerString)(Display*);
|
|
typedef int (* PFN_XSaveContext)(Display*,XID,XContext,const char*);
|
|
typedef int (* PFN_XSelectInput)(Display*,Window,long);
|
|
typedef Status (* PFN_XSendEvent)(Display*,Window,Bool,long,XEvent*);
|
|
typedef int (* PFN_XSetClassHint)(Display*,Window,XClassHint*);
|
|
typedef XErrorHandler (* PFN_XSetErrorHandler)(XErrorHandler);
|
|
typedef void (* PFN_XSetICFocus)(XIC);
|
|
typedef char* (* PFN_XSetIMValues)(XIM,...);
|
|
typedef int (* PFN_XSetInputFocus)(Display*,Window,int,Time);
|
|
typedef char* (* PFN_XSetLocaleModifiers)(const char*);
|
|
typedef int (* PFN_XSetScreenSaver)(Display*,int,int,int,int);
|
|
typedef int (* PFN_XSetSelectionOwner)(Display*,Atom,Window,Time);
|
|
typedef int (* PFN_XSetWMHints)(Display*,Window,XWMHints*);
|
|
typedef void (* PFN_XSetWMNormalHints)(Display*,Window,XSizeHints*);
|
|
typedef Status (* PFN_XSetWMProtocols)(Display*,Window,Atom*,int);
|
|
typedef Bool (* PFN_XSupportsLocale)(void);
|
|
typedef int (* PFN_XSync)(Display*,Bool);
|
|
typedef Bool (* PFN_XTranslateCoordinates)(Display*,Window,Window,int,int,int*,int*,Window*);
|
|
typedef int (* PFN_XUndefineCursor)(Display*,Window);
|
|
typedef int (* PFN_XUngrabPointer)(Display*,Time);
|
|
typedef int (* PFN_XUnmapWindow)(Display*,Window);
|
|
typedef void (* PFN_XUnsetICFocus)(XIC);
|
|
typedef VisualID (* PFN_XVisualIDFromVisual)(Visual*);
|
|
typedef int (* PFN_XWarpPointer)(Display*,Window,Window,int,int,unsigned int,unsigned int,int,int);
|
|
typedef void (* PFN_XkbFreeKeyboard)(XkbDescPtr,unsigned int,Bool);
|
|
typedef void (* PFN_XkbFreeNames)(XkbDescPtr,unsigned int,Bool);
|
|
typedef XkbDescPtr (* PFN_XkbGetMap)(Display*,unsigned int,unsigned int);
|
|
typedef Status (* PFN_XkbGetNames)(Display*,unsigned int,XkbDescPtr);
|
|
typedef Status (* PFN_XkbGetState)(Display*,unsigned int,XkbStatePtr);
|
|
typedef KeySym (* PFN_XkbKeycodeToKeysym)(Display*,KeyCode,int,int);
|
|
typedef Bool (* PFN_XkbQueryExtension)(Display*,int*,int*,int*,int*,int*);
|
|
typedef Bool (* PFN_XkbSelectEventDetails)(Display*,unsigned int,unsigned int,unsigned long,unsigned long);
|
|
typedef Bool (* PFN_XkbSetDetectableAutoRepeat)(Display*,Bool,Bool*);
|
|
typedef void (* PFN_XrmDestroyDatabase)(XrmDatabase);
|
|
typedef Bool (* PFN_XrmGetResource)(XrmDatabase,const char*,const char*,char**,XrmValue*);
|
|
typedef XrmDatabase (* PFN_XrmGetStringDatabase)(const char*);
|
|
typedef void (* PFN_XrmInitialize)(void);
|
|
typedef XrmQuark (* PFN_XrmUniqueQuark)(void);
|
|
typedef Bool (* PFN_XUnregisterIMInstantiateCallback)(Display*,void*,char*,char*,XIDProc,XPointer);
|
|
typedef int (* PFN_Xutf8LookupString)(XIC,XKeyPressedEvent*,char*,int,KeySym*,Status*);
|
|
typedef void (* PFN_Xutf8SetWMProperties)(Display*,Window,const char*,const char*,char**,int,XSizeHints*,XWMHints*,XClassHint*);
|
|
#define XAllocClassHint _glfw.x11.xlib.AllocClassHint
|
|
#define XAllocSizeHints _glfw.x11.xlib.AllocSizeHints
|
|
#define XAllocWMHints _glfw.x11.xlib.AllocWMHints
|
|
#define XChangeProperty _glfw.x11.xlib.ChangeProperty
|
|
#define XChangeWindowAttributes _glfw.x11.xlib.ChangeWindowAttributes
|
|
#define XCheckIfEvent _glfw.x11.xlib.CheckIfEvent
|
|
#define XCheckTypedWindowEvent _glfw.x11.xlib.CheckTypedWindowEvent
|
|
#define XCloseDisplay _glfw.x11.xlib.CloseDisplay
|
|
#define XCloseIM _glfw.x11.xlib.CloseIM
|
|
#define XConvertSelection _glfw.x11.xlib.ConvertSelection
|
|
#define XCreateColormap _glfw.x11.xlib.CreateColormap
|
|
#define XCreateFontCursor _glfw.x11.xlib.CreateFontCursor
|
|
#define XCreateIC _glfw.x11.xlib.CreateIC
|
|
#define XCreateRegion _glfw.x11.xlib.CreateRegion
|
|
#define XCreateWindow _glfw.x11.xlib.CreateWindow
|
|
#define XDefineCursor _glfw.x11.xlib.DefineCursor
|
|
#define XDeleteContext _glfw.x11.xlib.DeleteContext
|
|
#define XDeleteProperty _glfw.x11.xlib.DeleteProperty
|
|
#define XDestroyIC _glfw.x11.xlib.DestroyIC
|
|
#define XDestroyRegion _glfw.x11.xlib.DestroyRegion
|
|
#define XDestroyWindow _glfw.x11.xlib.DestroyWindow
|
|
#define XDisplayKeycodes _glfw.x11.xlib.DisplayKeycodes
|
|
#define XEventsQueued _glfw.x11.xlib.EventsQueued
|
|
#define XFilterEvent _glfw.x11.xlib.FilterEvent
|
|
#define XFindContext _glfw.x11.xlib.FindContext
|
|
#define XFlush _glfw.x11.xlib.Flush
|
|
#define XFree _glfw.x11.xlib.Free
|
|
#define XFreeColormap _glfw.x11.xlib.FreeColormap
|
|
#define XFreeCursor _glfw.x11.xlib.FreeCursor
|
|
#define XFreeEventData _glfw.x11.xlib.FreeEventData
|
|
#define XGetErrorText _glfw.x11.xlib.GetErrorText
|
|
#define XGetEventData _glfw.x11.xlib.GetEventData
|
|
#define XGetICValues _glfw.x11.xlib.GetICValues
|
|
#define XGetIMValues _glfw.x11.xlib.GetIMValues
|
|
#define XGetInputFocus _glfw.x11.xlib.GetInputFocus
|
|
#define XGetKeyboardMapping _glfw.x11.xlib.GetKeyboardMapping
|
|
#define XGetScreenSaver _glfw.x11.xlib.GetScreenSaver
|
|
#define XGetSelectionOwner _glfw.x11.xlib.GetSelectionOwner
|
|
#define XGetVisualInfo _glfw.x11.xlib.GetVisualInfo
|
|
#define XGetWMNormalHints _glfw.x11.xlib.GetWMNormalHints
|
|
#define XGetWindowAttributes _glfw.x11.xlib.GetWindowAttributes
|
|
#define XGetWindowProperty _glfw.x11.xlib.GetWindowProperty
|
|
#define XGrabPointer _glfw.x11.xlib.GrabPointer
|
|
#define XIconifyWindow _glfw.x11.xlib.IconifyWindow
|
|
#define XInternAtom _glfw.x11.xlib.InternAtom
|
|
#define XLookupString _glfw.x11.xlib.LookupString
|
|
#define XMapRaised _glfw.x11.xlib.MapRaised
|
|
#define XMapWindow _glfw.x11.xlib.MapWindow
|
|
#define XMoveResizeWindow _glfw.x11.xlib.MoveResizeWindow
|
|
#define XMoveWindow _glfw.x11.xlib.MoveWindow
|
|
#define XNextEvent _glfw.x11.xlib.NextEvent
|
|
#define XOpenIM _glfw.x11.xlib.OpenIM
|
|
#define XPeekEvent _glfw.x11.xlib.PeekEvent
|
|
#define XPending _glfw.x11.xlib.Pending
|
|
#define XQueryExtension _glfw.x11.xlib.QueryExtension
|
|
#define XQueryPointer _glfw.x11.xlib.QueryPointer
|
|
#define XRaiseWindow _glfw.x11.xlib.RaiseWindow
|
|
#define XRegisterIMInstantiateCallback _glfw.x11.xlib.RegisterIMInstantiateCallback
|
|
#define XResizeWindow _glfw.x11.xlib.ResizeWindow
|
|
#define XResourceManagerString _glfw.x11.xlib.ResourceManagerString
|
|
#define XSaveContext _glfw.x11.xlib.SaveContext
|
|
#define XSelectInput _glfw.x11.xlib.SelectInput
|
|
#define XSendEvent _glfw.x11.xlib.SendEvent
|
|
#define XSetClassHint _glfw.x11.xlib.SetClassHint
|
|
#define XSetErrorHandler _glfw.x11.xlib.SetErrorHandler
|
|
#define XSetICFocus _glfw.x11.xlib.SetICFocus
|
|
#define XSetIMValues _glfw.x11.xlib.SetIMValues
|
|
#define XSetInputFocus _glfw.x11.xlib.SetInputFocus
|
|
#define XSetLocaleModifiers _glfw.x11.xlib.SetLocaleModifiers
|
|
#define XSetScreenSaver _glfw.x11.xlib.SetScreenSaver
|
|
#define XSetSelectionOwner _glfw.x11.xlib.SetSelectionOwner
|
|
#define XSetWMHints _glfw.x11.xlib.SetWMHints
|
|
#define XSetWMNormalHints _glfw.x11.xlib.SetWMNormalHints
|
|
#define XSetWMProtocols _glfw.x11.xlib.SetWMProtocols
|
|
#define XSupportsLocale _glfw.x11.xlib.SupportsLocale
|
|
#define XSync _glfw.x11.xlib.Sync
|
|
#define XTranslateCoordinates _glfw.x11.xlib.TranslateCoordinates
|
|
#define XUndefineCursor _glfw.x11.xlib.UndefineCursor
|
|
#define XUngrabPointer _glfw.x11.xlib.UngrabPointer
|
|
#define XUnmapWindow _glfw.x11.xlib.UnmapWindow
|
|
#define XUnsetICFocus _glfw.x11.xlib.UnsetICFocus
|
|
#define XVisualIDFromVisual _glfw.x11.xlib.VisualIDFromVisual
|
|
#define XWarpPointer _glfw.x11.xlib.WarpPointer
|
|
#define XkbFreeKeyboard _glfw.x11.xkb.FreeKeyboard
|
|
#define XkbFreeNames _glfw.x11.xkb.FreeNames
|
|
#define XkbGetMap _glfw.x11.xkb.GetMap
|
|
#define XkbGetNames _glfw.x11.xkb.GetNames
|
|
#define XkbGetState _glfw.x11.xkb.GetState
|
|
#define XkbKeycodeToKeysym _glfw.x11.xkb.KeycodeToKeysym
|
|
#define XkbQueryExtension _glfw.x11.xkb.QueryExtension
|
|
#define XkbSelectEventDetails _glfw.x11.xkb.SelectEventDetails
|
|
#define XkbSetDetectableAutoRepeat _glfw.x11.xkb.SetDetectableAutoRepeat
|
|
#define XrmDestroyDatabase _glfw.x11.xrm.DestroyDatabase
|
|
#define XrmGetResource _glfw.x11.xrm.GetResource
|
|
#define XrmGetStringDatabase _glfw.x11.xrm.GetStringDatabase
|
|
#define XrmUniqueQuark _glfw.x11.xrm.UniqueQuark
|
|
#define XUnregisterIMInstantiateCallback _glfw.x11.xlib.UnregisterIMInstantiateCallback
|
|
#define Xutf8LookupString _glfw.x11.xlib.utf8LookupString
|
|
#define Xutf8SetWMProperties _glfw.x11.xlib.utf8SetWMProperties
|
|
|
|
typedef XRRCrtcGamma* (* PFN_XRRAllocGamma)(int);
|
|
typedef void (* PFN_XRRFreeCrtcInfo)(XRRCrtcInfo*);
|
|
typedef void (* PFN_XRRFreeGamma)(XRRCrtcGamma*);
|
|
typedef void (* PFN_XRRFreeOutputInfo)(XRROutputInfo*);
|
|
typedef void (* PFN_XRRFreeScreenResources)(XRRScreenResources*);
|
|
typedef XRRCrtcGamma* (* PFN_XRRGetCrtcGamma)(Display*,RRCrtc);
|
|
typedef int (* PFN_XRRGetCrtcGammaSize)(Display*,RRCrtc);
|
|
typedef XRRCrtcInfo* (* PFN_XRRGetCrtcInfo) (Display*,XRRScreenResources*,RRCrtc);
|
|
typedef XRROutputInfo* (* PFN_XRRGetOutputInfo)(Display*,XRRScreenResources*,RROutput);
|
|
typedef RROutput (* PFN_XRRGetOutputPrimary)(Display*,Window);
|
|
typedef XRRScreenResources* (* PFN_XRRGetScreenResourcesCurrent)(Display*,Window);
|
|
typedef Bool (* PFN_XRRQueryExtension)(Display*,int*,int*);
|
|
typedef Status (* PFN_XRRQueryVersion)(Display*,int*,int*);
|
|
typedef void (* PFN_XRRSelectInput)(Display*,Window,int);
|
|
typedef Status (* PFN_XRRSetCrtcConfig)(Display*,XRRScreenResources*,RRCrtc,Time,int,int,RRMode,Rotation,RROutput*,int);
|
|
typedef void (* PFN_XRRSetCrtcGamma)(Display*,RRCrtc,XRRCrtcGamma*);
|
|
typedef int (* PFN_XRRUpdateConfiguration)(XEvent*);
|
|
#define XRRAllocGamma _glfw.x11.randr.AllocGamma
|
|
#define XRRFreeCrtcInfo _glfw.x11.randr.FreeCrtcInfo
|
|
#define XRRFreeGamma _glfw.x11.randr.FreeGamma
|
|
#define XRRFreeOutputInfo _glfw.x11.randr.FreeOutputInfo
|
|
#define XRRFreeScreenResources _glfw.x11.randr.FreeScreenResources
|
|
#define XRRGetCrtcGamma _glfw.x11.randr.GetCrtcGamma
|
|
#define XRRGetCrtcGammaSize _glfw.x11.randr.GetCrtcGammaSize
|
|
#define XRRGetCrtcInfo _glfw.x11.randr.GetCrtcInfo
|
|
#define XRRGetOutputInfo _glfw.x11.randr.GetOutputInfo
|
|
#define XRRGetOutputPrimary _glfw.x11.randr.GetOutputPrimary
|
|
#define XRRGetScreenResourcesCurrent _glfw.x11.randr.GetScreenResourcesCurrent
|
|
#define XRRQueryExtension _glfw.x11.randr.QueryExtension
|
|
#define XRRQueryVersion _glfw.x11.randr.QueryVersion
|
|
#define XRRSelectInput _glfw.x11.randr.SelectInput
|
|
#define XRRSetCrtcConfig _glfw.x11.randr.SetCrtcConfig
|
|
#define XRRSetCrtcGamma _glfw.x11.randr.SetCrtcGamma
|
|
#define XRRUpdateConfiguration _glfw.x11.randr.UpdateConfiguration
|
|
|
|
typedef XcursorImage* (* PFN_XcursorImageCreate)(int,int);
|
|
typedef void (* PFN_XcursorImageDestroy)(XcursorImage*);
|
|
typedef Cursor (* PFN_XcursorImageLoadCursor)(Display*,const XcursorImage*);
|
|
typedef char* (* PFN_XcursorGetTheme)(Display*);
|
|
typedef int (* PFN_XcursorGetDefaultSize)(Display*);
|
|
typedef XcursorImage* (* PFN_XcursorLibraryLoadImage)(const char*,const char*,int);
|
|
#define XcursorImageCreate _glfw.x11.xcursor.ImageCreate
|
|
#define XcursorImageDestroy _glfw.x11.xcursor.ImageDestroy
|
|
#define XcursorImageLoadCursor _glfw.x11.xcursor.ImageLoadCursor
|
|
#define XcursorGetTheme _glfw.x11.xcursor.GetTheme
|
|
#define XcursorGetDefaultSize _glfw.x11.xcursor.GetDefaultSize
|
|
#define XcursorLibraryLoadImage _glfw.x11.xcursor.LibraryLoadImage
|
|
|
|
typedef Bool (* PFN_XineramaIsActive)(Display*);
|
|
typedef Bool (* PFN_XineramaQueryExtension)(Display*,int*,int*);
|
|
typedef XineramaScreenInfo* (* PFN_XineramaQueryScreens)(Display*,int*);
|
|
#define XineramaIsActive _glfw.x11.xinerama.IsActive
|
|
#define XineramaQueryExtension _glfw.x11.xinerama.QueryExtension
|
|
#define XineramaQueryScreens _glfw.x11.xinerama.QueryScreens
|
|
|
|
typedef XID xcb_window_t;
|
|
typedef XID xcb_visualid_t;
|
|
typedef struct xcb_connection_t xcb_connection_t;
|
|
typedef xcb_connection_t* (* PFN_XGetXCBConnection)(Display*);
|
|
#define XGetXCBConnection _glfw.x11.x11xcb.GetXCBConnection
|
|
|
|
typedef Bool (* PFN_XF86VidModeQueryExtension)(Display*,int*,int*);
|
|
typedef Bool (* PFN_XF86VidModeGetGammaRamp)(Display*,int,int,unsigned short*,unsigned short*,unsigned short*);
|
|
typedef Bool (* PFN_XF86VidModeSetGammaRamp)(Display*,int,int,unsigned short*,unsigned short*,unsigned short*);
|
|
typedef Bool (* PFN_XF86VidModeGetGammaRampSize)(Display*,int,int*);
|
|
#define XF86VidModeQueryExtension _glfw.x11.vidmode.QueryExtension
|
|
#define XF86VidModeGetGammaRamp _glfw.x11.vidmode.GetGammaRamp
|
|
#define XF86VidModeSetGammaRamp _glfw.x11.vidmode.SetGammaRamp
|
|
#define XF86VidModeGetGammaRampSize _glfw.x11.vidmode.GetGammaRampSize
|
|
|
|
typedef Status (* PFN_XIQueryVersion)(Display*,int*,int*);
|
|
typedef int (* PFN_XISelectEvents)(Display*,Window,XIEventMask*,int);
|
|
#define XIQueryVersion _glfw.x11.xi.QueryVersion
|
|
#define XISelectEvents _glfw.x11.xi.SelectEvents
|
|
|
|
typedef Bool (* PFN_XRenderQueryExtension)(Display*,int*,int*);
|
|
typedef Status (* PFN_XRenderQueryVersion)(Display*dpy,int*,int*);
|
|
typedef XRenderPictFormat* (* PFN_XRenderFindVisualFormat)(Display*,Visual const*);
|
|
#define XRenderQueryExtension _glfw.x11.xrender.QueryExtension
|
|
#define XRenderQueryVersion _glfw.x11.xrender.QueryVersion
|
|
#define XRenderFindVisualFormat _glfw.x11.xrender.FindVisualFormat
|
|
|
|
typedef Bool (* PFN_XShapeQueryExtension)(Display*,int*,int*);
|
|
typedef Status (* PFN_XShapeQueryVersion)(Display*dpy,int*,int*);
|
|
typedef void (* PFN_XShapeCombineRegion)(Display*,Window,int,int,int,Region,int);
|
|
typedef void (* PFN_XShapeCombineMask)(Display*,Window,int,int,int,Pixmap,int);
|
|
|
|
#define XShapeQueryExtension _glfw.x11.xshape.QueryExtension
|
|
#define XShapeQueryVersion _glfw.x11.xshape.QueryVersion
|
|
#define XShapeCombineRegion _glfw.x11.xshape.ShapeCombineRegion
|
|
#define XShapeCombineMask _glfw.x11.xshape.ShapeCombineMask
|
|
|
|
typedef int (*PFNGLXGETFBCONFIGATTRIBPROC)(Display*,GLXFBConfig,int,int*);
|
|
typedef const char* (*PFNGLXGETCLIENTSTRINGPROC)(Display*,int);
|
|
typedef Bool (*PFNGLXQUERYEXTENSIONPROC)(Display*,int*,int*);
|
|
typedef Bool (*PFNGLXQUERYVERSIONPROC)(Display*,int*,int*);
|
|
typedef void (*PFNGLXDESTROYCONTEXTPROC)(Display*,GLXContext);
|
|
typedef Bool (*PFNGLXMAKECURRENTPROC)(Display*,GLXDrawable,GLXContext);
|
|
typedef void (*PFNGLXSWAPBUFFERSPROC)(Display*,GLXDrawable);
|
|
typedef const char* (*PFNGLXQUERYEXTENSIONSSTRINGPROC)(Display*,int);
|
|
typedef GLXFBConfig* (*PFNGLXGETFBCONFIGSPROC)(Display*,int,int*);
|
|
typedef GLXContext (*PFNGLXCREATENEWCONTEXTPROC)(Display*,GLXFBConfig,int,GLXContext,Bool);
|
|
typedef __GLXextproc (* PFNGLXGETPROCADDRESSPROC)(const GLubyte *procName);
|
|
typedef void (*PFNGLXSWAPINTERVALEXTPROC)(Display*,GLXDrawable,int);
|
|
typedef XVisualInfo* (*PFNGLXGETVISUALFROMFBCONFIGPROC)(Display*,GLXFBConfig);
|
|
typedef GLXWindow (*PFNGLXCREATEWINDOWPROC)(Display*,GLXFBConfig,Window,const int*);
|
|
typedef void (*PFNGLXDESTROYWINDOWPROC)(Display*,GLXWindow);
|
|
|
|
typedef int (*PFNGLXSWAPINTERVALMESAPROC)(int);
|
|
typedef int (*PFNGLXSWAPINTERVALSGIPROC)(int);
|
|
typedef GLXContext (*PFNGLXCREATECONTEXTATTRIBSARBPROC)(Display*,GLXFBConfig,GLXContext,Bool,const int*);
|
|
|
|
// libGL.so function pointer typedefs
|
|
#define glXGetFBConfigs _glfw.glx.GetFBConfigs
|
|
#define glXGetFBConfigAttrib _glfw.glx.GetFBConfigAttrib
|
|
#define glXGetClientString _glfw.glx.GetClientString
|
|
#define glXQueryExtension _glfw.glx.QueryExtension
|
|
#define glXQueryVersion _glfw.glx.QueryVersion
|
|
#define glXDestroyContext _glfw.glx.DestroyContext
|
|
#define glXMakeCurrent _glfw.glx.MakeCurrent
|
|
#define glXSwapBuffers _glfw.glx.SwapBuffers
|
|
#define glXQueryExtensionsString _glfw.glx.QueryExtensionsString
|
|
#define glXCreateNewContext _glfw.glx.CreateNewContext
|
|
#define glXGetVisualFromFBConfig _glfw.glx.GetVisualFromFBConfig
|
|
#define glXCreateWindow _glfw.glx.CreateWindow
|
|
#define glXDestroyWindow _glfw.glx.DestroyWindow
|
|
|
|
typedef VkFlags VkXlibSurfaceCreateFlagsKHR;
|
|
typedef VkFlags VkXcbSurfaceCreateFlagsKHR;
|
|
|
|
typedef struct VkXlibSurfaceCreateInfoKHR
|
|
{
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkXlibSurfaceCreateFlagsKHR flags;
|
|
Display* dpy;
|
|
Window window;
|
|
} VkXlibSurfaceCreateInfoKHR;
|
|
|
|
typedef struct VkXcbSurfaceCreateInfoKHR
|
|
{
|
|
VkStructureType sType;
|
|
const void* pNext;
|
|
VkXcbSurfaceCreateFlagsKHR flags;
|
|
xcb_connection_t* connection;
|
|
xcb_window_t window;
|
|
} VkXcbSurfaceCreateInfoKHR;
|
|
|
|
typedef VkResult (APIENTRY *PFN_vkCreateXlibSurfaceKHR)(VkInstance,const VkXlibSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
|
|
typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXlibPresentationSupportKHR)(VkPhysicalDevice,uint32_t,Display*,VisualID);
|
|
typedef VkResult (APIENTRY *PFN_vkCreateXcbSurfaceKHR)(VkInstance,const VkXcbSurfaceCreateInfoKHR*,const VkAllocationCallbacks*,VkSurfaceKHR*);
|
|
typedef VkBool32 (APIENTRY *PFN_vkGetPhysicalDeviceXcbPresentationSupportKHR)(VkPhysicalDevice,uint32_t,xcb_connection_t*,xcb_visualid_t);
|
|
|
|
#include "xkb_unicode.h"
|
|
#include "posix_poll.h"
|
|
|
|
#define GLFW_X11_WINDOW_STATE _GLFWwindowX11 x11;
|
|
#define GLFW_X11_LIBRARY_WINDOW_STATE _GLFWlibraryX11 x11;
|
|
#define GLFW_X11_MONITOR_STATE _GLFWmonitorX11 x11;
|
|
#define GLFW_X11_CURSOR_STATE _GLFWcursorX11 x11;
|
|
|
|
#define GLFW_GLX_CONTEXT_STATE _GLFWcontextGLX glx;
|
|
#define GLFW_GLX_LIBRARY_CONTEXT_STATE _GLFWlibraryGLX glx;
|
|
|
|
|
|
// GLX-specific per-context data
|
|
//
|
|
typedef struct _GLFWcontextGLX
|
|
{
|
|
GLXContext handle;
|
|
GLXWindow window;
|
|
} _GLFWcontextGLX;
|
|
|
|
// GLX-specific global data
|
|
//
|
|
typedef struct _GLFWlibraryGLX
|
|
{
|
|
int major, minor;
|
|
int eventBase;
|
|
int errorBase;
|
|
|
|
// dlopen handle for libGL.so.1
|
|
void* handle;
|
|
|
|
// GLX 1.3 functions
|
|
PFNGLXGETFBCONFIGSPROC GetFBConfigs;
|
|
PFNGLXGETFBCONFIGATTRIBPROC GetFBConfigAttrib;
|
|
PFNGLXGETCLIENTSTRINGPROC GetClientString;
|
|
PFNGLXQUERYEXTENSIONPROC QueryExtension;
|
|
PFNGLXQUERYVERSIONPROC QueryVersion;
|
|
PFNGLXDESTROYCONTEXTPROC DestroyContext;
|
|
PFNGLXMAKECURRENTPROC MakeCurrent;
|
|
PFNGLXSWAPBUFFERSPROC SwapBuffers;
|
|
PFNGLXQUERYEXTENSIONSSTRINGPROC QueryExtensionsString;
|
|
PFNGLXCREATENEWCONTEXTPROC CreateNewContext;
|
|
PFNGLXGETVISUALFROMFBCONFIGPROC GetVisualFromFBConfig;
|
|
PFNGLXCREATEWINDOWPROC CreateWindow;
|
|
PFNGLXDESTROYWINDOWPROC DestroyWindow;
|
|
|
|
// GLX 1.4 and extension functions
|
|
PFNGLXGETPROCADDRESSPROC GetProcAddress;
|
|
PFNGLXGETPROCADDRESSPROC GetProcAddressARB;
|
|
PFNGLXSWAPINTERVALSGIPROC SwapIntervalSGI;
|
|
PFNGLXSWAPINTERVALEXTPROC SwapIntervalEXT;
|
|
PFNGLXSWAPINTERVALMESAPROC SwapIntervalMESA;
|
|
PFNGLXCREATECONTEXTATTRIBSARBPROC CreateContextAttribsARB;
|
|
GLFWbool SGI_swap_control;
|
|
GLFWbool EXT_swap_control;
|
|
GLFWbool MESA_swap_control;
|
|
GLFWbool ARB_multisample;
|
|
GLFWbool ARB_framebuffer_sRGB;
|
|
GLFWbool EXT_framebuffer_sRGB;
|
|
GLFWbool ARB_create_context;
|
|
GLFWbool ARB_create_context_profile;
|
|
GLFWbool ARB_create_context_robustness;
|
|
GLFWbool EXT_create_context_es2_profile;
|
|
GLFWbool ARB_create_context_no_error;
|
|
GLFWbool ARB_context_flush_control;
|
|
} _GLFWlibraryGLX;
|
|
|
|
// X11-specific per-window data
|
|
//
|
|
typedef struct _GLFWwindowX11
|
|
{
|
|
Colormap colormap;
|
|
Window handle;
|
|
Window parent;
|
|
XIC ic;
|
|
|
|
GLFWbool overrideRedirect;
|
|
GLFWbool iconified;
|
|
GLFWbool maximized;
|
|
|
|
// Whether the visual supports framebuffer transparency
|
|
GLFWbool transparent;
|
|
|
|
// Cached position and size used to filter out duplicate events
|
|
int width, height;
|
|
int xpos, ypos;
|
|
|
|
// The last received cursor position, regardless of source
|
|
int lastCursorPosX, lastCursorPosY;
|
|
// The last position the cursor was warped to by GLFW
|
|
int warpCursorPosX, warpCursorPosY;
|
|
|
|
// The time of the last KeyPress event per keycode, for discarding
|
|
// duplicate key events generated for some keys by ibus
|
|
Time keyPressTimes[256];
|
|
} _GLFWwindowX11;
|
|
|
|
// X11-specific global data
|
|
//
|
|
typedef struct _GLFWlibraryX11
|
|
{
|
|
Display* display;
|
|
int screen;
|
|
Window root;
|
|
|
|
// System content scale
|
|
float contentScaleX, contentScaleY;
|
|
// Helper window for IPC
|
|
Window helperWindowHandle;
|
|
// Invisible cursor for hidden cursor mode
|
|
Cursor hiddenCursorHandle;
|
|
// Context for mapping window XIDs to _GLFWwindow pointers
|
|
XContext context;
|
|
// XIM input method
|
|
XIM im;
|
|
// Most recent error code received by X error handler
|
|
int errorCode;
|
|
// Primary selection string (while the primary selection is owned)
|
|
char* primarySelectionString;
|
|
// Clipboard string (while the selection is owned)
|
|
char* clipboardString;
|
|
// Key name string
|
|
char keynames[GLFW_KEY_LAST + 1][5];
|
|
// X11 keycode to GLFW key LUT
|
|
short int keycodes[256];
|
|
// GLFW key to X11 keycode LUT
|
|
short int scancodes[GLFW_KEY_LAST + 1];
|
|
// Where to place the cursor when re-enabled
|
|
double restoreCursorPosX, restoreCursorPosY;
|
|
// The window whose disabled cursor mode is active
|
|
_GLFWwindow* disabledCursorWindow;
|
|
int emptyEventPipe[2];
|
|
|
|
// Window manager atoms
|
|
Atom NET_SUPPORTED;
|
|
Atom NET_SUPPORTING_WM_CHECK;
|
|
Atom WM_PROTOCOLS;
|
|
Atom WM_STATE;
|
|
Atom WM_DELETE_WINDOW;
|
|
Atom NET_WM_NAME;
|
|
Atom NET_WM_ICON_NAME;
|
|
Atom NET_WM_ICON;
|
|
Atom NET_WM_PID;
|
|
Atom NET_WM_PING;
|
|
Atom NET_WM_WINDOW_TYPE;
|
|
Atom NET_WM_WINDOW_TYPE_NORMAL;
|
|
Atom NET_WM_STATE;
|
|
Atom NET_WM_STATE_ABOVE;
|
|
Atom NET_WM_STATE_FULLSCREEN;
|
|
Atom NET_WM_STATE_MAXIMIZED_VERT;
|
|
Atom NET_WM_STATE_MAXIMIZED_HORZ;
|
|
Atom NET_WM_STATE_DEMANDS_ATTENTION;
|
|
Atom NET_WM_BYPASS_COMPOSITOR;
|
|
Atom NET_WM_FULLSCREEN_MONITORS;
|
|
Atom NET_WM_WINDOW_OPACITY;
|
|
Atom NET_WM_CM_Sx;
|
|
Atom NET_WORKAREA;
|
|
Atom NET_CURRENT_DESKTOP;
|
|
Atom NET_ACTIVE_WINDOW;
|
|
Atom NET_FRAME_EXTENTS;
|
|
Atom NET_REQUEST_FRAME_EXTENTS;
|
|
Atom MOTIF_WM_HINTS;
|
|
|
|
// Xdnd (drag and drop) atoms
|
|
Atom XdndAware;
|
|
Atom XdndEnter;
|
|
Atom XdndPosition;
|
|
Atom XdndStatus;
|
|
Atom XdndActionCopy;
|
|
Atom XdndDrop;
|
|
Atom XdndFinished;
|
|
Atom XdndSelection;
|
|
Atom XdndTypeList;
|
|
Atom text_uri_list;
|
|
|
|
// Selection (clipboard) atoms
|
|
Atom TARGETS;
|
|
Atom MULTIPLE;
|
|
Atom INCR;
|
|
Atom CLIPBOARD;
|
|
Atom PRIMARY;
|
|
Atom CLIPBOARD_MANAGER;
|
|
Atom SAVE_TARGETS;
|
|
Atom NULL_;
|
|
Atom UTF8_STRING;
|
|
Atom COMPOUND_STRING;
|
|
Atom ATOM_PAIR;
|
|
Atom GLFW_SELECTION;
|
|
|
|
struct {
|
|
void* handle;
|
|
GLFWbool utf8;
|
|
PFN_XAllocClassHint AllocClassHint;
|
|
PFN_XAllocSizeHints AllocSizeHints;
|
|
PFN_XAllocWMHints AllocWMHints;
|
|
PFN_XChangeProperty ChangeProperty;
|
|
PFN_XChangeWindowAttributes ChangeWindowAttributes;
|
|
PFN_XCheckIfEvent CheckIfEvent;
|
|
PFN_XCheckTypedWindowEvent CheckTypedWindowEvent;
|
|
PFN_XCloseDisplay CloseDisplay;
|
|
PFN_XCloseIM CloseIM;
|
|
PFN_XConvertSelection ConvertSelection;
|
|
PFN_XCreateColormap CreateColormap;
|
|
PFN_XCreateFontCursor CreateFontCursor;
|
|
PFN_XCreateIC CreateIC;
|
|
PFN_XCreateRegion CreateRegion;
|
|
PFN_XCreateWindow CreateWindow;
|
|
PFN_XDefineCursor DefineCursor;
|
|
PFN_XDeleteContext DeleteContext;
|
|
PFN_XDeleteProperty DeleteProperty;
|
|
PFN_XDestroyIC DestroyIC;
|
|
PFN_XDestroyRegion DestroyRegion;
|
|
PFN_XDestroyWindow DestroyWindow;
|
|
PFN_XDisplayKeycodes DisplayKeycodes;
|
|
PFN_XEventsQueued EventsQueued;
|
|
PFN_XFilterEvent FilterEvent;
|
|
PFN_XFindContext FindContext;
|
|
PFN_XFlush Flush;
|
|
PFN_XFree Free;
|
|
PFN_XFreeColormap FreeColormap;
|
|
PFN_XFreeCursor FreeCursor;
|
|
PFN_XFreeEventData FreeEventData;
|
|
PFN_XGetErrorText GetErrorText;
|
|
PFN_XGetEventData GetEventData;
|
|
PFN_XGetICValues GetICValues;
|
|
PFN_XGetIMValues GetIMValues;
|
|
PFN_XGetInputFocus GetInputFocus;
|
|
PFN_XGetKeyboardMapping GetKeyboardMapping;
|
|
PFN_XGetScreenSaver GetScreenSaver;
|
|
PFN_XGetSelectionOwner GetSelectionOwner;
|
|
PFN_XGetVisualInfo GetVisualInfo;
|
|
PFN_XGetWMNormalHints GetWMNormalHints;
|
|
PFN_XGetWindowAttributes GetWindowAttributes;
|
|
PFN_XGetWindowProperty GetWindowProperty;
|
|
PFN_XGrabPointer GrabPointer;
|
|
PFN_XIconifyWindow IconifyWindow;
|
|
PFN_XInternAtom InternAtom;
|
|
PFN_XLookupString LookupString;
|
|
PFN_XMapRaised MapRaised;
|
|
PFN_XMapWindow MapWindow;
|
|
PFN_XMoveResizeWindow MoveResizeWindow;
|
|
PFN_XMoveWindow MoveWindow;
|
|
PFN_XNextEvent NextEvent;
|
|
PFN_XOpenIM OpenIM;
|
|
PFN_XPeekEvent PeekEvent;
|
|
PFN_XPending Pending;
|
|
PFN_XQueryExtension QueryExtension;
|
|
PFN_XQueryPointer QueryPointer;
|
|
PFN_XRaiseWindow RaiseWindow;
|
|
PFN_XRegisterIMInstantiateCallback RegisterIMInstantiateCallback;
|
|
PFN_XResizeWindow ResizeWindow;
|
|
PFN_XResourceManagerString ResourceManagerString;
|
|
PFN_XSaveContext SaveContext;
|
|
PFN_XSelectInput SelectInput;
|
|
PFN_XSendEvent SendEvent;
|
|
PFN_XSetClassHint SetClassHint;
|
|
PFN_XSetErrorHandler SetErrorHandler;
|
|
PFN_XSetICFocus SetICFocus;
|
|
PFN_XSetIMValues SetIMValues;
|
|
PFN_XSetInputFocus SetInputFocus;
|
|
PFN_XSetLocaleModifiers SetLocaleModifiers;
|
|
PFN_XSetScreenSaver SetScreenSaver;
|
|
PFN_XSetSelectionOwner SetSelectionOwner;
|
|
PFN_XSetWMHints SetWMHints;
|
|
PFN_XSetWMNormalHints SetWMNormalHints;
|
|
PFN_XSetWMProtocols SetWMProtocols;
|
|
PFN_XSupportsLocale SupportsLocale;
|
|
PFN_XSync Sync;
|
|
PFN_XTranslateCoordinates TranslateCoordinates;
|
|
PFN_XUndefineCursor UndefineCursor;
|
|
PFN_XUngrabPointer UngrabPointer;
|
|
PFN_XUnmapWindow UnmapWindow;
|
|
PFN_XUnsetICFocus UnsetICFocus;
|
|
PFN_XVisualIDFromVisual VisualIDFromVisual;
|
|
PFN_XWarpPointer WarpPointer;
|
|
PFN_XUnregisterIMInstantiateCallback UnregisterIMInstantiateCallback;
|
|
PFN_Xutf8LookupString utf8LookupString;
|
|
PFN_Xutf8SetWMProperties utf8SetWMProperties;
|
|
} xlib;
|
|
|
|
struct {
|
|
PFN_XrmDestroyDatabase DestroyDatabase;
|
|
PFN_XrmGetResource GetResource;
|
|
PFN_XrmGetStringDatabase GetStringDatabase;
|
|
PFN_XrmUniqueQuark UniqueQuark;
|
|
} xrm;
|
|
|
|
struct {
|
|
GLFWbool available;
|
|
void* handle;
|
|
int eventBase;
|
|
int errorBase;
|
|
int major;
|
|
int minor;
|
|
GLFWbool gammaBroken;
|
|
GLFWbool monitorBroken;
|
|
PFN_XRRAllocGamma AllocGamma;
|
|
PFN_XRRFreeCrtcInfo FreeCrtcInfo;
|
|
PFN_XRRFreeGamma FreeGamma;
|
|
PFN_XRRFreeOutputInfo FreeOutputInfo;
|
|
PFN_XRRFreeScreenResources FreeScreenResources;
|
|
PFN_XRRGetCrtcGamma GetCrtcGamma;
|
|
PFN_XRRGetCrtcGammaSize GetCrtcGammaSize;
|
|
PFN_XRRGetCrtcInfo GetCrtcInfo;
|
|
PFN_XRRGetOutputInfo GetOutputInfo;
|
|
PFN_XRRGetOutputPrimary GetOutputPrimary;
|
|
PFN_XRRGetScreenResourcesCurrent GetScreenResourcesCurrent;
|
|
PFN_XRRQueryExtension QueryExtension;
|
|
PFN_XRRQueryVersion QueryVersion;
|
|
PFN_XRRSelectInput SelectInput;
|
|
PFN_XRRSetCrtcConfig SetCrtcConfig;
|
|
PFN_XRRSetCrtcGamma SetCrtcGamma;
|
|
PFN_XRRUpdateConfiguration UpdateConfiguration;
|
|
} randr;
|
|
|
|
struct {
|
|
GLFWbool available;
|
|
GLFWbool detectable;
|
|
int majorOpcode;
|
|
int eventBase;
|
|
int errorBase;
|
|
int major;
|
|
int minor;
|
|
unsigned int group;
|
|
PFN_XkbFreeKeyboard FreeKeyboard;
|
|
PFN_XkbFreeNames FreeNames;
|
|
PFN_XkbGetMap GetMap;
|
|
PFN_XkbGetNames GetNames;
|
|
PFN_XkbGetState GetState;
|
|
PFN_XkbKeycodeToKeysym KeycodeToKeysym;
|
|
PFN_XkbQueryExtension QueryExtension;
|
|
PFN_XkbSelectEventDetails SelectEventDetails;
|
|
PFN_XkbSetDetectableAutoRepeat SetDetectableAutoRepeat;
|
|
} xkb;
|
|
|
|
struct {
|
|
int count;
|
|
int timeout;
|
|
int interval;
|
|
int blanking;
|
|
int exposure;
|
|
} saver;
|
|
|
|
struct {
|
|
int version;
|
|
Window source;
|
|
Atom format;
|
|
} xdnd;
|
|
|
|
struct {
|
|
void* handle;
|
|
PFN_XcursorImageCreate ImageCreate;
|
|
PFN_XcursorImageDestroy ImageDestroy;
|
|
PFN_XcursorImageLoadCursor ImageLoadCursor;
|
|
PFN_XcursorGetTheme GetTheme;
|
|
PFN_XcursorGetDefaultSize GetDefaultSize;
|
|
PFN_XcursorLibraryLoadImage LibraryLoadImage;
|
|
} xcursor;
|
|
|
|
struct {
|
|
GLFWbool available;
|
|
void* handle;
|
|
int major;
|
|
int minor;
|
|
PFN_XineramaIsActive IsActive;
|
|
PFN_XineramaQueryExtension QueryExtension;
|
|
PFN_XineramaQueryScreens QueryScreens;
|
|
} xinerama;
|
|
|
|
struct {
|
|
void* handle;
|
|
PFN_XGetXCBConnection GetXCBConnection;
|
|
} x11xcb;
|
|
|
|
struct {
|
|
GLFWbool available;
|
|
void* handle;
|
|
int eventBase;
|
|
int errorBase;
|
|
PFN_XF86VidModeQueryExtension QueryExtension;
|
|
PFN_XF86VidModeGetGammaRamp GetGammaRamp;
|
|
PFN_XF86VidModeSetGammaRamp SetGammaRamp;
|
|
PFN_XF86VidModeGetGammaRampSize GetGammaRampSize;
|
|
} vidmode;
|
|
|
|
struct {
|
|
GLFWbool available;
|
|
void* handle;
|
|
int majorOpcode;
|
|
int eventBase;
|
|
int errorBase;
|
|
int major;
|
|
int minor;
|
|
PFN_XIQueryVersion QueryVersion;
|
|
PFN_XISelectEvents SelectEvents;
|
|
} xi;
|
|
|
|
struct {
|
|
GLFWbool available;
|
|
void* handle;
|
|
int major;
|
|
int minor;
|
|
int eventBase;
|
|
int errorBase;
|
|
PFN_XRenderQueryExtension QueryExtension;
|
|
PFN_XRenderQueryVersion QueryVersion;
|
|
PFN_XRenderFindVisualFormat FindVisualFormat;
|
|
} xrender;
|
|
|
|
struct {
|
|
GLFWbool available;
|
|
void* handle;
|
|
int major;
|
|
int minor;
|
|
int eventBase;
|
|
int errorBase;
|
|
PFN_XShapeQueryExtension QueryExtension;
|
|
PFN_XShapeCombineRegion ShapeCombineRegion;
|
|
PFN_XShapeQueryVersion QueryVersion;
|
|
PFN_XShapeCombineMask ShapeCombineMask;
|
|
} xshape;
|
|
} _GLFWlibraryX11;
|
|
|
|
// X11-specific per-monitor data
|
|
//
|
|
typedef struct _GLFWmonitorX11
|
|
{
|
|
RROutput output;
|
|
RRCrtc crtc;
|
|
RRMode oldMode;
|
|
|
|
// Index of corresponding Xinerama screen,
|
|
// for EWMH full screen window placement
|
|
int index;
|
|
} _GLFWmonitorX11;
|
|
|
|
// X11-specific per-cursor data
|
|
//
|
|
typedef struct _GLFWcursorX11
|
|
{
|
|
Cursor handle;
|
|
} _GLFWcursorX11;
|
|
|
|
|
|
GLFWbool _glfwConnectX11(int platformID, _GLFWplatform* platform);
|
|
int _glfwInitX11(void);
|
|
void _glfwTerminateX11(void);
|
|
|
|
int _glfwCreateWindowX11(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig);
|
|
void _glfwDestroyWindowX11(_GLFWwindow* window);
|
|
void _glfwSetWindowTitleX11(_GLFWwindow* window, const char* title);
|
|
void _glfwSetWindowIconX11(_GLFWwindow* window, int count, const GLFWimage* images);
|
|
void _glfwGetWindowPosX11(_GLFWwindow* window, int* xpos, int* ypos);
|
|
void _glfwSetWindowPosX11(_GLFWwindow* window, int xpos, int ypos);
|
|
void _glfwGetWindowSizeX11(_GLFWwindow* window, int* width, int* height);
|
|
void _glfwSetWindowSizeX11(_GLFWwindow* window, int width, int height);
|
|
void _glfwSetWindowSizeLimitsX11(_GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight);
|
|
void _glfwSetWindowAspectRatioX11(_GLFWwindow* window, int numer, int denom);
|
|
void _glfwGetFramebufferSizeX11(_GLFWwindow* window, int* width, int* height);
|
|
void _glfwGetWindowFrameSizeX11(_GLFWwindow* window, int* left, int* top, int* right, int* bottom);
|
|
void _glfwGetWindowContentScaleX11(_GLFWwindow* window, float* xscale, float* yscale);
|
|
void _glfwIconifyWindowX11(_GLFWwindow* window);
|
|
void _glfwRestoreWindowX11(_GLFWwindow* window);
|
|
void _glfwMaximizeWindowX11(_GLFWwindow* window);
|
|
void _glfwShowWindowX11(_GLFWwindow* window);
|
|
void _glfwHideWindowX11(_GLFWwindow* window);
|
|
void _glfwRequestWindowAttentionX11(_GLFWwindow* window);
|
|
void _glfwFocusWindowX11(_GLFWwindow* window);
|
|
void _glfwSetWindowMonitorX11(_GLFWwindow* window, _GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate);
|
|
int _glfwWindowFocusedX11(_GLFWwindow* window);
|
|
int _glfwWindowIconifiedX11(_GLFWwindow* window);
|
|
int _glfwWindowVisibleX11(_GLFWwindow* window);
|
|
int _glfwWindowMaximizedX11(_GLFWwindow* window);
|
|
int _glfwWindowHoveredX11(_GLFWwindow* window);
|
|
int _glfwFramebufferTransparentX11(_GLFWwindow* window);
|
|
void _glfwSetWindowResizableX11(_GLFWwindow* window, GLFWbool enabled);
|
|
void _glfwSetWindowDecoratedX11(_GLFWwindow* window, GLFWbool enabled);
|
|
void _glfwSetWindowFloatingX11(_GLFWwindow* window, GLFWbool enabled);
|
|
float _glfwGetWindowOpacityX11(_GLFWwindow* window);
|
|
void _glfwSetWindowOpacityX11(_GLFWwindow* window, float opacity);
|
|
void _glfwSetWindowMousePassthroughX11(_GLFWwindow* window, GLFWbool enabled);
|
|
|
|
void _glfwSetRawMouseMotionX11(_GLFWwindow *window, GLFWbool enabled);
|
|
GLFWbool _glfwRawMouseMotionSupportedX11(void);
|
|
|
|
void _glfwPollEventsX11(void);
|
|
void _glfwWaitEventsX11(void);
|
|
void _glfwWaitEventsTimeoutX11(double timeout);
|
|
void _glfwPostEmptyEventX11(void);
|
|
|
|
void _glfwGetCursorPosX11(_GLFWwindow* window, double* xpos, double* ypos);
|
|
void _glfwSetCursorPosX11(_GLFWwindow* window, double xpos, double ypos);
|
|
void _glfwSetCursorModeX11(_GLFWwindow* window, int mode);
|
|
const char* _glfwGetScancodeNameX11(int scancode);
|
|
int _glfwGetKeyScancodeX11(int key);
|
|
int _glfwCreateCursorX11(_GLFWcursor* cursor, const GLFWimage* image, int xhot, int yhot);
|
|
int _glfwCreateStandardCursorX11(_GLFWcursor* cursor, int shape);
|
|
void _glfwDestroyCursorX11(_GLFWcursor* cursor);
|
|
void _glfwSetCursorX11(_GLFWwindow* window, _GLFWcursor* cursor);
|
|
void _glfwSetClipboardStringX11(const char* string);
|
|
const char* _glfwGetClipboardStringX11(void);
|
|
|
|
EGLenum _glfwGetEGLPlatformX11(EGLint** attribs);
|
|
EGLNativeDisplayType _glfwGetEGLNativeDisplayX11(void);
|
|
EGLNativeWindowType _glfwGetEGLNativeWindowX11(_GLFWwindow* window);
|
|
|
|
void _glfwGetRequiredInstanceExtensionsX11(char** extensions);
|
|
int _glfwGetPhysicalDevicePresentationSupportX11(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily);
|
|
VkResult _glfwCreateWindowSurfaceX11(VkInstance instance, _GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface);
|
|
|
|
void _glfwFreeMonitorX11(_GLFWmonitor* monitor);
|
|
void _glfwGetMonitorPosX11(_GLFWmonitor* monitor, int* xpos, int* ypos);
|
|
void _glfwGetMonitorContentScaleX11(_GLFWmonitor* monitor, float* xscale, float* yscale);
|
|
void _glfwGetMonitorWorkareaX11(_GLFWmonitor* monitor, int* xpos, int* ypos, int* width, int* height);
|
|
GLFWvidmode* _glfwGetVideoModesX11(_GLFWmonitor* monitor, int* count);
|
|
void _glfwGetVideoModeX11(_GLFWmonitor* monitor, GLFWvidmode* mode);
|
|
GLFWbool _glfwGetGammaRampX11(_GLFWmonitor* monitor, GLFWgammaramp* ramp);
|
|
void _glfwSetGammaRampX11(_GLFWmonitor* monitor, const GLFWgammaramp* ramp);
|
|
|
|
void _glfwPollMonitorsX11(void);
|
|
void _glfwSetVideoModeX11(_GLFWmonitor* monitor, const GLFWvidmode* desired);
|
|
void _glfwRestoreVideoModeX11(_GLFWmonitor* monitor);
|
|
|
|
Cursor _glfwCreateNativeCursorX11(const GLFWimage* image, int xhot, int yhot);
|
|
|
|
unsigned long _glfwGetWindowPropertyX11(Window window,
|
|
Atom property,
|
|
Atom type,
|
|
unsigned char** value);
|
|
GLFWbool _glfwIsVisualTransparentX11(Visual* visual);
|
|
|
|
void _glfwGrabErrorHandlerX11(void);
|
|
void _glfwReleaseErrorHandlerX11(void);
|
|
void _glfwInputErrorX11(int error, const char* message);
|
|
|
|
void _glfwPushSelectionToManagerX11(void);
|
|
void _glfwCreateInputContextX11(_GLFWwindow* window);
|
|
|
|
GLFWbool _glfwInitGLX(void);
|
|
void _glfwTerminateGLX(void);
|
|
GLFWbool _glfwCreateContextGLX(_GLFWwindow* window,
|
|
const _GLFWctxconfig* ctxconfig,
|
|
const _GLFWfbconfig* fbconfig);
|
|
void _glfwDestroyContextGLX(_GLFWwindow* window);
|
|
GLFWbool _glfwChooseVisualGLX(const _GLFWwndconfig* wndconfig,
|
|
const _GLFWctxconfig* ctxconfig,
|
|
const _GLFWfbconfig* fbconfig,
|
|
Visual** visual, int* depth);
|
|
|