Kaynağa Gözat

rewrote LineEdit window repositioning code so it does not eat the last character, closes #4992

Juan Linietsky 9 yıl önce
ebeveyn
işleme
83bf8036de

+ 13 - 6
scene/gui/line_edit.cpp

@@ -731,14 +731,21 @@ void LineEdit::set_cursor_pos(int p_pos) {
 		int width_to_cursor=0;
 		int wp=window_pos;
 
-		if (font != NULL) {
-			for (int i=window_pos;i<cursor_pos;i++)
-				width_to_cursor+=font->get_char_size( text[i] ).width;
+		if (font.is_valid()) {
+
+			int accum_width=0;
+
+			for(int i=cursor_pos;i>=window_pos;i--) {
 
-			while (width_to_cursor >= window_width && wp < text.length()) {
+				if (i>=text.length()) {
+					accum_width=font->get_char_size(' ').width; //anything should do
+				} else {
+					accum_width+=font->get_char_size(text[i],i+1<text.length()?text[i+1]:0).width; //anything should do
+				}
+				if (accum_width>=window_width)
+					break;
 
-				width_to_cursor -= font->get_char_size(text[wp]).width;
-				wp++;
+				wp=i;
 			}
 		}
 

+ 1 - 0
tools/editor/plugins/theme_editor_plugin.cpp

@@ -583,6 +583,7 @@ ThemeEditor::ThemeEditor() {
 	add_child(panel);
 	panel->set_area_as_parent_rect(0);
 	panel->set_margin(MARGIN_TOP,25);
+	panel->set_theme(Theme::get_default());
 
 	main_vb= memnew( VBoxContainer );
 	panel->add_child(main_vb);