diff --git a/README.md b/README.md index 8cf2827..0a49a11 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,19 @@ ## Outline -TurtleGUI requires SDL2, SDL_image and SDL_ttf. Other than that, it should be a self contained package. +TurtleGUI requires SDL2, SDL2_image and SDL2_ttf. Other than that, it should be a self contained package. + +## Contents + +* Image - For loading and rendering an image to the screen +* Button - For on-screen buttons that can be clicked +* TextLine - For rendering a single line of text to the screen +* TextBox - A collection of TextLines, and utilities for managing them +* TextField - For inputting text, rendered to the screen +* Vector2 - I don't know where else to put this ## Copyright -Copyright (c) 2013-2016 Kayne Ruse +Copyright (c) 2013-2018 Kayne Ruse 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. diff --git a/bounding_box.hpp b/bounding_box.hpp deleted file mode 100644 index 06747b0..0000000 --- a/bounding_box.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/* Copyright: (c) Kayne Ruse 2013-2016 - * - * 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 -#include - -class BoundingBox { -public: - //This is explicitly a POD - int x, y; - int w, h; - - BoundingBox() = default; - BoundingBox(int i, int j): x(i), y(j), w(0), h(0) {}; - BoundingBox(int i, int j, int k, int l): x(i), y(j), w(k), h(l) {}; - ~BoundingBox() = default; - BoundingBox& operator=(BoundingBox const&) = default; - - int Size() { - return std::max(w*h,0); - } - - bool CheckOverlap(BoundingBox rhs) { - return !( - x >= rhs.x + rhs.w || - y >= rhs.y + rhs.h || - rhs.x >= x + w || - rhs.y >= y + h); - } - - BoundingBox CalcOverlap(BoundingBox rhs) { - if (!CheckOverlap(rhs)) { - return {0, 0, 0, 0}; - } - BoundingBox ret; - ret.x = std::max(x, rhs.x); - ret.y = std::max(y, rhs.y); - ret.w = std::min(x+w, rhs.x+rhs.w) - ret.x; - ret.h = std::min(y+h, rhs.y+rhs.h) - ret.y; - return ret; - } -}; - -//This is explicitly a POD -static_assert(std::is_pod::value, "BoundingBox is not a POD"); - -#include "vector2.hpp" - -//operators -inline BoundingBox operator+(BoundingBox b, Vector2 v) { - return {b.x + (int)v.x, b.y + (int)v.y, b.w, b.h}; -} -inline BoundingBox operator+(Vector2 v, BoundingBox b) { - return b + v; -} diff --git a/text_field.cpp b/text_field.cpp index c9056be..4c81025 100644 --- a/text_field.cpp +++ b/text_field.cpp @@ -69,19 +69,28 @@ std::string TextField::GetText() { } bool TextField::MouseButtonDown(SDL_MouseButtonEvent const& event) { - BoundingBox cursorBox = {event.x, event.y, 0, 0}; - BoundingBox fieldBox = bounds; - fieldBox.x += posX; - fieldBox.y += posY; - return focus = fieldBox.CheckOverlap(cursorBox); + focus = + event.x > posX && + event.y > posY && + event.x < posX + width && + event.y < posY + height; + return focus; } -BoundingBox TextField::SetBounds(BoundingBox b) { - return bounds = b; +int TextField::SetWidth(int w) { + return width = w; } -BoundingBox TextField::GetBounds() { - return bounds; +int TextField::SetHeight(int h) { + return height = h; +} + +int TextField::GetWidth() { + return width; +} + +int TextField::GetHeight() { + return height; } bool TextField::SetFocus(bool b) { diff --git a/text_field.hpp b/text_field.hpp index 5bdbc21..41fc8fc 100644 --- a/text_field.hpp +++ b/text_field.hpp @@ -21,8 +21,6 @@ */ #pragma once -#include "bounding_box.hpp" - #include "SDL2/SDL.h" #include "SDL2/SDL_ttf.h" @@ -44,8 +42,10 @@ public: bool MouseButtonDown(SDL_MouseButtonEvent const& event); - BoundingBox SetBounds(BoundingBox b); - BoundingBox GetBounds(); + int SetWidth(int w); + int SetHeight(int h); + int GetWidth(); + int GetHeight(); bool SetFocus(bool b); bool GetFocus(); @@ -59,7 +59,7 @@ public: private: SDL_Texture* texture = nullptr; std::string text; - BoundingBox bounds; bool focus = false; int posX = 0, posY = 0; + int width = 0, height = 0; }; \ No newline at end of file diff --git a/text_line.hpp b/text_line.hpp index ffa6661..731910e 100644 --- a/text_line.hpp +++ b/text_line.hpp @@ -34,6 +34,7 @@ public: void DrawTo(SDL_Renderer*); + //TODO: replace TTF_Font* with a font class void SetText(SDL_Renderer*, TTF_Font*, SDL_Color, std::string); void ClearText();