فهرست منبع

Fix text clipping on the right side.

bruvzg 3 سال پیش
والد
کامیت
aada395354
2فایلهای تغییر یافته به همراه5 افزوده شده و 5 حذف شده
  1. 1 1
      scene/gui/button.cpp
  2. 4 4
      servers/text_server.cpp

+ 1 - 1
scene/gui/button.cpp

@@ -293,7 +293,7 @@ void Button::_notification(int p_what) {
 			int text_clip = size.width - style->get_minimum_size().width - icon_ofs.width;
 			text_buf->set_width(clip_text ? text_clip : -1);
 
-			int text_width = clip_text ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x;
+			int text_width = MAX(1, clip_text ? MIN(text_clip, text_buf->get_size().x) : text_buf->get_size().x);
 
 			if (_internal_margin[SIDE_LEFT] > 0) {
 				text_clip -= _internal_margin[SIDE_LEFT] + get_theme_constant(SNAME("hseparation"));

+ 4 - 4
servers/text_server.cpp

@@ -1267,11 +1267,11 @@ void TextServer::shaped_text_draw(RID p_shaped, RID p_canvas, const Vector2 &p_p
 			if (p_clip_r > 0) {
 				// Clip right / bottom.
 				if (orientation == ORIENTATION_HORIZONTAL) {
-					if (ofs.x - p_pos.x > p_clip_r) {
+					if (ofs.x - p_pos.x + glyphs[i].advance > p_clip_r) {
 						return;
 					}
 				} else {
-					if (ofs.y - p_pos.y > p_clip_r) {
+					if (ofs.y - p_pos.y + glyphs[i].advance > p_clip_r) {
 						return;
 					}
 				}
@@ -1362,11 +1362,11 @@ void TextServer::shaped_text_draw_outline(RID p_shaped, RID p_canvas, const Vect
 			if (p_clip_r > 0) {
 				// Clip right / bottom.
 				if (orientation == ORIENTATION_HORIZONTAL) {
-					if (ofs.x - p_pos.x > p_clip_r) {
+					if (ofs.x - p_pos.x + glyphs[i].advance > p_clip_r) {
 						return;
 					}
 				} else {
-					if (ofs.y - p_pos.y > p_clip_r) {
+					if (ofs.y - p_pos.y + glyphs[i].advance > p_clip_r) {
 						return;
 					}
 				}