Marko Pintera před 12 roky
rodič
revize
dba38b29a6

+ 0 - 3
CSharpWrap.txt

@@ -92,9 +92,6 @@ Eventually make all math classes templates that work on both doubles and floats.
 ----------------------------
 
 Implement:
- - GUIInputBox
-  - getText
-
  - GUIListBox
   - onSelectionChanged
 

+ 13 - 0
MBansheeEngine/GUILayout.cs

@@ -70,6 +70,16 @@ namespace BansheeEngine
             return new GUITextBox(this, false, null, options);
         }
 
+        public GUIScrollArea AddScrollArea(GUIElementStyle style, params GUIOption[] options)
+        {
+            return new GUIScrollArea(this, style, options);
+        }
+
+        public GUIScrollArea AddScrollArea(params GUIOption[] options)
+        {
+            return new GUIScrollArea(this, null, options);
+        }
+
         public GUIFixedSpace AddSpace(int size)
         {
             return new GUIFixedSpace(this, size);
@@ -86,6 +96,9 @@ namespace BansheeEngine
         [MethodImpl(MethodImplOptions.InternalCall)]
         protected static extern void Internal_CreateInstanceXFromLayout(GUILayout instance, GUILayout parentLayout);
 
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        protected static extern void Internal_CreateInstanceYFromScrollArea(GUILayout instance, GUIScrollArea parentArea);
+
         [MethodImpl(MethodImplOptions.InternalCall)]
         protected static extern void Internal_CreateInstanceYFromLayout(GUILayout instance, GUILayout parentLayout);
     }

+ 5 - 0
MBansheeEngine/GUILayoutY.cs

@@ -11,5 +11,10 @@ namespace BansheeEngine
         {
             Internal_CreateInstanceYFromLayout(this, parentLayout);
         }
+
+        internal GUILayoutY(GUIScrollArea parentArea)
+        {
+            Internal_CreateInstanceYFromScrollArea(this, parentArea);
+        }
     }
 }

+ 23 - 0
MBansheeEngine/GUIScrollArea.cs

@@ -0,0 +1,23 @@
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    public sealed class GUIScrollArea : ScriptObject
+    {
+        private GUILayout _mainLayout;
+
+        public GUILayout main
+        {
+            get { return _mainLayout; }
+        }
+
+        internal GUIScrollArea(GUILayout parentLayout, GUIElementStyle style, params GUIOption[] options)
+        {
+            Internal_CreateInstance(this, parentLayout, style, options);
+            _mainLayout = new GUILayoutY(this);
+        }
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_CreateInstance(GUIScrollArea instance, GUILayout parentLayout, GUIElementStyle style, params GUIOption[] options);
+    }
+}

+ 1 - 0
MBansheeEngine/MBansheeEngine.csproj

@@ -52,6 +52,7 @@
     <Compile Include="GUIContent.cs" />
     <Compile Include="GUIElementStateStyle.cs" />
     <Compile Include="GUIElementStyle.cs" />
+    <Compile Include="GUIScrollArea.cs" />
     <Compile Include="GUITextBox.cs" />
     <Compile Include="GUILabel.cs" />
     <Compile Include="GUILayout.cs" />

+ 4 - 3
SBansheeEngine/Include/BsScriptGUILayout.h

@@ -13,19 +13,20 @@ namespace BansheeEngine
 		GUILayout* getInternalValue() const { return mLayout; }
 		void* getNativeRaw() const { return mLayout; }
 
-		ScriptGUIArea* getParentArea() const { return mParentArea; }
+		GUIWidget& getParentWidget() const { return mParentWidget; }
 
 	private:
 		static void internal_createInstanceXFromArea(MonoObject* instance, MonoObject* parentArea);
 		static void internal_createInstanceXFromLayout(MonoObject* instance, MonoObject* parentLayout);
 		static void internal_createInstanceYFromLayout(MonoObject* instance, MonoObject* parentLayout);
+		static void internal_createInstanceYFromScrollArea(MonoObject* instance, MonoObject* parentScrollArea);
 		static void internal_destroyInstance(ScriptGUILayout* nativeInstance);
 
 		static void initRuntimeData();
 
-		ScriptGUILayout(GUILayout* layout, ScriptGUIArea* parentArea);
+		ScriptGUILayout(GUILayout* layout, GUIWidget& parentWidget);
 
 		GUILayout* mLayout;
-		ScriptGUIArea* mParentArea;
+		GUIWidget& mParentWidget;
 	};
 }

+ 28 - 0
SBansheeEngine/Include/BsScriptGUIScrollArea.h

@@ -0,0 +1,28 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptGUIScrollArea : public ScriptObject<ScriptGUIScrollArea>
+	{
+	public:
+		static void initMetaData();
+
+		GUIScrollArea* getInternalValue() const { return mScrollArea; }
+		void* getNativeRaw() const { return mScrollArea; }
+
+		GUIWidget& getParentWidget() const;
+	private:
+		static void internal_createInstance(MonoObject* instance, MonoObject* parentLayout, MonoObject* style, MonoArray* guiOptions);
+		static void internal_destroyInstance(ScriptGUIScrollArea* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptGUIScrollArea(GUIScrollArea* button, GUIWidget& parentWidget);
+
+		GUIScrollArea* mScrollArea;
+		GUIWidget& mParentWidget;
+	};
+}

+ 2 - 0
SBansheeEngine/SBansheeEngine.vcxproj

@@ -238,6 +238,7 @@
     <ClInclude Include="Include\BsScriptGUIInputBox.h" />
     <ClInclude Include="Include\BsScriptGUILabel.h" />
     <ClInclude Include="Include\BsScriptGUILayout.h" />
+    <ClInclude Include="Include\BsScriptGUIScrollArea.h" />
     <ClInclude Include="Include\BsScriptGUITexture.h" />
     <ClInclude Include="Include\BsScriptHString.h" />
     <ClInclude Include="Include\BsScriptMacros.h" />
@@ -259,6 +260,7 @@
     <ClCompile Include="Source\BsScriptGUIElementStyle.cpp" />
     <ClCompile Include="Source\BsScriptGUILabel.cpp" />
     <ClCompile Include="Source\BsScriptGUILayout.cpp" />
+    <ClCompile Include="Source\BsScriptGUIScrollArea.cpp" />
     <ClCompile Include="Source\BsScriptGUITexture.cpp" />
     <ClCompile Include="Source\BsScriptHString.cpp" />
     <ClCompile Include="Source\BsScriptGUIInputBox.cpp" />

+ 6 - 0
SBansheeEngine/SBansheeEngine.vcxproj.filters

@@ -75,6 +75,9 @@
     <ClInclude Include="Include\BsScriptGUIInputBox.h">
       <Filter>Header Files</Filter>
     </ClInclude>
+    <ClInclude Include="Include\BsScriptGUIScrollArea.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\BsScriptTexture2D.cpp">
@@ -131,5 +134,8 @@
     <ClCompile Include="Source\BsScriptGUIInputBox.cpp">
       <Filter>Source Files</Filter>
     </ClCompile>
+    <ClCompile Include="Source\BsScriptGUIScrollArea.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 1 - 1
SBansheeEngine/Source/BsScriptGUIButton.cpp

@@ -62,7 +62,7 @@ namespace BansheeEngine
 			elemStyle = ScriptGUIElementStyle::toNative(style)->getInternalValue();
 
 		GUIContent nativeContent(ScriptGUIContent::getText(content), ScriptGUIContent::getImage(content), ScriptGUIContent::getTooltip(content));
