diff options
Diffstat (limited to 'src/user/popups/info.c')
-rw-r--r-- | src/user/popups/info.c | 77 |
1 files changed, 0 insertions, 77 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 |