diff --git a/client/menu_scenes/main_menu.hpp b/client/menu_scenes/main_menu.hpp index 272408c..433c419 100644 --- a/client/menu_scenes/main_menu.hpp +++ b/client/menu_scenes/main_menu.hpp @@ -56,5 +56,5 @@ protected: Button startButton; Button optionsButton; Button quitButton; - TextBox textBox; + TextBox<> textBox; }; diff --git a/common/graphics/text_box.cpp b/common/graphics/text_box.cpp deleted file mode 100644 index 4fdefa4..0000000 --- a/common/graphics/text_box.cpp +++ /dev/null @@ -1,56 +0,0 @@ -/* 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_box.hpp" - -#include - -TextBox::TextBox() { - // -} - -TextBox::~TextBox() { - // -} - -void TextBox::DrawTo(SDL_Renderer* renderer, int posX, int posY, int pointSize) { - for (std::list::iterator it = lineList.begin(); it != lineList.end(); it++) { - it->DrawTo(renderer, posX, posY); - posY -= pointSize; - } -} - -void TextBox::PushLine(SDL_Renderer* renderer, TTF_Font* font, std::string str, SDL_Color color) { - lineList.emplace_front(renderer, font, str, color); -} - -void TextBox::PopLine(int num) { - //prevent underflow - num < lineList.size() ? num : lineList.size(); - - for (int i = 0; i < num; ++i) { - lineList.pop_back(); - } -} - -void TextBox::ClearLines() { - lineList.clear(); -} diff --git a/common/graphics/text_box.hpp b/common/graphics/text_box.hpp index 89d90a6..c4992b2 100644 --- a/common/graphics/text_box.hpp +++ b/common/graphics/text_box.hpp @@ -29,10 +29,22 @@ #include #include +/* DOCS: TextBox is a templated class to allow additional data, read more + * As long as the class given as an argument meets these requirements, this + * should work: + * + * Constructor(SDL_Renderer*, TTF_Font*, std::string, SDL_Color) + * DrawTo(SDL_Renderer*, int posX, int posY) + * + * The class should also clean up after itself. +*/ + +//template class definition +template class TextBox { public: - TextBox(); - ~TextBox(); + TextBox() = default; + ~TextBox() = default; void DrawTo(SDL_Renderer*, int posX, int posY, int pointSize); @@ -41,5 +53,35 @@ public: void ClearLines(); private: - std::list lineList; -}; \ No newline at end of file + std::list lineList; +}; + +//method definitions +template +void TextBox::DrawTo(SDL_Renderer* renderer, int posX, int posY, int pointSize) { + //NOTE: pointSize should match the font's size, but may be negative to give a dialog effect + for (typename std::list::iterator it = lineList.begin(); it != lineList.end(); it++) { + it->DrawTo(renderer, posX, posY); + posY += pointSize; + } +} + +template +void TextBox::PushLine(SDL_Renderer* renderer, TTF_Font* font, std::string str, SDL_Color color) { + lineList.emplace_front(renderer, font, str, color); +} + +template +void TextBox::PopLine(int num) { + //prevent underflow + num < lineList.size() ? num : lineList.size(); + + for (int i = 0; i < num; ++i) { + lineList.pop_back(); + } +} + +template +void TextBox::ClearLines() { + lineList.clear(); +}