You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-11-11 13:10:58 +00:00
ScriptEditor/ShaderEditor: Replace find/replace dialog with a bar
This commit is contained in:
@@ -682,9 +682,13 @@ void TextEdit::_notification(int p_what) {
|
||||
|
||||
// check if line contains highlighted word
|
||||
int highlighted_text_col = -1;
|
||||
if (highlighted_text.length() != 0) {
|
||||
highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, 0);
|
||||
}
|
||||
int search_text_col = -1;
|
||||
|
||||
if (!search_text.empty())
|
||||
search_text_col = _get_column_pos_of_word(search_text, str, search_flags, 0);
|
||||
|
||||
if (highlighted_text.length() != 0 && highlighted_text != search_text)
|
||||
highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE|SEARCH_WHOLE_WORDS, 0);
|
||||
|
||||
if (cache.line_number_w) {
|
||||
String fc = String::num(line+1);
|
||||
@@ -879,20 +883,45 @@ void TextEdit::_notification(int p_what) {
|
||||
break;
|
||||
}
|
||||
|
||||
bool in_selection = (selection.active && line>=selection.from_line && line<=selection.to_line && (line>selection.from_line || j>=selection.from_column) && (line<selection.to_line || j<selection.to_column));
|
||||
bool in_search_result=false;
|
||||
|
||||
if (search_text_col != -1) {
|
||||
// if we are at the end check for new search result on same line
|
||||
if (j >= search_text_col+search_text.length())
|
||||
search_text_col = _get_column_pos_of_word(search_text, str, search_flags, j);
|
||||
|
||||
in_search_result = j >= search_text_col && j < search_text_col+search_text.length();
|
||||
|
||||
if (in_search_result) {
|
||||
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w, get_row_height())),cache.search_result_color);
|
||||
}
|
||||
}
|
||||
|
||||
bool in_selection = (selection.active && line>=selection.from_line && line<=selection.to_line && (line>selection.from_line || j>=selection.from_column) && (line<selection.to_line || j<selection.to_column));
|
||||
|
||||
if (in_selection) {
|
||||
//inside selection!
|
||||
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w,get_row_height())),cache.selection_color);
|
||||
}
|
||||
|
||||
if (in_search_result) {
|
||||
Color border_color=(line==search_result_line && j>=search_result_col && j<search_result_col+search_text.length())?cache.font_color:cache.search_result_border_color;
|
||||
|
||||
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(char_w,1)),border_color);
|
||||
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y+get_row_height()-1 ), Size2i(char_w,1)),border_color);
|
||||
|
||||
if (j==search_text_col)
|
||||
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin, ofs_y ), Size2i(1,get_row_height())),border_color);
|
||||
if (j==search_text_col+search_text.length()-1)
|
||||
VisualServer::get_singleton()->canvas_item_add_rect(ci,Rect2(Point2i( char_ofs+char_margin+char_w-1, ofs_y ), Size2i(1,get_row_height())),border_color);
|
||||
}
|
||||
|
||||
if (highlight_all_occurrences) {
|
||||
if (highlighted_text_col != -1) {
|
||||
|
||||
// if we are at the end check for new word on same line
|
||||
if (j > highlighted_text_col+highlighted_text.length()) {
|
||||
highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, j);
|
||||
highlighted_text_col = _get_column_pos_of_word(highlighted_text, str, SEARCH_MATCH_CASE|SEARCH_WHOLE_WORDS, j);
|
||||
}
|
||||
|
||||
bool in_highlighted_word = (j >= highlighted_text_col && j < highlighted_text_col+highlighted_text.length());
|
||||
@@ -3221,6 +3250,8 @@ void TextEdit::_update_caches() {
|
||||
cache.breakpoint_color=get_color("breakpoint_color");
|
||||
cache.brace_mismatch_color=get_color("brace_mismatch_color");
|
||||
cache.word_highlighted_color=get_color("word_highlighted_color");
|
||||
cache.search_result_color=get_color("search_result_color");
|
||||
cache.search_result_border_color=get_color("search_result_border_color");
|
||||
cache.line_spacing=get_constant("line_spacing");
|
||||
cache.row_height = cache.font->get_height() + cache.line_spacing;
|
||||
cache.tab_icon=get_icon("tab");
|
||||
@@ -3482,12 +3513,25 @@ String TextEdit::get_word_under_cursor() const {
|
||||
return text[cursor.line].substr(prev_cc, next_cc-prev_cc);
|
||||
}
|
||||
|
||||
void TextEdit::set_search_text(const String &p_search_text) {
|
||||
search_text = p_search_text;
|
||||
}
|
||||
|
||||
void TextEdit::set_search_flags(uint32_t p_flags) {
|
||||
search_flags = p_flags;
|
||||
}
|
||||
|
||||
void TextEdit::set_current_search_result(int line, int col) {
|
||||
search_result_line = line;
|
||||
search_result_col = col;
|
||||
}
|
||||
|
||||
void TextEdit::set_highlight_all_occurrences(const bool p_enabled) {
|
||||
highlight_all_occurrences = p_enabled;
|
||||
update();
|
||||
}
|
||||
|
||||
int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_search, int p_from_column) {
|
||||
int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_search, uint32_t p_search_flags, int p_from_column) {
|
||||
int col = -1;
|
||||
|
||||
if (p_key.length() > 0 && p_search.length() > 0) {
|
||||
@@ -3495,12 +3539,15 @@ int TextEdit::_get_column_pos_of_word(const String &p_key, const String &p_searc
|
||||
p_from_column = 0;
|
||||
}
|
||||
|
||||
while (col == -1 && p_from_column <= p_search.length()) {
|
||||
// match case
|
||||
col = p_search.findn(p_key, p_from_column);
|
||||
while (col == -1 && p_from_column <= p_search.length()) {
|
||||
if (p_search_flags&SEARCH_MATCH_CASE) {
|
||||
col = p_search.find(p_key,p_from_column);
|
||||
} else {
|
||||
col = p_search.findn(p_key,p_from_column);
|
||||
}
|
||||
|
||||
// whole words only
|
||||
if (col != -1) {
|
||||
if (col != -1 && p_search_flags&SEARCH_WHOLE_WORDS) {
|
||||
p_from_column=col;
|
||||
|
||||
if (col > 0 && _is_text_char(p_search[col-1])) {
|
||||
|
||||
Reference in New Issue
Block a user