Add support for timeouts in tp_wait_for_event
This commit is contained in:
parent
d4ff88ab17
commit
89f7d320b0
12
tui.cpp
12
tui.cpp
|
@ -41,6 +41,8 @@ static void convert_tp_event(void *, termpaint_event *tp_event) {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<Event> wait_for_event(termpaint_integration *integration, int timeout) {
|
std::optional<Event> wait_for_event(termpaint_integration *integration, int timeout) {
|
||||||
|
const int cols = termpaint_surface_width(surface);
|
||||||
|
const int rows = termpaint_surface_height(surface);
|
||||||
while (eventqueue.empty()) {
|
while (eventqueue.empty()) {
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
if(timeout > 0)
|
if(timeout > 0)
|
||||||
|
@ -49,8 +51,14 @@ std::optional<Event> wait_for_event(termpaint_integration *integration, int time
|
||||||
ok = termpaintx_full_integration_do_iteration(integration);
|
ok = termpaintx_full_integration_do_iteration(integration);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
return {}; // or some other error handling
|
return {}; // or some other error handling
|
||||||
|
} else if(cols != termpaint_surface_width(surface) || rows != termpaint_surface_height(surface)) {
|
||||||
|
Event e;
|
||||||
|
e.modifier = 0;
|
||||||
|
e.type = EV_RESIZE;
|
||||||
|
eventqueue.push_back(e);
|
||||||
} else if(timeout == 0) {
|
} else if(timeout == 0) {
|
||||||
Event e;
|
Event e;
|
||||||
|
e.modifier = 0;
|
||||||
e.type = EV_TIMEOUT;
|
e.type = EV_TIMEOUT;
|
||||||
eventqueue.push_back(e);
|
eventqueue.push_back(e);
|
||||||
}
|
}
|
||||||
|
@ -111,9 +119,9 @@ void tp_flush(const bool force)
|
||||||
termpaint_terminal_flush(terminal, force);
|
termpaint_terminal_flush(terminal, force);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::optional<Event> tp_wait_for_event()
|
std::optional<Event> tp_wait_for_event(int timeout)
|
||||||
{
|
{
|
||||||
return wait_for_event(integration, 0);
|
return wait_for_event(integration, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::string repeated(const int n, const std::string &what)
|
static std::string repeated(const int n, const std::string &what)
|
||||||
|
|
3
tui.h
3
tui.h
|
@ -4,6 +4,7 @@
|
||||||
#include <termpaintx.h>
|
#include <termpaintx.h>
|
||||||
#define EV_TIMEOUT 0xffff
|
#define EV_TIMEOUT 0xffff
|
||||||
#define EV_IGNORE 0xfffe
|
#define EV_IGNORE 0xfffe
|
||||||
|
#define EV_RESIZE 0xfffd
|
||||||
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
|
@ -58,7 +59,7 @@ void tp_shutdown();
|
||||||
void tp_flush(const bool force=false);
|
void tp_flush(const bool force=false);
|
||||||
void tp_pause();
|
void tp_pause();
|
||||||
void tp_unpause();
|
void tp_unpause();
|
||||||
std::optional<Event> tp_wait_for_event();
|
std::optional<Event> tp_wait_for_event(int timeout=0);
|
||||||
|
|
||||||
struct action
|
struct action
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue