correct scaling
authorBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 8 Jul 2021 03:32:11 +0000 (22:32 -0500)
committerBrendan Hansen <brendan.f.hansen@gmail.com>
Thu, 8 Jul 2021 03:32:11 +0000 (22:32 -0500)
src/main.onyx

index 68202a1305351b373a952719710087ea79febae8..90e221f0a76cc4f4391f762a5cf532390aefa0d8 100644 (file)
@@ -175,27 +175,47 @@ update :: (dt: f32) {
     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);
@@ -203,7 +223,9 @@ draw :: () {
 
     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);
 
@@ -217,12 +239,15 @@ draw :: () {
         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();