#pragma once #include "Point.hpp" namespace Raven { enum class Direction { Horizontal, Vertical }; class Box { private: double m_x {0}; double m_y {0}; double m_width {0}; double m_height {0}; double m_max_width {-1}; double m_max_height {-1}; double m_min_width {-1}; double m_min_height {-1}; public: Box() {} Box(double x, double y, double width, double height) : m_x(x) , m_y(y) , m_width(width) , m_height(height) { } Box max_geometry(); Box min_geometry(); double x() { return m_x; } double y() { return m_y; } double width() { return m_width; } double height() { return m_height; } double min_width() { return m_min_width; } double min_height() { return m_min_height; } double max_width() { return m_max_width; } double max_height() { return m_max_height; } double x() const { return m_x; } double y() const { return m_y; } double width() const { return m_width; } double height() const { return m_height; } double min_width() const { return m_min_width; } double min_height() const { return m_min_height; } double max_width() const { return m_max_width; } double max_height() const { return m_max_height; } void set_x(double x) { m_x = x; } void set_y(double y) { m_y = y; } void set_width(double width); void set_height(double height); void set_max_width(double max_width) { m_max_width = max_width; set_width(m_width); } void set_max_height(double max_height) { m_max_height = max_height; set_height(m_height); } void set_min_width(double min_width) { m_min_width = min_width; set_width(m_width); } void set_min_height(double min_height) { m_min_height = min_height; set_height(m_height); } void update(); bool contains_point(double x, double y) const; bool contains_point(const Point &point) const; bool contains_box(const Box &other) const; Box offset(double x, double y); }; }