From 317241d2948c70d09a74c536848236c2bba480b3 Mon Sep 17 00:00:00 2001 From: Randall Winkhart Date: Fri, 9 Oct 2026 03:09:22 -0400 Subject: [PATCH] Use custom font for menu options --- src/c/JellyPod.c | 17 +++++++++-------- src/c/sdk_mod.c | 25 +++++++++++++++++++++++++ src/c/sdk_mod.h | 3 +++ 3 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 src/c/sdk_mod.c create mode 100644 src/c/sdk_mod.h diff --git a/src/c/JellyPod.c b/src/c/JellyPod.c index 79958ca..288e74f 100644 --- a/src/c/JellyPod.c +++ b/src/c/JellyPod.c @@ -1,4 +1,5 @@ #include "custom_status_bar.h" +#include "sdk_mod.h" #include typedef enum { @@ -25,17 +26,17 @@ static GFont s_font_chicago; // constants #define BAR_HEIGHT 20 #ifdef PBL_RECT -#define MARGIN_H 4 -#define MARGIN_V 4 +#define MARGIN_X 4 +#define MARGIN_Y 4 #else -#define MARGIN_H 0 +#define MARGIN_X 0 #if PBL_DISPLAY_WIDTH < 260 -#define MARGIN_V 4 +#define MARGIN_Y 4 #else -#define MARGIN_V 5 +#define MARGIN_Y 5 #endif #endif -static const GRect s_menu_grect = GRect(MARGIN_H, BAR_HEIGHT + MARGIN_V, PBL_DISPLAY_WIDTH - (MARGIN_H * 2), PBL_DISPLAY_HEIGHT - (MARGIN_V * 2)); +static const GRect s_menu_grect = GRect(MARGIN_X, BAR_HEIGHT + MARGIN_Y, PBL_DISPLAY_WIDTH - (MARGIN_X * 2), PBL_DISPLAY_HEIGHT - (MARGIN_Y * 2)); static const char *s_main_menu_options[3] = {"Artists", "Playlists", "Now Playing"}; static uint16_t menu_get_num_rows(MenuLayer *menu_layer, uint16_t section_index, void *context) { @@ -54,7 +55,7 @@ static uint16_t menu_get_num_rows(MenuLayer *menu_layer, uint16_t section_index, static void menu_draw_row(GContext *ctx, const Layer *cell_layer, MenuIndex *cell_index, void *context) { switch (s_current_menu_display) { case MENU_NAV_DISPLAY_MAIN: - menu_cell_basic_draw(ctx, cell_layer, s_main_menu_options[cell_index->row], NULL, NULL); // TODO draw folder icon for... folders + custom_menu_cell_title_draw(ctx, cell_layer, s_main_menu_options[cell_index->row], NULL, s_font_chicago, MARGIN_X); break; case MENU_NAV_DISPLAY_ARTISTS: case MENU_NAV_DISPLAY_ALBUMS: @@ -95,7 +96,7 @@ static void main_window_load() { #endif layer_add_child(main_window_layer, s_status_bar_layer); - s_divider_layer = layer_create(GRect(MARGIN_H, BAR_HEIGHT + (MARGIN_V / 2), PBL_DISPLAY_WIDTH - (MARGIN_H * 2), 1)); + s_divider_layer = layer_create(GRect(MARGIN_X, BAR_HEIGHT + (MARGIN_Y / 2), PBL_DISPLAY_WIDTH - (MARGIN_X * 2), 1)); layer_set_update_proc(s_divider_layer, divider_layer_update_proc); layer_add_child(main_window_layer, s_divider_layer); } diff --git a/src/c/sdk_mod.c b/src/c/sdk_mod.c new file mode 100644 index 0000000..77da6d4 --- /dev/null +++ b/src/c/sdk_mod.c @@ -0,0 +1,25 @@ +#include + +typedef struct MenuCellLayerConfig { + const char *title; + const char *subtitle; + const char *value; + GFont title_font; + GFont value_font; + GFont subtitle_font; + GTextOverflowMode overflow_mode; + int horizontal_inset; +} MenuCellLayerConfig; + +void custom_menu_cell_title_draw(GContext *ctx, const Layer *cell_layer, const char *title, const char *subtitle, GFont font, uint8_t margin_x) { + GRect box = layer_get_bounds(cell_layer); + box.origin.x = margin_x; + box.size.w -= margin_x; + if (subtitle) { + graphics_draw_text(ctx, subtitle, font, GRect(PBL_IF_RECT_ELSE(box.origin.x + margin_x, box.origin.x), box.origin.y + (box.size.h / 2), box.size.w, box.size.h), GTextOverflowModeFill, PBL_IF_RECT_ELSE(GTextAlignmentLeft, GTextAlignmentCenter), NULL); + box.origin.y += box.size.h / 5; + } else { + box.origin.y += box.size.h / 3; + } + graphics_draw_text(ctx, title, font, box, GTextOverflowModeFill, PBL_IF_RECT_ELSE(GTextAlignmentLeft, GTextAlignmentCenter), NULL); +} diff --git a/src/c/sdk_mod.h b/src/c/sdk_mod.h new file mode 100644 index 0000000..3637abe --- /dev/null +++ b/src/c/sdk_mod.h @@ -0,0 +1,3 @@ +#include "pebble.h" + +void custom_menu_cell_title_draw(GContext *ctx, const Layer *cell_layer, const char *title, const char *subtitle, GFont font, uint8_t margin_x);