Browse Source

Fix temporarily broken epic camera action

rexim 2 years ago
parent
commit
f223bd497b
1 changed files with 19 additions and 85 deletions
  1. 19 85
      src/editor.c

+ 19 - 85
src/editor.c

@@ -193,9 +193,6 @@ const char *editor_line_starts_with_one_of(Editor *e, size_t row, size_t col, co
     return NULL;
 }
 
-
-
-
 void editor_render(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer *sr, Editor *editor)
 {
     int w, h;
@@ -206,8 +203,7 @@ void editor_render(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer
     sr->resolution = vec2f(w, h);
     sr->time = (float) SDL_GetTicks() / 1000.0f;
 
-    // Render text
-#if 1
+    // Render selection
     {
         simple_renderer_set_shader(sr, SHADER_FOR_COLOR);
         if (editor->selection) {
@@ -245,98 +241,37 @@ void editor_render(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer
             }
         }
         simple_renderer_flush(sr);
+    }
 
+    // Render text
+    {
         simple_renderer_set_shader(sr, SHADER_FOR_TEXT);
         for (size_t i = 0; i < editor->tokens.count; ++i) {
             Token token = editor->tokens.items[i];
             Vec2f pos = token.position;
             Vec4f color = vec4fs(1);
             switch (token.kind) {
-            case TOKEN_PREPROC: color = hex_to_vec4f(0x95A99FFF); break;
-            case TOKEN_KEYWORD: color = hex_to_vec4f(0xFFDD33FF); break;
-            case TOKEN_COMMENT: color = hex_to_vec4f(0xCC8C3CFF); break;
-            case TOKEN_STRING:  color = hex_to_vec4f(0x73c936ff); break;
-            default: {}
+            case TOKEN_PREPROC:
+                color = hex_to_vec4f(0x95A99FFF);
+                break;
+            case TOKEN_KEYWORD:
+                color = hex_to_vec4f(0xFFDD33FF);
+                break;
+            case TOKEN_COMMENT:
+                color = hex_to_vec4f(0xCC8C3CFF);
+                break;
+            case TOKEN_STRING:
+                color = hex_to_vec4f(0x73c936ff);
+                break;
+            default:
+            {}
             }
             free_glyph_atlas_render_line_sized(atlas, sr, token.text, token.text_len, &pos, color);
-        }
-        simple_renderer_flush(sr);
-    }
-#else
-    {
-        simple_renderer_set_shader(sr, SHADER_FOR_COLOR);
-        if (editor->selection) {
-            for (size_t row = 0; row < editor->lines.count; ++row) {
-                size_t select_begin_chr = editor->select_begin;
-                size_t select_end_chr = editor->cursor;
-                if (select_begin_chr > select_end_chr) {
-                    SWAP(size_t, select_begin_chr, select_end_chr);
-                }
-
-                Line line_chr = editor->lines.items[row];
-
-                if (select_begin_chr < line_chr.begin) {
-                    select_begin_chr = line_chr.begin;
-                }
-
-                if (select_end_chr > line_chr.end) {
-                    select_end_chr = line_chr.end;
-                }
-
-                if (select_begin_chr <= select_end_chr) {
-                    Vec2f select_begin_scr = vec2f(0, -(float)row * FREE_GLYPH_FONT_SIZE);
-                    free_glyph_atlas_measure_line_sized(
-                        atlas, editor->data.items + line_chr.begin, select_begin_chr - line_chr.begin,
-                        &select_begin_scr);
-
-                    Vec2f select_end_scr = select_begin_scr;
-                    free_glyph_atlas_measure_line_sized(
-                        atlas, editor->data.items + select_begin_chr, select_end_chr - select_begin_chr,
-                        &select_end_scr);
-
-                    Vec4f selection_color = vec4f(.25, .25, .25, 1);
-                    simple_renderer_solid_rect(sr, select_begin_scr, vec2f(select_end_scr.x - select_begin_scr.x, FREE_GLYPH_FONT_SIZE), selection_color);
-                }
-            }
-        }
-        simple_renderer_flush(sr);
-
-        simple_renderer_set_shader(sr, SHADER_FOR_TEXT);
-        for (size_t row = 0; row < editor->lines.count; ++row) {
-            Line line = editor->lines.items[row];
-
-            const Vec2f begin = vec2f(0, -(float)row * FREE_GLYPH_FONT_SIZE);
-            Vec2f end = begin;
-
-            size_t col = 0;
-            while (line.begin + col < line.end) {
-                const char *keyword = editor_line_starts_with_one_of(editor, row, col, keywords, keywords_count);
-                if (keyword != NULL) {
-                    size_t keyword_len = strlen(keyword);
-                    free_glyph_atlas_render_line_sized(
-                        atlas, sr, editor->data.items + line.begin + col, keyword_len,
-                        &end,
-                        vec4f(1, 1, 0, 1));
-                    col += keyword_len;
-                } else {
-                    free_glyph_atlas_render_line_sized(
-                        atlas, sr, editor->data.items + line.begin + col, 1,
-                        &end,
-                        vec4fs(1));
-                    col += 1;
-                }
-            }
-
             // TODO: the max_line_len should be calculated based on what's visible on the screen right now
-            float line_len = fabsf(end.x - begin.x);
-            if (line_len > max_line_len) {
-                max_line_len = line_len;
-            }
+            if (max_line_len < pos.x) max_line_len = pos.x;
         }
-
         simple_renderer_flush(sr);
     }
-#endif
 
     Vec2f cursor_pos = vec2fs(0.0f);
     {
@@ -374,7 +309,6 @@ void editor_render(SDL_Window *window, Free_Glyph_Atlas *atlas, Simple_Renderer
     // Update camera
     {
         float target_scale = 3.0f;
-        max_line_len = 1000.0f; // TODO: fix temporary epic zoom camera action
         if (max_line_len > 1000.0f) {
             max_line_len = 1000.0f;
         }