mirror of
https://github.com/Maschell/SDL2_Playground.git
synced 2025-02-18 14:06:25 +01:00
Update GuiImage to allow to be set by color instead of a texture
This commit is contained in:
parent
27c96611b5
commit
122f6f991c
@ -22,6 +22,11 @@ GuiImage::GuiImage(GuiTextureData *texture) {
|
|||||||
setTexture(texture);
|
setTexture(texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GuiImage::GuiImage(SDL_Color color, float width, float height) {
|
||||||
|
this->color = color;
|
||||||
|
this->setSize(width, height);
|
||||||
|
}
|
||||||
|
|
||||||
GuiImage::~GuiImage() {
|
GuiImage::~GuiImage() {
|
||||||
if (this->texture && freeTextureData) {
|
if (this->texture && freeTextureData) {
|
||||||
delete this->texture;
|
delete this->texture;
|
||||||
@ -33,13 +38,20 @@ void GuiImage::draw(Renderer *renderer) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texture) {
|
|
||||||
SDL_Rect rect;
|
SDL_Rect rect;
|
||||||
rect.x = (int) getLeft();
|
rect.x = (int) getLeft();
|
||||||
rect.y = (int) getTop();
|
rect.y = (int) getTop();
|
||||||
rect.w = (int) (getScaleX() * getWidth());
|
rect.w = (int) (getScaleX() * getWidth());
|
||||||
rect.h = (int) (getScaleY() * getHeight());
|
rect.h = (int) (getScaleY() * getHeight());
|
||||||
|
|
||||||
|
if (texture) {
|
||||||
texture->draw(renderer, rect, getAngle());
|
texture->draw(renderer, rect, getAngle());
|
||||||
|
} else {
|
||||||
|
SDL_SetRenderDrawColor(renderer->getRenderer(), color.r, color.g, color.b, color.a);
|
||||||
|
SDL_RenderFillRect(renderer->getRenderer(), &rect);
|
||||||
|
if(getAngle() != 0.0f){
|
||||||
|
DEBUG_FUNCTION_LINE("Drawing a rotated rect is not supported yet");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -23,19 +23,28 @@
|
|||||||
//!Display, manage, and manipulate images in the GUI
|
//!Display, manage, and manipulate images in the GUI
|
||||||
class GuiImage : public GuiElement {
|
class GuiImage : public GuiElement {
|
||||||
public:
|
public:
|
||||||
//!\overload
|
|
||||||
//!\param img Pointer to GuiImageData element
|
|
||||||
GuiImage() = default;
|
GuiImage() = default;
|
||||||
|
|
||||||
|
//! Draws an image from an existing texture
|
||||||
|
//!\param texture Pointer to GuiTextureData element
|
||||||
explicit GuiImage(GuiTextureData *texture);
|
explicit GuiImage(GuiTextureData *texture);
|
||||||
|
|
||||||
|
//! Draws a colored rectangle
|
||||||
|
//!\param texture Pointer to GuiTextureData element
|
||||||
|
explicit GuiImage(SDL_Color color, float width, float height);
|
||||||
|
|
||||||
//!Destructor
|
//!Destructor
|
||||||
~GuiImage() override;
|
~GuiImage() override;
|
||||||
|
|
||||||
void draw(Renderer *r) override;
|
void draw(Renderer *r) override;
|
||||||
|
|
||||||
void setTexture(GuiTextureData *tex);
|
void setTexture(GuiTextureData *tex);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GuiTextureData *texture = nullptr;
|
GuiTextureData *texture = nullptr;
|
||||||
bool freeTextureData = false;
|
bool freeTextureData = false;
|
||||||
|
|
||||||
|
// Color of the rect that's drawn if the picture has no texture.
|
||||||
|
SDL_Color color = {0, 0, 0, 0};
|
||||||
};
|
};
|
||||||
|
@ -76,10 +76,18 @@ void GuiText::updateTexture(Renderer *renderer) {
|
|||||||
textureData->setBlendMode(SDL_BLENDMODE_BLEND);
|
textureData->setBlendMode(SDL_BLENDMODE_BLEND);
|
||||||
texture.setTexture(textureData);
|
texture.setTexture(textureData);
|
||||||
|
|
||||||
|
// Set render target to texture
|
||||||
SDL_SetRenderTarget(renderer->getRenderer(), temp);
|
SDL_SetRenderTarget(renderer->getRenderer(), temp);
|
||||||
|
|
||||||
|
// Clear texture.
|
||||||
|
SDL_SetRenderDrawColor(renderer->getRenderer(), 0, 0, 0, 0);
|
||||||
SDL_RenderClear(renderer->getRenderer());
|
SDL_RenderClear(renderer->getRenderer());
|
||||||
|
|
||||||
|
// Draw text to texture
|
||||||
FC_DrawColumn(fc_font, renderer->getRenderer(), 0, 0, maxWidth, text.c_str());
|
FC_DrawColumn(fc_font, renderer->getRenderer(), 0, 0, maxWidth, text.c_str());
|
||||||
SDL_SetRenderTarget(renderer->getRenderer(), NULL);
|
|
||||||
|
// Restore render target
|
||||||
|
SDL_SetRenderTarget(renderer->getRenderer(), nullptr);
|
||||||
} else {
|
} else {
|
||||||
DEBUG_FUNCTION_LINE("Failed to create texture");
|
DEBUG_FUNCTION_LINE("Failed to create texture");
|
||||||
}
|
}
|
||||||
|
@ -59,11 +59,6 @@ GuiTextureData::~GuiTextureData() {
|
|||||||
|
|
||||||
void GuiTextureData::draw(Renderer *renderer, const SDL_Rect& dest, float angle) {
|
void GuiTextureData::draw(Renderer *renderer, const SDL_Rect& dest, float angle) {
|
||||||
if (texture == nullptr && imgSurface) {
|
if (texture == nullptr && imgSurface) {
|
||||||
SDL_Surface *optimizedSurface = SDL_ConvertSurfaceFormat(imgSurface, renderer->getPixelFormat(), 0);
|
|
||||||
if (optimizedSurface != nullptr) {
|
|
||||||
SDL_FreeSurface(imgSurface);
|
|
||||||
imgSurface = optimizedSurface;
|
|
||||||
}
|
|
||||||
texture = SDL_CreateTextureFromSurface(renderer->getRenderer(), imgSurface);
|
texture = SDL_CreateTextureFromSurface(renderer->getRenderer(), imgSurface);
|
||||||
}
|
}
|
||||||
if (!texture) {
|
if (!texture) {
|
||||||
|
@ -17,12 +17,14 @@ MainWindow::~MainWindow() {
|
|||||||
delete bgMusic;
|
delete bgMusic;
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::MainWindow(int32_t w, int32_t h, Renderer* renderer) : GuiFrame(w, h) {
|
MainWindow::MainWindow(int32_t w, int32_t h, Renderer* renderer) : GuiFrame(w, h), bgImage({100, 0, 0, 255}, w, h) {
|
||||||
auto picture_path = "button.png";
|
auto picture_path = "button.png";
|
||||||
auto font_path = "FreeSans.ttf";
|
auto font_path = "FreeSans.ttf";
|
||||||
auto bgMusic_path = "bgMusic.ogg";
|
auto bgMusic_path = "bgMusic.ogg";
|
||||||
auto music_click = "button_click.mp3";
|
auto music_click = "button_click.mp3";
|
||||||
|
|
||||||
|
append(&bgImage);
|
||||||
|
|
||||||
TTF_Font *font;
|
TTF_Font *font;
|
||||||
|
|
||||||
SDL_RWops *rw = SDL_RWFromMem((void *) Resources::GetFile(font_path), Resources::GetFileSize(font_path));
|
SDL_RWops *rw = SDL_RWFromMem((void *) Resources::GetFile(font_path), Resources::GetFileSize(font_path));
|
||||||
|
@ -25,5 +25,6 @@ private:
|
|||||||
GuiImage *image4 = nullptr;
|
GuiImage *image4 = nullptr;
|
||||||
GuiImage *image5 = nullptr;
|
GuiImage *image5 = nullptr;
|
||||||
GuiButton *button = nullptr;
|
GuiButton *button = nullptr;
|
||||||
|
GuiImage bgImage;
|
||||||
GuiSound *bgMusic = nullptr;
|
GuiSound *bgMusic = nullptr;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user