added MENU version screen + MENU dismisses menu
This commit is contained in:
parent
d24721469d
commit
467a66438b
5 changed files with 272 additions and 176 deletions
1
makefile
1
makefile
|
|
@ -91,6 +91,7 @@ readmes:
|
||||||
fmt -w 40 -s ./skeleton/EXTRAS/README.txt > ./build/EXTRAS/README.txt
|
fmt -w 40 -s ./skeleton/EXTRAS/README.txt > ./build/EXTRAS/README.txt
|
||||||
|
|
||||||
zip:
|
zip:
|
||||||
|
cd ./build/SYSTEM/rg35xx/paks/MinUI.pak && echo "$(RELEASE_NAME)\n$(BUILD_HASH)" > version.txt
|
||||||
cd ./build && find . -type f -name '.DS_Store' -delete
|
cd ./build && find . -type f -name '.DS_Store' -delete
|
||||||
mkdir -p ./build/PAYLOAD
|
mkdir -p ./build/PAYLOAD
|
||||||
mv ./build/SYSTEM ./build/PAYLOAD/.system
|
mv ./build/SYSTEM ./build/PAYLOAD/.system
|
||||||
|
|
|
||||||
|
|
@ -1027,6 +1027,20 @@ int PAD_isPressed(int btn) { return pad.is_pressed & btn; }
|
||||||
int PAD_justReleased(int btn) { return pad.just_released & btn; }
|
int PAD_justReleased(int btn) { return pad.just_released & btn; }
|
||||||
int PAD_justRepeated(int btn) { return pad.just_repeated & btn; }
|
int PAD_justRepeated(int btn) { return pad.just_repeated & btn; }
|
||||||
|
|
||||||
|
int PAD_tappedMenu(uint32_t now) {
|
||||||
|
#define MENU_DELAY 250 // also in POW_update()
|
||||||
|
static uint32_t menu_start = 0;
|
||||||
|
static int ignore_menu = 0;
|
||||||
|
if (PAD_justPressed(BTN_MENU)) {
|
||||||
|
ignore_menu = 0;
|
||||||
|
menu_start = now;
|
||||||
|
}
|
||||||
|
else if (PAD_isPressed(BTN_MENU) && (PAD_justPressed(BTN_PLUS) || PAD_justPressed(BTN_MINUS))) {
|
||||||
|
ignore_menu = 1;
|
||||||
|
}
|
||||||
|
return (!ignore_menu && PAD_justReleased(BTN_MENU) && now-menu_start<MENU_DELAY);
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
|
|
||||||
static struct VIB_Context {
|
static struct VIB_Context {
|
||||||
|
|
@ -1085,6 +1099,7 @@ void POW_update(int* _dirty, int* _show_setting, POW_callback_t before_sleep, PO
|
||||||
static uint32_t cancel_start = 0;
|
static uint32_t cancel_start = 0;
|
||||||
static uint32_t power_start = 0;
|
static uint32_t power_start = 0;
|
||||||
|
|
||||||
|
static uint32_t menu_start = 0;
|
||||||
static uint32_t setting_start = 0;
|
static uint32_t setting_start = 0;
|
||||||
static uint32_t charge_start = 0;
|
static uint32_t charge_start = 0;
|
||||||
static int was_charging = -1;
|
static int was_charging = -1;
|
||||||
|
|
@ -1122,20 +1137,25 @@ void POW_update(int* _dirty, int* _show_setting, POW_callback_t before_sleep, PO
|
||||||
POW_fauxSleep();
|
POW_fauxSleep();
|
||||||
if (after_sleep) after_sleep();
|
if (after_sleep) after_sleep();
|
||||||
|
|
||||||
cancel_start = SDL_GetTicks();
|
cancel_start = now = SDL_GetTicks();
|
||||||
power_start = 0;
|
power_start = 0;
|
||||||
dirty = 1;
|
dirty = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int was_dirty = dirty; // dirty list (not including settings/battery)
|
int was_dirty = dirty; // dirty list (not including settings/battery)
|
||||||
|
|
||||||
#define SETTING_DELAY 750
|
#define SETTING_DELAY 500
|
||||||
if (show_setting && now-setting_start>=SETTING_DELAY && !PAD_isPressed(BTN_MENU)) {
|
if (show_setting && now-setting_start>=SETTING_DELAY && !PAD_isPressed(BTN_MENU)) {
|
||||||
show_setting = 0;
|
show_setting = 0;
|
||||||
dirty = 1;
|
dirty = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PAD_justRepeated(BTN_PLUS) || PAD_justRepeated(BTN_MINUS) || PAD_justPressed(BTN_MENU)) {
|
if (!show_setting && !PAD_isPressed(BTN_MENU)) {
|
||||||
|
menu_start = now; // this is weird, updates until pressed
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MENU_DELAY 250 // also in PAD_tappedMenu()
|
||||||
|
if (PAD_justRepeated(BTN_PLUS) || PAD_justRepeated(BTN_MINUS) || (PAD_isPressed(BTN_MENU) && now-menu_start>=MENU_DELAY)) {
|
||||||
setting_start = now;
|
setting_start = now;
|
||||||
if (PAD_isPressed(BTN_MENU)) {
|
if (PAD_isPressed(BTN_MENU)) {
|
||||||
show_setting = 1;
|
show_setting = 1;
|
||||||
|
|
|
||||||
|
|
@ -198,6 +198,7 @@ int PAD_isPressed(int btn);
|
||||||
int PAD_justReleased(int btn);
|
int PAD_justReleased(int btn);
|
||||||
int PAD_justRepeated(int btn);
|
int PAD_justRepeated(int btn);
|
||||||
|
|
||||||
|
int PAD_tappedMenu(uint32_t now); // special case, returns 1 on release of BTN_MENU within 250ms and BTN_PLUS/BTN_MINUS haven't been pressed
|
||||||
|
|
||||||
///////////////////////////////
|
///////////////////////////////
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3059,8 +3059,6 @@ static int Menu_options(MenuList* list) {
|
||||||
}
|
}
|
||||||
|
|
||||||
GFX_startFrame();
|
GFX_startFrame();
|
||||||
uint32_t frame_start = SDL_GetTicks();
|
|
||||||
|
|
||||||
PAD_poll();
|
PAD_poll();
|
||||||
|
|
||||||
if (PAD_justRepeated(BTN_UP)) {
|
if (PAD_justRepeated(BTN_UP)) {
|
||||||
|
|
@ -3511,9 +3509,12 @@ static void Menu_loop(void) {
|
||||||
int status = STATUS_CONT; // TODO: tmp?
|
int status = STATUS_CONT; // TODO: tmp?
|
||||||
int show_setting = 0;
|
int show_setting = 0;
|
||||||
int dirty = 1;
|
int dirty = 1;
|
||||||
|
int ignore_menu = 0;
|
||||||
|
int menu_start = 0;
|
||||||
|
|
||||||
while (show_menu) {
|
while (show_menu) {
|
||||||
GFX_startFrame();
|
GFX_startFrame();
|
||||||
uint32_t frame_start = SDL_GetTicks();
|
uint32_t now = SDL_GetTicks();
|
||||||
|
|
||||||
PAD_poll();
|
PAD_poll();
|
||||||
|
|
||||||
|
|
@ -3568,7 +3569,8 @@ static void Menu_loop(void) {
|
||||||
// printf("bmp_path: %s (%i)\n", bmp_path, preview_exists);
|
// printf("bmp_path: %s (%i)\n", bmp_path, preview_exists);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PAD_justPressed(BTN_B)) {
|
|
||||||
|
if (PAD_justPressed(BTN_B) || PAD_tappedMenu(now)) {
|
||||||
status = STATUS_CONT;
|
status = STATUS_CONT;
|
||||||
show_menu = 0;
|
show_menu = 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1180,17 +1180,29 @@ int main (int argc, char *argv[]) {
|
||||||
|
|
||||||
PAD_reset();
|
PAD_reset();
|
||||||
int dirty = 1;
|
int dirty = 1;
|
||||||
|
int show_version = 0;
|
||||||
int show_setting = 0; // 1=brightness,2=volume
|
int show_setting = 0; // 1=brightness,2=volume
|
||||||
while (!quit) {
|
while (!quit) {
|
||||||
GFX_startFrame();
|
GFX_startFrame();
|
||||||
unsigned long frame_start = SDL_GetTicks();
|
unsigned long now = SDL_GetTicks();
|
||||||
|
|
||||||
PAD_poll();
|
PAD_poll();
|
||||||
|
|
||||||
int selected = top->selected;
|
int selected = top->selected;
|
||||||
int total = top->entries->count;
|
int total = top->entries->count;
|
||||||
|
|
||||||
if (total>0) {
|
if (show_version) {
|
||||||
|
if (PAD_justPressed(BTN_B) || PAD_tappedMenu(now)) {
|
||||||
|
show_version = 0;
|
||||||
|
dirty = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (PAD_tappedMenu(now)) {
|
||||||
|
show_version = 1;
|
||||||
|
dirty = 1;
|
||||||
|
}
|
||||||
|
else if (total>0) {
|
||||||
if (PAD_justRepeated(BTN_UP)) {
|
if (PAD_justRepeated(BTN_UP)) {
|
||||||
if (selected==0 && !PAD_justPressed(BTN_UP)) {
|
if (selected==0 && !PAD_justPressed(BTN_UP)) {
|
||||||
// stop at top
|
// stop at top
|
||||||
|
|
@ -1308,6 +1320,7 @@ int main (int argc, char *argv[]) {
|
||||||
// can_resume = 0;
|
// can_resume = 0;
|
||||||
if (total>0) readyResume(top->entries->items[top->selected]);
|
if (total>0) readyResume(top->entries->items[top->selected]);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
POW_update(&dirty, &show_setting, NULL, NULL);
|
POW_update(&dirty, &show_setting, NULL, NULL);
|
||||||
|
|
||||||
|
|
@ -1318,6 +1331,64 @@ int main (int argc, char *argv[]) {
|
||||||
int oy;
|
int oy;
|
||||||
int ow = GFX_blitHardwareGroup(screen, show_setting);
|
int ow = GFX_blitHardwareGroup(screen, show_setting);
|
||||||
|
|
||||||
|
if (show_version) {
|
||||||
|
if (!version) {
|
||||||
|
// TODO: load from a file
|
||||||
|
char release[256];
|
||||||
|
getFile("./version.txt", release, 256);
|
||||||
|
|
||||||
|
char *tmp,*commit;
|
||||||
|
commit = strrchr(release, '\n');
|
||||||
|
commit[0] = '\0';
|
||||||
|
commit = strrchr(release, '\n')+1;
|
||||||
|
tmp = strchr(release, '\n');
|
||||||
|
tmp[0] = '\0';
|
||||||
|
|
||||||
|
char* model = "Anbernic RG35XX";
|
||||||
|
|
||||||
|
SDL_Surface* release_txt = TTF_RenderUTF8_Blended(font.large, "Release", COLOR_DARK_TEXT);
|
||||||
|
SDL_Surface* version_txt = TTF_RenderUTF8_Blended(font.large, release, COLOR_WHITE);
|
||||||
|
SDL_Surface* commit_txt = TTF_RenderUTF8_Blended(font.large, "Commit", COLOR_DARK_TEXT);
|
||||||
|
SDL_Surface* hash_txt = TTF_RenderUTF8_Blended(font.large, commit, COLOR_WHITE);
|
||||||
|
|
||||||
|
SDL_Surface* model_txt = TTF_RenderUTF8_Blended(font.large, "Model", COLOR_DARK_TEXT);
|
||||||
|
SDL_Surface* type_txt = TTF_RenderUTF8_Blended(font.large, model, COLOR_WHITE);
|
||||||
|
|
||||||
|
#define VERSION_LINE_HEIGHT 24
|
||||||
|
int x = release_txt->w + SCALE1(8);
|
||||||
|
int w = x + version_txt->w;
|
||||||
|
int h = SCALE1(VERSION_LINE_HEIGHT*4);
|
||||||
|
version = SDL_CreateRGBSurface(0,w,h,16,0,0,0,0);
|
||||||
|
|
||||||
|
SDL_BlitSurface(release_txt, NULL, version, &(SDL_Rect){0, 0});
|
||||||
|
SDL_BlitSurface(version_txt, NULL, version, &(SDL_Rect){x,0});
|
||||||
|
SDL_BlitSurface(commit_txt, NULL, version, &(SDL_Rect){0,SCALE1(VERSION_LINE_HEIGHT)});
|
||||||
|
SDL_BlitSurface(hash_txt, NULL, version, &(SDL_Rect){x,SCALE1(VERSION_LINE_HEIGHT)});
|
||||||
|
|
||||||
|
SDL_BlitSurface(model_txt, NULL, version, &(SDL_Rect){0,SCALE1(VERSION_LINE_HEIGHT*3)});
|
||||||
|
SDL_BlitSurface(type_txt, NULL, version, &(SDL_Rect){x,SCALE1(VERSION_LINE_HEIGHT*3)});
|
||||||
|
|
||||||
|
SDL_FreeSurface(release_txt);
|
||||||
|
SDL_FreeSurface(version_txt);
|
||||||
|
SDL_FreeSurface(commit_txt);
|
||||||
|
SDL_FreeSurface(hash_txt);
|
||||||
|
SDL_FreeSurface(model_txt);
|
||||||
|
SDL_FreeSurface(type_txt);
|
||||||
|
}
|
||||||
|
SDL_BlitSurface(version, NULL, screen, &(SDL_Rect){(SCREEN_WIDTH-version->w)/2,(SCREEN_HEIGHT-version->h)/2});
|
||||||
|
|
||||||
|
// buttons (duped and trimmed from below)
|
||||||
|
if (show_setting) {
|
||||||
|
if (show_setting==1) GFX_blitButtonGroup((char*[]){ BRIGHTNESS_BUTTON_LABEL,"BRIGHTNESS", NULL }, screen, 0);
|
||||||
|
else GFX_blitButtonGroup((char*[]){ "MENU","BRIGHTNESS", NULL }, screen, 0);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
GFX_blitButtonGroup((char*[]){ "POWER","SLEEP", NULL }, screen, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
GFX_blitButtonGroup((char*[]){ "B","BACK", NULL }, screen, 1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
// list
|
// list
|
||||||
if (total>0) {
|
if (total>0) {
|
||||||
int selected_row = top->selected - top->start;
|
int selected_row = top->selected - top->start;
|
||||||
|
|
@ -1404,6 +1475,7 @@ int main (int argc, char *argv[]) {
|
||||||
GFX_blitButtonGroup((char*[]){ "A","OPEN", NULL }, screen, 1);
|
GFX_blitButtonGroup((char*[]){ "A","OPEN", NULL }, screen, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
GFX_flip(screen);
|
GFX_flip(screen);
|
||||||
dirty = 0;
|
dirty = 0;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue