Explorar el Código

Menu bar new UI
Fixed an issue with incorrect GUI panel depths when performing a panel optimized layout update in GUIWidget

BearishSun hace 10 años
padre
commit
bd0666745d

+ 4 - 1
BansheeEditor/Include/BsBuiltinEditorResources.h

@@ -318,11 +318,14 @@ namespace BansheeEngine
 		static const WString DropDownBoxBtnDownArrowTex;
 
 		static const WString MenuBarBgTex;
+		static const WString MenuBarBansheeLogoTex;
 
 		static const WString MenuBarBtnNormalTex;
 		static const WString MenuBarBtnHoverTex;
+		static const WString MenuBarBtnActiveTex;
 
-		static const WString MenuBarBansheeLogoTex;
+		static const WString MenuBarLineNormalTex;
+		static const WString MenuBarLineActiveTex;
 
 		static const WString DockSliderNormalTex;
 

+ 52 - 21
BansheeEditor/Include/BsGUIMenuBar.h

@@ -26,6 +26,26 @@ namespace BansheeEngine
 		};
 
 	public:
+		/**
+		 * @brief	Returns the style type for the menu bar background.
+		 */
+		static const String& getBackgroundStyleType();
+
+		/**
+		 * @brief	Returns the style type for the menu bar line draw under the menu items.
+		 */
+		static const String& getLineStyleType();
+
+		/**
+		 * @brief	Returns the style type for the menu bar logo.
+		 */
+		static const String& getLogoStyleType();
+
+		/**
+		 * @brief	Returns the style type for the menu bar menu item buttons.
+		 */
+		static const String& getMenuItemButtonStyleType();
+
 		/**
 		 * @brief	Constructs a new menu bar.
 		 *
@@ -77,27 +97,6 @@ namespace BansheeEngine
 		 */
 		void removeMenuItem(const WString& path);
 	private:
-		static const UINT32 NUM_ELEMENTS_AFTER_CONTENT;
-		static const UINT32 ELEMENT_SPACING;
-
-		RenderWindow* mParentWindow;
-		CGUIWidget* mParentWidget;
-		GUIPanel* mMainPanel;
-		GUIPanel* mBgPanel;
-		GUILayout* mMainLayout;
-		GUITexture* mBgTexture;
-		GUITexture* mLogoTexture;
-
-		GUIButton* mMinBtn;
-		GUIButton* mMaxBtn;
-		GUIButton* mCloseBtn;
-
-		Vector<GUIMenuBarData> mChildMenus;
-		UnorderedMap<WString, ShortcutKey> mEntryShortcuts;
-
-		GUIButton* mSubMenuButton;
-		bool mSubMenuOpen;
-
 		/**
 		 * @brief	Finds a top level sub-menu with the specified name.
 		 */
@@ -146,6 +145,11 @@ namespace BansheeEngine
 		 */
 		void onSubMenuHover(const WString& name);
 
+		/**
+		 * @brief	Triggered when the user leaves the area of a menu item button.
+		 */
+		void onSubMenuOut();
+
 		/**
 		 * @brief	Triggered when a sub-menu is closed.
 		 */
@@ -169,11 +173,38 @@ namespace BansheeEngine
 		 */
 		void onCloseClicked();
 
+		/**
+		 * @brief	Changes the look for the menu bar depending whether it's being interacted with or not.
+		 */
+		void setActiveState(bool active);
+
 		/**
 		 * @brief	Refreshes the OS client area that allow the window to be dragged
 		 *			by dragging the empty areas on the menu bar. Should be called when top
 		 *			level button configuration changes or menu bar area changes.
 		 */
 		void refreshNonClientAreas();
+
+		static const UINT32 NUM_ELEMENTS_AFTER_CONTENT;
+		static const UINT32 ELEMENT_SPACING;
+
+		RenderWindow* mParentWindow;
+		CGUIWidget* mParentWidget;
+		GUIPanel* mMainPanel;
+		GUIPanel* mBgPanel;
+		GUILayout* mMenuItemLayout;
+		GUITexture* mBgTexture;
+		GUITexture* mLogoTexture;
+		GUITexture* mSplitterLine;
+
+		GUIButton* mMinBtn;
+		GUIButton* mMaxBtn;
+		GUIButton* mCloseBtn;
+
+		Vector<GUIMenuBarData> mChildMenus;
+		UnorderedMap<WString, ShortcutKey> mEntryShortcuts;
+
+		GUIButton* mSubMenuButton;
+		bool mSubMenuOpen;
 	};
 }

