mirror of
https://github.com/kovidgoyal/kitty
synced 2026-07-23 08:47:47 +02:00
Add a loop tick callback
This commit is contained in:
4
glfw/glfw3.h
vendored
4
glfw/glfw3.h
vendored
@@ -1510,6 +1510,7 @@ typedef void (* GLFWmonitorfun)(GLFWmonitor*,int);
|
||||
typedef void (* GLFWjoystickfun)(int,int);
|
||||
|
||||
typedef void (* GLFWuserdatafun)(unsigned long long, void*);
|
||||
typedef void (* GLFWtickcallback)(void*);
|
||||
|
||||
/*! @brief Video mode type.
|
||||
*
|
||||
@@ -1657,8 +1658,9 @@ typedef struct GLFWgamepadstate
|
||||
* @ingroup init
|
||||
*/
|
||||
GLFWAPI int glfwInit(void);
|
||||
GLFWAPI void glfwRunMainLoop(void);
|
||||
GLFWAPI void glfwRunMainLoop(GLFWtickcallback callback, void *callback_data);
|
||||
GLFWAPI void glfwStopMainLoop(void);
|
||||
GLFWAPI void glfwRequestTickCallback(void);
|
||||
GLFWAPI unsigned long long glfwAddTimer(double interval, bool repeats, GLFWuserdatafun callback, void * callback_data, GLFWuserdatafun free_callback);
|
||||
GLFWAPI void glfwRemoveTimer(unsigned long long);
|
||||
|
||||
|
||||
13
glfw/init.c
vendored
13
glfw/init.c
vendored
@@ -322,10 +322,14 @@ GLFWAPI GLFWerrorfun glfwSetErrorCallback(GLFWerrorfun cbfun)
|
||||
}
|
||||
|
||||
|
||||
GLFWAPI void glfwRunMainLoop(void)
|
||||
GLFWAPI void glfwRunMainLoop(GLFWtickcallback callback, void *data)
|
||||
{
|
||||
_GLFW_REQUIRE_INIT();
|
||||
_glfwPlatformRunMainLoop();
|
||||
_glfwPlatformRunMainLoop(callback, data);
|
||||
}
|
||||
|
||||
GLFWAPI void glfwRequestTickCallback(void) {
|
||||
_glfwPlatformRequestTickCallback();
|
||||
}
|
||||
|
||||
GLFWAPI void glfwStopMainLoop(void) {
|
||||
@@ -333,7 +337,10 @@ GLFWAPI void glfwStopMainLoop(void) {
|
||||
_glfwPlatformStopMainLoop();
|
||||
}
|
||||
|
||||
GLFWAPI unsigned long long glfwAddTimer(double interval, bool repeats, GLFWuserdatafun callback, void *callback_data, GLFWuserdatafun free_callback) {
|
||||
GLFWAPI unsigned long long glfwAddTimer(
|
||||
double interval, bool repeats, GLFWuserdatafun callback,
|
||||
void *callback_data, GLFWuserdatafun free_callback)
|
||||
{
|
||||
return _glfwPlatformAddTimer(interval, repeats, callback, callback_data, free_callback);
|
||||
}
|
||||
|
||||
|
||||
3
glfw/internal.h
vendored
3
glfw/internal.h
vendored
@@ -783,7 +783,8 @@ void _glfwTerminateVulkan(void);
|
||||
const char* _glfwGetVulkanResultString(VkResult result);
|
||||
_GLFWwindow* _glfwFocusedWindow();
|
||||
_GLFWwindow* _glfwWindowForId(GLFWid id);
|
||||
void _glfwPlatformRunMainLoop(void);
|
||||
void _glfwPlatformRunMainLoop(GLFWtickcallback, void*);
|
||||
void _glfwPlatformRequestTickCallback();
|
||||
void _glfwPlatformStopMainLoop(void);
|
||||
unsigned long long _glfwPlatformAddTimer(double interval, bool repeats, GLFWuserdatafreefun callback, void *callback_data, GLFWuserdatafreefun free_callback);
|
||||
void _glfwPlatformRemoveTimer(unsigned long long timer_id);
|
||||
|
||||
13
glfw/x11_init.c
vendored
13
glfw/x11_init.c
vendored
@@ -770,7 +770,11 @@ const char* _glfwPlatformGetVersionString(void)
|
||||
;
|
||||
}
|
||||
|
||||
static GLFWbool keep_going;
|
||||
static GLFWbool keep_going = GLFW_FALSE, tick_callback_requested = GLFW_FALSE;
|
||||
|
||||
void _glfwPlatformRequestTickCallback() {
|
||||
tick_callback_requested = GLFW_TRUE;
|
||||
}
|
||||
|
||||
void _glfwPlatformStopMainLoop(void) {
|
||||
if (keep_going) {
|
||||
@@ -779,9 +783,14 @@ void _glfwPlatformStopMainLoop(void) {
|
||||
}
|
||||
}
|
||||
|
||||
void _glfwPlatformRunMainLoop(void) {
|
||||
void _glfwPlatformRunMainLoop(GLFWtickcallback callback, void* data) {
|
||||
keep_going = GLFW_TRUE;
|
||||
tick_callback_requested = GLFW_FALSE;
|
||||
while(keep_going) {
|
||||
if (tick_callback_requested) {
|
||||
tick_callback_requested = GLFW_FALSE;
|
||||
callback(data);
|
||||
}
|
||||
_glfwPlatformWaitEvents();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user