2
0
Эх сурвалжийг харах

-Fix TouchScreenButton to work with stretch and viewport canvas transform, closes #2286

Juan Linietsky 9 жил өмнө
parent
commit
d069c44a7f

+ 2 - 2
scene/2d/canvas_item.cpp

@@ -389,8 +389,8 @@ Matrix32 CanvasItem::get_global_transform_with_canvas() const {
 
 	if (last_valid->canvas_layer)
 		return last_valid->canvas_layer->get_transform() * xform;
-	else
-		return xform;
+	else if (is_inside_tree())
+		return get_viewport()->get_canvas_transform() * xform;
 }
 
 Matrix32 CanvasItem::get_global_transform() const {

+ 2 - 2
scene/2d/screen_button.cpp

@@ -161,7 +161,7 @@ void TouchScreenButton::_input(const InputEvent& p_event) {
 
 			if (finger_pressed==-1 || p_event.screen_touch.index==finger_pressed) {
 
-				Point2 coord = (get_global_transform()).affine_inverse().xform(Point2(p_event.screen_touch.x,p_event.screen_touch.y));
+				Point2 coord = (get_global_transform_with_canvas()).affine_inverse().xform(Point2(p_event.screen_touch.x,p_event.screen_touch.y));
 
 				bool touched=false;
 				if (bitmask.is_valid()) {
@@ -238,7 +238,7 @@ void TouchScreenButton::_input(const InputEvent& p_event) {
 				if (finger_pressed!=-1)
 					return; //already fingering
 
-				Point2 coord = (get_global_transform()).affine_inverse().xform(Point2(p_event.screen_touch.x,p_event.screen_touch.y));
+				Point2 coord = (get_global_transform_with_canvas()).affine_inverse().xform(Point2(p_event.screen_touch.x,p_event.screen_touch.y));
 
 				bool touched=false;
 				if (bitmask.is_valid()) {