1
0
mirror of https://github.com/vcmi/vcmi.git synced 2024-12-24 22:14:36 +02:00

Fixes #1378 - do not auto-set key color - image might not have one

This commit is contained in:
Ivan Savenko 2023-01-06 13:15:52 +02:00
parent 4ca22e652d
commit d83eedb8dd
3 changed files with 10 additions and 16 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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;