X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fsdl.c;h=0fd3aa62eb6a319d7523357ce0419e4b2d0f455f;hb=dc76e42346b67941a3e3300974c39fc169cda2f3;hp=3eb2a73704b4f646226ba73e396c10007292b563;hpb=38568f7dfac13f7a53f1d8751db2a63b64c935e8;p=rocksndiamonds.git diff --git a/src/libgame/sdl.c b/src/libgame/sdl.c index 3eb2a737..0fd3aa62 100644 --- a/src/libgame/sdl.c +++ b/src/libgame/sdl.c @@ -2987,8 +2987,8 @@ boolean SDLReadJoystick(int nr, int *x, int *y, boolean *b1, boolean *b2) static void DrawTouchInputOverlay_ShowGrid(int alpha) { SDL_Rect rect; - int grid_xsize = 18; - int grid_ysize = 11; + int grid_xsize = overlay.grid_xsize; + int grid_ysize = overlay.grid_ysize; int x, y; SDL_SetRenderDrawColor(sdl_renderer, 255, 255, 255, alpha); @@ -3004,7 +3004,92 @@ static void DrawTouchInputOverlay_ShowGrid(int alpha) rect.y = (y + 0) * video.screen_height / grid_ysize; rect.h = (y + 1) * video.screen_height / grid_ysize - rect.y; - SDL_RenderDrawRect(sdl_renderer, &rect); + if (overlay.grid_button[x][y] == CHAR_GRID_BUTTON_NONE) + SDL_RenderDrawRect(sdl_renderer, &rect); + } + } + + SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 255); +} + +static void DrawTouchInputOverlay_ShowGridButtons(int alpha) +{ + static int alpha_max = SDL_ALPHA_OPAQUE / 2; + static int alpha_step = 5; + static int alpha_direction = 0; + static int alpha_highlight = 0; + SDL_Rect rect; + int grid_xsize = overlay.grid_xsize; + int grid_ysize = overlay.grid_ysize; + int x, y; + + if (alpha == alpha_max) + { + if (alpha_direction < 0) + { + alpha_highlight = MAX(0, alpha_highlight - alpha_step); + + if (alpha_highlight == 0) + alpha_direction = 1; + } + else + { + alpha_highlight = MIN(alpha_highlight + alpha_step, alpha_max); + + if (alpha_highlight == alpha_max) + alpha_direction = -1; + } + } + else + { + alpha_direction = 1; + alpha_highlight = alpha; + } + + SDL_SetRenderDrawBlendMode(sdl_renderer, SDL_BLENDMODE_BLEND); + + for (x = 0; x < grid_xsize; x++) + { + for (y = 0; y < grid_ysize; y++) + { + rect.x = (x + 0) * video.screen_width / grid_xsize; + rect.y = (y + 0) * video.screen_height / grid_ysize; + rect.w = (x + 1) * video.screen_width / grid_xsize - rect.x; + rect.h = (y + 1) * video.screen_height / grid_ysize - rect.y; + + if (x == 0 || + overlay.grid_button[x - 1][y] != overlay.grid_button[x][y]) + { + rect.x += 2; + rect.w -= 2; + } + + if (x == grid_xsize - 1 || + overlay.grid_button[x + 1][y] != overlay.grid_button[x][y]) + { + rect.w -= 2; + } + + if (y == 0 || + overlay.grid_button[x][y - 1] != overlay.grid_button[x][y]) + { + rect.y += 2; + rect.h -= 2; + } + + if (y == grid_ysize - 1 || + overlay.grid_button[x][y + 1] != overlay.grid_button[x][y]) + { + rect.h -= 2; + } + + if (overlay.grid_button[x][y] == overlay.grid_button_highlight) + SDL_SetRenderDrawColor(sdl_renderer, 255, 255, 255, alpha_highlight); + else + SDL_SetRenderDrawColor(sdl_renderer, 255, 255, 255, alpha); + + if (overlay.grid_button[x][y] != CHAR_GRID_BUTTON_NONE) + SDL_RenderFillRect(sdl_renderer, &rect); } } @@ -3048,11 +3133,14 @@ static void DrawTouchInputOverlay() show_grid = FALSE; if (show_grid) - { DrawTouchInputOverlay_ShowGrid(alpha); - return; - } + DrawTouchInputOverlay_ShowGridButtons(alpha); + + return; + + + // !!! VIRTUAL BUTTONS FROM IMAGE FILE NOT USED ANYMORE !!! if (!initialized) {