90 lines
2.9 KiB
C
90 lines
2.9 KiB
C
#include "card_assets.h"
|
|
|
|
static lv_color_t suit_color(tarot_suit_t suit)
|
|
{
|
|
switch (suit) {
|
|
case TAROT_SUIT_WANDS:
|
|
return lv_color_hex(0xd8743f);
|
|
case TAROT_SUIT_CUPS:
|
|
return lv_color_hex(0x3b83c4);
|
|
case TAROT_SUIT_SWORDS:
|
|
return lv_color_hex(0x8a92a6);
|
|
case TAROT_SUIT_PENTACLES:
|
|
return lv_color_hex(0x5fa66a);
|
|
case TAROT_SUIT_NONE:
|
|
default:
|
|
return lv_color_hex(0xb88cff);
|
|
}
|
|
}
|
|
|
|
static const char *suit_glyph(tarot_suit_t suit)
|
|
{
|
|
switch (suit) {
|
|
case TAROT_SUIT_WANDS:
|
|
return "W";
|
|
case TAROT_SUIT_CUPS:
|
|
return "C";
|
|
case TAROT_SUIT_SWORDS:
|
|
return "S";
|
|
case TAROT_SUIT_PENTACLES:
|
|
return "P";
|
|
case TAROT_SUIT_NONE:
|
|
default:
|
|
return "M";
|
|
}
|
|
}
|
|
|
|
lv_obj_t *card_assets_create_card_art(lv_obj_t *parent, const tarot_card_t *card, bool reversed)
|
|
{
|
|
lv_obj_t *art = lv_obj_create(parent);
|
|
lv_obj_set_size(art, 132, 184);
|
|
lv_obj_clear_flag(art, LV_OBJ_FLAG_SCROLLABLE);
|
|
lv_obj_set_style_radius(art, 8, 0);
|
|
lv_obj_set_style_border_width(art, 2, 0);
|
|
if (card == NULL) {
|
|
lv_obj_set_style_border_color(art, lv_color_hex(0xb88cff), 0);
|
|
lv_obj_set_style_bg_color(art, lv_color_hex(0xeee7d9), 0);
|
|
lv_obj_t *missing = lv_label_create(art);
|
|
lv_label_set_text(missing, "Card");
|
|
lv_obj_center(missing);
|
|
return art;
|
|
}
|
|
|
|
lv_obj_set_style_border_color(art, suit_color(card->suit), 0);
|
|
lv_obj_set_style_bg_color(art, lv_color_hex(0xeee7d9), 0);
|
|
lv_obj_set_style_pad_all(art, 8, 0);
|
|
|
|
lv_obj_t *top = lv_label_create(art);
|
|
lv_label_set_text_fmt(top, "%02u", card->id);
|
|
lv_obj_set_style_text_color(top, lv_color_hex(0x30261f), 0);
|
|
lv_obj_align(top, LV_ALIGN_TOP_LEFT, 0, 0);
|
|
|
|
lv_obj_t *arcana = lv_label_create(art);
|
|
lv_label_set_text(arcana, card->arcana == TAROT_ARCANA_MAJOR ? "MAJOR" : suit_glyph(card->suit));
|
|
lv_obj_set_style_text_color(arcana, suit_color(card->suit), 0);
|
|
lv_obj_align(arcana, LV_ALIGN_TOP_RIGHT, 0, 0);
|
|
|
|
lv_obj_t *symbol = lv_label_create(art);
|
|
lv_label_set_text(symbol, suit_glyph(card->suit));
|
|
lv_obj_set_style_text_color(symbol, suit_color(card->suit), 0);
|
|
lv_obj_set_style_text_font(symbol, LV_FONT_DEFAULT, 0);
|
|
lv_obj_align(symbol, LV_ALIGN_CENTER, 0, -16);
|
|
|
|
lv_obj_t *name = lv_label_create(art);
|
|
lv_label_set_text(name, card->name);
|
|
lv_label_set_long_mode(name, LV_LABEL_LONG_WRAP);
|
|
lv_obj_set_width(name, 108);
|
|
lv_obj_set_style_text_align(name, LV_TEXT_ALIGN_CENTER, 0);
|
|
lv_obj_set_style_text_color(name, lv_color_hex(0x30261f), 0);
|
|
lv_obj_align(name, LV_ALIGN_CENTER, 0, 42);
|
|
|
|
if (reversed) {
|
|
lv_obj_t *rev = lv_label_create(art);
|
|
lv_label_set_text(rev, "REV");
|
|
lv_obj_set_style_text_color(rev, lv_color_hex(0x8b1e2d), 0);
|
|
lv_obj_align(rev, LV_ALIGN_BOTTOM_MID, 0, 0);
|
|
}
|
|
|
|
return art;
|
|
}
|