diff --git a/tools/qwaq/qwaq-app.r b/tools/qwaq/qwaq-app.r index 9e8706b89..ccf7485bb 100644 --- a/tools/qwaq/qwaq-app.r +++ b/tools/qwaq/qwaq-app.r @@ -8,6 +8,7 @@ void initialize (void) = #0; window_t create_window (int xpos, int ypos, int xlen, int ylen) = #0; void destroy_window (window_t win) = #0; void mvwprintf (window_t win, int x, int y, string fmt, ...) = #0; +void wrefresh (window_t win) = #0; int get_event (qwaq_event_t *event) = #0; @@ -18,20 +19,22 @@ int main (int argc, string *argv) initialize (); window_t win = create_window (20, 5, 50, 10); - mvwprintf (win, 0, 0, "Hi there! (q to quit)\n"); - mvwprintf (win, 1, 1, "(?)Oo.\n"); - mvwprintf (win, 1, 2, " \\_O>\n"); + mvwprintf (win, 0, 0, "Hi there! (q to quit)"); + mvwprintf (win, 1, 1, "(?)Oo."); + mvwprintf (win, 1, 2, " \\_O>"); + wrefresh (win); do { if (get_event (&event)) { if (event.event_type == qe_key) { ch = event.e.key; - mvwprintf (win, 1, 1, "key: %d\n", ch); + mvwprintf (win, 1, 1, "key: %d", ch); } else if (event.event_type == qe_mouse) { - mvwprintf (win, 1, 2, "mouse: %2d %2d %08x\n", + mvwprintf (win, 1, 2, "mouse: %2d %2d %08x", event.e.mouse.x, event.e.mouse.y, event.e.mouse.buttons); } + wrefresh (win); } } while (ch != 'q' && ch != 'Q'); destroy_window (win); diff --git a/tools/qwaq/qwaq-curses.c b/tools/qwaq/qwaq-curses.c index 00caef9f5..0f80dfc62 100644 --- a/tools/qwaq/qwaq-curses.c +++ b/tools/qwaq/qwaq-curses.c @@ -62,6 +62,7 @@ typedef enum qwaq_commands_e { qwaq_cmd_bottom_panel, qwaq_cmd_move_panel, qwaq_cmd_mvwaddstr, + qwaq_cmd_wrefresh, } qwaq_commands; #define RING_BUFFER(type, size) \ @@ -384,6 +385,14 @@ cmd_mvwaddstr (qwaq_resources_t *res) window_t *window = get_window (res, __FUNCTION__, window_id); mvwaddstr (window->win, y, x, res->strings[string_id].str); release_string (res, string_id); +} + +static void +cmd_wrefresh (qwaq_resources_t *res) +{ + int window_id = RB_PEEK_DATA (res->command_queue, 2); + + window_t *window = get_window (res, __FUNCTION__, window_id); wrefresh (window->win); } @@ -422,6 +431,9 @@ process_commands (qwaq_resources_t *res) case qwaq_cmd_mvwaddstr: cmd_mvwaddstr (res); break; + case qwaq_cmd_wrefresh: + cmd_wrefresh (res); + break; } RB_DROP_DATA (res->command_queue, RB_PEEK_DATA (res->command_queue, 1)); } @@ -659,6 +671,22 @@ bi_mvwprintf (progs_t *pr) } } +static void +bi_wrefresh (progs_t *pr) +{ + qwaq_resources_t *res = PR_Resources_Find (pr, "qwaq"); + int window_id = P_INT (pr, 0); + + if (get_window (res, __FUNCTION__, window_id)) { + int command[] = { qwaq_cmd_wrefresh, 0, window_id, }; + command[1] = CMD_SIZE(command); + + if (RB_SPACE_AVAILABLE (res->command_queue) >= CMD_SIZE(command)) { + RB_WRITE_DATA (res->command_queue, command, CMD_SIZE(command)); + } + } +} + static void bi_get_event (progs_t *pr) { @@ -715,6 +743,7 @@ static builtin_t builtins[] = { {"bottom_panel", bi_bottom_panel, -1}, {"move_panel", bi_move_panel, -1}, {"mvwprintf", bi_mvwprintf, -1}, + {"wrefresh", bi_wrefresh, -1}, {"get_event", bi_get_event, -1}, {0} };