From 77a536bcc3d67f78172d657e5b613acd4f075c85 Mon Sep 17 00:00:00 2001 From: Daniel Hammer Date: Mon, 18 May 2026 20:21:32 +0200 Subject: [PATCH] feat: use icons in PDF viewer toolbar; default Music app to user's Music folder --- programs/src/music/main.cpp | 2 +- programs/src/pdfviewer/main.cpp | 26 ++++++++++++++++++-------- programs/src/pdfviewer/pdfviewer.h | 5 +++++ programs/src/pdfviewer/render.cpp | 20 ++++++++++++++++++-- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/programs/src/music/main.cpp b/programs/src/music/main.cpp index c2385ea..0acea16 100644 --- a/programs/src/music/main.cpp +++ b/programs/src/music/main.cpp @@ -1478,7 +1478,7 @@ extern "C" void _start() { auto set_user_home = [&]() { char username[32] = {}; if (montauk::getuser(username, sizeof(username)) > 0 && username[0]) { - snprintf(g.dir_path, sizeof(g.dir_path), "0:/users/%s", username); + snprintf(g.dir_path, sizeof(g.dir_path), "0:/users/%s/Music", username); } else { memcpy(g.dir_path, "0:/home", 8); } diff --git a/programs/src/pdfviewer/main.cpp b/programs/src/pdfviewer/main.cpp index e1b59e9..86133d6 100644 --- a/programs/src/pdfviewer/main.cpp +++ b/programs/src/pdfviewer/main.cpp @@ -32,6 +32,9 @@ TrueTypeFont* g_font = nullptr; TrueTypeFont* g_font_bold = nullptr; TrueTypeFont* g_font_mono = nullptr; +SvgIcon g_icon_folder = {}; +SvgIcon g_icon_print = {}; + char g_status_msg[128] = {}; // ============================================================================ @@ -39,14 +42,14 @@ char g_status_msg[128] = {}; // ============================================================================ // Toolbar buttons: Open | Print | < > | - + -static constexpr int TB_OPEN_X0 = 4, TB_OPEN_X1 = 40; -static constexpr int TB_PRINT_X0 = 44, TB_PRINT_X1 = 80; -// separator at 88 -static constexpr int TB_PREV_X0 = 96, TB_PREV_X1 = 120; -static constexpr int TB_NEXT_X0 = 124, TB_NEXT_X1 = 148; -// separator at 156 -static constexpr int TB_ZOUT_X0 = 164, TB_ZOUT_X1 = 188; -static constexpr int TB_ZIN_X0 = 192, TB_ZIN_X1 = 216; +static constexpr int TB_OPEN_X0 = 4, TB_OPEN_X1 = 28; +static constexpr int TB_PRINT_X0 = 32, TB_PRINT_X1 = 56; +// separator at 64 +static constexpr int TB_PREV_X0 = 72, TB_PREV_X1 = 96; +static constexpr int TB_NEXT_X0 = 100, TB_NEXT_X1 = 124; +// separator at 132 +static constexpr int TB_ZOUT_X0 = 140, TB_ZOUT_X1 = 164; +static constexpr int TB_ZIN_X0 = 168, TB_ZIN_X1 = 192; // ============================================================================ // Helpers @@ -161,6 +164,11 @@ extern "C" void _start() { g_font_bold = load_font("0:/fonts/Roboto-Bold.ttf"); g_font_mono = load_font("0:/fonts/JetBrainsMono-Regular.ttf"); + // Load toolbar icons + Color icon_color = HEADER_TEXT; + g_icon_folder = svg_load("0:/icons/folder.svg", 16, 16, icon_color); + g_icon_print = svg_load("0:/icons/printer-symbolic.svg", 16, 16, icon_color); + // Check for file argument char args[512] = {}; int arglen = montauk::getargs(args, sizeof(args)); @@ -368,6 +376,8 @@ extern "C" void _start() { } free_pdf(); + if (g_icon_folder.pixels) svg_free(g_icon_folder); + if (g_icon_print.pixels) svg_free(g_icon_print); win.destroy(); montauk::exit(0); } diff --git a/programs/src/pdfviewer/pdfviewer.h b/programs/src/pdfviewer/pdfviewer.h index f942ce5..1430103 100644 --- a/programs/src/pdfviewer/pdfviewer.h +++ b/programs/src/pdfviewer/pdfviewer.h @@ -10,6 +10,8 @@ #include #include #include +#include +#include #include extern "C" { @@ -144,6 +146,9 @@ extern TrueTypeFont* g_font; extern TrueTypeFont* g_font_bold; extern TrueTypeFont* g_font_mono; +extern SvgIcon g_icon_folder; +extern SvgIcon g_icon_print; + extern char g_status_msg[128]; // ============================================================================ diff --git a/programs/src/pdfviewer/render.cpp b/programs/src/pdfviewer/render.cpp index 7cd464a..9d1fd19 100644 --- a/programs/src/pdfviewer/render.cpp +++ b/programs/src/pdfviewer/render.cpp @@ -162,6 +162,7 @@ void render(uint32_t* pixels) { px_fill(pixels, g_win_w, g_win_h, 0, 0, g_win_w, TOOLBAR_H, TOOLBAR_BG); px_hline(pixels, g_win_w, g_win_h, 0, TOOLBAR_H - 1, g_win_w, GRID_COLOR); + Canvas tb_canvas(pixels, g_win_w, g_win_h); int bx = 4; auto tb_btn = [&](int w, bool active, const char* label) { Color bg = active ? TB_BTN_ACTIVE : TB_BTN_BG; @@ -175,14 +176,29 @@ void render(uint32_t* pixels) { } bx += w + 4; }; + auto tb_icon_btn = [&](const SvgIcon& icon, const char* fallback) { + px_fill_rounded(pixels, g_win_w, g_win_h, bx, TB_BTN_Y, TB_BTN_SIZE, TB_BTN_SIZE, + TB_BTN_RAD, TB_BTN_BG); + if (icon.pixels) { + tb_canvas.icon(bx + (TB_BTN_SIZE - icon.width) / 2, + TB_BTN_Y + (TB_BTN_SIZE - icon.height) / 2, icon); + } else if (g_font && fallback && fallback[0]) { + int tw = g_font->measure_text(fallback, HEADER_FONT); + g_font->draw_to_buffer(pixels, g_win_w, g_win_h, + bx + (TB_BTN_SIZE - tw) / 2, + TB_BTN_Y + (TB_BTN_SIZE - HEADER_FONT) / 2, + fallback, HEADER_TEXT, HEADER_FONT); + } + bx += TB_BTN_SIZE + 4; + }; auto tb_sep = [&]() { px_vline(pixels, g_win_w, g_win_h, bx, 6, TOOLBAR_H - 12, TB_SEP_COLOR); bx += 8; }; // Open / Print - tb_btn(36, false, "Open"); - tb_btn(36, false, "Print"); + tb_icon_btn(g_icon_folder, "O"); + tb_icon_btn(g_icon_print, "P"); tb_sep(); // Navigation