mirror of
https://git.shylie.info/shylie/terml.git
synced 2024-12-22 22:50:05 +00:00
Added resize callback, made main callback optional
This commit is contained in:
parent
226adeaf72
commit
2cb9c0273f
@ -6,9 +6,15 @@ extern "C"
|
||||
{
|
||||
#endif
|
||||
|
||||
typedef void (*terml_main_callback)();
|
||||
typedef int (*terml_quit_callback)();
|
||||
typedef void (*terml_main_callback) ();
|
||||
typedef int (*terml_quit_callback) ();
|
||||
typedef void (*terml_key_callback) (char code);
|
||||
typedef void (*terml_resize_callback)(
|
||||
unsigned int previous_width,
|
||||
unsigned int previous_height,
|
||||
unsigned int new_width,
|
||||
unsigned int new_height
|
||||
);
|
||||
|
||||
int terml_init();
|
||||
int terml_deinit();
|
||||
@ -23,6 +29,7 @@ void terml_flush();
|
||||
void terml_set_main_callback(terml_main_callback);
|
||||
void terml_set_quit_callback(terml_quit_callback);
|
||||
void terml_set_key_callback(terml_key_callback);
|
||||
void terml_set_resize_callback(terml_resize_callback);
|
||||
|
||||
void terml_start();
|
||||
void terml_stop();
|
||||
|
@ -13,6 +13,7 @@ terml::terml() :
|
||||
main(nullptr),
|
||||
quit(nullptr),
|
||||
key(nullptr),
|
||||
resize(nullptr),
|
||||
buffer(nullptr),
|
||||
width(0),
|
||||
height(0)
|
||||
@ -136,7 +137,12 @@ void terml::set_key_callback(terml_key_callback callback)
|
||||
key = callback;
|
||||
}
|
||||
|
||||
void terml::key_event(char code)
|
||||
void terml::set_resize_callback(terml_resize_callback callback)
|
||||
{
|
||||
resize = callback;
|
||||
}
|
||||
|
||||
void terml::key_event(char code) const
|
||||
{
|
||||
if (key)
|
||||
{
|
||||
@ -157,8 +163,11 @@ void terml::mainloop()
|
||||
unsigned long long current_time = timer();
|
||||
|
||||
while (current_time >= last_time + wait_time)
|
||||
{
|
||||
if (main)
|
||||
{
|
||||
main();
|
||||
}
|
||||
|
||||
process_events();
|
||||
|
||||
@ -215,6 +224,9 @@ void terml::setup_buffer()
|
||||
|
||||
if (width != new_width || height != new_height)
|
||||
{
|
||||
const unsigned int old_width = width;
|
||||
const unsigned int old_height = height;
|
||||
|
||||
width = new_width;
|
||||
height = new_height;
|
||||
|
||||
@ -229,6 +241,11 @@ void terml::setup_buffer()
|
||||
}
|
||||
|
||||
buffer[CELL_SIZE * width * height] = '\0';
|
||||
|
||||
if (resize)
|
||||
{
|
||||
resize(old_width, old_height, new_width, new_height);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -321,6 +338,11 @@ extern "C"
|
||||
TERML_G->set_key_callback(callback);
|
||||
}
|
||||
|
||||
void terml_set_resize_callback(terml_resize_callback callback)
|
||||
{
|
||||
TERML_G->set_resize_callback(callback);
|
||||
}
|
||||
|
||||
void terml_start()
|
||||
{
|
||||
try
|
||||
|
@ -44,6 +44,7 @@ public:
|
||||
void set_main_callback(terml_main_callback);
|
||||
void set_quit_callback(terml_quit_callback);
|
||||
void set_key_callback(terml_key_callback);
|
||||
void set_resize_callback(terml_resize_callback);
|
||||
|
||||
void mainloop();
|
||||
void stop();
|
||||
@ -62,7 +63,7 @@ protected:
|
||||
virtual unsigned long long timer_frequency() = 0;
|
||||
virtual void process_events() = 0;
|
||||
|
||||
void key_event(char code);
|
||||
void key_event(char code) const;
|
||||
|
||||
private:
|
||||
char* buffer;
|
||||
@ -71,6 +72,7 @@ private:
|
||||
terml_main_callback main;
|
||||
terml_quit_callback quit;
|
||||
terml_key_callback key;
|
||||
terml_resize_callback resize;
|
||||
bool should_quit;
|
||||
bool really_should_quit;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user