diff --git a/DevTools/HackStudio/Editor.cpp b/DevTools/HackStudio/Editor.cpp index 073658fecf..fe0666d48f 100644 --- a/DevTools/HackStudio/Editor.cpp +++ b/DevTools/HackStudio/Editor.cpp @@ -1,9 +1,44 @@ #include "Editor.h" #include "EditorWrapper.h" +#include +#include + +EditorWrapper& Editor::wrapper() +{ + return static_cast(*parent()); +} +const EditorWrapper& Editor::wrapper() const +{ + return static_cast(*parent()); +} void Editor::focusin_event(CEvent& event) { + wrapper().set_editor_has_focus({}, true); if (on_focus) on_focus(); GTextEditor::focusin_event(event); } + +void Editor::focusout_event(CEvent & event) +{ + wrapper().set_editor_has_focus({}, false); + GTextEditor::focusout_event(event); +} + +void Editor::paint_event(GPaintEvent& event) +{ + GTextEditor::paint_event(event); + + if (is_focused()) { + GPainter painter(*this); + painter.add_clip_rect(event.rect()); + + auto rect = frame_inner_rect(); + if (vertical_scrollbar().is_visible()) + rect.set_width(rect.width() - vertical_scrollbar().width()); + if (horizontal_scrollbar().is_visible()) + rect.set_height(rect.height() - horizontal_scrollbar().height()); + painter.draw_rect(rect, Color::from_rgb(0x955233)); + } +} diff --git a/DevTools/HackStudio/Editor.h b/DevTools/HackStudio/Editor.h index 349984eaab..92858b9e69 100644 --- a/DevTools/HackStudio/Editor.h +++ b/DevTools/HackStudio/Editor.h @@ -2,6 +2,8 @@ #include +class EditorWrapper; + class Editor final : public GTextEditor { C_OBJECT(Editor) public: @@ -9,8 +11,13 @@ public: Function on_focus; + EditorWrapper& wrapper(); + const EditorWrapper& wrapper() const; + private: - virtual void focusin_event(CEvent& event) override; + virtual void focusin_event(CEvent&) override; + virtual void focusout_event(CEvent&) override; + virtual void paint_event(GPaintEvent&) override; Editor(GWidget* parent) : GTextEditor(GTextEditor::MultiLine, parent) diff --git a/DevTools/HackStudio/EditorWrapper.cpp b/DevTools/HackStudio/EditorWrapper.cpp index 452b16c6a6..4a45d2b65d 100644 --- a/DevTools/HackStudio/EditorWrapper.cpp +++ b/DevTools/HackStudio/EditorWrapper.cpp @@ -20,7 +20,6 @@ EditorWrapper::EditorWrapper(GWidget* parent) label_wrapper->layout()->set_margins({ 2, 0, 2, 0 }); m_filename_label = GLabel::construct("(Untitled)", label_wrapper); - m_filename_label->set_font(Font::default_bold_font()); m_filename_label->set_text_alignment(TextAlignment::CenterLeft); m_filename_label->set_size_policy(SizePolicy::Fill, SizePolicy::Fixed); m_filename_label->set_preferred_size(0, 14); @@ -61,3 +60,8 @@ EditorWrapper::EditorWrapper(GWidget* parent) EditorWrapper::~EditorWrapper() { } + +void EditorWrapper::set_editor_has_focus(Badge, bool focus) +{ + m_filename_label->set_font(focus ? Font::default_bold_font() : Font::default_font()); +} diff --git a/DevTools/HackStudio/EditorWrapper.h b/DevTools/HackStudio/EditorWrapper.h index b0b932525f..2180d8da73 100644 --- a/DevTools/HackStudio/EditorWrapper.h +++ b/DevTools/HackStudio/EditorWrapper.h @@ -15,6 +15,8 @@ public: GLabel& filename_label() { return *m_filename_label; } + void set_editor_has_focus(Badge, bool); + private: explicit EditorWrapper(GWidget* parent = nullptr);