diff options
Diffstat (limited to 'Libraries/LibGUI')
-rw-r--r-- | Libraries/LibGUI/TextDocument.cpp | 5 | ||||
-rw-r--r-- | Libraries/LibGUI/TextDocument.h | 3 | ||||
-rw-r--r-- | Libraries/LibGUI/TextEditor.cpp | 7 | ||||
-rw-r--r-- | Libraries/LibGUI/TextEditor.h | 5 |
4 files changed, 19 insertions, 1 deletions
diff --git a/Libraries/LibGUI/TextDocument.cpp b/Libraries/LibGUI/TextDocument.cpp index c16e757c41..10a5ffe497 100644 --- a/Libraries/LibGUI/TextDocument.cpp +++ b/Libraries/LibGUI/TextDocument.cpp @@ -675,6 +675,11 @@ void TextDocument::remove(const TextRange& unnormalized_range) notify_did_change(); } +bool TextDocument::is_empty() const +{ + return line_count() == 1 && line(0).is_empty(); +} + TextRange TextDocument::range_for_entire_line(size_t line_index) const { if (line_index >= line_count()) diff --git a/Libraries/LibGUI/TextDocument.h b/Libraries/LibGUI/TextDocument.h index 759e8edf9f..85fad0e97a 100644 --- a/Libraries/LibGUI/TextDocument.h +++ b/Libraries/LibGUI/TextDocument.h @@ -139,6 +139,8 @@ public: virtual bool is_code_document() const { return false; } + bool is_empty() const; + protected: explicit TextDocument(Client* client); @@ -179,6 +181,7 @@ public: size_t first_non_whitespace_column() const; Optional<size_t> last_non_whitespace_column() const; bool ends_in_whitespace() const; + bool is_empty() const { return length() == 0; } private: // NOTE: This vector is null terminated. diff --git a/Libraries/LibGUI/TextEditor.cpp b/Libraries/LibGUI/TextEditor.cpp index cf36a82708..d885b71183 100644 --- a/Libraries/LibGUI/TextEditor.cpp +++ b/Libraries/LibGUI/TextEditor.cpp @@ -461,7 +461,12 @@ void TextEditor::paint_event(PaintEvent& event) #ifdef DEBUG_TEXTEDITOR painter.draw_rect(visual_line_rect, Color::Cyan); #endif - if (!document().has_spans()) { + + if (!placeholder().is_empty() && document().is_empty() && !is_focused() && line_index == 0) { + auto line_rect = visual_line_rect; + line_rect.set_width(font().width(placeholder())); + painter.draw_text(line_rect, placeholder(), m_text_alignment, palette().color(Gfx::ColorRole::DisabledText)); + } else if (!document().has_spans()) { // Fast-path for plain text auto color = palette().color(is_enabled() ? foreground_role() : Gfx::ColorRole::DisabledText); if (is_displayonly() && (is_focused() || has_visible_list())) diff --git a/Libraries/LibGUI/TextEditor.h b/Libraries/LibGUI/TextEditor.h index 56dd2377c4..0bdb68258a 100644 --- a/Libraries/LibGUI/TextEditor.h +++ b/Libraries/LibGUI/TextEditor.h @@ -60,6 +60,9 @@ public: virtual void set_document(TextDocument&); + const String& placeholder() const { return m_placeholder; } + void set_placeholder(const StringView& placeholder) { m_placeholder = placeholder; } + void set_visualize_trailing_whitespace(bool); bool visualize_trailing_whitespace() const { return m_visualize_trailing_whitespace; } @@ -301,6 +304,8 @@ private: RefPtr<TextDocument> m_document; + String m_placeholder { "" }; + template<typename Callback> void for_each_visual_line(size_t line_index, Callback) const; |