This commit is contained in:
2022-01-04 14:47:34 -08:00
parent c882f07089
commit c9ebb85d13
25 changed files with 297 additions and 302 deletions

85
src/textbox.c Normal file
View File

@@ -0,0 +1,85 @@
/**
* Copyright (c) 2022 Dominic Masters
*
* This software is released under the MIT License.
* https://opensource.org/licenses/MIT
*/
#include "textbox.h"
char *TEXTBOX_TEXT;
uint8_t TEXTBOX_TEXT_LENGTH;
uint8_t TEXTBOX_STATE;
uint8_t TEXTBOX_SCROLL;
void textboxInit() {
TEXTBOX_TEXT = NULL;
TEXTBOX_STATE = 0;
TEXTBOX_TEXT_LENGTH = 0;
TEXTBOX_SCROLL = 0;
move_win(7, SCREENHEIGHT - (TEXTBOX_TILES_ROWS * 8));
set_win_data(TEXTBOX_TILES_DATA_POSITION, FONT_TILE_COUNT, FONT_DATA);
}
void textboxSetText(char *text, uint8_t length) {
uint8_t tiles[TEXTBOX_TILES_MAX];
uint8_t i;
TEXTBOX_TEXT = text;
TEXTBOX_TEXT_LENGTH = length;
TEXTBOX_STATE = TEXTBOX_STATE_VISIBLE;
TEXTBOX_SCROLL = 0;
for(i = 0; i < TEXTBOX_TILES_MAX; i++) tiles[i] = TEXTBOX_TILE_BLANK;
set_win_tiles(0, 0, TEXTBOX_TILES_PER_ROW, TEXTBOX_TILES_ROWS, tiles);
SHOW_WIN;
}
void textboxClose() {
TEXTBOX_STATE &= ~TEXTBOX_STATE_VISIBLE;
HIDE_WIN;
}
void textboxUpdate() {
uint8_t tiles[TEXTBOX_TILES_MAX];
uint8_t i, j;
if(!(TEXTBOX_STATE & TEXTBOX_STATE_VISIBLE)) return;
if(TEXTBOX_STATE & TEXTBOX_STATE_SCROLLED) {
return;
}
TEXTBOX_SCROLL++;
j = 0;
for(i = 0; i < TEXTBOX_SCROLL; i++) {
if(TEXTBOX_TEXT[i] == ' ') {
j++;
continue;
}
if(TEXTBOX_TEXT[i] == '\n') {
j = TEXTBOX_TILES_PER_ROW;
continue;
}
tiles[j] = TILE_FROM_CHAR(TEXTBOX_TEXT[i]);
j++;
}
for(i = j; i < TEXTBOX_TILES_MAX; i++) {
tiles[i] = TEXTBOX_TILE_BLANK;
}
set_win_tiles(
0, 0,
TEXTBOX_TILES_PER_ROW,
TEXTBOX_TILES_ROWS,
tiles
);
if(TEXTBOX_SCROLL == TEXTBOX_TEXT_LENGTH) {
TEXTBOX_STATE |= TEXTBOX_STATE_SCROLLED;
}
}