Browse Source

Don't use SCREEN_WIDTH in dynamic camera code

rexim 2 years ago
parent
commit
f3e28131a5
2 changed files with 15 additions and 9 deletions
  1. 3 4
      src/editor.c
  2. 12 5
      src/file_browser.c

+ 3 - 4
src/editor.c

@@ -314,8 +314,7 @@ void editor_render(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer
             max_line_len = 1000.0f;
         }
 
-        // TODO: SCREEN_WIDTH has to be variable cause window my resize
-        float target_scale = SCREEN_WIDTH / max_line_len;
+        float target_scale = w/3/(max_line_len*0.75); // TODO: division by 0
 
         Vec2f target = cursor_pos;
         float offset = 0.0f;
@@ -323,9 +322,9 @@ void editor_render(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer
         if (target_scale > 3.0f) {
             target_scale = 3.0f;
         } else {
-            offset = cursor_pos.x - SCREEN_WIDTH/sr->camera_scale;
+            offset = cursor_pos.x - w/3/sr->camera_scale;
             if (offset < 0.0f) offset = 0.0f;
-            target = vec2f(SCREEN_WIDTH/sr->camera_scale + offset, cursor_pos.y);
+            target = vec2f(w/3/sr->camera_scale + offset, cursor_pos.y);
         }
 
         sr->camera_vel = vec2f_mul(

+ 12 - 5
src/file_browser.c

@@ -95,18 +95,25 @@ void fb_render(const File_Browser *fb, SDL_Window *window, Free_Glyph_Atlas *atl
 
     // Update camera
     {
-        float target_scale = 3.0f;
-        if (max_line_len > 0.0f) {
-            target_scale = SCREEN_WIDTH / max_line_len;
+        if (max_line_len > 1000.0f) {
+            max_line_len = 1000.0f;
         }
 
+        float target_scale = w/3/(max_line_len*0.75); // TODO: division by 0
+
+        Vec2f target = cursor_pos;
+        float offset = 0.0f;
+
         if (target_scale > 3.0f) {
             target_scale = 3.0f;
+        } else {
+            offset = cursor_pos.x - w/3/sr->camera_scale;
+            if (offset < 0.0f) offset = 0.0f;
+            target = vec2f(w/3/sr->camera_scale + offset, cursor_pos.y);
         }
 
-
         sr->camera_vel = vec2f_mul(
-                             vec2f_sub(cursor_pos, sr->camera_pos),
+                             vec2f_sub(target, sr->camera_pos),
                              vec2fs(2.0f));
         sr->camera_scale_vel = (target_scale - sr->camera_scale) * 2.0f;