feat: use icons in PDF viewer toolbar; default Music app to user's Music folder

This commit is contained in:
2026-05-18 20:21:32 +02:00
parent dac186f251
commit 77a536bcc3
4 changed files with 42 additions and 11 deletions
+1 -1
View File
@@ -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);
}
+18 -8
View File
@@ -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);
}
+5
View File
@@ -10,6 +10,8 @@
#include <montauk/string.h>
#include <montauk/heap.h>
#include <gui/gui.hpp>
#include <gui/svg.hpp>
#include <gui/canvas.hpp>
#include <gui/truetype.hpp>
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];
// ============================================================================
+18 -2
View File
@@ -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