|
@@ -732,10 +732,6 @@ void TextEdit::_notification(int p_what) {
|
|
|
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg, ofs_y, xmargin_end - xmargin_beg, get_row_height()), cache.mark_color);
|
|
|
}
|
|
|
|
|
|
- if (line == cursor.line) {
|
|
|
- VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(0, ofs_y, xmargin_end, get_row_height()), cache.current_line_color);
|
|
|
- }
|
|
|
-
|
|
|
if (text.is_breakpoint(line) && !draw_breakpoint_gutter) {
|
|
|
#ifdef TOOLS_ENABLED
|
|
|
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(xmargin_beg, ofs_y + get_row_height() - EDSCALE, xmargin_end - xmargin_beg, EDSCALE), cache.breakpoint_color);
|
|
@@ -764,6 +760,7 @@ void TextEdit::_notification(int p_what) {
|
|
|
|
|
|
cache.font->draw(ci, Point2(cache.style_normal->get_margin(MARGIN_LEFT) + cache.breakpoint_gutter_width, ofs_y + cache.font->get_ascent()), fc, cache.line_number_color);
|
|
|
}
|
|
|
+ //loop through charcters in one line
|
|
|
for (int j = 0; j < str.length(); j++) {
|
|
|
|
|
|
//look for keyword
|
|
@@ -952,10 +949,22 @@ void TextEdit::_notification(int p_what) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //current line highlighting
|
|
|
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 (line == cursor.line) {
|
|
|
+ if (j == 0)
|
|
|
+ //first char
|
|
|
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(0, ofs_y, (char_ofs + char_margin), get_row_height()), cache.current_line_color);
|
|
|
+ else if (j == str.length() - 1)
|
|
|
+ //last char
|
|
|
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(char_ofs + char_margin + char_w, ofs_y, xmargin_end - (char_ofs + char_margin + char_w), get_row_height()), cache.current_line_color);
|
|
|
+
|
|
|
+ if (!in_selection)
|
|
|
+ VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2i(char_ofs + char_margin, ofs_y), Size2i(char_w, get_row_height())), cache.current_line_color);
|
|
|
+ }
|
|
|
+
|
|
|
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);
|
|
|
}
|
|
|
|
|
@@ -998,7 +1007,7 @@ void TextEdit::_notification(int p_what) {
|
|
|
|
|
|
if (brace_open_mismatch)
|
|
|
color = cache.brace_mismatch_color;
|
|
|
- cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection ? cache.font_selected_color : color);
|
|
|
+ cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
|
|
|
}
|
|
|
|
|
|
if (
|
|
@@ -1007,7 +1016,7 @@ void TextEdit::_notification(int p_what) {
|
|
|
|
|
|
if (brace_close_mismatch)
|
|
|
color = cache.brace_mismatch_color;
|
|
|
- cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection ? cache.font_selected_color : color);
|
|
|
+ cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), '_', str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -1066,15 +1075,15 @@ void TextEdit::_notification(int p_what) {
|
|
|
}
|
|
|
|
|
|
if (str[j] >= 32) {
|
|
|
- int w = cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), str[j], str[j + 1], in_selection ? cache.font_selected_color : color);
|
|
|
+ int w = cache.font->draw_char(ci, Point2i(char_ofs + char_margin, ofs_y + ascent), str[j], str[j + 1], in_selection && override_selected_font_color ? cache.font_selected_color : color);
|
|
|
if (underlined) {
|
|
|
- draw_rect(Rect2(char_ofs + char_margin, ofs_y + ascent + 2, w, 1), in_selection ? cache.font_selected_color : color);
|
|
|
+ draw_rect(Rect2(char_ofs + char_margin, ofs_y + ascent + 2, w, 1), in_selection && override_selected_font_color ? cache.font_selected_color : color);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
else if (draw_tabs && str[j] == '\t') {
|
|
|
int yofs = (get_row_height() - cache.tab_icon->get_height()) / 2;
|
|
|
- cache.tab_icon->draw(ci, Point2(char_ofs + char_margin, ofs_y + yofs), in_selection ? cache.font_selected_color : color);
|
|
|
+ cache.tab_icon->draw(ci, Point2(char_ofs + char_margin, ofs_y + yofs), in_selection && override_selected_font_color ? cache.font_selected_color : color);
|
|
|
}
|
|
|
|
|
|
char_ofs += char_w;
|
|
@@ -4256,6 +4265,13 @@ bool TextEdit::is_drawing_tabs() const {
|
|
|
return draw_tabs;
|
|
|
}
|
|
|
|
|
|
+void TextEdit::set_override_selected_font_color(bool p_override_selected_font_color) {
|
|
|
+ override_selected_font_color = p_override_selected_font_color;
|
|
|
+}
|
|
|
+bool TextEdit::is_overriding_selected_font_color() const {
|
|
|
+ return override_selected_font_color;
|
|
|
+}
|
|
|
+
|
|
|
void TextEdit::set_insert_mode(bool p_enabled) {
|
|
|
insert_mode = p_enabled;
|
|
|
update();
|
|
@@ -4821,6 +4837,9 @@ void TextEdit::_bind_methods() {
|
|
|
ClassDB::bind_method(D_METHOD("set_highlight_all_occurrences", "enable"), &TextEdit::set_highlight_all_occurrences);
|
|
|
ClassDB::bind_method(D_METHOD("is_highlight_all_occurrences_enabled"), &TextEdit::is_highlight_all_occurrences_enabled);
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("set_override_selected_font_color", "override"), &TextEdit::set_override_selected_font_color);
|
|
|
+ ClassDB::bind_method(D_METHOD("is_overriding_selected_font_color"), &TextEdit::is_overriding_selected_font_color);
|
|
|
+
|
|
|
ClassDB::bind_method(D_METHOD("set_syntax_coloring", "enable"), &TextEdit::set_syntax_coloring);
|
|
|
ClassDB::bind_method(D_METHOD("is_syntax_coloring_enabled"), &TextEdit::is_syntax_coloring_enabled);
|
|
|
|
|
@@ -4838,6 +4857,7 @@ void TextEdit::_bind_methods() {
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "syntax_highlighting"), "set_syntax_coloring", "is_syntax_coloring_enabled");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "show_line_numbers"), "set_show_line_numbers", "is_show_line_numbers_enabled");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "highlight_all_occurrences"), "set_highlight_all_occurrences", "is_highlight_all_occurrences_enabled");
|
|
|
+ ADD_PROPERTY(PropertyInfo(Variant::BOOL, "override_selected_font_color"), "set_override_selected_font_color", "is_overriding_selected_font_color");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "smooth_scrolling"), "set_smooth_scroll_enable", "is_smooth_scroll_enabled");
|
|
|
ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_scroll_speed"), "set_v_scroll_speed", "get_v_scroll_speed");
|
|
|
|
|
@@ -4868,6 +4888,7 @@ TextEdit::TextEdit() {
|
|
|
readonly = false;
|
|
|
setting_row = false;
|
|
|
draw_tabs = false;
|
|
|
+ override_selected_font_color = false;
|
|
|
draw_caret = true;
|
|
|
max_chars = 0;
|
|
|
clear();
|