Merge pull request #1 from V10lator/alpha

Enable alpha-blending modes for GuiImage
This commit is contained in:
Maschell 2021-07-18 11:47:53 +02:00 committed by GitHub
commit f929d78852
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 1 deletions

View File

@ -41,10 +41,15 @@ public:
void setTexture(GuiTextureData *tex);
int setBlendMode(SDL_BlendMode blendMode);
private:
GuiTextureData *texture = nullptr;
bool freeTextureData = false;
// Color of the rect that's drawn if the picture has no texture.
SDL_Color color = {0, 0, 0, 0};
protected:
SDL_BlendMode blendMode = SDL_BLENDMODE_NONE;
};

View File

@ -37,5 +37,5 @@ protected:
SDL_Texture *texture = nullptr;
int32_t width = 0;
int32_t height = 0;
SDL_BlendMode blendMode;
SDL_BlendMode blendMode = SDL_BLENDMODE_NONE;
};

View File

@ -47,11 +47,24 @@ void GuiImage::draw(Renderer *renderer) {
if (texture) {
texture->draw(renderer, rect, getAngle());
} else {
// copy the texture to the rendering context
SDL_BlendMode mode;
SDL_GetRenderDrawBlendMode(renderer->getRenderer(), &mode);
// adjust blend mode
if(blendMode != mode){
SDL_SetRenderDrawBlendMode(renderer->getRenderer(), blendMode);
}
SDL_SetRenderDrawColor(renderer->getRenderer(), color.r, color.g, color.b, color.a);
SDL_RenderFillRect(renderer->getRenderer(), &rect);
if(getAngle() != 0.0f){
LG_Log("Drawing a rotated rect is not supported yet");
}
if(blendMode != mode){
SDL_SetRenderDrawBlendMode(renderer->getRenderer(), mode);
}
}
}
@ -64,3 +77,8 @@ void GuiImage::setTexture(GuiTextureData *tex) {
this->setSize(tex->getWidth(), tex->getHeight());
}
}
int GuiImage::setBlendMode(SDL_BlendMode blendMode) {
this->blendMode = blendMode;
return this->texture ? this->texture->setBlendMode(blendMode) : 0;
}