Merge pull request #44737 from KoBeWi/touch_shape_screen_centered_button

Fix shape_centered property in TouchScreenButton
This commit is contained in:
Rémi Verschelde 2021-02-19 13:45:23 +01:00 committed by GitHub
commit b84f65f13c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 6 deletions

View file

@ -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.

View file

@ -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()) {