mirror of
https://github.com/kovidgoyal/kitty.git
synced 2024-09-21 19:47:21 +03:00
661 lines
21 KiB
Python
661 lines
21 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# GLFW - An OpenGL framework
|
|
# API version: 3.0.1
|
|
# WWW: http://www.glfw.org/
|
|
# ----------------------------------------------------------------------------
|
|
# Copyright (c) 2002-2006 Marcus Geelnard
|
|
# Copyright (c) 2006-2010 Camilla Berglund
|
|
#
|
|
# Python bindings - Copyright (c) 2013 Nicolas P. Rougier
|
|
#
|
|
# 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.
|
|
#
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# NOTE:
|
|
# This source has been modified from its original form by the vispy dev team
|
|
|
|
import os
|
|
import ctypes.util
|
|
from collections import namedtuple
|
|
from ctypes import (Structure, POINTER, CFUNCTYPE, byref, c_char_p, c_int,
|
|
c_uint, c_double, c_float, c_ushort)
|
|
|
|
|
|
_glfw_file = None
|
|
|
|
# First if there is an environment variable pointing to the library
|
|
if 'GLFW_LIBRARY' in os.environ:
|
|
if os.path.exists(os.environ['GLFW_LIBRARY']):
|
|
_glfw_file = os.path.realpath(os.environ['GLFW_LIBRARY'])
|
|
|
|
# Else, try to find it
|
|
if _glfw_file is None:
|
|
order = ['glfw', 'glfw3']
|
|
for check in order:
|
|
_glfw_file = ctypes.util.find_library(check)
|
|
if _glfw_file is not None:
|
|
break
|
|
|
|
# Else, we failed and exit
|
|
if _glfw_file is None:
|
|
raise OSError('GLFW library not found')
|
|
|
|
# Load it
|
|
_glfw = ctypes.CDLL(_glfw_file)
|
|
|
|
|
|
# Ensure it's new enough
|
|
def glfwGetVersion():
|
|
major, minor, rev = c_int(0), c_int(0), c_int(0)
|
|
_glfw.glfwGetVersion(byref(major), byref(minor), byref(rev))
|
|
return major.value, minor.value, rev.value
|
|
|
|
version = glfwGetVersion()
|
|
|
|
if version[0] != 3:
|
|
version = '.'.join([str(v) for v in version])
|
|
raise OSError('Need GLFW library version 3, found version %s' % version)
|
|
|
|
|
|
# --- Version -----------------------------------------------------------------
|
|
GLFW_VERSION_MAJOR = version[0]
|
|
GLFW_VERSION_MINOR = version[1]
|
|
GLFW_VERSION_REVISION = version[2]
|
|
__version__ = GLFW_VERSION_MAJOR, GLFW_VERSION_MINOR, GLFW_VERSION_REVISION
|
|
|
|
# --- Input handling definitions ----------------------------------------------
|
|
GLFW_RELEASE = 0
|
|
GLFW_PRESS = 1
|
|
GLFW_REPEAT = 2
|
|
|
|
# --- Keys --------------------------------------------------------------------
|
|
|
|
# --- The unknown key ---------------------------------------------------------
|
|
GLFW_KEY_UNKNOWN = -1
|
|
|
|
# --- Printable keys ----------------------------------------------------------
|
|
GLFW_KEY_SPACE = 32
|
|
GLFW_KEY_APOSTROPHE = 39 # ''
|
|
GLFW_KEY_COMMA = 44 # ,
|
|
GLFW_KEY_MINUS = 45 # -
|
|
GLFW_KEY_PERIOD = 46 # .
|
|
GLFW_KEY_SLASH = 47 # /
|
|
GLFW_KEY_0 = 48
|
|
GLFW_KEY_1 = 49
|
|
GLFW_KEY_2 = 50
|
|
GLFW_KEY_3 = 51
|
|
GLFW_KEY_4 = 52
|
|
GLFW_KEY_5 = 53
|
|
GLFW_KEY_6 = 54
|
|
GLFW_KEY_7 = 55
|
|
GLFW_KEY_8 = 56
|
|
GLFW_KEY_9 = 57
|
|
GLFW_KEY_SEMICOLON = 59 # ;
|
|
GLFW_KEY_EQUAL = 61 # =
|
|
GLFW_KEY_A = 65
|
|
GLFW_KEY_B = 66
|
|
GLFW_KEY_C = 67
|
|
GLFW_KEY_D = 68
|
|
GLFW_KEY_E = 69
|
|
GLFW_KEY_F = 70
|
|
GLFW_KEY_G = 71
|
|
GLFW_KEY_H = 72
|
|
GLFW_KEY_I = 73
|
|
GLFW_KEY_J = 74
|
|
GLFW_KEY_K = 75
|
|
GLFW_KEY_L = 76
|
|
GLFW_KEY_M = 77
|
|
GLFW_KEY_N = 78
|
|
GLFW_KEY_O = 79
|
|
GLFW_KEY_P = 80
|
|
GLFW_KEY_Q = 81
|
|
GLFW_KEY_R = 82
|
|
GLFW_KEY_S = 83
|
|
GLFW_KEY_T = 84
|
|
GLFW_KEY_U = 85
|
|
GLFW_KEY_V = 86
|
|
GLFW_KEY_W = 87
|
|
GLFW_KEY_X = 88
|
|
GLFW_KEY_Y = 89
|
|
GLFW_KEY_Z = 90
|
|
GLFW_KEY_LEFT_BRACKET = 91 # [
|
|
GLFW_KEY_BACKSLASH = 92 # \
|
|
GLFW_KEY_RIGHT_BRACKET = 93 # ]
|
|
GLFW_KEY_GRAVE_ACCENT = 96 # `
|
|
GLFW_KEY_WORLD_1 = 161 # non-US #1
|
|
GLFW_KEY_WORLD_2 = 162 # non-US #2
|
|
|
|
# --- Function keys -----------------------------------------------------------
|
|
GLFW_KEY_ESCAPE = 256
|
|
GLFW_KEY_ENTER = 257
|
|
GLFW_KEY_TAB = 258
|
|
GLFW_KEY_BACKSPACE = 259
|
|
GLFW_KEY_INSERT = 260
|
|
GLFW_KEY_DELETE = 261
|
|
GLFW_KEY_RIGHT = 262
|
|
GLFW_KEY_LEFT = 263
|
|
GLFW_KEY_DOWN = 264
|
|
GLFW_KEY_UP = 265
|
|
GLFW_KEY_PAGE_UP = 266
|
|
GLFW_KEY_PAGE_DOWN = 267
|
|
GLFW_KEY_HOME = 268
|
|
GLFW_KEY_END = 269
|
|
GLFW_KEY_CAPS_LOCK = 280
|
|
GLFW_KEY_SCROLL_LOCK = 281
|
|
GLFW_KEY_NUM_LOCK = 282
|
|
GLFW_KEY_PRINT_SCREEN = 283
|
|
GLFW_KEY_PAUSE = 284
|
|
GLFW_KEY_F1 = 290
|
|
GLFW_KEY_F2 = 291
|
|
GLFW_KEY_F3 = 292
|
|
GLFW_KEY_F4 = 293
|
|
GLFW_KEY_F5 = 294
|
|
GLFW_KEY_F6 = 295
|
|
GLFW_KEY_F7 = 296
|
|
GLFW_KEY_F8 = 297
|
|
GLFW_KEY_F9 = 298
|
|
GLFW_KEY_F10 = 299
|
|
GLFW_KEY_F11 = 300
|
|
GLFW_KEY_F12 = 301
|
|
GLFW_KEY_F13 = 302
|
|
GLFW_KEY_F14 = 303
|
|
GLFW_KEY_F15 = 304
|
|
GLFW_KEY_F16 = 305
|
|
GLFW_KEY_F17 = 306
|
|
GLFW_KEY_F18 = 307
|
|
GLFW_KEY_F19 = 308
|
|
GLFW_KEY_F20 = 309
|
|
GLFW_KEY_F21 = 310
|
|
GLFW_KEY_F22 = 311
|
|
GLFW_KEY_F23 = 312
|
|
GLFW_KEY_F24 = 313
|
|
GLFW_KEY_F25 = 314
|
|
GLFW_KEY_KP_0 = 320
|
|
GLFW_KEY_KP_1 = 321
|
|
GLFW_KEY_KP_2 = 322
|
|
GLFW_KEY_KP_3 = 323
|
|
GLFW_KEY_KP_4 = 324
|
|
GLFW_KEY_KP_5 = 325
|
|
GLFW_KEY_KP_6 = 326
|
|
GLFW_KEY_KP_7 = 327
|
|
GLFW_KEY_KP_8 = 328
|
|
GLFW_KEY_KP_9 = 329
|
|
GLFW_KEY_KP_DECIMAL = 330
|
|
GLFW_KEY_KP_DIVIDE = 331
|
|
GLFW_KEY_KP_MULTIPLY = 332
|
|
GLFW_KEY_KP_SUBTRACT = 333
|
|
GLFW_KEY_KP_ADD = 334
|
|
GLFW_KEY_KP_ENTER = 335
|
|
GLFW_KEY_KP_EQUAL = 336
|
|
GLFW_KEY_LEFT_SHIFT = 340
|
|
GLFW_KEY_LEFT_CONTROL = 341
|
|
GLFW_KEY_LEFT_ALT = 342
|
|
GLFW_KEY_LEFT_SUPER = 343
|
|
GLFW_KEY_RIGHT_SHIFT = 344
|
|
GLFW_KEY_RIGHT_CONTROL = 345
|
|
GLFW_KEY_RIGHT_ALT = 346
|
|
GLFW_KEY_RIGHT_SUPER = 347
|
|
GLFW_KEY_MENU = 348
|
|
GLFW_KEY_LAST = GLFW_KEY_MENU
|
|
|
|
|
|
# --- Modifiers ---------------------------------------------------------------
|
|
GLFW_MOD_SHIFT = 0x0001
|
|
GLFW_MOD_CONTROL = 0x0002
|
|
GLFW_MOD_ALT = 0x0004
|
|
GLFW_MOD_SUPER = 0x0008
|
|
|
|
# --- Mouse -------------------------------------------------------------------
|
|
GLFW_MOUSE_BUTTON_1 = 0
|
|
GLFW_MOUSE_BUTTON_2 = 1
|
|
GLFW_MOUSE_BUTTON_3 = 2
|
|
GLFW_MOUSE_BUTTON_4 = 3
|
|
GLFW_MOUSE_BUTTON_5 = 4
|
|
GLFW_MOUSE_BUTTON_6 = 5
|
|
GLFW_MOUSE_BUTTON_7 = 6
|
|
GLFW_MOUSE_BUTTON_8 = 7
|
|
GLFW_MOUSE_BUTTON_LAST = GLFW_MOUSE_BUTTON_8
|
|
GLFW_MOUSE_BUTTON_LEFT = GLFW_MOUSE_BUTTON_1
|
|
GLFW_MOUSE_BUTTON_RIGHT = GLFW_MOUSE_BUTTON_2
|
|
GLFW_MOUSE_BUTTON_MIDDLE = GLFW_MOUSE_BUTTON_3
|
|
|
|
|
|
# --- Joystick ----------------------------------------------------------------
|
|
GLFW_JOYSTICK_1 = 0
|
|
GLFW_JOYSTICK_2 = 1
|
|
GLFW_JOYSTICK_3 = 2
|
|
GLFW_JOYSTICK_4 = 3
|
|
GLFW_JOYSTICK_5 = 4
|
|
GLFW_JOYSTICK_6 = 5
|
|
GLFW_JOYSTICK_7 = 6
|
|
GLFW_JOYSTICK_8 = 7
|
|
GLFW_JOYSTICK_9 = 8
|
|
GLFW_JOYSTICK_10 = 9
|
|
GLFW_JOYSTICK_11 = 10
|
|
GLFW_JOYSTICK_12 = 11
|
|
GLFW_JOYSTICK_13 = 12
|
|
GLFW_JOYSTICK_14 = 13
|
|
GLFW_JOYSTICK_15 = 14
|
|
GLFW_JOYSTICK_16 = 15
|
|
GLFW_JOYSTICK_LAST = GLFW_JOYSTICK_16
|
|
|
|
|
|
# --- Error codes -------------------------------------------------------------
|
|
GLFW_NOT_INITIALIZED = 0x00010001
|
|
GLFW_NO_CURRENT_CONTEXT = 0x00010002
|
|
GLFW_INVALID_ENUM = 0x00010003
|
|
GLFW_INVALID_VALUE = 0x00010004
|
|
GLFW_OUT_OF_MEMORY = 0x00010005
|
|
GLFW_API_UNAVAILABLE = 0x00010006
|
|
GLFW_VERSION_UNAVAILABLE = 0x00010007
|
|
GLFW_PLATFORM_ERROR = 0x00010008
|
|
GLFW_FORMAT_UNAVAILABLE = 0x00010009
|
|
|
|
# ---
|
|
GLFW_FOCUSED = 0x00020001
|
|
GLFW_ICONIFIED = 0x00020002
|
|
GLFW_RESIZABLE = 0x00020003
|
|
GLFW_VISIBLE = 0x00020004
|
|
GLFW_DECORATED = 0x00020005
|
|
GLFW_AUTO_ICONIFY = 0x00020006
|
|
GLFW_FLOATING = 0x00020007
|
|
|
|
# ---
|
|
GLFW_RED_BITS = 0x00021001
|
|
GLFW_GREEN_BITS = 0x00021002
|
|
GLFW_BLUE_BITS = 0x00021003
|
|
GLFW_ALPHA_BITS = 0x00021004
|
|
GLFW_DEPTH_BITS = 0x00021005
|
|
GLFW_STENCIL_BITS = 0x00021006
|
|
GLFW_ACCUM_RED_BITS = 0x00021007
|
|
GLFW_ACCUM_GREEN_BITS = 0x00021008
|
|
GLFW_ACCUM_BLUE_BITS = 0x00021009
|
|
GLFW_ACCUM_ALPHA_BITS = 0x0002100A
|
|
GLFW_AUX_BUFFERS = 0x0002100B
|
|
GLFW_STEREO = 0x0002100C
|
|
GLFW_SAMPLES = 0x0002100D
|
|
GLFW_SRGB_CAPABLE = 0x0002100E
|
|
GLFW_REFRESH_RATE = 0x0002100F
|
|
GLFW_DOUBLEBUFFER = 0x00021010
|
|
|
|
# ---
|
|
GLFW_CLIENT_API = 0x00022001
|
|
GLFW_CONTEXT_VERSION_MAJOR = 0x00022002
|
|
GLFW_CONTEXT_VERSION_MINOR = 0x00022003
|
|
GLFW_CONTEXT_REVISION = 0x00022004
|
|
GLFW_CONTEXT_ROBUSTNESS = 0x00022005
|
|
GLFW_OPENGL_FORWARD_COMPAT = 0x00022006
|
|
GLFW_OPENGL_DEBUG_CONTEXT = 0x00022007
|
|
GLFW_OPENGL_PROFILE = 0x00022008
|
|
|
|
# ---
|
|
GLFW_OPENGL_API = 0x00030001
|
|
GLFW_OPENGL_ES_API = 0x00030002
|
|
|
|
# ---
|
|
GLFW_NO_ROBUSTNESS = 0
|
|
GLFW_NO_RESET_NOTIFICATION = 0x00031001
|
|
GLFW_LOSE_CONTEXT_ON_RESET = 0x00031002
|
|
|
|
# ---
|
|
GLFW_OPENGL_ANY_PROFILE = 0
|
|
GLFW_OPENGL_CORE_PROFILE = 0x00032001
|
|
GLFW_OPENGL_COMPAT_PROFILE = 0x00032002
|
|
|
|
# ---
|
|
GLFW_CURSOR = 0x00033001
|
|
GLFW_STICKY_KEYS = 0x00033002
|
|
GLFW_STICKY_MOUSE_BUTTONS = 0x00033003
|
|
|
|
# ---
|
|
GLFW_CURSOR_NORMAL = 0x00034001
|
|
GLFW_CURSOR_HIDDEN = 0x00034002
|
|
GLFW_CURSOR_DISABLED = 0x00034003
|
|
|
|
# ---
|
|
GLFW_CONNECTED = 0x00040001
|
|
GLFW_DISCONNECTED = 0x00040002
|
|
|
|
|
|
# --- Structures --------------------------------------------------------------
|
|
class GLFWvidmode(Structure):
|
|
_fields_ = [('width', c_int),
|
|
('height', c_int),
|
|
('redBits', c_int),
|
|
('greenBits', c_int),
|
|
('blueBits', c_int),
|
|
('refreshRate', c_int)]
|
|
|
|
|
|
class GLFWgammaramp(Structure):
|
|
_fields_ = [('red', POINTER(c_ushort)),
|
|
('green', POINTER(c_ushort)),
|
|
('blue', POINTER(c_ushort)),
|
|
('size', c_int)]
|
|
|
|
|
|
class GLFWwindow(Structure):
|
|
pass
|
|
|
|
|
|
class GLFWmonitor(Structure):
|
|
pass
|
|
|
|
# --- Callbacks ---------------------------------------------------------------
|
|
errorfun = CFUNCTYPE(None, c_int, c_char_p)
|
|
windowposfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_int, c_int)
|
|
windowsizefun = CFUNCTYPE(None, POINTER(GLFWwindow), c_int, c_int)
|
|
windowclosefun = CFUNCTYPE(None, POINTER(GLFWwindow))
|
|
windowrefreshfun = CFUNCTYPE(None, POINTER(GLFWwindow))
|
|
windowfocusfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_int)
|
|
windowiconifyfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_int)
|
|
framebuffersizefun = CFUNCTYPE(None, POINTER(GLFWwindow), c_int, c_int)
|
|
mousebuttonfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_int, c_int, c_int)
|
|
cursorposfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_double, c_double)
|
|
cursorenterfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_int)
|
|
scrollfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_double, c_double)
|
|
keyfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_int, c_int, c_int, c_int)
|
|
charfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_uint)
|
|
charmodsfun = CFUNCTYPE(None, POINTER(GLFWwindow), c_uint, c_int)
|
|
monitorfun = CFUNCTYPE(None, POINTER(GLFWmonitor), c_int)
|
|
|
|
# --- Init --------------------------------------------------------------------
|
|
glfwInit = _glfw.glfwInit
|
|
glfwTerminate = _glfw.glfwTerminate
|
|
# glfwGetVersion = _glfw.glfwGetVersion
|
|
|
|
# --- Error -------------------------------------------------------------------
|
|
# glfwSetErrorCallback = _glfw.glfwSetErrorCallback
|
|
|
|
# --- Monitor -----------------------------------------------------------------
|
|
# glfwGetMonitors = _glfw.glfwGetMonitors
|
|
# glfwGetMonitors.restype = POINTER(GLFWmonitor)
|
|
glfwGetPrimaryMonitor = _glfw.glfwGetPrimaryMonitor
|
|
glfwGetPrimaryMonitor.restype = POINTER(GLFWmonitor)
|
|
# glfwGetMonitorPos = _glfw.glfwGetMonitorPos
|
|
# glfwGetMonitorPhysicalSize = _glfw.glfwGetMonitorPhysicalSize
|
|
glfwGetMonitorName = _glfw.glfwGetMonitorName
|
|
glfwGetMonitorName.restype = c_char_p
|
|
# glfwSetMonitorCallback = _glfw.glfwSetMonitorCallback
|
|
# glfwGetVideoModes = _glfw.glfwGetVideoModes
|
|
# glfwGetVideoMode = _glfw.glfwGetVideoMode
|
|
|
|
# --- Gama --------------------------------------------------------------------
|
|
glfwSetGamma = _glfw.glfwSetGamma
|
|
# glfwGetGammaRamp = _glfw.glfwGetGammaRamp
|
|
# glfwSetGammaRamp = _glfw.glfwSetGammaRamp
|
|
|
|
# --- Window ------------------------------------------------------------------
|
|
glfwDefaultWindowHints = _glfw.glfwDefaultWindowHints
|
|
glfwWindowHint = _glfw.glfwWindowHint
|
|
# glfwCreateWindow = _glfw.glfwCreateWindow
|
|
# glfwDestroyWindow = _glfw.glfwDestroyWindow
|
|
glfwWindowShouldClose = _glfw.glfwWindowShouldClose
|
|
glfwSetWindowShouldClose = _glfw.glfwSetWindowShouldClose
|
|
glfwSetWindowTitle = _glfw.glfwSetWindowTitle
|
|
# glfwGetWindowPos = _glfw.glfwGetWindowPos
|
|
glfwSetWindowPos = _glfw.glfwSetWindowPos
|
|
# glfwGetWindowSize = _glfw.glfwGetWindowSize
|
|
glfwSetWindowSize = _glfw.glfwSetWindowSize
|
|
# glfwGetFramebufferSize = _glfw.glfwGetFramebufferSize
|
|
glfwIconifyWindow = _glfw.glfwIconifyWindow
|
|
glfwRestoreWindow = _glfw.glfwRestoreWindow
|
|
glfwShowWindow = _glfw.glfwShowWindow
|
|
glfwHideWindow = _glfw.glfwHideWindow
|
|
glfwGetWindowMonitor = _glfw.glfwGetWindowMonitor
|
|
glfwGetWindowAttrib = _glfw.glfwGetWindowAttrib
|
|
glfwSetWindowUserPointer = _glfw.glfwSetWindowUserPointer
|
|
glfwGetWindowUserPointer = _glfw.glfwGetWindowUserPointer
|
|
# glfwSetWindowPosCallback = _glfw.glfwSetWindowPosCallback
|
|
# glfwSetWindowSizeCallback = _glfw.glfwSetWindowSizeCallback
|
|
# glfwSetWindowCloseCallback = _glfw.glfwSetWindowCloseCallback
|
|
# glfwSetWindowRefreshCallback = _glfw.glfwSetWindowRefreshCallback
|
|
# glfwSetWindowFocusCallback = _glfw.glfwSetWindowFocusCallback
|
|
# glfwSetWindowIconifyCallback = _glfw.glfwSetWindowIconifyCallback
|
|
# glfwSetFramebufferSizeCallback = _glfw.glfwSetFramebufferSizeCallback
|
|
glfwPollEvents = _glfw.glfwPollEvents
|
|
glfwWaitEvents = _glfw.glfwWaitEvents
|
|
glfwPostEmptyEvent = _glfw.glfwPostEmptyEvent
|
|
|
|
# --- Input -------------------------------------------------------------------
|
|
glfwGetInputMode = _glfw.glfwGetInputMode
|
|
glfwSetInputMode = _glfw.glfwSetInputMode
|
|
glfwGetKey = _glfw.glfwGetKey
|
|
glfwGetMouseButton = _glfw.glfwGetMouseButton
|
|
# glfwGetCursorPos = _glfw.glfwGetCursorPos
|
|
glfwSetCursorPos = _glfw.glfwSetCursorPos
|
|
# glfwSetKeyCallback = _glfw.glfwSetKeyCallback
|
|
# glfwSetCharCallback = _glfw.glfwSetCharCallback
|
|
# glfwSetMouseButtonCallback = _glfw.glfwSetMouseButtonCallback
|
|
# glfwSetCursorPosCallback = _glfw.glfwSetCursorPosCallback
|
|
# glfwSetCursorEnterCallback = _glfw.glfwSetCursorEnterCallback
|
|
# glfwSetScrollCallback = _glfw.glfwSetScrollCallback
|
|
glfwJoystickPresent = _glfw.glfwJoystickPresent
|
|
# glfwGetJoystickAxes = _glfw.glfwGetJoystickAxes
|
|
# glfwGetJoystickButtons = _glfw.glfwGetJoystickButtons
|
|
glfwGetJoystickName = _glfw.glfwGetJoystickName
|
|
glfwGetJoystickName.restype = c_char_p
|
|
|
|
# --- Clipboard ---------------------------------------------------------------
|
|
glfwSetClipboardString = _glfw.glfwSetClipboardString
|
|
glfwGetClipboardString = _glfw.glfwGetClipboardString
|
|
glfwGetClipboardString.restype = c_char_p
|
|
|
|
# --- Timer -------------------------------------------------------------------
|
|
glfwGetTime = _glfw.glfwGetTime
|
|
glfwGetTime.restype = c_double
|
|
glfwSetTime = _glfw.glfwSetTime
|
|
|
|
# --- Context -----------------------------------------------------------------
|
|
glfwMakeContextCurrent = _glfw.glfwMakeContextCurrent
|
|
glfwGetCurrentContext = _glfw.glfwGetCurrentContext
|
|
glfwSwapBuffers = _glfw.glfwSwapBuffers
|
|
glfwSwapInterval = _glfw.glfwSwapInterval
|
|
glfwExtensionSupported = _glfw.glfwExtensionSupported
|
|
glfwGetProcAddress = _glfw.glfwGetProcAddress
|
|
|
|
|
|
# --- Pythonizer --------------------------------------------------------------
|
|
|
|
# This keeps track of current windows
|
|
__windows__ = []
|
|
__destroyed__ = []
|
|
|
|
# This is to prevent garbage collection on callbacks
|
|
__c_callbacks__ = {}
|
|
__py_callbacks__ = {}
|
|
__c_error_callback__ = None
|
|
|
|
|
|
def glfwCreateWindow(width=640, height=480, title="GLFW Window",
|
|
monitor=None, share=None):
|
|
_glfw.glfwCreateWindow.restype = POINTER(GLFWwindow)
|
|
window = _glfw.glfwCreateWindow(width, height, title, monitor, share)
|
|
__windows__.append(window)
|
|
__destroyed__.append(False)
|
|
index = __windows__.index(window)
|
|
__c_callbacks__[index] = {}
|
|
__py_callbacks__[index] = {'errorfun': None,
|
|
'monitorfun': None,
|
|
'windowposfun': None,
|
|
'windowsizefun': None,
|
|
'windowclosefun': None,
|
|
'windowrefreshfun': None,
|
|
'windowfocusfun': None,
|
|
'windowiconifyfun': None,
|
|
'framebuffersizefun': None,
|
|
'keyfun': None,
|
|
'charfun': None,
|
|
'charmodsfun': None,
|
|
'mousebuttonfun': None,
|
|
'cursorposfun': None,
|
|
'cursorenterfun': None,
|
|
'scrollfun': None}
|
|
return window
|
|
|
|
|
|
def glfwDestroyWindow(window):
|
|
index = __windows__.index(window)
|
|
if not __destroyed__[index]:
|
|
_glfw.glfwDestroyWindow(window)
|
|
# We do not delete window from the list (or it would impact numbering)
|
|
del __c_callbacks__[index]
|
|
del __py_callbacks__[index]
|
|
# del __windows__[index]
|
|
__destroyed__[index] = True
|
|
|
|
|
|
def glfwGetWindowPos(window):
|
|
xpos, ypos = c_int(0), c_int(0)
|
|
_glfw.glfwGetWindowPos(window, byref(xpos), byref(ypos))
|
|
return xpos.value, ypos.value
|
|
|
|
|
|
def glfwGetCursorPos(window):
|
|
xpos, ypos = c_double(0), c_double(0)
|
|
_glfw.glfwGetCursorPos(window, byref(xpos), byref(ypos))
|
|
return int(xpos.value), int(ypos.value)
|
|
|
|
|
|
def glfwGetWindowSize(window):
|
|
width, height = c_int(0), c_int(0)
|
|
_glfw.glfwGetWindowSize(window, byref(width), byref(height))
|
|
return width.value, height.value
|
|
|
|
|
|
def glfwGetFramebufferSize(window):
|
|
width, height = c_int(0), c_int(0)
|
|
_glfw.glfwGetFramebufferSize(window, byref(width), byref(height))
|
|
return width.value, height.value
|
|
|
|
|
|
def glfwGetMonitors():
|
|
count = c_int(0)
|
|
_glfw.glfwGetMonitors.restype = POINTER(POINTER(GLFWmonitor))
|
|
c_monitors = _glfw.glfwGetMonitors(byref(count))
|
|
return [c_monitors[i] for i in range(count.value)]
|
|
|
|
|
|
def glfwGetVideoModes(monitor):
|
|
count = c_int(0)
|
|
_glfw.glfwGetVideoModes.restype = POINTER(GLFWvidmode)
|
|
c_modes = _glfw.glfwGetVideoModes(monitor, byref(count))
|
|
modes = []
|
|
for i in range(count.value):
|
|
modes.append((c_modes[i].width,
|
|
c_modes[i].height,
|
|
c_modes[i].redBits,
|
|
c_modes[i].blueBits,
|
|
c_modes[i].greenBits,
|
|
c_modes[i].refreshRate))
|
|
return modes
|
|
|
|
|
|
def glfwGetMonitorPos(monitor):
|
|
xpos, ypos = c_int(0), c_int(0)
|
|
_glfw.glfwGetMonitorPos(monitor, byref(xpos), byref(ypos))
|
|
return xpos.value, ypos.value
|
|
|
|
|
|
def glfwGetMonitorPhysicalSize(monitor):
|
|
width, height = c_int(0), c_int(0)
|
|
_glfw.glfwGetMonitorPhysicalSize(monitor, byref(width), byref(height))
|
|
return width.value, height.value
|
|
|
|
|
|
VideoMode = namedtuple('VideoMode', 'width height redBits blueBits greenBits refreshRate')
|
|
|
|
|
|
def glfwGetVideoMode(monitor):
|
|
_glfw.glfwGetVideoMode.restype = POINTER(GLFWvidmode)
|
|
c_mode = _glfw.glfwGetVideoMode(monitor).contents
|
|
return VideoMode(
|
|
c_mode.width, c_mode.height, c_mode.redBits, c_mode.blueBits, c_mode.greenBits, c_mode.refreshRate)
|
|
|
|
|
|
def GetGammaRamp(monitor):
|
|
_glfw.glfwGetGammaRamp.restype = POINTER(GLFWgammaramp)
|
|
c_gamma = _glfw.glfwGetGammaRamp(monitor).contents
|
|
gamma = {'red': [], 'green': [], 'blue': []}
|
|
if c_gamma:
|
|
for i in range(c_gamma.size):
|
|
gamma['red'].append(c_gamma.red[i])
|
|
gamma['green'].append(c_gamma.green[i])
|
|
gamma['blue'].append(c_gamma.blue[i])
|
|
return gamma
|
|
|
|
|
|
def glfwGetJoystickAxes(joy):
|
|
count = c_int(0)
|
|
_glfw.glfwGetJoystickAxes.restype = POINTER(c_float)
|
|
c_axes = _glfw.glfwGetJoystickAxes(joy, byref(count))
|
|
axes = [c_axes[i].value for i in range(count)]
|
|
return axes
|
|
|
|
|
|
def glfwGetJoystickButtons(joy):
|
|
count = c_int(0)
|
|
_glfw.glfwGetJoystickButtons.restype = POINTER(c_int)
|
|
c_buttons = _glfw.glfwGetJoystickButtons(joy, byref(count))
|
|
buttons = [c_buttons[i].value for i in range(count)]
|
|
return buttons
|
|
|
|
|
|
# --- Callbacks ---------------------------------------------------------------
|
|
|
|
def __callback__(name):
|
|
callback = 'glfwSet%sCallback' % name
|
|
fun = '%sfun' % name.lower()
|
|
code = """
|
|
def %(callback)s(window, callback = None):
|
|
index = __windows__.index(window)
|
|
old_callback = __py_callbacks__[index]['%(fun)s']
|
|
__py_callbacks__[index]['%(fun)s'] = callback
|
|
if callback: callback = %(fun)s(callback)
|
|
__c_callbacks__[index]['%(fun)s'] = callback
|
|
_glfw.%(callback)s(window, callback)
|
|
return old_callback""" % {'callback': callback, 'fun': fun}
|
|
return code
|
|
|
|
exec(__callback__('Monitor'))
|
|
exec(__callback__('WindowPos'))
|
|
exec(__callback__('WindowSize'))
|
|
exec(__callback__('WindowClose'))
|
|
exec(__callback__('WindowRefresh'))
|
|
exec(__callback__('WindowFocus'))
|
|
exec(__callback__('WindowIconify'))
|
|
exec(__callback__('FramebufferSize'))
|
|
exec(__callback__('Key'))
|
|
exec(__callback__('Char'))
|
|
exec(__callback__('CharMods'))
|
|
exec(__callback__('MouseButton'))
|
|
exec(__callback__('CursorPos'))
|
|
exec(__callback__('Scroll'))
|
|
|
|
|
|
# Error callback does not take window parameter
|
|
def glfwSetErrorCallback(callback=None):
|
|
global __c_error_callback__
|
|
__c_error_callback__ = errorfun(callback)
|
|
_glfw.glfwSetErrorCallback(__c_error_callback__)
|