if key_handler_is_down(^keys, 39) do transform.translation.x -= speed * dt;
if key_handler_is_down(^keys, 37) do transform.translation.x += speed * dt;
if key_handler_is_down(^keys, 187) {
- transform.translation.x += ~~(window_width / 2) * transform.scale.x;
- transform.translation.y += ~~(window_height / 2) * transform.scale.y;
+ bx: f32 = (transform.translation.x - ~~(window_width / 2)) / transform.scale.x;
+ by: f32 = (transform.translation.y - ~~(window_height / 2)) / transform.scale.y;
transform.scale.x *= 1 + scale_speed;
transform.scale.y *= 1 + scale_speed;
- transform.translation.x -= ~~(window_width / 2) * transform.scale.x;
- transform.translation.y -= ~~(window_height / 2) * transform.scale.y;
+ transform.translation.x = bx * transform.scale.x + ~~(window_width / 2);
+ transform.translation.y = by * transform.scale.y + ~~(window_height / 2);
}
if key_handler_is_down(^keys, 189) {
- transform.translation.x += ~~(window_width / 2) * transform.scale.x;
- transform.translation.y += ~~(window_height / 2) * transform.scale.y;
+ bx: f32 = (transform.translation.x - ~~(window_width / 2)) / transform.scale.x;
+ by: f32 = (transform.translation.y - ~~(window_height / 2)) / transform.scale.y;
transform.scale.x /= 1 + scale_speed;
transform.scale.y /= 1 + scale_speed;
- transform.translation.x -= ~~(window_width / 2) * transform.scale.x;
- transform.translation.y -= ~~(window_height / 2) * transform.scale.y;
+ transform.translation.x = bx * transform.scale.x + ~~(window_width / 2);
+ transform.translation.y = by * transform.scale.y + ~~(window_height / 2);
}
}
+push_state :: () -> Iterator(u8) {
+ next :: (done: ^bool) -> (u8, bool) {
+ *done = !*done;
+ if *done do return 0, false;
+
+ gfx.push_matrix();
+
+ return 0, true;
+ }
+
+ close :: (_: rawptr) {
+ gfx.pop_matrix();
+ }
+
+ done := new(bool);
+ *done = true;
+
+ return .{ done, next, close };
+}
+
draw :: () {
bg_color := config.Colors.background;
gl.clearColor(bg_color.r, bg_color.g, bg_color.b, bg_color.a);
window_rectangle := ui.Rectangle.{ 0, 0, ~~window_width, ~~window_height };
- gfx.push_scissor(ui.mouse_state.x, ui.mouse_state.y, 400, 400);
+ // m_pos := gfx.global_renderer->to_world_coordinates(.{ ui.mouse_state.x, ui.mouse_state.y });
+ // gfx.rect(.{ m_pos.x - 10, m_pos.y - 10 }, .{ 720, 720 }, color=config.Colors.primary_dark);
+ // gfx.push_scissor(m_pos.x, m_pos.y, 700, 700);
draw_background_lines(~~window_width, ~~window_height, line_color=config.Colors.background);
gfx.rect(.{ x, y }, .{ w, h }, color=config.Colors.primary);
}
- gfx.pop_scissor();
+ // gfx.pop_scissor();
- gfx.push_matrix();
- gfx.identity();
- draw_menu_bar(window_rectangle);
- gfx.pop_matrix();
+ {
+ gfx.push_matrix();
+ defer gfx.pop_matrix();
+
+ gfx.identity();
+ draw_menu_bar(window_rectangle);
+ }
gfx.flush();
ui.clear_buttons();