el h / SimpleGUI

Fork of SimpleGUI by Duncan McIntyre

Committer:
duncanFrance
Date:
Sun May 08 14:42:08 2016 +0000
Revision:
12:63db16fea709
Child:
13:6714534e7974
Update to handle dirty pixels and geometric change/damage

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 12:63db16fea709 5
duncanFrance 12:63db16fea709 6 class Rectangle
duncanFrance 12:63db16fea709 7 {
duncanFrance 12:63db16fea709 8
duncanFrance 12:63db16fea709 9 public:
duncanFrance 12:63db16fea709 10
duncanFrance 12:63db16fea709 11 Rectangle(int _x, int _y, int _w, int _h) :
duncanFrance 12:63db16fea709 12 x(_x), y(_y), width(_w), height(_h) {}
duncanFrance 12:63db16fea709 13
duncanFrance 12:63db16fea709 14 void resize(const Rectangle &outer, int padding) {
duncanFrance 12:63db16fea709 15 x = outer.x+padding;
duncanFrance 12:63db16fea709 16 y = outer.y+padding;
duncanFrance 12:63db16fea709 17 width = outer.width - 2 * padding;
duncanFrance 12:63db16fea709 18 height = outer.height - 2 * padding;
duncanFrance 12:63db16fea709 19 }
duncanFrance 12:63db16fea709 20
duncanFrance 12:63db16fea709 21 bool contains(int pointX, int pointY) {
duncanFrance 12:63db16fea709 22 return pointX >= x
duncanFrance 12:63db16fea709 23 && pointX <= (x+width)
duncanFrance 12:63db16fea709 24 && pointY >= y
duncanFrance 12:63db16fea709 25 && pointY <= (y+height);
duncanFrance 12:63db16fea709 26 }
duncanFrance 12:63db16fea709 27
duncanFrance 12:63db16fea709 28 bool intersects(const Rectangle &r) {
duncanFrance 12:63db16fea709 29 int x1 = std::max(x, r.x);
duncanFrance 12:63db16fea709 30 int x2 = std::min(x+width, r.x + r.width);
duncanFrance 12:63db16fea709 31 int y1 = std::max(y, r.y);
duncanFrance 12:63db16fea709 32 int y2 = std::min(y+height, r.y + r.height);
duncanFrance 12:63db16fea709 33 if((x2 < x1) || (y2 < y1)) {
duncanFrance 12:63db16fea709 34 return false;
duncanFrance 12:63db16fea709 35 }
duncanFrance 12:63db16fea709 36 return true;
duncanFrance 12:63db16fea709 37 }
duncanFrance 12:63db16fea709 38
duncanFrance 12:63db16fea709 39
duncanFrance 12:63db16fea709 40 int x, y, width, height;
duncanFrance 12:63db16fea709 41 };
duncanFrance 12:63db16fea709 42
duncanFrance 12:63db16fea709 43 #endif