Browse Source

Merge pull request #34235 from timothyqiu/menu-scroll

Fixes long popup menu scroll behavior
Rémi Verschelde 5 năm trước cách đây
mục cha
commit
fdfe14c583
1 tập tin đã thay đổi với 10 bổ sung6 xóa
  1. 10 6
      scene/gui/popup_menu.cpp

+ 10 - 6
scene/gui/popup_menu.cpp

@@ -191,16 +191,20 @@ void PopupMenu::_submenu_timeout() {
 
 void PopupMenu::_scroll(float p_factor, const Point2 &p_over) {
 
-	const float global_y = get_global_position().y;
-
 	int vseparation = get_constant("vseparation");
 	Ref<Font> font = get_font("font");
 
 	float dy = (vseparation + font->get_height()) * 3 * p_factor * get_global_transform().get_scale().y;
-	if (dy > 0 && global_y < 0)
-		dy = MIN(dy, -global_y - 1);
-	else if (dy < 0 && global_y + get_size().y * get_global_transform().get_scale().y > get_viewport_rect().size.y)
-		dy = -MIN(-dy, global_y + get_size().y * get_global_transform().get_scale().y - get_viewport_rect().size.y - 1);
+	if (dy > 0) {
+		const float global_top = get_global_position().y;
+		const float limit = global_top < 0 ? -global_top : 0;
+		dy = MIN(dy, limit);
+	} else if (dy < 0) {
+		const float global_bottom = get_global_position().y + get_size().y * get_global_transform().get_scale().y;
+		const float viewport_height = get_viewport_rect().size.y;
+		const float limit = global_bottom > viewport_height ? global_bottom - viewport_height: 0;
+		dy = -MIN(-dy, limit);
+	}
 	set_position(get_position() + Vector2(0, dy));
 
 	Ref<InputEventMouseMotion> ie;