-		GUIButton* guiButton = GUIButton::create(scriptLayout->getParentArea()->getParentWidget(), nativeContent, options, elemStyle);
+		GUIButton* guiButton = GUIButton::create(scriptLayout->getParentWidget(), nativeContent, options, elemStyle);
 
 		guiButton->onClick.connect(std::bind(&ScriptGUIButton::onClick, instance));
 		guiButton->onHover.connect(std::bind(&ScriptGUIButton::onHover, instance));

+ 1 - 1
SBansheeEngine/Source/BsScriptGUIInputBox.cpp

@@ -54,7 +54,7 @@ namespace BansheeEngine
 		if(style != nullptr)
 			elemStyle = ScriptGUIElementStyle::toNative(style)->getInternalValue();
 
-		GUIInputBox* guiInputBox = GUIInputBox::create(scriptLayout->getParentArea()->getParentWidget(), multiline, options, elemStyle);
+		GUIInputBox* guiInputBox = GUIInputBox::create(scriptLayout->getParentWidget(), multiline, options, elemStyle);
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		nativeLayout->addElement(guiInputBox);
 

+ 1 - 1
SBansheeEngine/Source/BsScriptGUILabel.cpp

@@ -52,7 +52,7 @@ namespace BansheeEngine
 			elemStyle = ScriptGUIElementStyle::toNative(style)->getInternalValue();
 
 		GUIContent nativeContent(ScriptGUIContent::getText(content), ScriptGUIContent::getImage(content), ScriptGUIContent::getTooltip(content));
-		GUILabel* guiLabel = GUILabel::create(scriptLayout->getParentArea()->getParentWidget(), nativeContent, options, elemStyle);
+		GUILabel* guiLabel = GUILabel::create(scriptLayout->getParentWidget(), nativeContent, options, elemStyle);
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		nativeLayout->addElement(guiLabel);
 

+ 20 - 5
SBansheeEngine/Source/BsScriptGUILayout.cpp

@@ -4,15 +4,17 @@
 #include "BsMonoClass.h"
 #include "BsMonoManager.h"
 #include "BsScriptGUIArea.h"
+#include "BsScriptGUIScrollArea.h"
 #include "BsGUIArea.h"
 #include "BsGUILayout.h"
+#include "BsGUIScrollArea.h"
 
 using namespace CamelotFramework;
 
 namespace BansheeEngine
 {
-	ScriptGUILayout::ScriptGUILayout(GUILayout* layout, ScriptGUIArea* parentArea)
-		:mLayout(layout), mParentArea(parentArea)
+	ScriptGUILayout::ScriptGUILayout(GUILayout* layout, GUIWidget& parentWidget)
+		:mLayout(layout), mParentWidget(parentWidget)
 	{
 
 	}
@@ -23,11 +25,13 @@ namespace BansheeEngine
 
 		MonoManager::registerScriptType(&metaData);
 	}
+
 	void ScriptGUILayout::initRuntimeData()
 	{
 		metaData.scriptClass->addInternalCall("Internal_CreateInstanceXFromArea", &ScriptGUILayout::internal_createInstanceXFromArea);
 		metaData.scriptClass->addInternalCall("Internal_CreateInstanceXFromLayout", &ScriptGUILayout::internal_createInstanceXFromLayout);
 		metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromLayout", &ScriptGUILayout::internal_createInstanceYFromLayout);
+		metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromScrollArea", &ScriptGUILayout::internal_createInstanceYFromScrollArea);
 		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUILayout::internal_destroyInstance);
 	}
 
@@ -36,7 +40,7 @@ namespace BansheeEngine
 		ScriptGUIArea* scriptArea = ScriptGUIArea::toNative(parentArea);
 		GUIArea* nativeArea = scriptArea->getInternalValue();
 
-		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&nativeArea->getLayout(), scriptArea);
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&nativeArea->getLayout(), scriptArea->getParentWidget());
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);
@@ -48,7 +52,7 @@ namespace BansheeEngine
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		GUILayout& layout = nativeLayout->addLayoutX();
 
