Foundation classes for a basic GUI implementing simple widgets and events

Dependents:   TouchScreenGUIDemo

Committer:
duncanFrance
Date:
Sat May 21 14:40:09 2016 +0000
Revision:
13:6714534e7974
Parent:
12:63db16fea709
Cleaned up SpinnerWidget; Started on SpinnerDialog - will extract Dialog later

Who changed what in which revision?

UserRevisionLine numberNew contents of line
duncanFrance 12:63db16fea709 1 #ifndef SIMPLEGUI_RECTANGLE_H
duncanFrance 12:63db16fea709 2 #define SIMPLEGUI_RECTANGLE_H
duncanFrance 12:63db16fea709 3
duncanFrance 12:63db16fea709 4 #include <algorithm>
duncanFrance 13:6714534e7974 5 #include "Point.h"
duncanFrance 12:63db16fea709 6
duncanFrance 12:63db16fea709 7 class Rectangle
duncanFrance 12:63db16fea709 8 {
duncanFrance 12:63db16fea709 9
duncanFrance 12:63db16fea709 10 public:
duncanFrance 12:63db16fea709 11
duncanFrance 12:63db16fea709 12 Rectangle(int _x, int _y, int _w, int _h) :
duncanFrance 12:63db16fea709 13 x(_x), y(_y), width(_w), height(_h) {}
duncanFrance 12:63db16fea709 14
duncanFrance 12:63db16fea709 15 void resize(const Rectangle &outer, int padding) {
duncanFrance 12:63db16fea709 16 x = outer.x+padding;
duncanFrance 12:63db16fea709 17 y = outer.y+padding;
duncanFrance 12:63db16fea709 18 width = outer.width - 2 * padding;
duncanFrance 12:63db16fea709 19 height = outer.height - 2 * padding;
duncanFrance 12:63db16fea709 20 }
duncanFrance 12:63db16fea709 21
duncanFrance 12:63db16fea709 22 bool contains(int pointX, int pointY) {
duncanFrance 12:63db16fea709 23 return pointX >= x
duncanFrance 12:63db16fea709 24 && pointX <= (x+width)
duncanFrance 12:63db16fea709 25 && pointY >= y
duncanFrance 12:63db16fea709 26 && pointY <= (y+height);
duncanFrance 12:63db16fea709 27 }
duncanFrance 12:63db16fea709 28
duncanFrance 12:63db16fea709 29 bool intersects(const Rectangle &r) {
duncanFrance 12:63db16fea709 30 int x1 = std::max(x, r.x);
duncanFrance 12:63db16fea709 31 int x2 = std::min(x+width, r.x + r.width);
duncanFrance 12:63db16fea709 32 int y1 = std::max(y, r.y);
duncanFrance 12:63db16fea709 33 int y2 = std::min(y+height, r.y + r.height);
duncanFrance 12:63db16fea709 34 if((x2 < x1) || (y2 < y1)) {
duncanFrance 12:63db16fea709 35 return false;
duncanFrance 12:63db16fea709 36 }
duncanFrance 12:63db16fea709 37 return true;
duncanFrance 12:63db16fea709 38 }
duncanFrance 13:6714534e7974 39
duncanFrance 13:6714534e7974 40 bool isLocatedAt(Point *p) {
duncanFrance 13:6714534e7974 41 return p->x() == x && p->y() == y;
duncanFrance 13:6714534e7974 42 }
duncanFrance 12:63db16fea709 43
duncanFrance 12:63db16fea709 44 int x, y, width, height;
duncanFrance 12:63db16fea709 45 };
duncanFrance 12:63db16fea709 46
duncanFrance 12:63db16fea709 47 #endif