implement handler for sdl2 poll
This commit is contained in:
parent
217b999adc
commit
305617031c
@ -2,7 +2,7 @@ add_library(nf7core_sdl2)
|
|||||||
target_sources(nf7core_sdl2
|
target_sources(nf7core_sdl2
|
||||||
PRIVATE
|
PRIVATE
|
||||||
mod.c
|
mod.c
|
||||||
poll.h
|
poll.priv.h
|
||||||
win.c
|
win.c
|
||||||
PUBLIC
|
PUBLIC
|
||||||
win.h
|
win.h
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "util/log.h"
|
#include "util/log.h"
|
||||||
#include "util/malloc.h"
|
#include "util/malloc.h"
|
||||||
|
|
||||||
#include "core/sdl2/poll.h"
|
#include "core/sdl2/poll.priv.h"
|
||||||
|
|
||||||
|
|
||||||
static atomic_uint_least32_t sdl_refcnt_ = 0;
|
static atomic_uint_least32_t sdl_refcnt_ = 0;
|
||||||
|
@ -14,8 +14,10 @@ struct nf7_core_sdl2_poll {
|
|||||||
uv_loop_t* uv;
|
uv_loop_t* uv;
|
||||||
|
|
||||||
uv_timer_t timer;
|
uv_timer_t timer;
|
||||||
|
uint64_t interval;
|
||||||
|
|
||||||
uint64_t interval;
|
void* data;
|
||||||
|
void (*handler)(struct nf7_core_sdl2_poll*, const SDL_Event*);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -62,10 +64,10 @@ static void poll_del_(struct nf7_core_sdl2_poll* this) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this == this->timer.data) {
|
if (this == this->timer.data) {
|
||||||
|
this->handler = nullptr;
|
||||||
uv_close((uv_handle_t*) &this->timer, poll_on_close_);
|
uv_close((uv_handle_t*) &this->timer, poll_on_close_);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
nf7_util_malloc_del(this->malloc, this);
|
nf7_util_malloc_del(this->malloc, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,6 +78,9 @@ static void poll_on_time_(uv_timer_t* timer) {
|
|||||||
|
|
||||||
SDL_Event e;
|
SDL_Event e;
|
||||||
while (0 != SDL_PollEvent(&e)) {
|
while (0 != SDL_PollEvent(&e)) {
|
||||||
|
if (nullptr != this->handler) {
|
||||||
|
this->handler(this, &e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (0 != uv_timer_start(&this->timer, poll_on_time_, this->interval, 0)) {
|
if (0 != uv_timer_start(&this->timer, poll_on_time_, this->interval, 0)) {
|
Loading…
Reference in New Issue
Block a user