From d3c4c4cd02fcdd54b8fb87af0297f4887b35701d Mon Sep 17 00:00:00 2001 From: Krzosa Karol Date: Tue, 2 Jul 2024 08:56:29 +0200 Subject: [PATCH] Add line number drawing --- src/text_editor/main.cpp | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/text_editor/main.cpp b/src/text_editor/main.cpp index 34d0f2f..aa998c7 100644 --- a/src/text_editor/main.cpp +++ b/src/text_editor/main.cpp @@ -75,7 +75,7 @@ int main() { InitArena(&PermArena); float font_size = 64; float font_spacing = 1; - Font font = LoadFontEx("C:/Windows/Fonts/times.ttf", (int)font_size, NULL, 250); + Font font = LoadFontEx("C:/Windows/Fonts/consola.ttf", (int)font_size, NULL, 250); Array windows = {}; { @@ -419,12 +419,13 @@ int main() { ForItem(window, windows) { // Draw and layout window overlay - Vec2 mouse = GetMousePosition(); + Vec2 mouse = GetMousePosition(); + Rect2 line_number_rect = {}; { window.rect = window.start_rect; Rect2 horizontal_bar_rect = CutBottom(&window.rect, 10); Rect2 vertical_bar_rect = CutRight(&window.rect, 10); - Rect2 line_numbers = CutLeft(&window.rect, 50); + line_number_rect = CutLeft(&window.rect, MeasureString(window.font, "1234", window.font_size, window.font_spacing).x); DrawRectangleRec(ToRectangle(window.rect), WHITE); @@ -489,7 +490,9 @@ int main() { // Mouse selection if (!window.mouse_selecting_hori_bar && !window.mouse_selecting_vert_bar) { - bool mouse_in_window = CheckCollisionPointRec(mouse, ToRectangle(window.rect)); + bool mouse_in_window = CheckCollisionPointRec(mouse, ToRectangle(window.rect)) || + CheckCollisionPointRec(mouse, ToRectangle(line_number_rect)); + // @todo: fix scrolling bug when selecting on left outside the frame!! if (!window.mouse_selecting && mouse_in_window) { SetMouseCursor(MOUSE_CURSOR_IBEAM); } @@ -648,6 +651,22 @@ int main() { } EndScissorMode(); + + // Draw line numbers + { + Rect2 rect = line_number_rect; + BeginScissorMode((int)rect.min.x, (int)rect.min.y, (int)(rect.max.x - rect.min.x), (int)(rect.max.y - rect.min.y)); + for (int64_t line = visible_line_range.min; line < visible_line_range.max; line += 1) { + if (line < 0 || line >= window.layout.rows.len) continue; + LayoutRow &row = window.layout.rows[line]; + + Vec2 pos = {rect.min.x, row.rect.min.y + rect.min.y - window.scroll.y}; + + String line_num_string = Format(FrameArena, "%lld", (long long)line); + DrawTextEx(font, line_num_string.data, pos, font_size, font_spacing, LIGHTGRAY); + } + EndScissorMode(); + } } Dbg_Draw();