+ 3 - 0
BansheeEditor/Include/BsMainEditorWindow.h

@@ -50,6 +50,9 @@ namespace BansheeEngine
 		MainEditorWindow(const RenderWindowPtr& renderWindow);
 
 	protected:
+		static const UINT32 MENU_BAR_HEIGHT;
+		static const UINT32 STATUS_BAR_HEIGHT;
+
 		GUIMenuBar* mMenuBar;
 		DockManager* mDockManager;
 		GUIStatusBar* mStatusBar;

+ 30 - 18
BansheeEditor/Source/BsBuiltinEditorResources.cpp

@@ -26,6 +26,7 @@
 #include "BsGUISlider.h"
 #include "BsGUIDropDownContent.h"
 #include "BsGUIStatusBar.h"
+#include "BsGUIMenuBar.h"
 
 #include "BsFont.h"
 #include "BsFontImportOptions.h"
@@ -208,12 +209,15 @@ namespace BansheeEngine
 
 	const WString BuiltinEditorResources::ScrollBarBgTex = L"ScrollBarBg.psd";
 
-	const WString BuiltinEditorResources::MenuBarBgTex = L"MenuBarBg.psd";
+	const WString BuiltinEditorResources::MenuBarBgTex = L"MenuBarBackground.png";
+	const WString BuiltinEditorResources::MenuBarBansheeLogoTex = L"MenuBarLog.png";
 
-	const WString BuiltinEditorResources::MenuBarBtnNormalTex = L"MenuBarButtonNormal.psd";
-	const WString BuiltinEditorResources::MenuBarBtnHoverTex = L"MenuBarButtonHover.psd";
+	const WString BuiltinEditorResources::MenuBarBtnNormalTex = L"MenuBarButtonNormal.png";
+	const WString BuiltinEditorResources::MenuBarBtnActiveTex = L"MenuBarButtonActive.png";
+	const WString BuiltinEditorResources::MenuBarBtnHoverTex = L"MenuBarButtonHover.png";
 
-	const WString BuiltinEditorResources::MenuBarBansheeLogoTex = L"MenuBarBansheeLogo.psd";
+	const WString BuiltinEditorResources::MenuBarLineNormalTex = L"MenuBarLineNormal.png";
+	const WString BuiltinEditorResources::MenuBarLineActiveTex = L"MenuBarLineActive.png";
 
 	const WString BuiltinEditorResources::DockSliderNormalTex = L"DockSliderNormal.png";
 
@@ -957,31 +961,39 @@ namespace BansheeEngine
 		// MenuBar background
 		GUIElementStyle menuBarBgStyle;
 		menuBarBgStyle.normal.texture = getGUITexture(MenuBarBgTex);
-		menuBarBgStyle.fixedHeight = false;
-		menuBarBgStyle.fixedWidth = false;
-		menuBarBgStyle.height = 4;
-		menuBarBgStyle.width = 4;
+		menuBarBgStyle.height = 14;
+		menuBarBgStyle.width = 2;
+		menuBarBgStyle.border.bottom = 2;
 
-		skin->setStyle("MenuBarBg", menuBarBgStyle);
+		skin->setStyle(GUIMenuBar::getBackgroundStyleType(), menuBarBgStyle);
+
+		// MenuBar separator line
+		GUIElementStyle menuBarLineStyle;
+		menuBarLineStyle.normal.texture = getGUITexture(MenuBarLineNormalTex);
+		menuBarLineStyle.normalOn.texture = getGUITexture(MenuBarBtnActiveTex);
+		menuBarLineStyle.fixedHeight = true;
+		menuBarLineStyle.height = 1;
+
+		skin->setStyle(GUIMenuBar::getLineStyleType(), menuBarLineStyle);
 
 		// MenuBar Banshee logo
 		GUIElementStyle menuBarBansheeLogoStyle;
 		menuBarBansheeLogoStyle.normal.texture = getGUITexture(MenuBarBansheeLogoTex);
 		menuBarBansheeLogoStyle.fixedHeight = true;
 		menuBarBansheeLogoStyle.fixedWidth = true;
-		menuBarBansheeLogoStyle.height = 7;
-		menuBarBansheeLogoStyle.width = 51;
+		menuBarBansheeLogoStyle.height = 46;
+		menuBarBansheeLogoStyle.width = 46;
 
