* Copyright 2001-2014 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Frans van Nispen
* John Scipione, jscipione@gmail.com
*/
#include <Rect.h>
#include <algorithm>
#include <stdio.h>
void
BRect::SetLeftTop(const BPoint point)
{
left = point.x;
top = point.y;
}
void
BRect::SetRightBottom(const BPoint point)
{
right = point.x;
bottom = point.y;
}
void
BRect::SetLeftBottom(const BPoint point)
{
left = point.x;
bottom = point.y;
}
void
BRect::SetRightTop(const BPoint point)
{
right = point.x;
top = point.y;
}
void
BRect::InsetBy(BPoint point)
{
left += point.x;
right -= point.x;
top += point.y;
bottom -= point.y;
}
void
BRect::InsetBy(float dx, float dy)
{
left += dx;
right -= dx;
top += dy;
bottom -= dy;
}
BRect&
BRect::InsetBySelf(BPoint point)
{
InsetBy(point);
return *this;
}
BRect&
BRect::InsetBySelf(float dx, float dy)
{
InsetBy(dx, dy);
return *this;
}
BRect
BRect::InsetByCopy(BPoint point) const
{
BRect copy(*this);
copy.InsetBy(point);
return copy;
}
BRect
BRect::InsetByCopy(float dx, float dy) const
{
BRect copy(*this);
copy.InsetBy(dx, dy);
return copy;
}
void
BRect::OffsetBy(BPoint point)
{
left += point.x;
right += point.x;
top += point.y;
bottom += point.y;
}
void
BRect::OffsetBy(float dx, float dy)
{
left += dx;
right += dx;
top += dy;
bottom += dy;
}
BRect&
BRect::OffsetBySelf(BPoint point)
{
OffsetBy(point);
return *this;
}
BRect&
BRect::OffsetBySelf(float dx, float dy)
{
OffsetBy(dx, dy);
return *this;
}
BRect
BRect::OffsetByCopy(BPoint point) const
{
BRect copy(*this);
copy.OffsetBy(point);
return copy;
}
BRect
BRect::OffsetByCopy(float dx, float dy) const
{
BRect copy(*this);
copy.OffsetBy(dx, dy);
return copy;
}
void
BRect::OffsetTo(BPoint point)
{
right = (right - left) + point.x;
left = point.x;
bottom = (bottom - top) + point.y;
top = point.y;
}
void
BRect::OffsetTo(float x, float y)
{
right = (right - left) + x;
left = x;
bottom = (bottom - top) + y;
top=y;
}
BRect&
BRect::OffsetToSelf(BPoint point)
{
OffsetTo(point);
return *this;
}
BRect&
BRect::OffsetToSelf(float x, float y)
{
OffsetTo(x, y);
return *this;
}
BRect
BRect::OffsetToCopy(BPoint point) const
{
BRect copy(*this);
copy.OffsetTo(point);
return copy;
}
BRect
BRect::OffsetToCopy(float x, float y) const
{
BRect copy(*this);
copy.OffsetTo(x, y);
return copy;
}
void
BRect::PrintToStream() const
{
printf("BRect(l:%.1f, t:%.1f, r:%.1f, b:%.1f)\n", left, top, right, bottom);
}
bool
BRect::operator==(BRect other) const
{
return left == other.left && right == other.right &&
top == other.top && bottom == other.bottom;
}
bool
BRect::operator!=(BRect other) const
{
return !(*this == other);
}
BRect
BRect::operator&(BRect other) const
{
return BRect(std::max(left, other.left), std::max(top, other.top),
std::min(right, other.right), std::min(bottom, other.bottom));
}
BRect
BRect::operator|(BRect other) const
{
return BRect(std::min(left, other.left), std::min(top, other.top),
std::max(right, other.right), std::max(bottom, other.bottom));
}
bool
BRect::Intersects(BRect rect) const
{
if (!IsValid() || !rect.IsValid())
return false;
return !(rect.left > right || rect.right < left
|| rect.top > bottom || rect.bottom < top);
}
bool
BRect::Contains(BPoint point) const
{
return point.x >= left && point.x <= right
&& point.y >= top && point.y <= bottom;
}
bool
BRect::Contains(BRect rect) const
{
return rect.left >= left && rect.right <= right
&& rect.top >= top && rect.bottom <= bottom;
}
#if __GNUC__ == 2
extern "C" BRect
InsetByCopy__5BRectG6BPoint(BRect* self, BPoint point)
{
BRect copy(*self);
copy.InsetBy(point);
return copy;
}
extern "C" BRect
InsetByCopy__5BRectff(BRect* self, float dx, float dy)
{
BRect copy(*self);
copy.InsetBy(dx, dy);
return copy;
}
extern "C" BRect
OffsetByCopy__5BRectG6BPoint(BRect* self, BPoint point)
{
BRect copy(*self);
copy.OffsetBy(point);
return copy;
}
extern "C" BRect
OffsetByCopy__5BRectff(BRect* self, float dx, float dy)
{
BRect copy(*self);
copy.OffsetBy(dx, dy);
return copy;
}
extern "C" BRect
OffsetToCopy__5BRectG6BPoint(BRect* self, BPoint point)
{
BRect copy(*self);
copy.OffsetTo(point);
return copy;
}
extern "C" BRect
OffsetToCopy__5BRectff(BRect* self, float dx, float dy)
{
BRect copy(*self);
copy.OffsetTo(dx, dy);
return copy;
}
#elif __GNUC__ >= 4
extern "C" BRect
_ZN5BRect11InsetByCopyE6BPoint(BRect* self, BPoint point)
{
BRect copy(*self);
copy.InsetBy(point);
return copy;
}
extern "C" BRect
_ZN5BRect11InsetByCopyEff(BRect* self, float dx, float dy)
{
BRect copy(*self);
copy.InsetBy(dx, dy);
return copy;
}
extern "C" BRect
_ZN5BRect12OffsetByCopyE6BPoint(BRect* self, BPoint point)
{
BRect copy(*self);
copy.OffsetBy(point);
return copy;
}
extern "C" BRect
_ZN5BRect12OffsetByCopyEff(BRect* self, float dx, float dy)
{
BRect copy(*self);
copy.OffsetBy(dx, dy);
return copy;
}
extern "C" BRect
_ZN5BRect12OffsetToCopyE6BPoint(BRect* self, BPoint point)
{
BRect copy(*self);
copy.OffsetTo(point);
return copy;
}
extern "C" BRect
_ZN5BRect12OffsetToCopyEff(BRect* self, float dx, float dy)
{
BRect copy(*self);
copy.OffsetTo(dx, dy);
return copy;
}
#endif