From 8eb0808fecb8c57eff877fddf38db91b1f067921 Mon Sep 17 00:00:00 2001 From: knolax <1339802534.kk@gmail.com> Date: Tue, 28 Feb 2017 11:07:10 -0500 Subject: initial commit, this is the gfx library which serves as a crappy wrapper for SDL. --- gui.cpp | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 250 insertions(+) create mode 100644 gui.cpp (limited to 'gui.cpp') diff --git a/gui.cpp b/gui.cpp new file mode 100644 index 0000000..30889b9 --- /dev/null +++ b/gui.cpp @@ -0,0 +1,250 @@ +#include "gui.h" +hitbox::hitbox() { + return; +} +int hitbox::add(int x, int y, int w, int h) { + SDL_Rect rr; + rr.x = x; + rr.y = y; + rr.w = w; + rr.h = h; + rs.resize(rs.size()+1); + rs[rs.size() - 1] = rr; + return 0; +} +int hitbox::check(int x, int y) { + int i = 0; + while (i < rs.size()) { + if ((rs[i].x <= x) && (x <= (rs[i].x + rs[i].w))) { + if ((rs[i].y <= y) && (y <= (rs[i].y + rs[i].h))) { + return i; + } + } + i++; + } + return -1; +} +SDL_Rect hitbox::get(int index) { + if ((index >= 0) && (index < rs.size())) { + return rs[index]; + } else { + //if properly managed should never happen + SDL_Rect r; + r.x = -10000; + return r; + } +} +butt::butt() { + return; +} +int butt::add(int x, int y, int w, int h, std::string name) { + boxes.add(x, y, w, h); + names.resize(names.size() + 1); + names[names.size() - 1] = name; + states.resize(states.size() + 1); + //zero means not toggled and not hovered + states[states.size() - 1] = 0; + return 0; +} +int butt::hover(int x, int y) { + int i = 0; + while (i < states.size()) { + //sets hover bit to 0 by AND'ing with the opposite + states[i] = states[i] & (~HOVER); + i++; + } + int c = boxes.check(x, y); + if (c != -1) { + states[c] = states[c] | HOVER; + } + return 0; +} +int butt::press(int x, int y) { + int c = boxes.check(x, y); + if (c != -1) { + states[c] = states[c] ^ TOGGLE; + } + return 0; +} +//doesn't do anything for now because just press will do the trick +int butt::unpress(int index) { + states[index] = states[index] & (~TOGGLE); +} +int butt::drawbutt() { + int i = 0; + while (i < states.size()) { + SDL_Rect r = boxes.get(i); + SDL_Color c; + switch (states[i]) { + case TOGGLE : + drawrect(r.x,r.y,r.w,r.h,140,140,140,255); + c.r = 255; + c.g = 255; + c.b = 255; + c.a = 255; + drawtext(r.x, r.y, names[i].c_str(),c); + break; + case HOVER : + drawrect(r.x,r.y,r.w,r.h,140,140,140,255); + c.r = 255; + c.g = 255; + c.b = 255; + c.a = 255; + drawtext(r.x, r.y, names[i].c_str(),c); + break; + case TOGGLE | HOVER : + drawrect(r.x,r.y,r.w,r.h,140,140,140,255); + c.r = 255; + c.g = 255; + c.b = 255; + c.a = 255; + drawtext(r.x, r.y, names[i].c_str(),c); + break; + default : + drawrect(r.x,r.y,r.w,r.h,140,140,140,255); + c.r = 0; + c.g = 0; + c.b = 0; + c.a = 255; + drawtext(r.x, r.y, names[i].c_str(),c); + break; + } + i++; + } + return 0; +} + +int butt::state(int index){ + if ((index >= 0) && (index < states.size())) { + return states[index]; + } else { + return -1; + } +} +int butt::size() { + return states.size(); +} +//---=[TBUFF]=--- +// +// +// +tbuff::tbuff() { + return; +} +int tbuff::add(int x, int y, int w, int h) { + boxes.add(x, y, w, h); + buffs.resize(buffs.size() + 1); + buffs[buffs.size() - 1] = ""; + states.resize(states.size() + 1); + //zero means not toggled and not hovered + states[states.size() - 1] = 0; + return 0; +} +int tbuff::hover(int x, int y) { + int i = 0; + while (i < states.size()) { + //sets hover bit to 0 by AND'ing with the opposite + states[i] = states[i] & (~HOVER); + i++; + } + int c = boxes.check(x, y); + if (c != -1) { + states[c] = states[c] | HOVER; + } + return 0; +} +int tbuff::press(int x, int y) { + int i = 0; + while (i < states.size()) { + //sets hover bit to 0 by AND'ing with the opposite + states[i] = states[i] & (~TOGGLE); + i++; + } + int c = boxes.check(x, y); + + if (c != -1) { + states[c] = states[c] ^ TOGGLE; + SDL_Rect r = boxes.get(c); + SDL_StartTextInput(); + SDL_SetTextInputRect(&r); + } else { + SDL_StopTextInput(); + } + return 0; +} +//doesn't do anything for now because just press will do the trick +int tbuff::unpress(int index) { + states[index] = states[index] & (~TOGGLE); + SDL_StopTextInput(); +} +int tbuff::drawtbuff() { + int i = 0; + while (i < states.size()) { + SDL_Rect r = boxes.get(i); + SDL_Color c; + switch (states[i]) { + case TOGGLE : + drawrect(r.x,r.y,r.w,r.h,140,140,140,255); + c.r = 255; + c.g = 255; + c.b = 255; + c.a = 255; + drawtext(r.x, r.y, buffs[i].c_str(),c); + break; + case HOVER : + drawrect(r.x,r.y,r.w,r.h,180,180,180,255); + c.r = 0; + c.g = 0; + c.b = 0; + c.a = 0; + drawtext(r.x, r.y, buffs[i].c_str(),c); + break; + case TOGGLE | HOVER : + drawrect(r.x,r.y,r.w,r.h,180,180,180,255); + c.r = 0; + c.g = 0; + c.b = 0; + c.a = 0; + drawtext(r.x, r.y, buffs[i].c_str(),c); + break; + default : + drawrect(r.x,r.y,r.w,r.h,140,140,140,255); + c.r = 0; + c.g = 0; + c.b = 0; + c.a = 255; + drawtext(r.x, r.y, buffs[i].c_str(),c); + break; + } + i++; + } + return 0; +} +int tbuff::reset() { + int i = 0; + while (i < buffs.size()) { + buffs[i] = ""; + i++; + } + return 0; +} +int tbuff::charin(const char *text) { + int i = 0; + while (i < states.size()) { + if (states[i] & TOGGLE) { + buffs[i] = buffs[i] + text; + } + i++; + } + return 0; +} +int tbuff::state(int index){ + if ((index >= 0) && (index < states.size())) { + return states[index]; + } else { + return -1; + } +} +int tbuff::size() { + return states.size(); +} -- cgit v1.1