-		skin->setStyle("MenuBarBansheeLogo", menuBarBansheeLogoStyle);
+		skin->setStyle(GUIMenuBar::getLogoStyleType(), menuBarBansheeLogoStyle);
 
 		// MenuBar button
 		GUIElementStyle menuBarBtnStyle;
 		menuBarBtnStyle.normal.texture = getGUITexture(MenuBarBtnNormalTex);
 		menuBarBtnStyle.hover.texture = getGUITexture(MenuBarBtnHoverTex);
-		menuBarBtnStyle.active.texture = menuBarBtnStyle.hover.texture;
-		menuBarBtnStyle.normalOn.texture = menuBarBtnStyle.hover.texture;
-		menuBarBtnStyle.hoverOn.texture = menuBarBtnStyle.hover.texture;
-		menuBarBtnStyle.activeOn.texture = menuBarBtnStyle.hover.texture;
+		menuBarBtnStyle.active.texture = getGUITexture(MenuBarBtnActiveTex);
+		menuBarBtnStyle.normalOn.texture = menuBarBtnStyle.active.texture;
+		menuBarBtnStyle.hoverOn.texture = menuBarBtnStyle.active.texture;
+		menuBarBtnStyle.activeOn.texture = menuBarBtnStyle.active.texture;
 		menuBarBtnStyle.normal.textColor = TextNormalColor;
 		menuBarBtnStyle.hover.textColor = TextNormalColor;
 		menuBarBtnStyle.active.textColor = TextActiveColor;
@@ -990,7 +1002,7 @@ namespace BansheeEngine
 		menuBarBtnStyle.activeOn.textColor = TextActiveColor;
 		menuBarBtnStyle.fixedHeight = true;
 		menuBarBtnStyle.fixedWidth = false;
-		menuBarBtnStyle.height = 15;
+		menuBarBtnStyle.height = 14;
 		menuBarBtnStyle.width = 4;
 		menuBarBtnStyle.margins.left = 2;
 		menuBarBtnStyle.margins.right = 2;
@@ -1001,7 +1013,7 @@ namespace BansheeEngine
 		menuBarBtnStyle.textHorzAlign = THA_Left;
 		menuBarBtnStyle.textVertAlign = TVA_Top;
 
-		skin->setStyle("MenuBarBtn", menuBarBtnStyle);
+		skin->setStyle(GUIMenuBar::getMenuItemButtonStyleType(), menuBarBtnStyle);
 
 		/************************************************************************/
 		/* 								DOCK SLIDER	                     		*/

+ 77 - 25
BansheeEditor/Source/BsGUIMenuBar.cpp

@@ -4,6 +4,7 @@
 #include "BsGUIButton.h"
 #include "BsGUITexture.h"
 #include "BsGUILayoutX.h"
+#include "BsGUILayoutY.h"
 #include "BsGUISpace.h"
 #include "BsGUIMenu.h"
 #include "BsGUIManager.h"
@@ -19,41 +20,71 @@ namespace BansheeEngine
 	const UINT32 GUIMenuBar::NUM_ELEMENTS_AFTER_CONTENT = 8;
 	const UINT32 GUIMenuBar::ELEMENT_SPACING = 10;
 
+	const String& GUIMenuBar::getBackgroundStyleType()
+	{
+		static const String type = "MenuBarBg";
+		return type;
+	}
+
+	const String& GUIMenuBar::getLineStyleType()
+	{
+		static const String type = "MenuBarLine";
+		return type;
+	}
+
+	const String& GUIMenuBar::getLogoStyleType()
+	{
+		static const String type = "MenuBarBansheeLogo";
+		return type;
+	}
+
+	const String& GUIMenuBar::getMenuItemButtonStyleType()
+	{
+		static const String type = "MenuBarBtn";
+		return type;
+	}
+
 	GUIMenuBar::GUIMenuBar(CGUIWidget* parent, RenderWindow* parentWindow)
