MyGUI_TCoord.h
Go to the documentation of this file.
/*
* This source file is part of MyGUI. For the latest info, see http://mygui.info/
* Distributed under the MIT License
* (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
*/
#ifndef MyGUI_TCOORD_H_
#define MyGUI_TCOORD_H_
#include "MyGUI_Prerequest.h"
#include "MyGUI_TPoint.h"
#include "MyGUI_TSize.h"
namespace MyGUI::types
{
template<typename T>
struct TCoord
{
T left{};
T top{};
T width{};
T height{};
TCoord() = default;
TCoord(T const& _left, T const& _top, T const& _width, T const& _height) :
left(_left),
top(_top),
width(_width),
height(_height)
{
}
TCoord(TPoint<T> const& _point, TSize<T> const& _size) :
left(_point.left),
top(_point.top),
width(_size.width),
height(_size.height)
{
}
TCoord& operator-=(TCoord const& _obj)
{
left -= _obj.left;
top -= _obj.top;
width -= _obj.width;
height -= _obj.height;
return *this;
}
TCoord& operator+=(TCoord const& _obj)
{
left += _obj.left;
top += _obj.top;
width += _obj.width;
height += _obj.height;
return *this;
}
TCoord operator-(TCoord const& _obj) const
{
return TCoord(left - _obj.left, top - _obj.top, width - _obj.width, height - _obj.height);
}
TCoord operator-(TPoint<T> const& _obj) const
{
return TCoord(left - _obj.left, top - _obj.top, width, height);
}
TCoord operator-(TSize<T> const& _obj) const
{
return TCoord(left, top, width - _obj.width, height - _obj.height);
}
TCoord operator+(TCoord const& _obj) const
{
return TCoord(left + _obj.left, top + _obj.top, width + _obj.width, height + _obj.height);
}
TCoord operator+(TPoint<T> const& _obj) const
{
return TCoord(left + _obj.left, top + _obj.top, width, height);
}
TCoord operator+(TSize<T> const& _obj) const
{
return TCoord(left, top, width + _obj.width, height + _obj.height);
}
template<typename U>
TCoord& operator=(TCoord<U> const& _obj)
{
left = _obj.left;
top = _obj.top;
width = _obj.width;
height = _obj.height;
return *this;
}
TCoord& operator=(TPoint<T> const& _obj)
{
left = _obj.left;
top = _obj.top;
return *this;
}
TCoord& operator=(TSize<T> const& _obj)
{
width = _obj.width;
height = _obj.height;
return *this;
}
bool operator==(TCoord const& _obj) const
{
return ((left == _obj.left) && (top == _obj.top) && (width == _obj.width) && (height == _obj.height));
}
bool operator!=(TCoord const& _obj) const
{
return !((left == _obj.left) && (top == _obj.top) && (width == _obj.width) && (height == _obj.height));
}
T right() const
{
return left + width;
}
T bottom() const
{
return top + height;
}
void clear()
{
left = top = width = height = 0;
}
void set(T const& _left, T const& _top, T const& _width, T const& _height)
{
left = _left;
top = _top;
width = _width;
height = _height;
}
void swap(TCoord& _value)
{
TCoord tmp = _value;
_value = *this;
*this = tmp;
}
bool empty() const
{
return ((left == 0) && (top == 0) && (width == 0) && (height == 0));
}
TPoint<T> point() const
{
return TPoint<T>(left, top);
}
TSize<T> size() const
{
return TSize<T>(width, height);
}
bool inside(const TPoint<T>& _value) const
{
return (
(_value.left >= left) && (_value.left <= right()) && (_value.top >= top) && (_value.top <= bottom()));
}
std::string print() const
{
std::ostringstream stream;
stream << *this;
return stream.str();
}
static TCoord<T> parse(std::string_view _value)
{
return utility::parseValue<TCoord<T>>(_value);
}
friend std::ostream& operator<<(std::ostream& _stream, const TCoord<T>& _value)
{
_stream << _value.left << " " << _value.top << " " << _value.width << " " << _value.height;
return _stream;
}
friend std::istream& operator>>(std::istream& _stream, TCoord<T>& _value)
{
_stream >> _value.left >> _value.top >> _value.width >> _value.height;
if (_stream.fail())
_value.clear();
return _stream;
}
};
} // namespace MyGUI
#endif // MyGUI_TCOORD_H_
MyGUI_Prerequest.h
MyGUI_TPoint.h
MyGUI_TSize.h
MyGUI::types
Definition MyGUI_TCoord.h:15
MyGUI::utility::parseValue
T parseValue(std::string_view _value)
Definition MyGUI_StringUtility.h:60
MyGUI::types::TCoord< int >::height
int height
Definition MyGUI_TCoord.h:23
MyGUI::types::TCoord::operator=
TCoord & operator=(TCoord< U > const &_obj)
Definition MyGUI_TCoord.h:92
MyGUI::types::TCoord::operator=
TCoord & operator=(TPoint< T > const &_obj)
Definition MyGUI_TCoord.h:101
MyGUI::types::TCoord::right
T right() const
Definition MyGUI_TCoord.h:125
MyGUI::types::TCoord::empty
bool empty() const
Definition MyGUI_TCoord.h:155
MyGUI::types::TCoord::operator=
TCoord & operator=(TSize< T > const &_obj)
Definition MyGUI_TCoord.h:108
MyGUI::types::TCoord::operator+=
TCoord & operator+=(TCoord const &_obj)
Definition MyGUI_TCoord.h:52
MyGUI::types::TCoord::TCoord
TCoord(TPoint< T > const &_point, TSize< T > const &_size)
Definition MyGUI_TCoord.h:35
MyGUI::types::TCoord::operator<<
friend std::ostream & operator<<(std::ostream &_stream, const TCoord< T > &_value)
Definition MyGUI_TCoord.h:188
MyGUI::types::TCoord< int >::width
int width
Definition MyGUI_TCoord.h:22
MyGUI::types::TCoord::TCoord
TCoord()=default
MyGUI::types::TCoord::operator==
bool operator==(TCoord const &_obj) const
Definition MyGUI_TCoord.h:115
MyGUI::types::TCoord::operator-=
TCoord & operator-=(TCoord const &_obj)
Definition MyGUI_TCoord.h:43
MyGUI::types::TCoord::TCoord
TCoord(T const &_left, T const &_top, T const &_width, T const &_height)
Definition MyGUI_TCoord.h:27
MyGUI::types::TCoord::set
void set(T const &_left, T const &_top, T const &_width, T const &_height)
Definition MyGUI_TCoord.h:140
MyGUI::types::TCoord< int >::top
int top
Definition MyGUI_TCoord.h:21
MyGUI::types::TCoord::parse
static TCoord< T > parse(std::string_view _value)
Definition MyGUI_TCoord.h:183
MyGUI::types::TCoord::point
TPoint< T > point() const
Definition MyGUI_TCoord.h:160
MyGUI::types::TCoord::swap
void swap(TCoord &_value)
Definition MyGUI_TCoord.h:148
MyGUI::types::TCoord::operator!=
bool operator!=(TCoord const &_obj) const
Definition MyGUI_TCoord.h:120
MyGUI::types::TCoord::operator-
TCoord operator-(TCoord const &_obj) const
Definition MyGUI_TCoord.h:61
MyGUI::types::TCoord::operator+
TCoord operator+(TSize< T > const &_obj) const
Definition MyGUI_TCoord.h:86
MyGUI::types::TCoord::operator>>
friend std::istream & operator>>(std::istream &_stream, TCoord< T > &_value)
Definition MyGUI_TCoord.h:194
MyGUI::types::TCoord::operator+
TCoord operator+(TPoint< T > const &_obj) const
Definition MyGUI_TCoord.h:81
MyGUI::types::TCoord::size
TSize< T > size() const
Definition MyGUI_TCoord.h:165
MyGUI::types::TCoord::operator-
TCoord operator-(TSize< T > const &_obj) const
Definition MyGUI_TCoord.h:71
MyGUI::types::TCoord::print
std::string print() const
Definition MyGUI_TCoord.h:176
MyGUI::types::TCoord::inside
bool inside(const TPoint< T > &_value) const
Definition MyGUI_TCoord.h:170
MyGUI::types::TCoord< int >::left
int left
Definition MyGUI_TCoord.h:20
MyGUI::types::TCoord::operator-
TCoord operator-(TPoint< T > const &_obj) const
Definition MyGUI_TCoord.h:66
MyGUI::types::TCoord::operator+
TCoord operator+(TCoord const &_obj) const
Definition MyGUI_TCoord.h:76
MyGUI::types::TCoord::bottom
T bottom() const
Definition MyGUI_TCoord.h:130
MyGUI::types::TCoord::clear
void clear()
Definition MyGUI_TCoord.h:135
MyGUI::types::TPoint
Definition MyGUI_TPoint.h:18
MyGUI::types::TPoint::left
T left
Definition MyGUI_TPoint.h:19
MyGUI::types::TPoint::top
T top
Definition MyGUI_TPoint.h:20
MyGUI::types::TSize
Definition MyGUI_TSize.h:18
MyGUI::types::TSize::width
T width
Definition MyGUI_TSize.h:19
MyGUI::types::TSize::height
T height
Definition MyGUI_TSize.h:20