From 620bf45f439145854b34720b2d9d9dab93d757b2 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Wed, 15 Mar 2023 11:06:53 +0000 Subject: [PATCH] HackStudio: Migrate execution-position indicator to TextEditor API --- Userland/DevTools/HackStudio/Editor.cpp | 16 ++++++++++------ Userland/DevTools/HackStudio/Editor.h | 1 + 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Userland/DevTools/HackStudio/Editor.cpp b/Userland/DevTools/HackStudio/Editor.cpp index 66eefc1239..1ca6c0ec28 100644 --- a/Userland/DevTools/HackStudio/Editor.cpp +++ b/Userland/DevTools/HackStudio/Editor.cpp @@ -95,6 +95,12 @@ Editor::Editor() remove_breakpoint(line_index); }).release_value_but_fixme_should_propagate_errors(); + m_execution_indicator_id = register_gutter_indicator( + [&](auto& painter, Gfx::IntRect rect, size_t) { + auto const& icon = current_position_icon_bitmap(); + painter.draw_scaled_bitmap(rect, icon, icon.rect()); + }).release_value_but_fixme_should_propagate_errors(); + if (Config::read_string("HackStudio"sv, "Global"sv, "DocumentationSearchPaths"sv).is_empty()) { Config::write_string("HackStudio"sv, "Global"sv, "DocumentationSearchPaths"sv, "[\"/usr/share/man/man2\", \"/usr/share/man/man3\"]"sv); } @@ -158,11 +164,6 @@ void Editor::paint_event(GUI::PaintEvent& event) size_t first_visible_line = text_position_at(event.rect().top_left()).line(); size_t last_visible_line = text_position_at(event.rect().bottom_right()).line(); - if (execution_position().has_value()) { - auto const& icon = current_position_icon_bitmap(); - painter.blit(gutter_icon_rect(execution_position().value()).top_left(), icon, icon.rect()); - } - if (wrapper().git_repo()) { for (auto& hunk : wrapper().hunks()) { auto start_line = hunk.target_start_line; @@ -452,9 +453,11 @@ void Editor::navigate_to_include_if_available(DeprecatedString path) void Editor::set_execution_position(size_t line_number) { + if (execution_position().has_value()) + remove_gutter_indicator(m_execution_indicator_id, execution_position().value()); + add_gutter_indicator(m_execution_indicator_id, line_number); code_document().set_execution_position(line_number); scroll_position_into_view({ line_number, 0 }); - update(gutter_icon_rect(line_number)); } void Editor::clear_execution_position() @@ -464,6 +467,7 @@ void Editor::clear_execution_position() } size_t previous_position = execution_position().value(); code_document().clear_execution_position(); + remove_gutter_indicator(m_execution_indicator_id, previous_position); update(gutter_icon_rect(previous_position)); } diff --git a/Userland/DevTools/HackStudio/Editor.h b/Userland/DevTools/HackStudio/Editor.h index b79703acc7..cffaa472e2 100644 --- a/Userland/DevTools/HackStudio/Editor.h +++ b/Userland/DevTools/HackStudio/Editor.h @@ -124,6 +124,7 @@ private: bool m_use_semantic_syntax_highlighting { false }; GutterIndicatorID m_breakpoint_indicator_id; + GutterIndicatorID m_execution_indicator_id; }; }