aboutsummaryrefslogtreecommitdiff
path: root/src/gui/Image.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/Image.cpp')
-rw-r--r--src/gui/Image.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/gui/Image.cpp b/src/gui/Image.cpp
new file mode 100644
index 0000000..b6cec9a
--- /dev/null
+++ b/src/gui/Image.cpp
@@ -0,0 +1,39 @@
+#include "../../include/gui/Image.hpp"
+#include "../../include/gui/Utils.hpp"
+
+#include <mglpp/window/Window.hpp>
+#include <mglpp/graphics/Texture.hpp>
+
+namespace gsr {
+ Image::Image(mgl::Texture *texture, mgl::vec2f size, ScaleBehavior scale_behavior) :
+ sprite(texture), size(size), scale_behavior(scale_behavior)
+ {
+
+ }
+
+ bool Image::on_event(mgl::Event&, mgl::Window&, mgl::vec2f) {
+ return true;
+ }
+
+ void Image::draw(mgl::Window &window, mgl::vec2f offset) {
+ if(!visible)
+ return;
+
+ sprite.set_size(get_size());
+ sprite.set_position((position + offset).floor());
+ window.draw(sprite);
+ }
+
+ mgl::vec2f Image::get_size() {
+ if(!visible || !sprite.get_texture())
+ return {0.0f, 0.0f};
+
+ const mgl::vec2f sprite_size = sprite.get_texture()->get_size().to_vec2f();
+ if(size.x < 0.001f && size.y < 0.001f)
+ return sprite_size;
+ else if(scale_behavior == ScaleBehavior::SCALE)
+ return scale_keep_aspect_ratio(sprite_size, size);
+ else
+ return clamp_keep_aspect_ratio(sprite_size, size);
+ }
+} \ No newline at end of file