From 3ac1120fd40b84507c51f867559bd05adff4eecf Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 21 Apr 2021 13:29:01 +0200 Subject: Use shader for rounded rectangle, improve circle shader --- external/RoundedRectangleShape.cpp | 103 ------------------------- external/RoundedRectangleShape.hpp | 151 ------------------------------------- 2 files changed, 254 deletions(-) delete mode 100644 external/RoundedRectangleShape.cpp delete mode 100644 external/RoundedRectangleShape.hpp (limited to 'external') diff --git a/external/RoundedRectangleShape.cpp b/external/RoundedRectangleShape.cpp deleted file mode 100644 index e56cf9f..0000000 --- a/external/RoundedRectangleShape.cpp +++ /dev/null @@ -1,103 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// 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" -#include - -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) -{ - // Modified by dec05eba - if(std::abs(size.x - mySize.x) > 1.0f || std::abs(size.y - mySize.y) > 1.0f) { - 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 \ No newline at end of file diff --git a/external/RoundedRectangleShape.hpp b/external/RoundedRectangleShape.hpp deleted file mode 100644 index ab1c880..0000000 --- a/external/RoundedRectangleShape.hpp +++ /dev/null @@ -1,151 +0,0 @@ -//////////////////////////////////////////////////////////// -// -// 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. -// -//////////////////////////////////////////////////////////// - -#ifndef ROUNDEDRECTANGLESHAPE_HPP -#define ROUNDEDRECTANGLESHAPE_HPP - -//////////////////////////////////////////////////////////// -// Headers -//////////////////////////////////////////////////////////// -#include - -namespace sf -{ -//////////////////////////////////////////////////////////// -/// \brief Specialized shape representing a rectangle -/// with rounded corners -//////////////////////////////////////////////////////////// -class RoundedRectangleShape : public sf::Shape -{ - public: - //////////////////////////////////////////////////////////// - /// \brief Default constructor - /// - /// \param size Size of the rectangle - /// \param radius Radius for each rounded corner - /// \param cornerPointCount Number of points of each corner - /// - //////////////////////////////////////////////////////////// - explicit RoundedRectangleShape(const Vector2f& size = Vector2f(0, 0), float radius = 0, unsigned int cornerPointCount = 0); - - //////////////////////////////////////////////////////////// - /// \brief Set the size of the rounded rectangle - /// - /// \param size New size of the rounded rectangle - /// - /// \see getSize - /// - //////////////////////////////////////////////////////////// - void setSize(const Vector2f& size); - - //////////////////////////////////////////////////////////// - /// \brief Get the size of the rounded rectangle - /// - /// \return Size of the rounded rectangle - /// - /// \see setSize - /// - //////////////////////////////////////////////////////////// - const Vector2f& getSize() const; - - //////////////////////////////////////////////////////////// - /// \brief Set the radius of the rounded corners - /// - /// \param radius Radius of the rounded corners - /// - /// \see getCornersRadius - /// - //////////////////////////////////////////////////////////// - void setCornersRadius(float radius); - - //////////////////////////////////////////////////////////// - /// \brief Get the radius of the rounded corners - /// - /// \return Radius of the rounded corners - /// - /// \see setCornersRadius - /// - //////////////////////////////////////////////////////////// - float getCornersRadius() const; - - //////////////////////////////////////////////////////////// - /// \brief Set the number of points of each corner - /// - /// \param count New number of points of the rounded rectangle - /// - /// \see getPointCount - /// - //////////////////////////////////////////////////////////// - void setCornerPointCount(unsigned int count); - - //////////////////////////////////////////////////////////// - /// \brief Get the number of points defining the rounded rectangle - /// - /// \return Number of points of the rounded rectangle - /// - //////////////////////////////////////////////////////////// - virtual std::size_t getPointCount() const; - - //////////////////////////////////////////////////////////// - /// \brief Get a point of the rounded rectangle - /// - /// The result is undefined if \a index is out of the valid range. - /// - /// \param index Index of the point to get, in range [0 .. GetPointCount() - 1] - /// - /// \return Index-th point of the shape - /// - //////////////////////////////////////////////////////////// - virtual sf::Vector2f getPoint(std::size_t index) const; - - private: - //////////////////////////////////////////////////////////// - // Member data - //////////////////////////////////////////////////////////// - Vector2f mySize; - float myRadius; - unsigned int myCornerPointCount; -}; -} -#endif // ROUNDEDRECTANGLESHAPE_HPP - -//////////////////////////////////////////////////////////// -/// \class sf::RoundedRectangleShape -/// \ingroup graphics -/// -/// This class inherits all the functions of sf::Transformable -/// (position, rotation, scale, bounds, ...) as well as the -/// functions of sf::Shape (outline, color, texture, ...). -/// -/// Usage example: -/// \code -/// sf::RoundedRectangleShape roundedRectangle; -/// rectangle.setSize(sf::Vector2f(100, 50)); -/// rectangle.setCornersRadius(5); -/// rectangle.setOutlineThickness(5); -/// rectangle.setPosition(10, 20); -/// ... -/// window.draw(rectangle); -/// \endcode -/// -/// \see sf::Shape, sf::CircleShape, sf::ConvexShape -/// -//////////////////////////////////////////////////////////// \ No newline at end of file -- cgit v1.2.3