-		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentArea());
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentWidget());
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);
@@ -60,7 +64,18 @@ namespace BansheeEngine
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		GUILayout& layout = nativeLayout->addLayoutY();
 
-		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentArea());
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentWidget());
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUILayout::internal_createInstanceYFromScrollArea(MonoObject* instance, MonoObject* parentScrollArea)
+	{
+		ScriptGUIScrollArea* scriptScrollArea = ScriptGUIScrollArea::toNative(parentScrollArea);
+		GUILayout* nativeLayout = &scriptScrollArea->getInternalValue()->getLayout();
+
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(nativeLayout, scriptScrollArea->getParentWidget());
 		nativeInstance->createInstance(instance);
 
 		metaData.thisPtrField->setValue(instance, nativeInstance);

+ 75 - 0
SBansheeEngine/Source/BsScriptGUIScrollArea.cpp

@@ -0,0 +1,75 @@
+#include "BsScriptGUIScrollArea.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsSpriteTexture.h"
+#include "BsMonoUtil.h"
+#include "BsGUILayout.h"
+#include "BsGUIScrollArea.h"
+#include "BsGUIOptions.h"
+#include "BsScriptSpriteTexture.h"
+#include "BsScriptGUIElementStyle.h"
+#include "BsScriptGUILayout.h"
+#include "BsScriptGUIArea.h"
+#include "BsScriptHString.h"
+#include "BsScriptGUIContent.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptGUIScrollArea::ScriptGUIScrollArea(GUIScrollArea* scrollArea, GUIWidget& parentWidget)
+		:mScrollArea(scrollArea), mParentWidget(parentWidget)
+	{
+
+	}
+
+	void ScriptGUIScrollArea::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUIScrollArea", &ScriptGUIScrollArea::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+
+	void ScriptGUIScrollArea::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIScrollArea::internal_createInstance);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIScrollArea::internal_destroyInstance);
+	}
+
+	GUIWidget& ScriptGUIScrollArea::getParentWidget() const
+	{
+		return mParentWidget;
+	}
+
+	void ScriptGUIScrollArea::internal_createInstance(MonoObject* instance, MonoObject* parentLayout, MonoObject* style, MonoArray* guiOptions)
+	{
+		ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
+		GUIOptions options;
+
+		UINT32 arrayLen = (UINT32)mono_array_length(guiOptions);
+		for(UINT32 i = 0; i < arrayLen; i++)
+			options.addOption(mono_array_get(guiOptions, GUIOption, i));
+
+		GUIElementStyle* elemStyle = nullptr;
+
+		if(style != nullptr)
+			elemStyle = ScriptGUIElementStyle::toNative(style)->getInternalValue();
+
+		GUIScrollArea* guiScrollArea = GUIScrollArea::create(scriptLayout->getParentWidget(), options, elemStyle);
+		GUILayout* nativeLayout = scriptLayout->getInternalValue();
+		nativeLayout->addElement(guiScrollArea);
+
+		ScriptGUIScrollArea* nativeInstance = new (cm_alloc<ScriptGUIScrollArea>()) ScriptGUIScrollArea(guiScrollArea, scriptLayout->getParentWidget());
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIScrollArea::internal_destroyInstance(ScriptGUIScrollArea* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 1 - 1
SBansheeEngine/Source/BsScriptGUITexture.cpp

@@ -58,7 +58,7 @@ namespace BansheeEngine
 		if(texture != nullptr)
 			nativeTexture = ScriptSpriteTexture::toNative(texture)->getInternalValue();
 
-		GUITexture* guiTexture = GUITexture::create(scriptLayout->getParentArea()->getParentWidget(), nativeTexture, scale, options, elemStyle);
+		GUITexture* guiTexture = GUITexture::create(scriptLayout->getParentWidget(), nativeTexture, scale, options, elemStyle);
 		GUILayout* nativeLayout = scriptLayout->getInternalValue();
 		nativeLayout->addElement(guiTexture);