blob: 04d3738adefdf5327e12d32e0f5f84537928f6a4 [file] [log] [blame]
/*
* Copyright 2016 Google Inc. All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MATHFU_RECT_H_
#define MATHFU_RECT_H_
#include "mathfu/vector.h"
namespace mathfu {
/// @addtogroup mathfu_rect
/// @{
/// @class Rect "mathfu/rect.h"
/// @brief Rect of type T containing position (pos) and width.
///
/// Rect contains two 2D <b>Vector</b>s of type <b>T</b> representing position
/// (pos) and size.
///
/// @tparam T type of Rect elements.
template <class T>
struct Rect {
Vector<T, 2> pos;
Vector<T, 2> size;
/// @brief Create a rect from a vector4 of the same type.
///
/// @param v Vector that the data will be copied from.
explicit Rect(const Vector<T, 4>& v)
: pos(v.x, v.y), size(v.z, v.w) {}
/// @brief Create a rect from x, y, width and height values.
///
/// @param x the given x value.
/// @param y the given y value.
/// @param width the given width value.
/// @param height the given height value.
inline Rect(T x = static_cast<T>(0), T y = static_cast<T>(0),
T width = static_cast<T>(0), T height = static_cast<T>(0))
: pos(x, y), size(width, height) {}
/// @brief Create a rect from two vector2 representing position and size.
///
/// @param pos Vector representing the position vector (x and y values).
/// @param size Vector represening the size vector (width and height values).
inline Rect(const Vector<T, 2>& pos, const Vector<T, 2>& size)
: pos(pos), size(size) {}
};
/// @}
/// @brief Check if two rects are identical.
///
/// @param r1 Rect to be tested.
/// @param r2 Other rect to be tested.
template <class T>
bool operator==(const Rect<T>& r1, const Rect<T>& r2) {
return (r1.pos == r2.pos && r1.size == r2.size);
}
/// @brief Check if two rects are <b>not</b> identical.
///
/// @param r1 Rect to be tested.
/// @param r2 Other rect to be tested.
template <class T>
bool operator!=(const Rect<T>& r1, const Rect<T>& r2) {
return !(r1 == r2);
}
} // namespace mathfu
#endif // MATHFU_RECT_H_