-		:mParentWidget(parent), mParentWindow(parentWindow), mMainPanel(nullptr), mMainLayout(nullptr),
+		:mParentWidget(parent), mParentWindow(parentWindow), mMainPanel(nullptr), mMenuItemLayout(nullptr),
 		mBgTexture(nullptr), mLogoTexture(nullptr), mSubMenuOpen(false), mSubMenuButton(nullptr), mBgPanel(nullptr)
 	{
 		mMainPanel = parent->getPanel()->addNewElement<GUIPanel>(std::numeric_limits<INT16>::min() + 10);
 		mMainPanel->setWidth(1);
-		mMainPanel->setHeight(13);
+		mMainPanel->setHeight(50);
 
-		mBgPanel = parent->getPanel()->addNewElement<GUIPanel>(std::numeric_limits<INT16>::min() + 11);
+		mBgPanel = parent->getPanel()->addNewElement<GUIPanel>(std::numeric_limits<INT16>::min() + 15);
 		mBgPanel->setWidth(1);
-		mBgPanel->setHeight(13);
+		mBgPanel->setHeight(50);
 
-		mMainLayout = mMainPanel->addNewElement<GUILayoutX>();
-		GUILayoutX* bgLayout = mBgPanel->addNewElement<GUILayoutX>();
+		mBgTexture = GUITexture::create(GUIImageScaleMode::StretchToFit,
+			GUIOptions(GUIOption::flexibleWidth(), GUIOption::flexibleHeight()), getBackgroundStyleType());
 
-		mBgTexture = GUITexture::create(GUIImageScaleMode::StretchToFit, GUIOptions(GUIOption::flexibleWidth(), GUIOption::flexibleHeight()), "MenuBarBg");
+		GUILayoutX* bgLayout = mBgPanel->addNewElement<GUILayoutX>();
 		bgLayout->addElement(mBgTexture);
 
-		mLogoTexture = GUITexture::create(GUIImageScaleMode::StretchToFit, "MenuBarBansheeLogo");
-
-		mMainLayout->addElement(mLogoTexture);
-		mMainLayout->addNewElement<GUIFixedSpace>(5);
-		mMainLayout->addNewElement<GUIFlexibleSpace>();
-
+		mLogoTexture = GUITexture::create(GUIImageScaleMode::StretchToFit, getLogoStyleType());
 		mMinBtn = GUIButton::create(HString(L""), "WinMinimizeBtn");
 		mMaxBtn = GUIButton::create(HString(L""), "WinMaximizeBtn");
 		mCloseBtn = GUIButton::create(HString(L""), "WinCloseBtn");
+		mSplitterLine = GUITexture::create(GUIImageScaleMode::StretchToFit, getLineStyleType());
 
-		mMainLayout->addNewElement<GUIFixedSpace>(3);
-		mMainLayout->addElement(mMinBtn);
-		mMainLayout->addNewElement<GUIFixedSpace>(3);
-		mMainLayout->addElement(mMaxBtn);
-		mMainLayout->addNewElement<GUIFixedSpace>(3);
-		mMainLayout->addElement(mCloseBtn);
-		mMainLayout->addNewElement<GUIFixedSpace>(3);
+		GUILayout* mainLayout = mMainPanel->addNewElement<GUILayoutX>();
+		mainLayout->addElement(mLogoTexture);
+		mainLayout->addNewElement<GUIFixedSpace>(5);
+
+		GUILayout* mainLayoutVert = mainLayout->addNewElement<GUILayoutY>();
+		mMenuItemLayout = mainLayoutVert->addNewElement<GUILayoutX>();
+		mainLayoutVert->addElement(mSplitterLine);
+		mainLayoutVert->addNewElement<GUIFlexibleSpace>(); // Note: Insert layout for toolbar buttons here
+		
+		mMenuItemLayout->addNewElement<GUIFlexibleSpace>();
+		mMenuItemLayout->addNewElement<GUIFixedSpace>(3);
+		mMenuItemLayout->addElement(mMinBtn);
+		mMenuItemLayout->addNewElement<GUIFixedSpace>(3);
+		mMenuItemLayout->addElement(mMaxBtn);
+		mMenuItemLayout->addNewElement<GUIFixedSpace>(3);
+		mMenuItemLayout->addElement(mCloseBtn);
+		mMenuItemLayout->addNewElement<GUIFixedSpace>(3);
 
 		mMinBtn->onClick.connect(std::bind(&GUIMenuBar::onMinimizeClicked, this));
 		mMaxBtn->onClick.connect(std::bind(&GUIMenuBar::onMaximizeClicked, this));
@@ -145,9 +176,10 @@ namespace BansheeEngine
 		GUIButton* newButton = GUIButton::create(HString(name), "MenuBarBtn");
 		newButton->onClick.connect(std::bind(&GUIMenuBar::openSubMenu, this, name));
 		newButton->onHover.connect(std::bind(&GUIMenuBar::onSubMenuHover, this, name));
+		newButton->onOut.connect(std::bind(&GUIMenuBar::onSubMenuOut, this));
 
-		GUIFixedSpace* space = mMainLayout->insertNewElement<GUIFixedSpace>(mMainLayout->getNumChildren() - NUM_ELEMENTS_AFTER_CONTENT, ELEMENT_SPACING);
-		mMainLayout->insertElement(mMainLayout->getNumChildren() - NUM_ELEMENTS_AFTER_CONTENT, newButton);
+		GUIFixedSpace* space = mMenuItemLayout->insertNewElement<GUIFixedSpace>(mMenuItemLayout->getNumChildren() - NUM_ELEMENTS_AFTER_CONTENT, ELEMENT_SPACING);
+		mMenuItemLayout->insertElement(mMenuItemLayout->getNumChildren() - NUM_ELEMENTS_AFTER_CONTENT, newButton);
 
 		newSubMenu.button = newButton;
 		newSubMenu.space = space;
@@ -196,8 +228,8 @@ namespace BansheeEngine
 			if(subMenuToRemove == nullptr)
 				return;
 
-			mMainLayout->removeElement(subMenuToRemove->button);
-			mMainLayout->removeElement(subMenuToRemove->space);
+			mMenuItemLayout->removeElement(subMenuToRemove->button);
+			mMenuItemLayout->removeElement(subMenuToRemove->space);
 			GUIElement::destroy(subMenuToRemove->button);
 			GUIFixedSpace::destroy(subMenuToRemove->space);
 			bs_delete(subMenuToRemove->menu);
@@ -315,11 +347,14 @@ namespace BansheeEngine
 
 			mSubMenuButton->_setOn(false);
 			mSubMenuOpen = false;
+			setActiveState(false);
 		}		
 	}
 
 	void GUIMenuBar::onSubMenuHover(const WString& name)
 	{
+		setActiveState(true);
+
 		if(mSubMenuOpen)
 		{
 			const GUIMenuBarData* subMenu = getSubMenu(name);
@@ -332,10 +367,17 @@ namespace BansheeEngine
 		}
 	}
 
