UpdateScreenExt(rect, FALSE);
}
+void Delay_WithScreenUpdates(unsigned int delay)
+{
+ unsigned int time_current = SDL_GetTicks();
+ unsigned int time_delayed = time_current + delay;
+
+ while (time_current < time_delayed)
+ {
+ // updating the screen contains waiting for frame delay (non-busy)
+ UpdateScreen_WithFrameDelay(NULL);
+
+ time_current = SDL_GetTicks();
+ }
+}
+
static void SDLSetWindowIcon(char *basename)
{
/* (setting the window icon on Mac OS X would replace the high-quality
SDLSetWindowTitle();
}
-inline static void SDLInitVideoBuffer_DrawBuffer()
+inline static void SDLInitVideoBuffer_DrawBuffer(void)
{
/* SDL cannot directly draw to the visible video framebuffer like X11,
but always uses a backbuffer, which is then blitted to the visible
return success;
}
-void SDLSetWindowTitle()
+void SDLSetWindowTitle(void)
{
#if defined(TARGET_SDL2)
if (sdl_window == NULL)
}
}
-void SDLSetDisplaySize()
+void SDLSetDisplaySize(void)
{
SDL_Rect display_bounds;
SDL_RenderSetLogicalSize(sdl_renderer, width, height);
}
-void SDLSetScreenProperties()
+void SDLSetScreenProperties(void)
{
SDLSetScreenSizeAndOffsets(video.width, video.height);
SDLSetScreenSizeForRenderer(video.screen_width, video.screen_height);
#endif
}
-void SDLRedrawWindow()
+void SDLRedrawWindow(void)
{
UpdateScreen_WithoutFrameDelay(NULL);
}
}
if (post_delay > 0)
- {
- unsigned int time_post_delay;
-
- time_current = SDL_GetTicks();
- time_post_delay = time_current + post_delay;
-
- while (time_current < time_post_delay)
- {
- // updating the screen contains waiting for frame delay (non-busy)
- UpdateScreen_WithFrameDelay(NULL);
-
- time_current = SDL_GetTicks();
- }
- }
+ Delay_WithScreenUpdates(post_delay);
// restore function for drawing global masked border
gfx.draw_global_border_function = draw_global_border_function;
static int sdl_js_button[MAX_PLAYERS][2];
static boolean sdl_is_controller[MAX_PLAYERS];
-void SDLClearJoystickState()
+void SDLClearJoystickState(void)
{
int i, j;
}
}
-void SDLInitJoysticks()
+void SDLInitJoysticks(void)
{
static boolean sdl_joystick_subsystem_initialized = FALSE;
boolean print_warning = !sdl_joystick_subsystem_initialized;
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 255);
}
+static void RenderFillRectangle(int x, int y, int width, int height)
+{
+ SDL_Rect rect = { x, y, width, height };
+
+ SDL_RenderFillRect(sdl_renderer, &rect);
+}
+
static void DrawTouchInputOverlay_ShowGridButtons(int alpha)
{
static int alpha_direction = 0;
for (y = 0; y < grid_ysize; y++)
{
int grid_button = overlay.grid_button[x][y];
+ int grid_button_action = GET_ACTION_FROM_GRID_BUTTON(grid_button);
int alpha_draw = alpha;
+ int outline_border = MV_NONE;
+ int border_size = 2;
+ boolean draw_outlined = setup.touch.draw_outlined;
+ boolean draw_pressed = setup.touch.draw_pressed;
if (grid_button == CHAR_GRID_BUTTON_NONE)
continue;
if (grid_button == overlay.grid_button_highlight)
alpha_draw = alpha_highlight;
+ if (draw_pressed && overlay.grid_button_action & grid_button_action)
+ {
+ if (draw_outlined)
+ draw_outlined = FALSE;
+ else
+ alpha_draw = MIN((float)alpha_draw * 1.5, SDL_ALPHA_OPAQUE);
+ }
+
SDL_SetRenderDrawColor(sdl_renderer, 255, 255, 255, alpha_draw);
rect.x = (x + 0) * video.screen_width / grid_xsize;
if (x == 0 || overlay.grid_button[x - 1][y] != grid_button)
{
- rect.x += 2;
- rect.w -= 2;
+ rect.x += border_size;
+ rect.w -= border_size;
+
+ outline_border |= MV_LEFT;
}
if (x == grid_xsize - 1 || overlay.grid_button[x + 1][y] != grid_button)
{
- rect.w -= 2;
+ rect.w -= border_size;
+
+ outline_border |= MV_RIGHT;
}
if (y == 0 || overlay.grid_button[x][y - 1] != grid_button)
{
- rect.y += 2;
- rect.h -= 2;
+ rect.y += border_size;
+ rect.h -= border_size;
+
+ outline_border |= MV_UP;
}
if (y == grid_ysize - 1 || overlay.grid_button[x][y + 1] != grid_button)
{
- rect.h -= 2;
+ rect.h -= border_size;
+
+ outline_border |= MV_DOWN;
}
- SDL_RenderFillRect(sdl_renderer, &rect);
+ if (draw_outlined)
+ {
+ int rect_x = rect.x +
+ (outline_border & MV_LEFT ? border_size : 0);
+ int rect_w = rect.w -
+ (outline_border & MV_LEFT ? border_size : 0) -
+ (outline_border & MV_RIGHT ? border_size : 0);
+
+ if (outline_border & MV_LEFT)
+ RenderFillRectangle(rect.x, rect.y, border_size, rect.h);
+
+ if (outline_border & MV_RIGHT)
+ RenderFillRectangle(rect.x + rect.w - border_size, rect.y,
+ border_size, rect.h);
+
+ if (outline_border & MV_UP)
+ RenderFillRectangle(rect_x, rect.y, rect_w, border_size);
+
+ if (outline_border & MV_DOWN)
+ RenderFillRectangle(rect_x, rect.y + rect.h - border_size,
+ rect_w, border_size);
+ }
+ else
+ {
+ SDL_RenderFillRect(sdl_renderer, &rect);
+ }
}
}
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 255);
}
-static void DrawTouchInputOverlay()
+static void DrawTouchInputOverlay(void)
{
static SDL_Texture *texture = NULL;
static boolean initialized = FALSE;