Files
cpp-build-system/support/src/RoundedRectangleShape.cpp
Scott E. Graves 92e3e495ce
Some checks failed
sgraves/cpp-build-system_mac/pipeline/head There was a failure building this commit
sgraves/cpp-build-system/pipeline/head There was a failure building this commit
initial commit
2025-10-17 07:44:16 -05:00

108 lines
3.4 KiB
C++

////////////////////////////////////////////////////////////
//
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the
// use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it
// freely, subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
//
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
// Headers
////////////////////////////////////////////////////////////
#include "RoundedRectangleShape.hpp"
#if defined(PROJECT_ENABLE_SFML)
#include <cmath>
namespace sf {
////////////////////////////////////////////////////////////
RoundedRectangleShape::RoundedRectangleShape(const Vector2f &size, float radius,
unsigned int cornerPointCount) {
mySize = size;
myRadius = radius;
myCornerPointCount = cornerPointCount;
update();
}
////////////////////////////////////////////////////////////
void RoundedRectangleShape::setSize(const Vector2f &size) {
mySize = size;
update();
}
////////////////////////////////////////////////////////////
const Vector2f &RoundedRectangleShape::getSize() const { return mySize; }
////////////////////////////////////////////////////////////
void RoundedRectangleShape::setCornersRadius(float radius) {
myRadius = radius;
update();
}
////////////////////////////////////////////////////////////
float RoundedRectangleShape::getCornersRadius() const { return myRadius; }
////////////////////////////////////////////////////////////
void RoundedRectangleShape::setCornerPointCount(unsigned int count) {
myCornerPointCount = count;
update();
}
////////////////////////////////////////////////////////////
std::size_t RoundedRectangleShape::getPointCount() const {
return myCornerPointCount * 4;
}
////////////////////////////////////////////////////////////
sf::Vector2f RoundedRectangleShape::getPoint(std::size_t index) const {
if (index >= myCornerPointCount * 4)
return sf::Vector2f(0, 0);
float deltaAngle = 90.0f / (myCornerPointCount - 1);
sf::Vector2f center;
unsigned int centerIndex = index / myCornerPointCount;
static const float pi = 3.141592654f;
switch (centerIndex) {
case 0:
center.x = mySize.x - myRadius;
center.y = myRadius;
break;
case 1:
center.x = myRadius;
center.y = myRadius;
break;
case 2:
center.x = myRadius;
center.y = mySize.y - myRadius;
break;
case 3:
center.x = mySize.x - myRadius;
center.y = mySize.y - myRadius;
break;
}
return sf::Vector2f(
myRadius * cos(deltaAngle * (index - centerIndex) * pi / 180) + center.x,
-myRadius * sin(deltaAngle * (index - centerIndex) * pi / 180) +
center.y);
}
} // namespace sf
#endif // defined(PROJECT_ENABLE_SFML)