X-Git-Url: https://git.rohieb.name/hackover2013-badge-firmware.git/blobdiff_plain/4cb2d309b35bc7acc33483bdcd0af2a749206369..10e466530d58c52705b957688f3c62f3b60f2bdf:/badge/util/rectangle.h diff --git a/badge/util/rectangle.h b/badge/util/rectangle.h index 39ba5ca..4fe5c0e 100644 --- a/badge/util/rectangle.h +++ b/badge/util/rectangle.h @@ -17,6 +17,14 @@ static inline vec2d vec2d_add(vec2d v1, vec2d v2) { return r; } +static inline vec2d vec2d_neg(vec2d v) { + vec2d r = { + fixed_point_neg(v.x), + fixed_point_neg(v.y) + }; + return r; +} + typedef struct { vec2d pos; vec2d extent; @@ -32,12 +40,10 @@ static inline fixed_point rectangle_right (rectangle const *r) { return fixed_po static inline fixed_point rectangle_width (rectangle const *r) { return r->extent.x; } static inline fixed_point rectangle_height(rectangle const *r) { return r->extent.y; } -static inline vec2d rectangle_mid(rectangle const *r) { - vec2d v = { fixed_point_add(r->pos.x, fixed_point_div(r->extent.x, FIXED_POINT(2, 0))), - fixed_point_add(r->pos.y, fixed_point_div(r->extent.y, FIXED_POINT(2, 0))) - }; - return v; -} +static inline fixed_point rectangle_mid_x (rectangle const *r) { return fixed_point_add(r->pos.x, fixed_point_div(r->extent.x, FIXED_INT(2))); } +static inline fixed_point rectangle_mid_y (rectangle const *r) { return fixed_point_add(r->pos.y, fixed_point_div(r->extent.y, FIXED_INT(2))); } + +static inline vec2d rectangle_mid (rectangle const *r) { vec2d v = { rectangle_mid_x(r), rectangle_mid_y(r) }; return v; } static inline void rectangle_move_to (rectangle *r, vec2d new_pos) { r->pos = new_pos; } static inline void rectangle_move_to_x(rectangle *r, fixed_point new_x ) { r->pos.x = new_x; } @@ -47,11 +53,11 @@ static inline void rectangle_move_rel (rectangle *r, vec2d vec ) { r->p static inline void rectangle_expand (rectangle *r, vec2d extent ) { r->extent = extent; } static inline bool rectangle_intersect(rectangle const *r1, - rectangle const *r2) { + rectangle const *r2) { return (fixed_point_lt(rectangle_top (r1), rectangle_bottom(r2)) && - fixed_point_gt(rectangle_bottom(r1), rectangle_top (r2)) && - fixed_point_lt(rectangle_left (r1), rectangle_right (r2)) && - fixed_point_gt(rectangle_right (r1), rectangle_left (r2))); + fixed_point_gt(rectangle_bottom(r1), rectangle_top (r2)) && + fixed_point_lt(rectangle_left (r1), rectangle_right (r2)) && + fixed_point_gt(rectangle_right (r1), rectangle_left (r2))); } #endif