From d83eedb8dd0e1f90ef2a09f3c27027e73fda894d Mon Sep 17 00:00:00 2001 From: Ivan Savenko Date: Fri, 6 Jan 2023 13:15:52 +0200 Subject: [PATCH] Fixes #1378 - do not auto-set key color - image might not have one --- client/CBitmapHandler.cpp | 22 ++++++++-------------- client/CBitmapHandler.h | 2 +- client/windows/CCastleInterface.cpp | 2 +- 3 files changed, 10 insertions(+), 16 deletions(-) diff --git a/client/CBitmapHandler.cpp b/client/CBitmapHandler.cpp index ad0c73792..a8f716e94 100644 --- a/client/CBitmapHandler.cpp +++ b/client/CBitmapHandler.cpp @@ -20,7 +20,7 @@ namespace BitmapHandler { SDL_Surface * loadH3PCX(ui8 * data, size_t size); - SDL_Surface * loadBitmapFromDir(std::string path, std::string fname, bool setKey=true); + SDL_Surface * loadBitmapFromDir(std::string path, std::string fname); } bool isPCX(const ui8 *header)//check whether file can be PCX according to header @@ -102,7 +102,7 @@ SDL_Surface * BitmapHandler::loadH3PCX(ui8 * pcx, size_t size) return ret; } -SDL_Surface * BitmapHandler::loadBitmapFromDir(std::string path, std::string fname, bool setKey) +SDL_Surface * BitmapHandler::loadBitmapFromDir(std::string path, std::string fname) { if(!fname.size()) { @@ -121,14 +121,7 @@ SDL_Surface * BitmapHandler::loadBitmapFromDir(std::string path, std::string fna if (isPCX(readFile.first.get())) {//H3-style PCX ret = loadH3PCX(readFile.first.get(), readFile.second); - if (ret) - { - if(ret->format->BytesPerPixel == 1 && setKey) - { - CSDL_Ext::setColorKey(ret,ret->format->palette->colors[0]); - } - } - else + if (!ret) { logGlobal->error("Failed to open %s as H3 PCX!", fname); return nullptr; @@ -144,7 +137,8 @@ SDL_Surface * BitmapHandler::loadBitmapFromDir(std::string path, std::string fna { if (ret->format->palette) { - //set correct value for alpha\unused channel + // set correct value for alpha\unused channel + // NOTE: might be unnecessary with SDL2 for (int i=0; i < ret->format->palette->ncolors; i++) ret->format->palette->colors[i].a = SDL_ALPHA_OPAQUE; } @@ -196,12 +190,12 @@ SDL_Surface * BitmapHandler::loadBitmapFromDir(std::string path, std::string fna return ret; } -SDL_Surface * BitmapHandler::loadBitmap(std::string fname, bool setKey) +SDL_Surface * BitmapHandler::loadBitmap(std::string fname) { SDL_Surface * bitmap = nullptr; - if (!(bitmap = loadBitmapFromDir("DATA/", fname, setKey)) && - !(bitmap = loadBitmapFromDir("SPRITES/", fname, setKey))) + if (!(bitmap = loadBitmapFromDir("DATA/", fname)) && + !(bitmap = loadBitmapFromDir("SPRITES/", fname))) { logGlobal->error("Error: Failed to find file %s", fname); } diff --git a/client/CBitmapHandler.h b/client/CBitmapHandler.h index 539dc1212..b36156211 100644 --- a/client/CBitmapHandler.h +++ b/client/CBitmapHandler.h @@ -14,5 +14,5 @@ struct SDL_Surface; namespace BitmapHandler { //Load file from /DATA or /SPRITES - SDL_Surface * loadBitmap(std::string fname, bool setKey=true); + SDL_Surface * loadBitmap(std::string fname); } diff --git a/client/windows/CCastleInterface.cpp b/client/windows/CCastleInterface.cpp index e4b774795..a90690b0c 100644 --- a/client/windows/CCastleInterface.cpp +++ b/client/windows/CCastleInterface.cpp @@ -54,7 +54,7 @@ CBuildingRect::CBuildingRect(CCastleBuildings * Par, const CGTownInstance * Town pos.y += str->pos.y; if(!str->borderName.empty()) - border = BitmapHandler::loadBitmap(str->borderName, true); + border = BitmapHandler::loadBitmap(str->borderName); else border = nullptr;