From 7dc092a0f11f2f2174140201ec963fc090455878 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Thu, 13 Aug 2015 23:19:26 +1000 Subject: [PATCH] Split the TextBox files into two proper modules --- src/common/text_box.cpp | 54 ------------------------------- src/common/text_box.hpp | 26 ++------------- src/common/text_line.cpp | 70 ++++++++++++++++++++++++++++++++++++++++ src/common/text_line.hpp | 45 ++++++++++++++++++++++++++ 4 files changed, 117 insertions(+), 78 deletions(-) create mode 100644 src/common/text_line.cpp create mode 100644 src/common/text_line.hpp diff --git a/src/common/text_box.cpp b/src/common/text_box.cpp index 91ecc3d..4fdefa4 100644 --- a/src/common/text_box.cpp +++ b/src/common/text_box.cpp @@ -23,60 +23,6 @@ #include -SDL_Texture* renderTextTexture(SDL_Renderer* renderer, TTF_Font* font, std::string str, SDL_Color color) { - //make the surface (from SDL_ttf) - SDL_Surface* surface = TTF_RenderText_Solid(font, str.c_str(), color); - if (!surface) { - throw(std::runtime_error("Failed to create a TTF surface")); - } - - //convert to texture - SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface); - - //cleanup - SDL_FreeSurface(surface); - - //check - if (!texture) { - throw(std::runtime_error("Failed to create a TTF texture")); - } - - //NOTE: free the texture yourself - return texture; -} - -//------------------------- -//TextLine -//------------------------- - -TextLine::TextLine() { - // -} - -TextLine::~TextLine() { - ClearText(); -} - -void TextLine::DrawTo(SDL_Renderer* renderer, int posX, int posY) { - SDL_Rect dclip = {posX, posY, 0, 0}; - SDL_QueryTexture(texture, nullptr, nullptr, &dclip.w, &dclip.h); - SDL_RenderCopy(renderer, texture, nullptr, &dclip); -} - -void TextLine::SetText(SDL_Renderer* renderer, TTF_Font* font, std::string str, SDL_Color color) { - //just use the above global function - SDL_DestroyTexture(texture); - texture = renderTextTexture(renderer, font, str, color); -} - -void TextLine::ClearText() { - SDL_DestroyTexture(texture); -} - -//------------------------- -//TextBox -//------------------------- - TextBox::TextBox() { // } diff --git a/src/common/text_box.hpp b/src/common/text_box.hpp index f49c566..89d90a6 100644 --- a/src/common/text_box.hpp +++ b/src/common/text_box.hpp @@ -21,36 +21,14 @@ */ #pragma once +#include "text_line.hpp" + #include "SDL2/SDL.h" #include "SDL2/SDL_ttf.h" #include #include -constexpr SDL_Color COLOR_WHITE = {255, 255, 255, 255}; - -SDL_Texture* renderTextTexture(SDL_Renderer*, TTF_Font*, std::string, SDL_Color color); - -//------------------------- - -class TextLine { -public: - TextLine(); - TextLine(SDL_Renderer* r, TTF_Font* f, std::string s, SDL_Color c) - { SetText(r, f, s, c); } - ~TextLine(); - - void DrawTo(SDL_Renderer*, int posX, int posY); - - void SetText(SDL_Renderer*, TTF_Font*, std::string, SDL_Color color); - void ClearText(); - -protected: - SDL_Texture* texture = nullptr; -}; - -//------------------------- - class TextBox { public: TextBox(); diff --git a/src/common/text_line.cpp b/src/common/text_line.cpp new file mode 100644 index 0000000..8826e86 --- /dev/null +++ b/src/common/text_line.cpp @@ -0,0 +1,70 @@ +/* Copyright: (c) Kayne Ruse 2013-2015 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#include "text_line.hpp" + +#include + +SDL_Texture* renderTextTexture(SDL_Renderer* renderer, TTF_Font* font, std::string str, SDL_Color color) { + //make the surface (from SDL_ttf) + SDL_Surface* surface = TTF_RenderText_Solid(font, str.c_str(), color); + if (!surface) { + throw(std::runtime_error("Failed to create a TTF surface")); + } + + //convert to texture + SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, surface); + + //cleanup + SDL_FreeSurface(surface); + + //check + if (!texture) { + throw(std::runtime_error("Failed to create a TTF texture")); + } + + //NOTE: free the texture yourself + return texture; +} + +TextLine::TextLine() { + // +} + +TextLine::~TextLine() { + ClearText(); +} + +void TextLine::DrawTo(SDL_Renderer* renderer, int posX, int posY) { + SDL_Rect dclip = {posX, posY, 0, 0}; + SDL_QueryTexture(texture, nullptr, nullptr, &dclip.w, &dclip.h); + SDL_RenderCopy(renderer, texture, nullptr, &dclip); +} + +void TextLine::SetText(SDL_Renderer* renderer, TTF_Font* font, std::string str, SDL_Color color) { + //just use the above global function + SDL_DestroyTexture(texture); + texture = renderTextTexture(renderer, font, str, color); +} + +void TextLine::ClearText() { + SDL_DestroyTexture(texture); +} \ No newline at end of file diff --git a/src/common/text_line.hpp b/src/common/text_line.hpp new file mode 100644 index 0000000..4a2595a --- /dev/null +++ b/src/common/text_line.hpp @@ -0,0 +1,45 @@ +/* Copyright: (c) Kayne Ruse 2013-2015 + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * + * 3. This notice may not be removed or altered from any source + * distribution. +*/ +#pragma once + +#include "SDL2/SDL.h" +#include "SDL2/SDL_ttf.h" + +#include + +SDL_Texture* renderTextTexture(SDL_Renderer*, TTF_Font*, std::string, SDL_Color color); + +class TextLine { +public: + TextLine(); + TextLine(SDL_Renderer* r, TTF_Font* f, std::string s, SDL_Color c) + { SetText(r, f, s, c); } + ~TextLine(); + + void DrawTo(SDL_Renderer*, int posX, int posY); + + void SetText(SDL_Renderer*, TTF_Font*, std::string, SDL_Color color); + void ClearText(); + +protected: + SDL_Texture* texture = nullptr; +}; \ No newline at end of file