mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 02:27:43 +00:00
LibGUI: Setup IncrementalSearchBanners for TextEditors
Multi-line TextEditors now share a common search widget which can be opened with Ctrl+F
This commit is contained in:
parent
8231bd9bc3
commit
c476ca2bd6
2 changed files with 12 additions and 0 deletions
|
@ -18,6 +18,7 @@
|
||||||
#include <LibGUI/Clipboard.h>
|
#include <LibGUI/Clipboard.h>
|
||||||
#include <LibGUI/EditingEngine.h>
|
#include <LibGUI/EditingEngine.h>
|
||||||
#include <LibGUI/EmojiInputDialog.h>
|
#include <LibGUI/EmojiInputDialog.h>
|
||||||
|
#include <LibGUI/IncrementalSearchBanner.h>
|
||||||
#include <LibGUI/InputBox.h>
|
#include <LibGUI/InputBox.h>
|
||||||
#include <LibGUI/Menu.h>
|
#include <LibGUI/Menu.h>
|
||||||
#include <LibGUI/Painter.h>
|
#include <LibGUI/Painter.h>
|
||||||
|
@ -63,6 +64,8 @@ TextEditor::TextEditor(Type type)
|
||||||
if (is_multi_line()) {
|
if (is_multi_line()) {
|
||||||
set_font(Gfx::FontDatabase::default_fixed_width_font());
|
set_font(Gfx::FontDatabase::default_fixed_width_font());
|
||||||
set_wrapping_mode(WrappingMode::WrapAtWords);
|
set_wrapping_mode(WrappingMode::WrapAtWords);
|
||||||
|
m_search_banner = GUI::IncrementalSearchBanner::construct(*this);
|
||||||
|
set_banner_widget(m_search_banner);
|
||||||
}
|
}
|
||||||
vertical_scrollbar().set_step(line_height());
|
vertical_scrollbar().set_step(line_height());
|
||||||
m_cursor = { 0, 0 };
|
m_cursor = { 0, 0 };
|
||||||
|
@ -208,6 +211,7 @@ TextPosition TextEditor::text_position_at(Gfx::IntPoint const& widget_position)
|
||||||
content_position.translate_by(horizontal_scrollbar().value(), vertical_scrollbar().value());
|
content_position.translate_by(horizontal_scrollbar().value(), vertical_scrollbar().value());
|
||||||
content_position.translate_by(-(m_horizontal_content_padding + ruler_width() + gutter_width()), 0);
|
content_position.translate_by(-(m_horizontal_content_padding + ruler_width() + gutter_width()), 0);
|
||||||
content_position.translate_by(-frame_thickness(), -frame_thickness());
|
content_position.translate_by(-frame_thickness(), -frame_thickness());
|
||||||
|
content_position.translate_by(0, -height_occupied_by_banner_widget());
|
||||||
return text_position_at_content_position(content_position);
|
return text_position_at_content_position(content_position);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -442,6 +446,7 @@ void TextEditor::paint_event(PaintEvent& event)
|
||||||
}
|
}
|
||||||
|
|
||||||
painter.translate(frame_thickness(), frame_thickness());
|
painter.translate(frame_thickness(), frame_thickness());
|
||||||
|
painter.translate(0, height_occupied_by_banner_widget());
|
||||||
|
|
||||||
if (!is_multi_line() && m_icon) {
|
if (!is_multi_line() && m_icon) {
|
||||||
Gfx::IntRect icon_rect { icon_padding(), 1, icon_size(), icon_size() };
|
Gfx::IntRect icon_rect { icon_padding(), 1, icon_size(), icon_size() };
|
||||||
|
@ -893,6 +898,11 @@ void TextEditor::keydown_event(KeyEvent& event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (is_multi_line() && !event.shift() && !event.alt() && event.ctrl() && event.key() == KeyCode::Key_F) {
|
||||||
|
m_search_banner->show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_editing_engine->on_key(event))
|
if (m_editing_engine->on_key(event))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -1308,6 +1318,7 @@ Gfx::IntRect TextEditor::line_widget_rect(size_t line_index) const
|
||||||
rect.set_width(frame_inner_rect().width());
|
rect.set_width(frame_inner_rect().width());
|
||||||
rect.translate_by(0, -(vertical_scrollbar().value()));
|
rect.translate_by(0, -(vertical_scrollbar().value()));
|
||||||
rect.translate_by(0, frame_thickness());
|
rect.translate_by(0, frame_thickness());
|
||||||
|
rect.translate_by(0, height_occupied_by_banner_widget());
|
||||||
rect.intersect(frame_inner_rect());
|
rect.intersect(frame_inner_rect());
|
||||||
return rect;
|
return rect;
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,6 +440,7 @@ private:
|
||||||
|
|
||||||
Optional<size_t> m_search_result_index;
|
Optional<size_t> m_search_result_index;
|
||||||
Vector<GUI::TextRange> m_search_results;
|
Vector<GUI::TextRange> m_search_results;
|
||||||
|
RefPtr<IncrementalSearchBanner> m_search_banner;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue