From ca059e2083665676bcf846abde2a6c78351ac98f Mon Sep 17 00:00:00 2001 From: Giorgio Garasto Date: Mon, 25 Jul 2022 07:48:04 +0200 Subject: [PATCH] feat: implement about me page --- res/assets/phrases.c | 137 +++++++++++++++++++++++++++++++++++++++++++ res/assets/phrases.h | 2 + src/pages/about.c | 56 +++++++++++++++++- src/pages/handler.h | 2 + 4 files changed, 196 insertions(+), 1 deletion(-) diff --git a/res/assets/phrases.c b/res/assets/phrases.c index 75dcc50..3520136 100644 --- a/res/assets/phrases.c +++ b/res/assets/phrases.c @@ -85,4 +85,141 @@ const unsigned char projects[] = {0x25, 0x27, 0x24, 0x1F, // Skills const unsigned char skills[] = {0x28, 0x20, 0x1E, 0x21, 0x21, 0x28}; +// About me - description +const unsigned char about_me_description[67][20] = { + {0x22, 0x2E, 0x00, 0x23, 0x16, 0x22, 0x1A, 0x00, 0x1E, 0x28, + 0x00, 0x1C, 0x1E, 0x24, 0x27, 0x1C, 0x1E, 0x24, 0x00, 0x00}, + {0x1C, 0x16, 0x27, 0x16, 0x28, 0x29, 0x24, 0x00, 0x16, 0x23, + 0x19, 0x00, 0x1E, 0x03, 0x22, 0x00, 0x0B, 0x0D, 0x00, 0x00}, + {0x2E, 0x1A, 0x16, 0x27, 0x28, 0x00, 0x24, 0x21, 0x19, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x1E, 0x00, 0x25, 0x2A, 0x29, 0x00, 0x22, 0x2E, 0x00, 0x1D, + 0x16, 0x23, 0x19, 0x28, 0x00, 0x24, 0x23, 0x00, 0x00, 0x00}, + {0x1D, 0x29, 0x22, 0x21, 0x00, 0x1B, 0x24, 0x27, 0x00, 0x29, + 0x1D, 0x1A, 0x00, 0x1B, 0x1E, 0x27, 0x28, 0x29, 0x00, 0x00}, + {0x29, 0x1E, 0x22, 0x1A, 0x00, 0x2C, 0x1D, 0x1A, 0x23, 0x00, + 0x1E, 0x00, 0x2C, 0x16, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x28, 0x1A, 0x2B, 0x1A, 0x23, 0x00, 0x2E, 0x1A, 0x16, 0x27, + 0x28, 0x00, 0x24, 0x21, 0x19, 0x00, 0x29, 0x24, 0x00, 0x00}, + {0x1D, 0x1A, 0x21, 0x25, 0x00, 0x22, 0x2E, 0x00, 0x1B, 0x16, + 0x29, 0x1D, 0x1A, 0x27, 0x06, 0x00, 0x16, 0x23, 0x19, 0x00}, + {0x1E, 0x03, 0x2B, 0x1A, 0x00, 0x23, 0x1A, 0x2B, 0x1A, 0x27, + 0x00, 0x28, 0x29, 0x24, 0x25, 0x25, 0x1A, 0x19, 0x00, 0x00}, + {0x25, 0x21, 0x16, 0x2E, 0x1E, 0x23, 0x1C, 0x00, 0x2C, 0x1E, + 0x29, 0x1D, 0x00, 0x1E, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x28, 0x1E, 0x23, 0x18, 0x1A, 0x00, 0x29, 0x1D, 0x1A, 0x23, + 0x08, 0x00, 0x29, 0x1D, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x25, 0x16, 0x28, 0x28, 0x1E, 0x24, 0x23, 0x00, 0x1B, 0x24, + 0x27, 0x00, 0x2C, 0x1A, 0x17, 0x00, 0x19, 0x1A, 0x2B, 0x00}, + {0x1E, 0x23, 0x1B, 0x21, 0x2A, 0x1A, 0x23, 0x18, 0x1A, 0x19, + 0x00, 0x17, 0x24, 0x29, 0x1D, 0x00, 0x22, 0x2E, 0x00, 0x00}, + {0x2C, 0x24, 0x27, 0x20, 0x00, 0x16, 0x23, 0x19, 0x00, 0x28, + 0x29, 0x2A, 0x19, 0x2E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x18, 0x1D, 0x24, 0x1E, 0x18, 0x1A, 0x28, 0x00, 0x16, 0x23, + 0x19, 0x00, 0x17, 0x27, 0x24, 0x2A, 0x1C, 0x1D, 0x29, 0x00}, + {0x22, 0x1A, 0x00, 0x29, 0x24, 0x00, 0x1C, 0x16, 0x1E, 0x23, + 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x28, 0x18, 0x1D, 0x24, 0x21, 0x16, 0x27, 0x28, 0x1D, 0x1E, + 0x25, 0x00, 0x1B, 0x27, 0x24, 0x22, 0x00, 0x00, 0x00, 0x00}, + {0x1C, 0x24, 0x24, 0x1C, 0x21, 0x1A, 0x00, 0x16, 0x23, 0x19, + 0x00, 0x2A, 0x19, 0x16, 0x18, 0x1E, 0x29, 0x2E, 0x00, 0x00}, + {0x29, 0x1D, 0x16, 0x29, 0x00, 0x1C, 0x16, 0x2B, 0x1A, 0x00, + 0x22, 0x1A, 0x00, 0x29, 0x1D, 0x1A, 0x00, 0x00, 0x00, 0x00}, + {0x18, 0x1D, 0x16, 0x23, 0x18, 0x1A, 0x00, 0x29, 0x24, 0x00, + 0x24, 0x17, 0x29, 0x16, 0x1E, 0x23, 0x00, 0x29, 0x1D, 0x1A}, + {0x22, 0x24, 0x17, 0x1E, 0x21, 0x1A, 0x00, 0x2C, 0x1A, 0x17, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x28, 0x25, 0x1A, 0x18, 0x1E, 0x16, 0x21, 0x1E, 0x28, 0x29, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x18, 0x1A, 0x27, 0x29, 0x1E, 0x1B, 0x1E, 0x18, 0x16, 0x29, + 0x1E, 0x24, 0x23, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x16, 0x29, 0x00, 0x2C, 0x24, 0x27, 0x20, 0x06, 0x00, 0x1E, + 0x00, 0x1C, 0x16, 0x1E, 0x23, 0x1A, 0x19, 0x00, 0x16, 0x00}, + {0x2B, 0x16, 0x28, 0x29, 0x00, 0x1A, 0x2D, 0x25, 0x1A, 0x27, + 0x1E, 0x1A, 0x23, 0x18, 0x1A, 0x00, 0x1E, 0x23, 0x00, 0x00}, + {0x1B, 0x27, 0x24, 0x23, 0x29, 0x00, 0x1A, 0x23, 0x19, 0x00, + 0x19, 0x1A, 0x2B, 0x00, 0x17, 0x2E, 0x00, 0x00, 0x00, 0x00}, + {0x22, 0x1A, 0x16, 0x23, 0x28, 0x00, 0x24, 0x1B, 0x00, 0x21, + 0x1E, 0x17, 0x28, 0x00, 0x16, 0x23, 0x19, 0x00, 0x00, 0x00}, + {0x1B, 0x27, 0x16, 0x22, 0x1A, 0x2C, 0x24, 0x27, 0x20, 0x28, + 0x00, 0x28, 0x2A, 0x18, 0x1D, 0x00, 0x16, 0x28, 0x00, 0x00}, + {0x27, 0x1A, 0x16, 0x18, 0x29, 0x00, 0x16, 0x23, 0x19, 0x00, + 0x16, 0x23, 0x1C, 0x2A, 0x21, 0x16, 0x27, 0x06, 0x00, 0x00}, + {0x16, 0x28, 0x00, 0x2C, 0x1A, 0x21, 0x21, 0x00, 0x16, 0x28, + 0x00, 0x2A, 0x28, 0x1E, 0x23, 0x1C, 0x00, 0x00, 0x00, 0x00}, + {0x23, 0x16, 0x29, 0x1E, 0x2B, 0x1A, 0x00, 0x29, 0x1A, 0x18, + 0x1D, 0x06, 0x00, 0x21, 0x1E, 0x20, 0x1A, 0x00, 0x00, 0x00}, + {0x2C, 0x1A, 0x17, 0x00, 0x18, 0x24, 0x22, 0x25, 0x24, 0x23, + 0x1A, 0x23, 0x29, 0x28, 0x00, 0x16, 0x23, 0x19, 0x00, 0x00}, + {0x28, 0x1A, 0x27, 0x2B, 0x1E, 0x18, 0x1A, 0x00, 0x2C, 0x24, + 0x27, 0x20, 0x1A, 0x27, 0x28, 0x08, 0x00, 0x24, 0x23, 0x00}, + {0x29, 0x1D, 0x1A, 0x00, 0x17, 0x16, 0x18, 0x20, 0x00, 0x1A, + 0x23, 0x19, 0x00, 0x28, 0x1E, 0x19, 0x1A, 0x06, 0x00, 0x1E}, + {0x22, 0x16, 0x1E, 0x23, 0x21, 0x2E, 0x00, 0x2A, 0x28, 0x1A, + 0x00, 0x23, 0x24, 0x19, 0x1A, 0x08, 0x1F, 0x28, 0x00, 0x00}, + {0x16, 0x23, 0x19, 0x00, 0x1C, 0x24, 0x08, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x24, 0x2A, 0x29, 0x28, 0x1E, 0x19, 0x1A, 0x00, 0x29, 0x1D, + 0x1A, 0x00, 0x2C, 0x24, 0x27, 0x20, 0x1E, 0x23, 0x1C, 0x00}, + {0x2C, 0x24, 0x27, 0x21, 0x19, 0x06, 0x00, 0x1E, 0x00, 0x21, + 0x1E, 0x20, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x19, 0x1A, 0x2B, 0x24, 0x29, 0x1E, 0x23, 0x1C, 0x00, 0x22, + 0x2E, 0x28, 0x1A, 0x21, 0x1B, 0x00, 0x29, 0x24, 0x00, 0x00}, + {0x22, 0x2A, 0x28, 0x1E, 0x18, 0x08, 0x00, 0x1E, 0x00, 0x21, + 0x24, 0x2B, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x25, 0x21, 0x16, 0x2E, 0x1E, 0x23, 0x1C, 0x00, 0x1C, 0x2A, + 0x1E, 0x29, 0x16, 0x27, 0x00, 0x16, 0x23, 0x19, 0x00, 0x00}, + {0x28, 0x1E, 0x23, 0x1C, 0x1E, 0x23, 0x1C, 0x06, 0x00, 0x17, + 0x2A, 0x29, 0x00, 0x1E, 0x00, 0x19, 0x24, 0x00, 0x00, 0x00}, + {0x19, 0x16, 0x17, 0x17, 0x21, 0x1A, 0x00, 0x16, 0x21, 0x28, + 0x24, 0x00, 0x2C, 0x1E, 0x29, 0x1D, 0x00, 0x00, 0x00, 0x00}, + {0x25, 0x1E, 0x16, 0x23, 0x24, 0x00, 0x16, 0x23, 0x19, 0x00, + 0x19, 0x27, 0x2A, 0x22, 0x28, 0x08, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x27, 0x1E, 0x1C, 0x1D, 0x29, 0x00, 0x23, 0x24, 0x2C, 0x06, + 0x00, 0x1E, 0x03, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x2C, 0x24, 0x27, 0x20, 0x1E, 0x23, 0x1C, 0x00, 0x16, 0x28, + 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x1B, 0x27, 0x24, 0x23, 0x29, 0x1A, 0x23, 0x19, 0x00, 0x1A, + 0x23, 0x1C, 0x1E, 0x23, 0x1A, 0x1A, 0x27, 0x00, 0x16, 0x29}, + {0x1A, 0x22, 0x25, 0x16, 0x29, 0x1E, 0x18, 0x16, 0x06, 0x00, + 0x16, 0x23, 0x00, 0x22, 0x1E, 0x29, 0x00, 0x00, 0x00, 0x00}, + {0x28, 0x25, 0x1E, 0x23, 0x07, 0x24, 0x1B, 0x1B, 0x00, 0x18, + 0x24, 0x22, 0x25, 0x16, 0x23, 0x2E, 0x00, 0x00, 0x00, 0x00}, + {0x17, 0x16, 0x28, 0x1A, 0x19, 0x00, 0x1E, 0x23, 0x00, 0x17, + 0x24, 0x28, 0x29, 0x24, 0x23, 0x00, 0x16, 0x23, 0x19, 0x00}, + {0x22, 0x1E, 0x21, 0x16, 0x23, 0x00, 0x2C, 0x1E, 0x29, 0x1D, + 0x00, 0x22, 0x24, 0x27, 0x1A, 0x00, 0x29, 0x1D, 0x16, 0x23}, + {0x0A, 0x09, 0x09, 0x00, 0x1A, 0x22, 0x25, 0x21, 0x24, 0x2E, + 0x1A, 0x1A, 0x28, 0x06, 0x00, 0x2C, 0x1D, 0x24, 0x28, 0x1A}, + {0x1C, 0x24, 0x16, 0x21, 0x00, 0x1E, 0x28, 0x00, 0x29, 0x24, + 0x00, 0x19, 0x1A, 0x28, 0x1E, 0x1C, 0x23, 0x00, 0x00, 0x00}, + {0x16, 0x23, 0x19, 0x00, 0x19, 0x1A, 0x2B, 0x1A, 0x21, 0x24, + 0x25, 0x00, 0x16, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x28, 0x2E, 0x28, 0x29, 0x1A, 0x22, 0x28, 0x00, 0x29, 0x24, + 0x00, 0x22, 0x24, 0x23, 0x1E, 0x29, 0x24, 0x27, 0x00, 0x00}, + {0x1D, 0x2A, 0x22, 0x16, 0x23, 0x00, 0x1D, 0x1A, 0x16, 0x21, + 0x29, 0x1D, 0x00, 0x29, 0x1D, 0x27, 0x24, 0x2A, 0x1C, 0x1D}, + {0x2C, 0x1A, 0x16, 0x27, 0x16, 0x17, 0x21, 0x1A, 0x00, 0x28, + 0x1A, 0x23, 0x28, 0x24, 0x27, 0x28, 0x08, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x1E, 0x00, 0x16, 0x21, 0x28, 0x24, 0x00, 0x1D, 0x16, 0x2B, + 0x1A, 0x00, 0x16, 0x00, 0x17, 0x2A, 0x23, 0x18, 0x1D, 0x00}, + {0x24, 0x1B, 0x00, 0x24, 0x25, 0x1A, 0x23, 0x00, 0x28, 0x24, + 0x2A, 0x27, 0x18, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x25, 0x27, 0x24, 0x1F, 0x1A, 0x18, 0x29, 0x28, 0x06, 0x00, + 0x2C, 0x1D, 0x1E, 0x18, 0x1D, 0x00, 0x2E, 0x24, 0x2A, 0x00}, + {0x18, 0x16, 0x23, 0x00, 0x18, 0x1D, 0x1A, 0x18, 0x20, 0x00, + 0x24, 0x2A, 0x29, 0x00, 0x1E, 0x23, 0x00, 0x29, 0x1D, 0x1A}, + {0x25, 0x27, 0x24, 0x1F, 0x1A, 0x18, 0x29, 0x28, 0x00, 0x28, + 0x1A, 0x18, 0x29, 0x1E, 0x24, 0x23, 0x08, 0x00, 0x00, 0x00}}; + #endif diff --git a/res/assets/phrases.h b/res/assets/phrases.h index 0079b58..fa3ebc1 100644 --- a/res/assets/phrases.h +++ b/res/assets/phrases.h @@ -28,4 +28,6 @@ extern const unsigned char contacts[8]; extern const unsigned char projects[8]; extern const unsigned char skills[6]; +extern const unsigned char about_me_description[67][20]; + #endif diff --git a/src/pages/about.c b/src/pages/about.c index 163a7d1..d9b237f 100644 --- a/src/pages/about.c +++ b/src/pages/about.c @@ -7,15 +7,69 @@ #include "handler.h" #include +uint8_t about_me_current_row_index; + +void draw_about_me_description_chunk() { + for (uint8_t i = 0; i < DEVICE_SCREEN_HEIGHT - PAGE_HEADER_HEIGHT; ++i) { + set_bkg_tiles(0, i + PAGE_HEADER_HEIGHT, DEVICE_SCREEN_WIDTH, 1, + about_me_description[i + about_me_current_row_index]); + } +} + +void handle_about_me_scroll_row_up() { + if (about_me_current_row_index == 0) { + return; + } + --about_me_current_row_index; + draw_about_me_description_chunk(); +} + +void handle_about_me_scroll_row_down() { + if (about_me_current_row_index == ARRAY_LEN(about_me_description) - + DEVICE_SCREEN_HEIGHT + + PAGE_HEADER_HEIGHT) { + return; + } + ++about_me_current_row_index; + draw_about_me_description_chunk(); +} + +void handle_about_me_scroll_page_down() { + about_me_current_row_index += DEVICE_SCREEN_HEIGHT - PAGE_HEADER_HEIGHT; + if (about_me_current_row_index > ARRAY_LEN(about_me_description) - + DEVICE_SCREEN_HEIGHT + + PAGE_HEADER_HEIGHT) { + about_me_current_row_index = ARRAY_LEN(about_me_description) - + DEVICE_SCREEN_HEIGHT + PAGE_HEADER_HEIGHT; + } + draw_about_me_description_chunk(); +} + void about_setup() { set_bkg_tiles(1, 1, ARRAY_LEN(about_me), 1, about_me); - fillarea(0, 3, DEVICE_SCREEN_WIDTH, 1, 0x33); + fillarea(0, PAGE_HEADER_HEIGHT - 1, DEVICE_SCREEN_WIDTH, 1, 0x33); + about_me_current_row_index = 0; + draw_about_me_description_chunk(); } void about_loop(uint8_t *current_loop_count, uint8_t keys) { if (keys & J_B) { set_page(HOME_MENU); } + + // Allow scrolling by one row by pressing up or down + void (*about_me_scroll_row_up_handler)(void); + about_me_scroll_row_up_handler = &handle_about_me_scroll_row_up; + throttlekey(keys, J_UP, about_me_scroll_row_up_handler); + + void (*about_me_scroll_row_down_handler)(void); + about_me_scroll_row_down_handler = &handle_about_me_scroll_row_down; + throttlekey(keys, J_DOWN, about_me_scroll_row_down_handler); + + // Allow scrolling by one page by pressing A + void (*about_me_scroll_page_down_handler)(void); + about_me_scroll_page_down_handler = &handle_about_me_scroll_page_down; + throttlekey(keys, J_A, about_me_scroll_page_down_handler); } #endif diff --git a/src/pages/handler.h b/src/pages/handler.h index cc8a2ac..0b754ed 100644 --- a/src/pages/handler.h +++ b/src/pages/handler.h @@ -2,6 +2,8 @@ #ifndef PAGES_HANDLER_H #define PAGES_HANDLER_H +#define PAGE_HEADER_HEIGHT 4 + extern enum Page { HOME_HEADER, HOME_MENU,