From c49ae404afdf5487e9a78c3390ef25e8df7db4a3 Mon Sep 17 00:00:00 2001 From: Info Teddy Date: Fri, 24 Jan 2020 20:32:55 -0800 Subject: [PATCH] Convert roomname background to a surface, then draw that The roomname background used to just be a simple SDL_Rect that was drawn using SDL_FillRect with a color of 0. Unfortunately, it seems that you cannot use transparent colors with SDL_FillRect, it just defaults to being fully opaque. However, you CAN draw surfaces with translucency, which seems like the easiest thing to do. But the first step is to convert the roomname background to an SDL_Surface. This replaces the FillRect()s with SDL_BlitSurface() in the three places roomnames are drawn: in towerrender, in gamerender, and in editorrender. --- desktop_version/src/Graphics.h | 1 + desktop_version/src/editor.cpp | 3 ++- desktop_version/src/main.cpp | 3 +++ desktop_version/src/titlerender.cpp | 6 ++++-- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/desktop_version/src/Graphics.h b/desktop_version/src/Graphics.h index 09393369..44ccc17b 100644 --- a/desktop_version/src/Graphics.h +++ b/desktop_version/src/Graphics.h @@ -238,6 +238,7 @@ public: SDL_Rect foot_rect; SDL_Rect prect; SDL_Rect footerrect; + SDL_Surface* footerbuffer; int linestate, linedelay; int backoffset; diff --git a/desktop_version/src/editor.cpp b/desktop_version/src/editor.cpp index bac77646..1a044215 100644 --- a/desktop_version/src/editor.cpp +++ b/desktop_version/src/editor.cpp @@ -3447,7 +3447,8 @@ void editorrender( KeyPoll& key, Graphics& dwgfx, Game& game, mapclass& map, ent { if(ed.roomnamehide<12) ed.roomnamehide++; } - FillRect(dwgfx.backBuffer, 0,230+ed.roomnamehide,320,10, dwgfx.getRGB(0,0,0)); + dwgfx.footerrect.y = 230+ed.roomnamehide; + SDL_BlitSurface(dwgfx.footerbuffer, NULL, dwgfx.backBuffer, &dwgfx.footerrect); dwgfx.Print(5,231+ed.roomnamehide,ed.level[ed.levx+(ed.maxwidth*ed.levy)].roomname, 196, 196, 255 - help.glow, true); dwgfx.bprint(4, 222, "SPACE ^ SHIFT ^", 196, 196, 255 - help.glow, false); dwgfx.bprint(268,222, "("+help.String(ed.levx+1)+","+help.String(ed.levy+1)+")",196, 196, 255 - help.glow, false); diff --git a/desktop_version/src/main.cpp b/desktop_version/src/main.cpp index f50be9b3..0e5c9cf5 100644 --- a/desktop_version/src/main.cpp +++ b/desktop_version/src/main.cpp @@ -125,6 +125,9 @@ int main(int argc, char *argv[]) const SDL_PixelFormat* fmt = gameScreen.GetFormat(); graphics.backBuffer = SDL_CreateRGBSurface(SDL_SWSURFACE ,320 ,240 ,32,fmt->Rmask,fmt->Gmask,fmt->Bmask,fmt->Amask ) ; SDL_SetSurfaceBlendMode(graphics.backBuffer, SDL_BLENDMODE_NONE); + graphics.footerbuffer = SDL_CreateRGBSurface(SDL_SWSURFACE, 320, 10, 32, fmt->Rmask, fmt->Gmask, fmt->Bmask, fmt->Amask); + SDL_SetSurfaceBlendMode(graphics.footerbuffer, SDL_BLENDMODE_BLEND); + FillRect(graphics.footerbuffer, SDL_MapRGB(fmt, 0, 0, 0)); graphics.Makebfont(); diff --git a/desktop_version/src/titlerender.cpp b/desktop_version/src/titlerender.cpp index e4f9da69..2e2b1a69 100644 --- a/desktop_version/src/titlerender.cpp +++ b/desktop_version/src/titlerender.cpp @@ -1552,7 +1552,8 @@ void gamerender(Graphics& dwgfx, mapclass& map, Game& game, entityclass& obj, Ut if(map.extrarow==0 || (map.custommode && map.roomname!="")) { - FillRect(dwgfx.backBuffer, dwgfx.footerrect, 0); + dwgfx.footerrect.y = 230; + SDL_BlitSurface(dwgfx.footerbuffer, NULL, dwgfx.backBuffer, &dwgfx.footerrect); if (map.finalmode) { @@ -2808,7 +2809,8 @@ void towerrender(Graphics& dwgfx, Game& game, mapclass& map, entityclass& obj, U } - FillRect(dwgfx.backBuffer, dwgfx.footerrect, 0x000000); + dwgfx.footerrect.y = 230; + SDL_BlitSurface(dwgfx.footerbuffer, NULL, dwgfx.backBuffer, &dwgfx.footerrect); dwgfx.Print(5, 231, map.roomname, 196, 196, 255 - help.glow, true); //dwgfx.rprint(5, 231,help.String(game.coins), 255 - help.glow/2, 255 - help.glow/2, 196, true);