From b82c8f75927130d871759705748d09ec1b5cb830 Mon Sep 17 00:00:00 2001 From: Kayne Ruse Date: Fri, 14 Aug 2015 19:39:44 +1000 Subject: [PATCH] Made TextBox into a template class --- src/common/text_box.cpp | 56 ----------------------------------------- src/common/text_box.hpp | 50 +++++++++++++++++++++++++++++++++--- src/example_scene.cpp | 2 +- src/example_scene.hpp | 2 +- 4 files changed, 48 insertions(+), 62 deletions(-) delete mode 100644 src/common/text_box.cpp diff --git a/src/common/text_box.cpp b/src/common/text_box.cpp deleted file mode 100644 index 4fdefa4..0000000 --- a/src/common/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/src/common/text_box.hpp b/src/common/text_box.hpp index 89d90a6..c4992b2 100644 --- a/src/common/text_box.hpp +++ b/src/common/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(); +} diff --git a/src/example_scene.cpp b/src/example_scene.cpp index b928e46..a6ee517 100644 --- a/src/example_scene.cpp +++ b/src/example_scene.cpp @@ -97,7 +97,7 @@ void ExampleScene::RenderFrame(SDL_Renderer* renderer) { //DEBUG: testing UI button.DrawTo(renderer); - textBox.DrawTo(renderer, 0, 550, 12); + textBox.DrawTo(renderer, 0, 550, -12); } //------------------------- diff --git a/src/example_scene.hpp b/src/example_scene.hpp index 1feea6f..5208cc8 100644 --- a/src/example_scene.hpp +++ b/src/example_scene.hpp @@ -67,5 +67,5 @@ private: TTF_Font* font = nullptr; Image buttonBG; Button button; - TextBox textBox; + TextBox<> textBox; };