Files
MuditaOS/module-gui/gui/core/BoundingBox.cpp
Robert Borzecki d3235d54d7 Removed submodule
2019-05-21 23:35:00 +02:00

76 lines
1.2 KiB
C++

/*
* BoundingBox.cpp
*
* Created on: 4 mar 2019
* Author: robert
*/
#include "BoundingBox.hpp"
namespace gui {
BoundingBox::BoundingBox() : x {0}, y{0}, w{0}, h{0} {
}
BoundingBox::BoundingBox( int16_t x, int16_t y, uint16_t w, uint16_t h) : x{x}, y{y}, w{w}, h{h} {
}
BoundingBox::~BoundingBox() {
}
bool BoundingBox::intersect( const BoundingBox& box1, const BoundingBox& box2, BoundingBox& result ) {
const BoundingBox* l;
const BoundingBox* r;
if( box1.x < box2.x ) {
l = &box1; r = &box2;
}
else {
l = &box2; r = &box1;
}
int w = l->x + l->w - r->x;
if( w <= 0 )
{
result.clear();
return false;
}
//most left bbox overlap right box entirely
if( (l->x + l->w) >= (r->x + r->w) )
{
w = r->w;
}
result.w = w;
result.x = r->x;
//vertical check
//select bbox that is higher
const BoundingBox* u;
if( box1.y < box2.y ) {
l = &box1; u = &box2;
}
else {
l = &box2; u = &box1;
}
int h = l->y + l->h - u->y;
if( h <= 0 )
{
result.clear();
return false;
}
//most lower bbox overlap upper box entirely
if( (l->y + l->h) >= (u->y + u->h) )
{
h = u->h;
}
result.y = u->y;
result.h = h;
return true;
}
} /* namespace gui */