BsGUIPanelContainer.cpp 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #include "BsGUIPanelContainer.h"
  2. #include "BsGUIArea.h"
  3. #include "BsGUILayout.h"
  4. #include "BsGUIWidget.h"
  5. #include "BsScriptGUIArea.h"
  6. namespace BansheeEngine
  7. {
  8. GUIPanelContainer::GUIPanelContainer(const PrivatelyConstruct& dummy, const ScriptGUIPanel& guiPanel, const GUILayoutOptions& layoutOptions)
  9. :GUIElementContainer(layoutOptions), mGUIPanel(&guiPanel)
  10. {
  11. }
  12. GUIPanelContainer::~GUIPanelContainer()
  13. {
  14. }
  15. GUIPanelContainer* GUIPanelContainer::create(const ScriptGUIPanel& guiPanel, const GUIOptions& layoutOptions)
  16. {
  17. return bs_new<GUIPanelContainer>(PrivatelyConstruct(), guiPanel, GUILayoutOptions::create(layoutOptions));
  18. }
  19. GUIPanelContainer* GUIPanelContainer::create(const ScriptGUIPanel& guiPanel)
  20. {
  21. return bs_new<GUIPanelContainer>(PrivatelyConstruct(), guiPanel, GUILayoutOptions::create());
  22. }
  23. void GUIPanelContainer::_updateLayoutInternal(INT32 x, INT32 y, UINT32 width, UINT32 height,
  24. RectI clipRect, UINT8 widgetDepth, UINT16 areaDepth)
  25. {
  26. const Vector<ScriptGUIArea*> areas = mGUIPanel->getAreas();
  27. for (auto& scriptArea : areas)
  28. {
  29. GUIArea* area = scriptArea->getInternalValue();
  30. if (area->x() != x || area->y() != y)
  31. area->setPosition(x, y);
  32. if (area->width() != width || area->height() != height)
  33. area->setSize(width, height);
  34. // We want to force the layout update right away otherwise it might get delayed until next frame.
  35. // (Since we are currently in a middle of a layout update its possible this area was already processed)
  36. area->_update();
  37. }
  38. }
  39. Vector2I GUIPanelContainer::_getOptimalSize() const
  40. {
  41. return Vector2I(0, 0);
  42. }
  43. const String& GUIPanelContainer::getGUITypeName()
  44. {
  45. static String typeName = "GUIAreaContainer";
  46. return typeName;
  47. }
  48. }