Files
deck_in_a_dash/watch/src/c/resource_map.c
T
ml b94e76931a
build / build (push) Successful in 18s
Replace the watch app's menu UI with a single scrollable report page, add the config page
Report screen (ui_report_window.c, new): replaces the MenuLayer +
per-item drill-down windows (ui_menu_window.c/h, ui_card_window.c/h,
removed) with one continuously scrollable page mirroring the
interpreter's own text/HTML report - day significance, each transit's
narrative, the full Celtic Cross spread, and guidance last. Bigger/
bolder fonts throughout. Card images are a fixed 72px wide: a full-
display-width version was tried first but reliably crashes the real
PNG decoder ("PNG memory allocation failed") on actual hardware,
independent of the app's own heap or lazy-loading - 72px is the
hardware-verified ceiling.

Config page (pkjs/index.js): a self-contained `data:` URI settings form
for birth data/language/notification, submitting via AppMessage to the
existing app_message.c receiver. package.json needed
"capabilities": ["configurable"] for the Pebble mobile app to expose a
Settings entry for the sideloaded app at all - app_message.c's own
receiving logic was already correct. Added config_log() (config.c) to
confirm on-device, via APP_LOG, exactly which values a shown reading is
based on - both right after a config submission and at every app
launch.
2026-07-14 19:03:25 +02:00

36 lines
1.6 KiB
C

#include "resource_map.h"
#include <pebble.h>
uint32_t card_resource_id(TarotCard card) {
switch (card) {
case CARD_FOOL: return RESOURCE_ID_IMG_CARD_FOOL;
case CARD_MAGICIAN: return RESOURCE_ID_IMG_CARD_MAGICIAN;
case CARD_HIGH_PRIESTESS: return RESOURCE_ID_IMG_CARD_HIGH_PRIESTESS;
case CARD_EMPRESS: return RESOURCE_ID_IMG_CARD_EMPRESS;
case CARD_EMPEROR: return RESOURCE_ID_IMG_CARD_EMPEROR;
case CARD_HIEROPHANT: return RESOURCE_ID_IMG_CARD_HIEROPHANT;
case CARD_LOVERS: return RESOURCE_ID_IMG_CARD_LOVERS;
case CARD_CHARIOT: return RESOURCE_ID_IMG_CARD_CHARIOT;
case CARD_STRENGTH: return RESOURCE_ID_IMG_CARD_STRENGTH;
case CARD_HERMIT: return RESOURCE_ID_IMG_CARD_HERMIT;
case CARD_WHEEL_OF_FORTUNE: return RESOURCE_ID_IMG_CARD_WHEEL_OF_FORTUNE;
case CARD_JUSTICE: return RESOURCE_ID_IMG_CARD_JUSTICE;
case CARD_HANGED_MAN: return RESOURCE_ID_IMG_CARD_HANGED_MAN;
case CARD_DEATH: return RESOURCE_ID_IMG_CARD_DEATH;
case CARD_TEMPERANCE: return RESOURCE_ID_IMG_CARD_TEMPERANCE;
case CARD_DEVIL: return RESOURCE_ID_IMG_CARD_DEVIL;
case CARD_TOWER: return RESOURCE_ID_IMG_CARD_TOWER;
case CARD_STAR: return RESOURCE_ID_IMG_CARD_STAR;
case CARD_MOON: return RESOURCE_ID_IMG_CARD_MOON;
case CARD_SUN: return RESOURCE_ID_IMG_CARD_SUN;
case CARD_JUDGEMENT: return RESOURCE_ID_IMG_CARD_JUDGEMENT;
case CARD_WORLD: return RESOURCE_ID_IMG_CARD_WORLD;
}
return RESOURCE_ID_IMG_CARD_FOOL; /* unreachable for a valid TarotCard */
}
int16_t card_image_height_for_width(int16_t width) {
return (int16_t)((width * 1810 + 543) / 1086); /* +543 = round, not truncate */
}