feat: use icons in PDF viewer toolbar; default Music app to user's Music folder
This commit is contained in:
@@ -1478,7 +1478,7 @@ extern "C" void _start() {
|
|||||||
auto set_user_home = [&]() {
|
auto set_user_home = [&]() {
|
||||||
char username[32] = {};
|
char username[32] = {};
|
||||||
if (montauk::getuser(username, sizeof(username)) > 0 && username[0]) {
|
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 {
|
} else {
|
||||||
memcpy(g.dir_path, "0:/home", 8);
|
memcpy(g.dir_path, "0:/home", 8);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ TrueTypeFont* g_font = nullptr;
|
|||||||
TrueTypeFont* g_font_bold = nullptr;
|
TrueTypeFont* g_font_bold = nullptr;
|
||||||
TrueTypeFont* g_font_mono = nullptr;
|
TrueTypeFont* g_font_mono = nullptr;
|
||||||
|
|
||||||
|
SvgIcon g_icon_folder = {};
|
||||||
|
SvgIcon g_icon_print = {};
|
||||||
|
|
||||||
char g_status_msg[128] = {};
|
char g_status_msg[128] = {};
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -39,14 +42,14 @@ char g_status_msg[128] = {};
|
|||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|
||||||
// Toolbar buttons: Open | Print | < > | - +
|
// Toolbar buttons: Open | Print | < > | - +
|
||||||
static constexpr int TB_OPEN_X0 = 4, TB_OPEN_X1 = 40;
|
static constexpr int TB_OPEN_X0 = 4, TB_OPEN_X1 = 28;
|
||||||
static constexpr int TB_PRINT_X0 = 44, TB_PRINT_X1 = 80;
|
static constexpr int TB_PRINT_X0 = 32, TB_PRINT_X1 = 56;
|
||||||
// separator at 88
|
// separator at 64
|
||||||
static constexpr int TB_PREV_X0 = 96, TB_PREV_X1 = 120;
|
static constexpr int TB_PREV_X0 = 72, TB_PREV_X1 = 96;
|
||||||
static constexpr int TB_NEXT_X0 = 124, TB_NEXT_X1 = 148;
|
static constexpr int TB_NEXT_X0 = 100, TB_NEXT_X1 = 124;
|
||||||
// separator at 156
|
// separator at 132
|
||||||
static constexpr int TB_ZOUT_X0 = 164, TB_ZOUT_X1 = 188;
|
static constexpr int TB_ZOUT_X0 = 140, TB_ZOUT_X1 = 164;
|
||||||
static constexpr int TB_ZIN_X0 = 192, TB_ZIN_X1 = 216;
|
static constexpr int TB_ZIN_X0 = 168, TB_ZIN_X1 = 192;
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// Helpers
|
// Helpers
|
||||||
@@ -161,6 +164,11 @@ extern "C" void _start() {
|
|||||||
g_font_bold = load_font("0:/fonts/Roboto-Bold.ttf");
|
g_font_bold = load_font("0:/fonts/Roboto-Bold.ttf");
|
||||||
g_font_mono = load_font("0:/fonts/JetBrainsMono-Regular.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
|
// Check for file argument
|
||||||
char args[512] = {};
|
char args[512] = {};
|
||||||
int arglen = montauk::getargs(args, sizeof(args));
|
int arglen = montauk::getargs(args, sizeof(args));
|
||||||
@@ -368,6 +376,8 @@ extern "C" void _start() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
free_pdf();
|
free_pdf();
|
||||||
|
if (g_icon_folder.pixels) svg_free(g_icon_folder);
|
||||||
|
if (g_icon_print.pixels) svg_free(g_icon_print);
|
||||||
win.destroy();
|
win.destroy();
|
||||||
montauk::exit(0);
|
montauk::exit(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,8 @@
|
|||||||
#include <montauk/string.h>
|
#include <montauk/string.h>
|
||||||
#include <montauk/heap.h>
|
#include <montauk/heap.h>
|
||||||
#include <gui/gui.hpp>
|
#include <gui/gui.hpp>
|
||||||
|
#include <gui/svg.hpp>
|
||||||
|
#include <gui/canvas.hpp>
|
||||||
#include <gui/truetype.hpp>
|
#include <gui/truetype.hpp>
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -144,6 +146,9 @@ extern TrueTypeFont* g_font;
|
|||||||
extern TrueTypeFont* g_font_bold;
|
extern TrueTypeFont* g_font_bold;
|
||||||
extern TrueTypeFont* g_font_mono;
|
extern TrueTypeFont* g_font_mono;
|
||||||
|
|
||||||
|
extern SvgIcon g_icon_folder;
|
||||||
|
extern SvgIcon g_icon_print;
|
||||||
|
|
||||||
extern char g_status_msg[128];
|
extern char g_status_msg[128];
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
|
|||||||
@@ -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_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);
|
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;
|
int bx = 4;
|
||||||
auto tb_btn = [&](int w, bool active, const char* label) {
|
auto tb_btn = [&](int w, bool active, const char* label) {
|
||||||
Color bg = active ? TB_BTN_ACTIVE : TB_BTN_BG;
|
Color bg = active ? TB_BTN_ACTIVE : TB_BTN_BG;
|
||||||
@@ -175,14 +176,29 @@ void render(uint32_t* pixels) {
|
|||||||
}
|
}
|
||||||
bx += w + 4;
|
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 = [&]() {
|
auto tb_sep = [&]() {
|
||||||
px_vline(pixels, g_win_w, g_win_h, bx, 6, TOOLBAR_H - 12, TB_SEP_COLOR);
|
px_vline(pixels, g_win_w, g_win_h, bx, 6, TOOLBAR_H - 12, TB_SEP_COLOR);
|
||||||
bx += 8;
|
bx += 8;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Open / Print
|
// Open / Print
|
||||||
tb_btn(36, false, "Open");
|
tb_icon_btn(g_icon_folder, "O");
|
||||||
tb_btn(36, false, "Print");
|
tb_icon_btn(g_icon_print, "P");
|
||||||
tb_sep();
|
tb_sep();
|
||||||
|
|
||||||
// Navigation
|
// Navigation
|
||||||
|
|||||||
Reference in New Issue
Block a user