X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2Frender.cpp;h=1a6d1abd80c124e7367969b863b84771ffc6b40b;hb=50f35affb16c78bd3d0b420f5ba37d74fcac391f;hp=7e048408b5091239ca10e35e89a8dfe2fcec4035;hpb=55dbd6b35a39888f245e247d2e140f141f918178;p=blank.git diff --git a/src/graphics/render.cpp b/src/graphics/render.cpp index 7e04840..1a6d1ab 100644 --- a/src/graphics/render.cpp +++ b/src/graphics/render.cpp @@ -1,6 +1,9 @@ +#include "BlendedSprite.hpp" #include "Font.hpp" #include "Format.hpp" +#include "Text.hpp" #include "Texture.hpp" +#include "Viewport.hpp" #include #include @@ -107,13 +110,14 @@ glm::tvec2 Font::TextSize(const char *text) const { return size; } -Texture Font::Render(const char *text, SDL_Color color) const { +Texture Font::Render(const char *text) const { Texture tex; + Render(text, tex); return tex; } -void Font::Render(const char *text, SDL_Color color, Texture &tex) const { - SDL_Surface *srf = TTF_RenderUTF8_Blended(handle, text, color); +void Font::Render(const char *text, Texture &tex) const { + SDL_Surface *srf = TTF_RenderUTF8_Blended(handle, text, { 0xFF, 0xFF, 0xFF, 0xFF }); if (!srf) { throw std::runtime_error(TTF_GetError()); } @@ -154,6 +158,45 @@ void Format::ReadPixelFormat(const SDL_PixelFormat &fmt) { } +Text::Text() noexcept +: tex() +, sprite() +, bg(1.0f, 1.0f, 1.0f, 0.0f) +, fg(1.0f, 1.0f, 1.0f, 1.0f) +, size(0.0f) +, pos(0.0f) +, grav(Gravity::NORTH_WEST) +, pivot(Gravity::NORTH_WEST) +, dirty(false) +, visible(false) { + +} + +void Text::Set(const Font &font, const char *text) { + font.Render(text, tex); + size = font.TextSize(text); + dirty = true; +} + +void Text::Update() { + sprite.LoadRect(size.x, size.y, align(pivot, size)); + dirty = false; +} + +void Text::Render(Viewport &viewport) noexcept { + if (dirty) { + Update(); + } + BlendedSprite &prog = viewport.SpriteProgram(); + viewport.SetCursor(pos, grav); + prog.SetM(viewport.Cursor()); + prog.SetTexture(tex); + prog.SetBG(bg); + prog.SetFG(fg); + sprite.Draw(); +} + + Texture::Texture() : handle(0) , width(0)