1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
#include "../../include/gui/Utils.hpp"
#include <mglpp/window/Window.hpp>
#include <mglpp/graphics/Rectangle.hpp>
namespace gsr {
static double frame_delta_seconds = 1.0;
// TODO: Use vertices to make it one draw call
void draw_rectangle_outline(mgl::Window &window, mgl::vec2f pos, mgl::vec2f size, mgl::Color color, float border_size) {
pos = pos.floor();
size = size.floor();
border_size = (int)border_size;
// Green line at top
{
mgl::Rectangle rect({ size.x, border_size });
rect.set_position(pos);
rect.set_color(color);
window.draw(rect);
}
// Green line at bottom
{
mgl::Rectangle rect({ size.x, border_size });
rect.set_position(pos + mgl::vec2f(0.0f, size.y - border_size));
rect.set_color(color);
window.draw(rect);
}
// Green line at left
{
mgl::Rectangle rect({ border_size, size.y - border_size * 2 });
rect.set_position(pos + mgl::vec2f(0, border_size));
rect.set_color(color);
window.draw(rect);
}
// Green line at right
{
mgl::Rectangle rect({ border_size, size.y - border_size * 2 });
rect.set_position(pos + mgl::vec2f(size.x - border_size, border_size));
rect.set_color(color);
window.draw(rect);
}
}
double get_frame_delta_seconds() {
return frame_delta_seconds;
}
void set_frame_delta_seconds(double frame_delta) {
frame_delta_seconds = frame_delta;
}
mgl::vec2f scale_keep_aspect_ratio(mgl::vec2f from, mgl::vec2f to) {
if(std::abs(from.x) <= 0.0001f || std::abs(from.y) <= 0.0001f)
return {0.0f, 0.0f};
const double height_to_width_ratio = (double)from.y / (double)from.x;
from.x = to.x;
from.y = from.x * height_to_width_ratio;
if(from.y > to.y) {
const double width_height_ratio = (double)from.x / (double)from.y;
from.y = to.y;
from.x = from.y * width_height_ratio;
}
return from;
}
}
|