initial commit
This commit is contained in:
107
support/src/RoundedRectangleShape.cpp
Normal file
107
support/src/RoundedRectangleShape.cpp
Normal file
@@ -0,0 +1,107 @@
|
||||
////////////////////////////////////////////////////////////
|
||||
//
|
||||
// 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)
|
||||
Reference in New Issue
Block a user