diff options
Diffstat (limited to 'src/user/popups')
-rw-r--r-- | src/user/popups/info.c | 77 | ||||
-rw-r--r-- | src/user/popups/popup.c | 43 |
2 files changed, 0 insertions, 120 deletions
diff --git a/src/user/popups/info.c b/src/user/popups/info.c deleted file mode 100644 index eac155b..0000000 --- a/src/user/popups/info.c +++ /dev/null @@ -1,77 +0,0 @@ -#include <popups/popup.h> - -#include <libfont/fonts.h> - -#include <knob/format.h> -#include <knob/heap.h> - -#include <stdint.h> -#include <stdarg.h> - -#define PADDING 6 -#define FONT "fixed-10" - -static const struct font_info *info_font = 0; - -static const struct key_packet info_quits[] = { - { .key_id = KEY_ESCAPE, .modifiers = NO_MODS }, - { .key_id = 0 } -}; - -void info_popup(struct popup *into, const char *msg, _pixel_t fg, _pixel_t bg) { - if (!info_font) - info_font = get_font(FONT); - - uint32_t w = 0, h = 1, lw = 0; - for (const char *i = msg; *i; ++i) - if (*i == '\n') { - ++h; - if (lw > w) - w = lw; - lw = 0; - } - else - ++lw; - if (lw > w) - w = lw; - - into->has_quit = false; - into->quit_binds = (struct key_packet *)info_quits; - - const uint32_t pitch = info_font->space_width * w + 2 * PADDING; - const uint32_t height = info_font->space_height * h + 2 * PADDING; - - _pixel_t *const pixbuf = get_block(pitch * height * 4); - - for (uint32_t y = 0; y < height; ++y) - for (uint32_t x = 0; x < pitch; ++x) - pixbuf[y * pitch + x] = bg; - - uint32_t my = 0; - uint32_t mx = 0; - --msg; - while (*++msg) { - if (*msg == '\n') { - ++my; - mx = 0; - } - else - put_char(info_font, *msg, pixbuf + (my * info_font->space_height + PADDING) * pitch + mx++ * info_font->space_width + PADDING, pitch, bg, fg); - } - - into->pixbuf = pixbuf; - into->handle = _new_window(pitch, height, pixbuf); -} - -void info_popupf_v(struct popup *into, const char *text, _pixel_t fg, _pixel_t bg, va_list args) { - char *const msg = format_v(text, args); - info_popup(into, msg, fg, bg); - free_block(msg); -} - -void info_popupf(struct popup *into, const char *text, _pixel_t fg, _pixel_t bg, ...) { - va_list args; - va_start(args, bg); - info_popupf_v(into, text, fg, bg, args); - va_end(args); -}
\ No newline at end of file diff --git a/src/user/popups/popup.c b/src/user/popups/popup.c deleted file mode 100644 index 9cdccb4..0000000 --- a/src/user/popups/popup.c +++ /dev/null @@ -1,43 +0,0 @@ -#include <popups/popup.h> - -#include <knob/format.h> -#include <knob/heap.h> - -#include <pland/syscall.h> - -void handle_actions(struct popup *p) { - if (p->has_quit) - return; - struct window_action a; - while (1) { - _get_win_action(p->handle, &a); - if (a.action_type == NOT_READY) - return; - if ((a.action_type == KEY_DOWN)) { - //syslogf("got key 0x%2x, 0x%3x", a.as_key.key_id, a.as_key.modifiers); - for (const struct key_packet *kp = p->quit_binds; kp->key_id; ++kp) { - //syslogf("checking against 0x%2x, 0x%3x", kp->key_id, kp->modifiers); - if ((a.as_key.key_id == kp->key_id) && (a.as_key.modifiers == kp->modifiers)) { - p->has_quit = true; - p->quit_as = a.as_key; - return; - } - } - } - } -} - -void delete_popup(struct popup *p) { - _delete_window(p->handle); - free_block(p->pixbuf); -} - -void make_modal(struct popup *p) { - handle_actions(p); - while (!p->has_quit) { - _wait_for_action(); - _yield_task(); - handle_actions(p); - } - delete_popup(p); -}
\ No newline at end of file |