aboutsummaryrefslogtreecommitdiff
path: root/src/RoundedRectangle.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-04-21 13:29:01 +0200
committerdec05eba <dec05eba@protonmail.com>2021-04-21 13:29:01 +0200
commit3ac1120fd40b84507c51f867559bd05adff4eecf (patch)
tree32a3d7e037dd0fa07f764e563cfaa304470ad7f1 /src/RoundedRectangle.cpp
parent0f151afa58c1f725a652eaa4444ce3e2b2509770 (diff)
Use shader for rounded rectangle, improve circle shader
Diffstat (limited to 'src/RoundedRectangle.cpp')
-rw-r--r--src/RoundedRectangle.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/RoundedRectangle.cpp b/src/RoundedRectangle.cpp
new file mode 100644
index 0000000..6b956e8
--- /dev/null
+++ b/src/RoundedRectangle.cpp
@@ -0,0 +1,46 @@
+#include "../include/RoundedRectangle.hpp"
+#include <SFML/Graphics/Shader.hpp>
+#include <SFML/Graphics/RenderWindow.hpp>
+#include <assert.h>
+
+namespace QuickMedia {
+ RoundedRectangle::RoundedRectangle(sf::Vector2f size, float radius, sf::Color color, sf::Shader *rounded_rectangle_shader) : radius(radius), pos(0.0f, 0.0f), size(size), rounded_rectangle_shader(rounded_rectangle_shader) {
+ assert(rounded_rectangle_shader);
+ vertices[0].color = color;
+ vertices[1].color = color;
+ vertices[2].color = color;
+ vertices[3].color = color;
+
+ vertices[0].texCoords = sf::Vector2f(0.0f, 0.0f);
+ vertices[1].texCoords = sf::Vector2f(1.0f, 0.0f);
+ vertices[2].texCoords = sf::Vector2f(1.0f, 1.0f);
+ vertices[3].texCoords = sf::Vector2f(0.0f, 1.0f);
+ }
+
+ void RoundedRectangle::set_position(sf::Vector2f pos) {
+ this->pos = pos;
+ vertices[0].position = pos;
+ vertices[1].position = pos + sf::Vector2f(size.x, 0.0f);
+ vertices[2].position = pos + sf::Vector2f(size.x, size.y);
+ vertices[3].position = pos + sf::Vector2f(0.0f, size.y);
+ }
+
+ void RoundedRectangle::set_size(sf::Vector2f size) {
+ this->size = size;
+ set_position(pos);
+ }
+
+ sf::Vector2f RoundedRectangle::get_position() const {
+ return pos;
+ }
+
+ sf::Vector2f RoundedRectangle::get_size() const {
+ return size;
+ }
+
+ void RoundedRectangle::draw(sf::RenderWindow &window) {
+ rounded_rectangle_shader->setUniform("resolution", size);
+ rounded_rectangle_shader->setUniform("radius", radius);
+ window.draw(vertices, 4, sf::Quads, rounded_rectangle_shader);
+ }
+} \ No newline at end of file