Add border to indicate taking screenshot

Originally, I was thinking of adding a notification text that you took a
screenshot, but this is better because it is language-agnostic and it
doesn't contribute to potential UI clutter/clashing.

It flashes yellow if the screenshot successfully saved, and red if it
didn't.
This commit is contained in:
Misa 2024-01-09 10:55:00 -08:00 committed by Misa Elizabeth Kai
parent 93ec2c6cca
commit 40f6f83328
5 changed files with 58 additions and 1 deletions

View File

@ -364,6 +364,10 @@ void Game::init(void)
old_mode_indicator_timer = 0;
mode_indicator_timer = 0;
old_screenshot_border_timer = 0;
screenshot_border_timer = 0;
screenshot_saved_success = false;
setdefaultcontrollerbuttons();
}

View File

@ -592,6 +592,10 @@ public:
int old_mode_indicator_timer;
int mode_indicator_timer;
int old_screenshot_border_timer;
int screenshot_border_timer;
bool screenshot_saved_success;
};
#ifndef GAME_DEFINITION

View File

@ -3345,6 +3345,8 @@ void Graphics::screenshake(void)
copy_texture(gameTexture, NULL, &shake);
draw_screenshot_border();
set_render_target(gameTexture);
clear();
@ -3370,6 +3372,8 @@ void Graphics::updatescreenshake(void)
void Graphics::render(void)
{
draw_screenshot_border();
if (gameScreen.badSignalEffect)
{
ApplyFilter(&tempFilterSrc, &tempFilterDest);
@ -3423,6 +3427,46 @@ void Graphics::renderfixedpost(void)
{
--game.screenshake;
}
game.old_screenshot_border_timer = game.screenshot_border_timer;
if (game.screenshot_border_timer > 0)
{
game.screenshot_border_timer -= 15;
}
}
void Graphics::draw_screenshot_border(void)
{
const int border_alpha = lerp(game.old_screenshot_border_timer, game.screenshot_border_timer);
if (border_alpha <= 100)
{
return;
}
int width = 0;
int height = 0;
int result = query_texture(gameTexture, NULL, NULL, &width, &height);
if (result != 0)
{
return;
}
const SDL_Rect rect_inner = {1, 1, width - 2, height - 2};
if (game.screenshot_saved_success)
{
set_color(196, 196, 20, border_alpha);
}
else
{
set_color(196, 20, 20, border_alpha);
}
set_blendmode(SDL_BLENDMODE_BLEND);
draw_rect(NULL);
draw_rect(&rect_inner);
set_blendmode(SDL_BLENDMODE_NONE);
}
void Graphics::drawtele(int x, int y, int t, const SDL_Color color)

View File

@ -252,6 +252,8 @@ public:
void renderfixedpre(void);
void renderfixedpost(void);
void draw_screenshot_border(void);
bool Hitest(SDL_Surface* surface1, SDL_Point p1, SDL_Surface* surface2, SDL_Point p2);
void drawentities(void);

View File

@ -186,7 +186,10 @@ void KeyPoll::Poll(void)
if (evt.key.keysym.sym == SDLK_F6 && !evt.key.repeat)
{
SaveScreenshot();
const bool success = SaveScreenshot();
game.old_screenshot_border_timer = 255;
game.screenshot_border_timer = 255;
game.screenshot_saved_success = success;
}
BUTTONGLYPHS_keyboard_set_active(true);