瀏覽代碼

[Editor Log] Clear rich print tags only after the last line.

bruvzg 2 年之前
父節點
當前提交
9a6ecda591
共有 2 個文件被更改,包括 13 次插入8 次删除
  1. 8 5
      editor/editor_log.cpp
  2. 5 3
      editor/editor_log.h

+ 8 - 5
editor/editor_log.cpp

@@ -212,7 +212,7 @@ void EditorLog::clear() {
 	_clear_request();
 	_clear_request();
 }
 }
 
 
-void EditorLog::_process_message(const String &p_msg, MessageType p_type) {
+void EditorLog::_process_message(const String &p_msg, MessageType p_type, bool p_clear) {
 	if (messages.size() > 0 && messages[messages.size() - 1].text == p_msg && messages[messages.size() - 1].type == p_type) {
 	if (messages.size() > 0 && messages[messages.size() - 1].text == p_msg && messages[messages.size() - 1].type == p_type) {
 		// If previous message is the same as the new one, increase previous count rather than adding another
 		// If previous message is the same as the new one, increase previous count rather than adding another
 		// instance to the messages list.
 		// instance to the messages list.
@@ -222,7 +222,7 @@ void EditorLog::_process_message(const String &p_msg, MessageType p_type) {
 		_add_log_line(previous, collapse);
 		_add_log_line(previous, collapse);
 	} else {
 	} else {
 		// Different message to the previous one received.
 		// Different message to the previous one received.
-		LogMessage message(p_msg, p_type);
+		LogMessage message(p_msg, p_type, p_clear);
 		_add_log_line(message);
 		_add_log_line(message);
 		messages.push_back(message);
 		messages.push_back(message);
 	}
 	}
@@ -237,9 +237,10 @@ void EditorLog::add_message(const String &p_msg, MessageType p_type) {
 	// search functionality (see the comments on the PR above for more details). This behavior
 	// search functionality (see the comments on the PR above for more details). This behavior
 	// also matches that of other IDE's.
 	// also matches that of other IDE's.
 	Vector<String> lines = p_msg.split("\n", true);
 	Vector<String> lines = p_msg.split("\n", true);
+	int line_count = lines.size();
 
 
-	for (int i = 0; i < lines.size(); i++) {
-		_process_message(lines[i], p_type);
+	for (int i = 0; i < line_count; i++) {
+		_process_message(lines[i], p_type, i == line_count - 1);
 	}
 	}
 }
 }
 
 
@@ -338,7 +339,9 @@ void EditorLog::_add_log_line(LogMessage &p_message, bool p_replace_previous) {
 	} else {
 	} else {
 		log->add_text(p_message.text);
 		log->add_text(p_message.text);
 	}
 	}
-	log->pop_all(); // Pop all unclosed tags.
+	if (p_message.clear || p_message.type != MSG_TYPE_STD_RICH) {
+		log->pop_all(); // Pop all unclosed tags.
+	}
 	log->add_newline();
 	log->add_newline();
 
 
 	if (p_replace_previous) {
 	if (p_replace_previous) {

+ 5 - 3
editor/editor_log.h

@@ -60,12 +60,14 @@ private:
 		String text;
 		String text;
 		MessageType type;
 		MessageType type;
 		int count = 1;
 		int count = 1;
+		bool clear = true;
 
 
 		LogMessage() {}
 		LogMessage() {}
 
 
-		LogMessage(const String p_text, MessageType p_type) :
+		LogMessage(const String p_text, MessageType p_type, bool p_clear) :
 				text(p_text),
 				text(p_text),
-				type(p_type) {
+				type(p_type),
+				clear(p_clear) {
 		}
 		}
 	};
 	};
 
 
@@ -166,7 +168,7 @@ private:
 	void _set_search_visible(bool p_visible);
 	void _set_search_visible(bool p_visible);
 	void _search_changed(const String &p_text);
 	void _search_changed(const String &p_text);
 
 
-	void _process_message(const String &p_msg, MessageType p_type);
+	void _process_message(const String &p_msg, MessageType p_type, bool p_clear);
 	void _reset_message_counts();
 	void _reset_message_counts();
 
 
 	void _set_collapse(bool p_collapse);
 	void _set_collapse(bool p_collapse);