瀏覽代碼

Merge pull request #44737 from KoBeWi/touch_shape_screen_centered_button

 Fix shape_centered property in TouchScreenButton
Rémi Verschelde 4 年之前
父節點
當前提交
b84f65f13c
共有 2 個文件被更改,包括 12 次插入6 次删除
  1. 1 1
      doc/classes/TouchScreenButton.xml
  2. 11 5
      scene/2d/touch_screen_button.cpp

+ 1 - 1
doc/classes/TouchScreenButton.xml

@@ -43,7 +43,7 @@
 			If [code]true[/code], the button's shape is centered in the provided texture. If no texture is used, this property has no effect.
 		</member>
 		<member name="shape_visible" type="bool" setter="set_shape_visible" getter="is_shape_visible" default="true">
-			If [code]true[/code], the button's shape is visible.
+			If [code]true[/code], the button's shape is visible in the editor.
 		</member>
 		<member name="visibility_mode" type="int" setter="set_visibility_mode" getter="get_visibility_mode" enum="TouchScreenButton.VisibilityMode" default="0">
 			The button's visibility mode. See [enum VisibilityMode] for possible values.

+ 11 - 5
scene/2d/touch_screen_button.cpp

@@ -129,8 +129,11 @@ void TouchScreenButton::_notification(int p_what) {
 			if (shape.is_valid()) {
 				Color draw_col = get_tree()->get_debug_collisions_color();
 
-				Vector2 size = texture.is_null() ? shape->get_rect().size : texture->get_size();
-				Vector2 pos = shape_centered ? size * 0.5f : Vector2();
+				Vector2 pos;
+				if (shape_centered && texture.is_valid()) {
+					pos = texture->get_size() * 0.5;
+				}
+
 				draw_set_transform_matrix(get_canvas_transform().translated(pos));
 				shape->draw(get_canvas_item(), draw_col);
 			}
@@ -251,9 +254,12 @@ bool TouchScreenButton::_is_point_inside(const Point2 &p_point) {
 	if (shape.is_valid()) {
 		check_rect = false;
 
-		Vector2 size = texture.is_null() ? shape->get_rect().size : texture->get_size();
-		Transform2D xform = shape_centered ? Transform2D().translated(size * 0.5f) : Transform2D();
-		touched = shape->collide(xform, unit_rect, Transform2D(0, coord + Vector2(0.5, 0.5)));
+		Vector2 pos;
+		if (shape_centered && texture.is_valid()) {
+			pos = texture->get_size() * 0.5;
+		}
+
+		touched = shape->collide(Transform2D().translated(pos), unit_rect, Transform2D(0, coord + Vector2(0.5, 0.5)));
 	}
 
 	if (bitmask.is_valid()) {