FractionalLayoutPoint.h [plain text]
#ifndef FractionalLayoutPoint_h
#define FractionalLayoutPoint_h
#include "FloatPoint.h"
#include "FractionalLayoutSize.h"
#include <wtf/MathExtras.h>
namespace WebCore {
class FractionalLayoutPoint {
public:
FractionalLayoutPoint() : m_x(0), m_y(0) { }
FractionalLayoutPoint(FractionalLayoutUnit x, FractionalLayoutUnit y) : m_x(x), m_y(y) { }
FractionalLayoutPoint(const IntPoint& point) : m_x(point.x()), m_y(point.y()) { }
explicit FractionalLayoutPoint(const FloatPoint& size) : m_x(size.x()), m_y(size.y()) { }
explicit FractionalLayoutPoint(const FractionalLayoutSize& size) : m_x(size.width()), m_y(size.height()) { }
static FractionalLayoutPoint zero() { return FractionalLayoutPoint(); }
FractionalLayoutUnit x() const { return m_x; }
FractionalLayoutUnit y() const { return m_y; }
void setX(FractionalLayoutUnit x) { m_x = x; }
void setY(FractionalLayoutUnit y) { m_y = y; }
void move(const FractionalLayoutSize& s) { move(s.width(), s.height()); }
void moveBy(const FractionalLayoutPoint& offset) { move(offset.x(), offset.y()); }
void move(FractionalLayoutUnit dx, FractionalLayoutUnit dy) { m_x += dx; m_y += dy; }
void scale(float sx, float sy)
{
m_x *= sx;
m_y *= sy;
}
FractionalLayoutPoint expandedTo(const FractionalLayoutPoint& other) const
{
return FractionalLayoutPoint(std::max(m_x, other.m_x), std::max(m_y, other.m_y));
}
FractionalLayoutPoint shrunkTo(const FractionalLayoutPoint& other) const
{
return FractionalLayoutPoint(std::min(m_x, other.m_x), std::min(m_y, other.m_y));
}
void clampNegativeToZero()
{
*this = expandedTo(zero());
}
FractionalLayoutPoint transposedPoint() const
{
return FractionalLayoutPoint(m_y, m_x);
}
private:
FractionalLayoutUnit m_x, m_y;
};
inline FractionalLayoutPoint& operator+=(FractionalLayoutPoint& a, const FractionalLayoutSize& b)
{
a.move(b.width(), b.height());
return a;
}
inline FractionalLayoutPoint& operator-=(FractionalLayoutPoint& a, const FractionalLayoutSize& b)
{
a.move(-b.width(), -b.height());
return a;
}
inline FractionalLayoutPoint operator+(const FractionalLayoutPoint& a, const FractionalLayoutSize& b)
{
return FractionalLayoutPoint(a.x() + b.width(), a.y() + b.height());
}
inline FractionalLayoutPoint operator+(const FractionalLayoutPoint& a, const FractionalLayoutPoint& b)
{
return FractionalLayoutPoint(a.x() + b.x(), a.y() + b.y());
}
inline FractionalLayoutSize operator-(const FractionalLayoutPoint& a, const FractionalLayoutPoint& b)
{
return FractionalLayoutSize(a.x() - b.x(), a.y() - b.y());
}
inline FractionalLayoutPoint operator-(const FractionalLayoutPoint& a, const FractionalLayoutSize& b)
{
return FractionalLayoutPoint(a.x() - b.width(), a.y() - b.height());
}
inline FractionalLayoutPoint operator-(const FractionalLayoutPoint& point)
{
return FractionalLayoutPoint(-point.x(), -point.y());
}
inline bool operator==(const FractionalLayoutPoint& a, const FractionalLayoutPoint& b)
{
return a.x() == b.x() && a.y() == b.y();
}
inline bool operator!=(const FractionalLayoutPoint& a, const FractionalLayoutPoint& b)
{
return a.x() != b.x() || a.y() != b.y();
}
inline FractionalLayoutPoint toPoint(const FractionalLayoutSize& size)
{
return FractionalLayoutPoint(size.width(), size.height());
}
inline FractionalLayoutSize toSize(const FractionalLayoutPoint& a)
{
return FractionalLayoutSize(a.x(), a.y());
}
inline IntPoint flooredIntPoint(const FractionalLayoutPoint& point)
{
return IntPoint(point.x().toInt(), point.y().toInt());
}
inline IntPoint roundedIntPoint(const FractionalLayoutPoint& point)
{
return IntPoint(point.x().round(), point.y().round());
}
inline IntPoint ceiledIntPoint(const FractionalLayoutPoint& point)
{
return IntPoint(point.x().ceil(), point.y().ceil());
}
}
#endif // FractionalLayoutPoint_h