Просмотр исходного кода

Better way of dealing with GUI layout clipping

Marko Pintera 12 лет назад
Родитель
Сommit
d8914ff7fe
2 измененных файлов с 8 добавлено и 2 удалено
  1. 6 2
      BansheeEngine/Source/BsGUILayoutX.cpp
  2. 2 0
      TODO.txt

+ 6 - 2
BansheeEngine/Source/BsGUILayoutX.cpp

@@ -183,10 +183,14 @@ namespace BansheeEngine
 
 				UINT32 yOffset = (UINT32)Math::CeilToInt((height - child.element->_getHeight()) * 0.5f);
 
-				child.element->_setOffset(Int2(x + xOffset, y + yOffset));
+				Int2 offset(x + xOffset, y + yOffset);
+				child.element->_setOffset(offset);
 				child.element->_setDepth(depth);
 
-				child.element->_setClipRect(Rect(0, 0, child.element->_getWidth(), child.element->_getHeight()));
+				UINT32 clippedWidth = (UINT32)std::min((INT32)child.element->_getWidth(), (INT32)width - offset.x);
+				UINT32 clippedHeight = (UINT32)std::min((INT32)child.element->_getHeight(), (INT32)height - offset.y);
+
+				child.element->_setClipRect(Rect(0, 0, clippedWidth, clippedHeight));
 
 				xOffset += child.element->_getWidth();
 			}

+ 2 - 0
TODO.txt

@@ -23,6 +23,8 @@ GUIWidget::updateMeshes leaks. If I leave the game running I can see memory cont
 
 IMMEDIATE:
  - Implement GUILayoutY
+ - Clip rect: Fixed size (or min clamped) elements that don't fit within the layout?!
+   - Imagine two vertical layouts next to each other, each 100 pixels, and the left one has 200 pix wide elements which crosses over to the next layout.
 
  Test multiple layout elements
 Test nested elements