blob: f292330a46239d62f2681c162834a6e78a3b9c9a [file] [log] [blame]
#ifndef _RIVE_AABB_HPP_
#define _RIVE_AABB_HPP_
#include "rive/math/mat2d.hpp"
#include "rive/math/vec2d.hpp"
#include <cstddef>
namespace rive {
class AABB {
public:
union {
float buffer[4];
struct {
float minX, minY, maxX, maxY;
};
};
public:
AABB();
AABB(const AABB& copy);
AABB(float minX, float minY, float maxX, float maxY);
inline const float* values() const { return buffer; }
float& operator[](std::size_t idx) { return buffer[idx]; }
const float& operator[](std::size_t idx) const { return buffer[idx]; }
static void center(Vec2D& out, const AABB& a);
static void size(Vec2D& out, const AABB& a);
static void extents(Vec2D& out, const AABB& a);
static void combine(AABB& out, const AABB& a, const AABB& b);
static bool contains(const AABB& a, const AABB& b);
static bool isValid(const AABB& a);
static bool testOverlap(const AABB& a, const AABB& b);
static bool areIdentical(const AABB& a, const AABB& b);
static void transform(AABB& out, const AABB& a, const Mat2D& matrix);
float width() const;
float height() const;
float perimeter() const;
};
} // namespace rive
#endif