commit
This commit is contained in:
85
src/textbox.c
Normal file
85
src/textbox.c
Normal 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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user