Przeglądaj źródła

Calculating optimal layout size from C# works

Marko Pintera 11 lat temu
rodzic
commit
5d4572b343

+ 1 - 1
MBansheeEditor/Inspector/GenericInspector.cs

@@ -46,7 +46,7 @@ namespace BansheeEditor
 
         internal override int GetOptimalHeight()
         {
-            return 200; // TODO  - Implement properly
+            return GUILayoutUtility.CalculateOptimalSize(layout).y;
         }
     }
 }

+ 9 - 5
MBansheeEngine/GUI/GUILayoutUtility.cs

@@ -8,20 +8,24 @@ namespace BansheeEngine
 {
     public class GUILayoutUtility
     {
-        public static Vector2 CalculateOptimalSize(GUIElement element)
+        public static Vector2I CalculateOptimalSize(GUIElement element)
         {
-            return Internal_CalculateOptimalSize(element.GetCachedPtr());
+            Vector2I output;
+            Internal_CalculateOptimalSize(element.GetCachedPtr(), out output);
+            return output;
         }
 
         public static RectI CalculateBounds(GUIElement element)
         {
-            return Internal_CalculateBounds(element.GetCachedPtr());
+            RectI output;
+            Internal_CalculateBounds(element.GetCachedPtr(), out output);
+            return output;
         }
 
         [MethodImpl(MethodImplOptions.InternalCall)]
-        private static extern Vector2 Internal_CalculateOptimalSize(IntPtr element);
+        private static extern void Internal_CalculateOptimalSize(IntPtr element, out Vector2I output);
 
         [MethodImpl(MethodImplOptions.InternalCall)]
-        private static extern RectI Internal_CalculateBounds(IntPtr element);
+        private static extern void Internal_CalculateBounds(IntPtr element, out RectI output);
     }
 }

+ 2 - 2
SBansheeEngine/Include/BsScriptGUILayoutUtility.h

@@ -16,7 +16,7 @@ namespace BansheeEngine
 		ScriptGUILayoutUtility();
 
 	private:
-		static Vector2I internal_CalculateOptimalSize(ScriptGUIElementBaseTBase* guiElement);
-		static RectI internal_CalculateBounds(ScriptGUIElementBaseTBase* guiElement);
+		static void internal_CalculateOptimalSize(ScriptGUIElementBaseTBase* guiElement, Vector2I* output);
+		static void internal_CalculateBounds(ScriptGUIElementBaseTBase* guiElement, RectI* output);
 	};
 }

+ 4 - 4
SBansheeEngine/Source/BsScriptGUILayoutUtility.cpp

@@ -19,13 +19,13 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_CalculateBounds", &ScriptGUILayoutUtility::internal_CalculateBounds);
 	}
 
-	Vector2I ScriptGUILayoutUtility::internal_CalculateOptimalSize(ScriptGUIElementBaseTBase* guiElement)
+	void ScriptGUILayoutUtility::internal_CalculateOptimalSize(ScriptGUIElementBaseTBase* guiElement, Vector2I* output)
 	{
-		return GUILayoutUtility::calcOptimalSize(guiElement->getGUIElement());
+		*output = GUILayoutUtility::calcOptimalSize(guiElement->getGUIElement());;
 	}
 
-	RectI ScriptGUILayoutUtility::internal_CalculateBounds(ScriptGUIElementBaseTBase* guiElement)
+	void ScriptGUILayoutUtility::internal_CalculateBounds(ScriptGUIElementBaseTBase* guiElement, RectI* output)
 	{
-		return GUILayoutUtility::calcBounds(guiElement->getGUIElement());
+		*output = GUILayoutUtility::calcBounds(guiElement->getGUIElement());
 	}
 }