+	void GUIMenuBar::onSubMenuOut()
+	{
+		if (!mSubMenuOpen)
+			setActiveState(false);
+	}
+
 	void GUIMenuBar::onSubMenuClosed()
 	{
 		mSubMenuButton->_setOn(false);
 		mSubMenuOpen = false;
+		setActiveState(false);
 	}
 
 	void GUIMenuBar::onMinimizeClicked()
@@ -356,9 +398,19 @@ namespace BansheeEngine
 		gCoreApplication().stopMainLoop();
 	}
 
+	void GUIMenuBar::setActiveState(bool active)
+	{
+		const GUIElementStyle* style = mParentWidget->getSkin().getStyle(getLineStyleType());
+
+		if (active)
+			mSplitterLine->setTexture(style->normalOn.texture);
+		else
+			mSplitterLine->setTexture(style->normal.texture);
+	}
+
 	void GUIMenuBar::refreshNonClientAreas()
 	{
-		Rect2I mainArea = mMainLayout->getBounds();
+		Rect2I mainArea = mMenuItemLayout->getBounds();
 
 		Vector<Rect2I> nonClientAreas;
 		nonClientAreas.push_back(mLogoTexture->getBounds());

+ 8 - 7
BansheeEditor/Source/BsMainEditorWindow.cpp

@@ -10,6 +10,9 @@
 
 namespace BansheeEngine
 {
+	const UINT32 MainEditorWindow::MENU_BAR_HEIGHT = 50;
+	const UINT32 MainEditorWindow::STATUS_BAR_HEIGHT = 21;
+
 	MainEditorWindow* MainEditorWindow::create(const RenderWindowPtr& renderWindow)
 	{
 		return EditorWindowManager::instance().createMain(renderWindow);
@@ -53,16 +56,14 @@ namespace BansheeEngine
 		UINT32 widgetWidth = (UINT32)std::max(0, (INT32)getWidth() - 2);
 		UINT32 widgetHeight = (UINT32)std::max(0, (INT32)getHeight() - 2);
 
-		UINT32 menuBarHeight = 15;
-		mMenuBar->setArea(1, 1, widgetWidth, menuBarHeight);
+		mMenuBar->setArea(1, 1, widgetWidth, MENU_BAR_HEIGHT);
 
-		UINT32 statusBarHeight = 21;
-		UINT32 dockHeight = (UINT32)std::max(0, (INT32)widgetHeight - (INT32)(menuBarHeight + statusBarHeight));
-		mDockManager->setArea(1, menuBarHeight + 1, widgetWidth, dockHeight);
+		UINT32 dockHeight = (UINT32)std::max(0, (INT32)widgetHeight - (INT32)(MENU_BAR_HEIGHT + STATUS_BAR_HEIGHT));
+		mDockManager->setArea(1, MENU_BAR_HEIGHT + 1, widgetWidth, dockHeight);
 
-		mStatusBar->setPosition(1, 1 + menuBarHeight + dockHeight);
+		mStatusBar->setPosition(1, 1 + MENU_BAR_HEIGHT + dockHeight);
 		mStatusBar->setWidth(widgetWidth);
-		mStatusBar->setHeight(statusBarHeight);
+		mStatusBar->setHeight(STATUS_BAR_HEIGHT);
 	}
 
 	void MainEditorWindow::update()

+ 6 - 0
BansheeEngine/Include/BsGUIPanel.h

@@ -69,6 +69,12 @@ namespace BansheeEngine
 		 */
 		void _updateLayoutInternal(const GUILayoutData& data) override;
 
+		/**
+		 * @brief	Updates the provided depth range by taking into consideration the depth range of the panel.
+		 * 			This depth range should be passed on to child elements of the panel.
+		 */
+		void _updateDepthRange(GUILayoutData& data);
+
 		/**
 		 * @brief	Changes values that control at which depth is GUI panel and its children rendered.
 		 *

+ 1 - 0
BansheeEngine/Source/BsCGUIWidget.cpp

@@ -185,6 +185,7 @@ namespace BansheeEngine
 			Rect2I elementArea = panel->_getElementArea(panel->_getLayoutData().area, dirtyElement, elementSizeRange);
 
 			GUILayoutData childLayoutData = panel->_getLayoutData();
+			panel->_updateDepthRange(childLayoutData);
 			childLayoutData.area = elementArea;
 
 			panel->_updateChildLayout(dirtyElement, childLayoutData);

+ 13 - 8
BansheeEngine/Source/BsGUIPanel.cpp

@@ -161,7 +161,7 @@ namespace BansheeEngine
 		return area;
 	}
 
-	void GUIPanel::_updateLayoutInternal(const GUILayoutData& data)
+	void GUIPanel::_updateDepthRange(GUILayoutData& data)
 	{
 		INT32 newPanelDepth = data.getPanelDepth() + mDepthOffset;
 		INT32 newPanelDepthRangeMin = newPanelDepth - mDepthRangeMin;
@@ -178,14 +178,19 @@ namespace BansheeEngine
 			*depth = std::min(*depth, maxValue);
 		}
 
-		GUILayoutData childData = data;
-		childData.setPanelDepth((INT16)newPanelDepth);
-		
-		if (mDepthRangeMin != (UINT16)-1 || childData.depthRangeMin != (UINT16)-1)
-			childData.depthRangeMin = (UINT16)(newPanelDepth - newPanelDepthRangeMin);
+		data.setPanelDepth((INT16)newPanelDepth);
+
+		if (mDepthRangeMin != (UINT16)-1 || data.depthRangeMin != (UINT16)-1)
+			data.depthRangeMin = (UINT16)(newPanelDepth - newPanelDepthRangeMin);
+
+		if (mDepthRangeMax != (UINT16)-1 || data.depthRangeMax != (UINT16)-1)
+			data.depthRangeMax = (UINT16)(newPanelDepthRangeMax - newPanelDepth);
+	}
 
-		if (mDepthRangeMax != (UINT16)-1 || childData.depthRangeMax != (UINT16)-1)
-			childData.depthRangeMax = (UINT16)(newPanelDepthRangeMax - newPanelDepth);
+	void GUIPanel::_updateLayoutInternal(const GUILayoutData& data)
+	{
+		GUILayoutData childData = data;
+		_updateDepthRange(childData);
 
 		UINT32 numElements = (UINT32)mChildren.size();
 		Rect2I* elementAreas = nullptr;

+ 7 - 0
TODOExperimentation.txt

@@ -6,6 +6,13 @@ Determine how is light bleeding handled (if at all)
 
 ---------------------- IMPLEMENTATION ---------------------------
 
+Next week:
+ - Store render targets per camera (create and update them as needed)
+ - Create shaders that write to gbuffer (DX11/OpenGL only)
+ - Create shaders that render lights for deferred rendering
+ - Think about how to handle post-processing shaders (HDR tone mapping)
+ - Add cube and 3D support for render texture pool
+
 RenderTexturePool needs support for cube and 3D textures
 Lights need getLightMesh() method
  - Need cone to use when rendering spot light, sphere otherwise