/* * DISTRHO Plugin Framework (DPF) * Copyright (C) 2012-2014 Filipe Coelho * * Permission to use, copy, modify, and/or distribute this software for any purpose with * or without fee is hereby granted, provided that the above copyright notice and this * permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include "../Geometry.hpp" START_NAMESPACE_DGL // ----------------------------------------------------------------------- // Point template Point::Point() noexcept : fX(0), fY(0) { } template Point::Point(const T& x, const T& y) noexcept : fX(x), fY(y) { } template Point::Point(const Point& pos) noexcept : fX(pos.fX), fY(pos.fY) { } template const T& Point::getX() const noexcept { return fX; } template const T& Point::getY() const noexcept { return fY; } template void Point::setX(const T& x) noexcept { fX = x; } template void Point::setY(const T& y) noexcept { fY = y; } template void Point::setPos(const T& x, const T& y) noexcept { fX = x; fY = y; } template void Point::setPos(const Point& pos) noexcept { fX = pos.fX; fY = pos.fY; } template void Point::moveBy(const T& x, const T& y) noexcept { fX += x; fY += y; } template void Point::moveBy(const Point& pos) noexcept { fX += pos.fX; fY += pos.fY; } template Point& Point::operator=(const Point& pos) noexcept { fX = pos.fX; fY = pos.fY; return *this; } template Point& Point::operator+=(const Point& pos) noexcept { fX += pos.fX; fY += pos.fY; return *this; } template Point& Point::operator-=(const Point& pos) noexcept { fX -= pos.fX; fY -= pos.fY; return *this; } template bool Point::operator==(const Point& pos) const noexcept { return (fX == pos.fX && fY== pos.fY); } template bool Point::operator!=(const Point& pos) const noexcept { return !operator==(pos); } // ----------------------------------------------------------------------- // Size template Size::Size() noexcept : fWidth(0), fHeight(0) { } template Size::Size(const T& width, const T& height) noexcept : fWidth(width), fHeight(height) { } template Size::Size(const Size& size) noexcept : fWidth(size.fWidth), fHeight(size.fHeight) { } template const T& Size::getWidth() const noexcept { return fWidth; } template const T& Size::getHeight() const noexcept { return fHeight; } template void Size::setWidth(const T& width) noexcept { fWidth = width; } template void Size::setHeight(const T& height) noexcept { fHeight = height; } template void Size::setSize(const T& width, const T& height) noexcept { fWidth = width; fHeight = height; } template void Size::setSize(const Size& size) noexcept { fWidth = size.fWidth; fHeight = size.fHeight; } template void Size::growBy(const T& multiplier) noexcept { fWidth *= multiplier; fHeight *= multiplier; } template void Size::shrinkBy(const T& divider) noexcept { fWidth /= divider; fHeight /= divider; } template Size& Size::operator=(const Size& size) noexcept { fWidth = size.fWidth; fHeight = size.fHeight; return *this; } template Size& Size::operator+=(const Size& size) noexcept { fWidth += size.fWidth; fHeight += size.fHeight; return *this; } template Size& Size::operator-=(const Size& size) noexcept { fWidth -= size.fWidth; fHeight -= size.fHeight; return *this; } template Size& Size::operator*=(const T& m) noexcept { fWidth *= m; fHeight *= m; return *this; } template Size& Size::operator/=(const T& d) noexcept { fWidth /= d; fHeight /= d; return *this; } template bool Size::operator==(const Size& size) const noexcept { return (fWidth == size.fWidth && fHeight == size.fHeight); } template bool Size::operator!=(const Size& size) const noexcept { return !operator==(size); } // ----------------------------------------------------------------------- // Line template Line::Line() noexcept : fPosStart(0, 0), fPosEnd(0, 0) { } template Line::Line(const T& startX, const T& startY, const T& endX, const T& endY) noexcept : fPosStart(startX, startY), fPosEnd(endX, endY) { } template Line::Line(const T& startX, const T& startY, const Point& endPos) noexcept : fPosStart(startX, startY), fPosEnd(endPos) { } template Line::Line(const Point& startPos, const T& endX, const T& endY) noexcept : fPosStart(startPos), fPosEnd(endX, endY) { } template Line::Line(const Point& startPos, const Point& endPos) noexcept : fPosStart(startPos), fPosEnd(endPos) { } template Line::Line(const Line& line) noexcept : fPosStart(line.fPosStart), fPosEnd(line.fPosEnd) { } template const T& Line::getStartX() const noexcept { return fPosStart.fX; } template const T& Line::getStartY() const noexcept { return fPosStart.fY; } template const T& Line::getEndX() const noexcept { return fPosEnd.fX; } template const T& Line::getEndY() const noexcept { return fPosEnd.fY; } template const Point& Line::getStartPos() const noexcept { return fPosStart; } template const Point& Line::getEndPos() const noexcept { return fPosEnd; } template void Line::setStartX(const T& x) noexcept { fPosStart.fX = x; } template void Line::setStartY(const T& y) noexcept { fPosStart.fY = y; } template void Line::setStartPos(const T& x, const T& y) noexcept { fPosStart = Point(x, y); } template void Line::setStartPos(const Point& pos) noexcept { fPosStart = pos; } template void Line::setEndX(const T& x) noexcept { fPosEnd.fX = x; } template void Line::setEndY(const T& y) noexcept { fPosEnd.fY = y; } template void Line::setEndPos(const T& x, const T& y) noexcept { fPosEnd = Point(x, y); } template void Line::setEndPos(const Point& pos) noexcept { fPosEnd = pos; } template void Line::moveBy(const T& x, const T& y) noexcept { fPosStart.fX += x; fPosStart.fY += y; fPosEnd.fX += x; fPosEnd.fY += y; } template void Line::moveBy(const Point& pos) noexcept { fPosStart += pos; fPosEnd += pos; } template void Line::draw() { glBegin(GL_LINES); { glVertex2i(fPosStart.fX, fPosStart.fY); glVertex2i(fPosEnd.fX, fPosEnd.fY); } glEnd(); } template Line& Line::operator=(const Line& line) noexcept { fPosStart = line.fPosStart; fPosEnd = line.fPosEnd; return *this; } template bool Line::operator==(const Line& line) const noexcept { return (fPosStart == line.fPosStart && fPosEnd == line.fPosEnd); } template bool Line::operator!=(const Line& line) const noexcept { return !operator==(line); } // ----------------------------------------------------------------------- // Rectangle template Rectangle::Rectangle() noexcept : fPos(0, 0), fSize(0, 0) { } template Rectangle::Rectangle(const T& x, const T& y, const T& width, const T& height) noexcept : fPos(x, y), fSize(width, height) { } template Rectangle::Rectangle(const T& x, const T& y, const Size& size) noexcept : fPos(x, y), fSize(size) { } template Rectangle::Rectangle(const Point& pos, const T& width, const T& height) noexcept : fPos(pos), fSize(width, height) { } template Rectangle::Rectangle(const Point& pos, const Size& size) noexcept : fPos(pos), fSize(size) { } template Rectangle::Rectangle(const Rectangle& rect) noexcept : fPos(rect.fPos), fSize(rect.fSize) { } template const T& Rectangle::getX() const noexcept { return fPos.fX; } template const T& Rectangle::getY() const noexcept { return fPos.fY; } template const T& Rectangle::getWidth() const noexcept { return fSize.fWidth; } template const T& Rectangle::getHeight() const noexcept { return fSize.fHeight; } template const Point& Rectangle::getPos() const noexcept { return fPos; } template const Size& Rectangle::getSize() const noexcept { return fSize; } template void Rectangle::setX(const T& x) noexcept { fPos.fX = x; } template void Rectangle::setY(const T& y) noexcept { fPos.fY = y; } template void Rectangle::setPos(const T& x, const T& y) noexcept { fPos.fX = x; fPos.fY = y; } template void Rectangle::setPos(const Point& pos) noexcept { fPos = pos; } template void Rectangle::moveBy(const T& x, const T& y) noexcept { fPos.fX += x; fPos.fY += y; } template void Rectangle::moveBy(const Point& pos) noexcept { fPos += pos; } template void Rectangle::setWidth(const T& width) noexcept { fSize.fWidth = width; } template void Rectangle::setHeight(const T& height) noexcept { fSize.fHeight = height; } template void Rectangle::setSize(const T& width, const T& height) noexcept { fSize.fWidth = width; fSize.fHeight = height; } template void Rectangle::setSize(const Size& size) noexcept { fSize = size; } template void Rectangle::growBy(const T& multiplier) noexcept { fSize.fWidth *= multiplier; fSize.fHeight *= multiplier; } template void Rectangle::shrinkBy(const T& divider) noexcept { fSize.fWidth /= divider; fSize.fHeight /= divider; } template bool Rectangle::contains(const T& x, const T& y) const noexcept { return (x >= fPos.fX && y >= fPos.fY && x <= fPos.fX+fSize.fWidth && y <= fPos.fY+fSize.fHeight); } template bool Rectangle::contains(const Point& pos) const noexcept { return contains(pos.fX, pos.fY); } template bool Rectangle::containsX(const T& x) const noexcept { return (x >= fPos.fX && x <= fPos.fX + fSize.fWidth); } template bool Rectangle::containsY(const T& y) const noexcept { return (y >= fPos.fY && y <= fPos.fY + fSize.fHeight); } template void Rectangle::draw() { _draw(false); } template void Rectangle::drawOutline() { _draw(true); } template Rectangle& Rectangle::operator=(const Rectangle& rect) noexcept { fPos = rect.fPos; fSize = rect.fSize; return *this; } template Rectangle& Rectangle::operator*=(const T& m) noexcept { fSize.fWidth *= m; fSize.fHeight *= m; return *this; } template Rectangle& Rectangle::operator/=(const T& d) noexcept { fSize.fWidth /= d; fSize.fHeight /= d; return *this; } template bool Rectangle::operator==(const Rectangle& rect) const noexcept { return (fPos == rect.fPos && fSize == rect.fSize); } template bool Rectangle::operator!=(const Rectangle& rect) const noexcept { return !operator==(rect); } template void Rectangle::_draw(const bool isOutline) { glBegin(isOutline ? GL_LINE_LOOP : GL_QUADS); { glTexCoord2f(0.0f, 0.0f); glVertex2i(fPos.fX, fPos.fY); glTexCoord2f(1.0f, 0.0f); glVertex2i(fPos.fX+fSize.fWidth, fPos.fY); glTexCoord2f(1.0f, 1.0f); glVertex2i(fPos.fX+fSize.fWidth, fPos.fY+fSize.fHeight); glTexCoord2f(0.0f, 1.0f); glVertex2i(fPos.fX, fPos.fY+fSize.fHeight); } glEnd(); } // ----------------------------------------------------------------------- // Possible template data types template class Point; template class Point; template class Point; template class Point; template class Size; template class Size; template class Size; template class Size; template class Line; template class Line; template class Line; template class Line; template class Rectangle; template class Rectangle; template class Rectangle; template class Rectangle; // ----------------------------------------------------------------------- END_NAMESPACE_DGL