From 4cb892133f2a20dc34b25186ae403b6356aea748 Mon Sep 17 00:00:00 2001 From: Krzosa Karol Date: Tue, 23 Jul 2024 17:14:11 +0200 Subject: [PATCH] Only one infobar --- src/text_editor/commands.cpp | 11 +++++++---- src/text_editor/commands_window.cpp | 2 +- src/text_editor/lua_api.cpp | 4 ++-- src/text_editor/text_editor.cpp | 28 ++++++++++++++++++++-------- src/text_editor/text_editor.h | 12 ++++-------- src/text_editor/window.cpp | 5 +++-- src/text_editor/window_draw.cpp | 15 --------------- 7 files changed, 37 insertions(+), 40 deletions(-) diff --git a/src/text_editor/commands.cpp b/src/text_editor/commands.cpp index e4adca5..4f4fcd1 100644 --- a/src/text_editor/commands.cpp +++ b/src/text_editor/commands.cpp @@ -205,14 +205,17 @@ Range EncloseWord(Buffer &buffer, Int pos) { } void HandleGlobalCommands() { + Window *command_window = GetWindow(CommandWindowID); + if (!IsActive(command_window)) { + command_window->visible = false; + } if (CtrlPress(KEY_P)) { - Window *window = GetWindow(CommandWindowID); - if (window->visible) { + if (command_window->visible) { SetActiveWindow(LastActiveWindow); } else { - SetActiveWindow(window->id); + SetActiveWindow(command_window->id); } - window->visible = !window->visible; + command_window->visible = !command_window->visible; } if (CtrlPress(KEY_ONE)) { diff --git a/src/text_editor/commands_window.cpp b/src/text_editor/commands_window.cpp index f382a34..3748bf4 100644 --- a/src/text_editor/commands_window.cpp +++ b/src/text_editor/commands_window.cpp @@ -276,7 +276,7 @@ void HandleActiveWindowBindings(Window *window) { Range range = GetLineRange(*buffer, line); String16 string = GetString(*buffer, range); EvalString(string); - } else if (window->banish_new_lines == false && Press(KEY_ENTER)) { + } else if (Press(KEY_ENTER)) { Command_Replace(&view, L"\n"); } diff --git a/src/text_editor/lua_api.cpp b/src/text_editor/lua_api.cpp index 12fec58..f17ab0e 100644 --- a/src/text_editor/lua_api.cpp +++ b/src/text_editor/lua_api.cpp @@ -5,7 +5,7 @@ int LuaOpenFile(lua_State *L) { String string = text; Buffer *buffer = OpenFile(string); View *view = CreateView(buffer->id); - Window *window = GetWindow({1}); + Window *window = GetWindow(LastActiveWindow); AddView(window, view->id); window->active_view = view->id; SetActiveWindow(window->id); @@ -27,6 +27,6 @@ void EvalString(String16 string16) { if (luaL_dostring(LuaState, string.data) != LUA_OK) { // @todo: const char *text = lua_tostring(LuaState, -1); - printf("lua error: %s", text); + printf("lua error: %s\n", text); } } \ No newline at end of file diff --git a/src/text_editor/text_editor.cpp b/src/text_editor/text_editor.cpp index 6ddec51..9690a6c 100644 --- a/src/text_editor/text_editor.cpp +++ b/src/text_editor/text_editor.cpp @@ -29,8 +29,8 @@ #include "lua_api.cpp" /* -- Open file (utf8->utf16), process determine line endings, tabs to spaces?, Save file (utf16->utf8) - - line endings +- Save file (utf16->utf8) + - reuse buffers!! - resize windows - command window - maybe use lua and have there be lua commands that you choose with cursor @@ -40,8 +40,6 @@ - We can actually combine this with command window and lua, it's just going to be a buffer of - open "asd/asd/asd/asd" -- Make only one infobar!! - - Ctrl + F - word completion @@ -120,7 +118,6 @@ int main(void) { Window *w = CreateWindow(); w->draw_scrollbar = false; w->draw_line_numbers = false; - w->draw_infobar = false; w->visible = false; Buffer *b = CreateBuffer(sys_allocator); View *v = CreateView(b->id); @@ -134,13 +131,13 @@ int main(void) { FrameID += 1; Rect2I screen_rect = GetScreenRect(); + Rect2I infobar_rect = CutBottom(&screen_rect, (Int)MenuFontSize); float line_numbers_size = MeasureTextEx(MainFont, "12345", (float)FontSize, (float)FontSpacing).x; { int i = 1; Windows[i].total_rect = CutLeft(&screen_rect, (Int)((double)GetSize(screen_rect).x * 0.33)); Windows[i].document_rect = Windows[i].total_rect; if (Windows[i].draw_scrollbar) Windows[i].scrollbar_rect = CutRight(&Windows[i].document_rect, 10); - if (Windows[i].draw_infobar) Windows[i].infobar_rect = CutBottom(&Windows[i].document_rect, (Int)MenuFontSize); if (Windows[i].draw_line_numbers) Windows[i].line_numbers_rect = CutLeft(&Windows[i].document_rect, (Int)line_numbers_size); } { @@ -148,7 +145,6 @@ int main(void) { Windows[i].total_rect = CutLeft(&screen_rect, (Int)((double)GetSize(screen_rect).x * 0.5)); Windows[i].document_rect = Windows[i].total_rect; if (Windows[i].draw_scrollbar) Windows[i].scrollbar_rect = CutRight(&Windows[i].document_rect, 10); - if (Windows[i].draw_infobar) Windows[i].infobar_rect = CutBottom(&Windows[i].document_rect, (Int)MenuFontSize); if (Windows[i].draw_line_numbers) Windows[i].line_numbers_rect = CutLeft(&Windows[i].document_rect, (Int)line_numbers_size); } { @@ -156,7 +152,6 @@ int main(void) { Windows[i].total_rect = CutLeft(&screen_rect, (Int)((double)GetSize(screen_rect).x * 1.0)); Windows[i].document_rect = Windows[i].total_rect; if (Windows[i].draw_scrollbar) Windows[i].scrollbar_rect = CutRight(&Windows[i].document_rect, 10); - if (Windows[i].draw_infobar) Windows[i].infobar_rect = CutBottom(&Windows[i].document_rect, (Int)MenuFontSize); if (Windows[i].draw_line_numbers) Windows[i].line_numbers_rect = CutLeft(&Windows[i].document_rect, (Int)line_numbers_size); } { @@ -186,6 +181,23 @@ int main(void) { DrawWindow(window); } SetMouseCursor(); + + { + Rect2I r = infobar_rect; + DrawRectangleRec(ToRectangle(r), ColorScrollbarBackground); + { + Window *window = GetActiveWindow(); + View *view = GetActiveView(window); + Buffer *buffer = GetBuffer(view->buffer_id); + Vec2 p = ToVec2(r.min); + Scratch scratch; + Caret caret = view->carets[0]; + XY xy = PosToXY(*buffer, GetFront(caret)); + String s = Format(scratch, "-- line: %lld col: %lld", (long long)xy.line + 1ll, (long long)xy.col + 1ll); + String16 string = ToString16(scratch, s); + DrawString(MenuFont, string, p, MenuFontSize, 1, ColorText); + } + } EndDrawing(); } CloseWindow(); diff --git a/src/text_editor/text_editor.h b/src/text_editor/text_editor.h index 80defd9..f515c3c 100644 --- a/src/text_editor/text_editor.h +++ b/src/text_editor/text_editor.h @@ -50,7 +50,6 @@ struct Window { Rect2I total_rect; Rect2I scrollbar_rect; - Rect2I infobar_rect; Rect2I line_numbers_rect; Rect2I document_rect; @@ -62,9 +61,7 @@ struct Window { bool mouse_selecting : 1; bool draw_scrollbar : 1; bool draw_line_numbers : 1; - bool draw_infobar : 1; bool visible : 1; - bool banish_new_lines : 1; // @todo: custom new line handler? custom vertical handler! (choosing options with cursor) }; }; @@ -75,10 +72,6 @@ struct Scroller { Int line_count; }; -Rect2I GetVisibleCells(Window &window); -void AfterEdit(View *view, Array edits); -Scroller ComputeScrollerRect(Window &window); - WindowID WindowIDs = {0}; BufferID BufferIDs = {0}; ViewID ViewIDs = {0}; @@ -135,4 +128,7 @@ inline View *GetActiveView(Window *window) { else return GetView(window->active_view); } -void EvalString(String16 string16); \ No newline at end of file +void EvalString(String16 string16); +Rect2I GetVisibleCells(Window &window); +void AfterEdit(View *view, Array edits); +Scroller ComputeScrollerRect(Window &window); diff --git a/src/text_editor/window.cpp b/src/text_editor/window.cpp index 7d13448..dc103a8 100644 --- a/src/text_editor/window.cpp +++ b/src/text_editor/window.cpp @@ -3,7 +3,6 @@ Window *CreateWindow() { w->visible = true; w->draw_scrollbar = true; w->draw_line_numbers = true; - w->draw_infobar = true; w->id = AllocWindowID(); return w; } @@ -49,7 +48,9 @@ Array GetWindowZOrder(Allocator allocator) { void SetActiveWindow(WindowID window) { if (LastFrameIDWhenSwitchedActiveWindow != FrameID) { - LastActiveWindow = ActiveWindow; + if (ActiveWindow.id != CommandWindowID.id) { + LastActiveWindow = ActiveWindow; + } ActiveWindow = window; LastFrameIDWhenSwitchedActiveWindow = FrameID; } diff --git a/src/text_editor/window_draw.cpp b/src/text_editor/window_draw.cpp index 45b8b0d..2dffd7e 100644 --- a/src/text_editor/window_draw.cpp +++ b/src/text_editor/window_draw.cpp @@ -214,21 +214,6 @@ void DrawWindow(Window &window) { EndScissorMode(); } - // Draw info bar - if (window.draw_infobar) { - Rect2I r = window.infobar_rect; - DrawRectangleRec(ToRectangle(r), ColorScrollbarBackground); - { - Vec2 p = ToVec2(r.min); - Scratch scratch; - Caret caret = view.carets[0]; - XY xy = PosToXY(*buffer, GetFront(caret)); - String s = Format(scratch, "-- line: %lld col: %lld", (long long)xy.line + 1ll, (long long)xy.col + 1ll); - String16 string = ToString16(scratch, s); - DrawString(MenuFont, string, p, MenuFontSize, 1, ColorText); - } - } - if (!IsActive(&window)) { DrawRectangleRec(ToRectangle(window.total_rect), {0, 0, 0, 30}); }