Browse Source

Correctly flip texture src region

David Sichma 5 years ago
parent
commit
f73e1fae37
2 changed files with 12 additions and 1 deletions
  1. 1 1
      scene/gui/item_list.cpp
  2. 11 0
      servers/visual/visual_server_canvas.cpp

+ 1 - 1
scene/gui/item_list.cpp

@@ -925,7 +925,7 @@ void ItemList::_notification(int p_what) {
 				current_columns = max_columns;
 
 			while (true) {
-				//repeat util all fits
+				//repeat until all fits
 				bool all_fit = true;
 				Vector2 ofs;
 				int col = 0;

+ 11 - 0
servers/visual/visual_server_canvas.cpp

@@ -680,11 +680,22 @@ void VisualServerCanvas::canvas_item_add_texture_rect_region(RID p_item, const R
 		rect->flags |= RasterizerCanvas::CANVAS_RECT_FLIP_H;
 		rect->rect.size.x = -rect->rect.size.x;
 	}
+	if (p_src_rect.size.x < 0) {
+
+		rect->flags ^= RasterizerCanvas::CANVAS_RECT_FLIP_H;
+		rect->source.size.x = -rect->source.size.x;
+	}
 	if (p_rect.size.y < 0) {
 
 		rect->flags |= RasterizerCanvas::CANVAS_RECT_FLIP_V;
 		rect->rect.size.y = -rect->rect.size.y;
 	}
+	if (p_src_rect.size.y < 0) {
+
+		rect->flags ^= RasterizerCanvas::CANVAS_RECT_FLIP_V;
+		rect->source.size.y = -rect->source.size.y;
+	}
+
 	if (p_transpose) {
 		rect->flags |= RasterizerCanvas::CANVAS_RECT_TRANSPOSE;
 		SWAP(rect->rect.size.x, rect->rect.size.y);