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

Fix AtlasTexture::draw_rect flipping for non-zero margin

kleonc 1 жил өмнө
parent
commit
88b29539f7

+ 0 - 10
scene/gui/texture_rect.cpp

@@ -30,7 +30,6 @@
 
 #include "texture_rect.h"
 
-#include "scene/resources/atlas_texture.h"
 #include "servers/rendering_server.h"
 
 void TextureRect::_notification(int p_what) {
@@ -92,15 +91,6 @@ void TextureRect::_notification(int p_what) {
 				} break;
 			}
 
-			Ref<AtlasTexture> p_atlas = texture;
-
-			if (p_atlas.is_valid() && !region.has_area()) {
-				Size2 scale_size(size.width / texture->get_width(), size.height / texture->get_height());
-
-				offset.width += hflip ? p_atlas->get_margin().get_position().width * scale_size.width * 2 : 0;
-				offset.height += vflip ? p_atlas->get_margin().get_position().height * scale_size.height * 2 : 0;
-			}
-
 			size.width *= hflip ? -1.0f : 1.0f;
 			size.height *= vflip ? -1.0f : 1.0f;
 

+ 8 - 15
scene/resources/atlas_texture.cpp

@@ -164,20 +164,13 @@ void AtlasTexture::draw_rect(RID p_canvas_item, const Rect2 &p_rect, bool p_tile
 		return;
 	}
 
-	Rect2 rc = region;
+	Rect2 src_rect = Rect2(0, 0, get_width(), get_height());
 
-	if (rc.size.width == 0) {
-		rc.size.width = atlas->get_width();
-	}
-
-	if (rc.size.height == 0) {
-		rc.size.height = atlas->get_height();
+	Rect2 dr;
+	Rect2 src_c;
+	if (get_rect_region(p_rect, src_rect, dr, src_c)) {
+		atlas->draw_rect_region(p_canvas_item, dr, src_c, p_modulate, p_transpose, filter_clip);
 	}
-
-	Vector2 scale = p_rect.size / (region.size + margin.size);
-	Rect2 dr(p_rect.position + margin.position * scale, rc.size * scale);
-
-	atlas->draw_rect_region(p_canvas_item, dr, rc, p_modulate, p_transpose, filter_clip);
 }
 
 void AtlasTexture::draw_rect_region(RID p_canvas_item, const Rect2 &p_rect, const Rect2 &p_src_rect, const Color &p_modulate, bool p_transpose, bool p_clip_uv) const {
@@ -188,9 +181,9 @@ void AtlasTexture::draw_rect_region(RID p_canvas_item, const Rect2 &p_rect, cons
 
 	Rect2 dr;
 	Rect2 src_c;
-	get_rect_region(p_rect, p_src_rect, dr, src_c);
-
-	atlas->draw_rect_region(p_canvas_item, dr, src_c, p_modulate, p_transpose, filter_clip);
+	if (get_rect_region(p_rect, p_src_rect, dr, src_c)) {
+		atlas->draw_rect_region(p_canvas_item, dr, src_c, p_modulate, p_transpose, filter_clip);
+	}
 }
 
 bool AtlasTexture::get_rect_region(const Rect2 &p_rect, const Rect2 &p_src_rect, Rect2 &r_rect, Rect2 &r_src_rect) const {