BsModalWindow.cpp 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #include "BsModalWindow.h"
  2. #include "BsEditorWindowManager.h"
  3. #include "BsRenderWindow.h"
  4. #include "BsPlatform.h"
  5. #include "BsGUIArea.h"
  6. #include "BsGUILayoutX.h"
  7. #include "BsGUISpace.h"
  8. #include "BsGUIButton.h"
  9. #include "BsGUITexture.h"
  10. #include "BsGUILabel.h"
  11. namespace BansheeEngine
  12. {
  13. ModalWindow::ModalWindow(const HString& title, bool hasCloseButton)
  14. :EditorWindowBase(true), mTitleBarArea(nullptr), mTitleBarBgArea(nullptr),
  15. mCloseButton(nullptr), mTitleBarBg(nullptr), mTitle(nullptr)
  16. {
  17. mTitleBarBgArea = GUIArea::createStretchedXY(*mGUI, 1, 1, 1, 1, std::numeric_limits<UINT16>::max() - 1);
  18. mTitleBarArea = GUIArea::createStretchedXY(*mGUI, 1, 1, 1, 1, 0);
  19. mTitleBarBg = GUITexture::create(GUIOptions(GUIOption::flexibleWidth()), "TitleBarBackground");
  20. mTitle = GUILabel::create(title);
  21. GUILayout& bgLayout = mTitleBarBgArea->getLayout().addLayoutY();
  22. bgLayout.addElement(mTitleBarBg);
  23. bgLayout.addFlexibleSpace();
  24. GUILayout& contentLayoutY = mTitleBarArea->getLayout().addLayoutY();
  25. GUILayout& contentLayoutX = contentLayoutY.addLayoutX();
  26. contentLayoutX.addFlexibleSpace();
  27. GUILayout& titleLayout = contentLayoutX.addLayoutY();
  28. titleLayout.addFlexibleSpace();
  29. titleLayout.addElement(mTitle);
  30. titleLayout.addFlexibleSpace();
  31. contentLayoutX.addFlexibleSpace();
  32. if (hasCloseButton)
  33. {
  34. mCloseButton = GUIButton::create(HString(L""), "WinCloseBtn");
  35. contentLayoutX.addElement(mCloseButton);
  36. mCloseButton->onClick.connect(std::bind(&ModalWindow::close, this));
  37. }
  38. contentLayoutY.addFlexibleSpace();
  39. updateSize();
  40. }
  41. ModalWindow::~ModalWindow()
  42. {
  43. }
  44. void ModalWindow::update()
  45. {
  46. }
  47. void ModalWindow::close()
  48. {
  49. bs_delete(this);
  50. }
  51. void ModalWindow::setTitle(const HString& title)
  52. {
  53. mTitle->setContent(GUIContent(title));
  54. }
  55. void ModalWindow::resized()
  56. {
  57. EditorWindowBase::resized();
  58. updateSize();
  59. }
  60. void ModalWindow::updateSize()
  61. {
  62. Vector<Rect2I> captionAreas;
  63. captionAreas.push_back(Rect2I(1, 1, getWidth() - 2, getTitleBarHeight()));
  64. Platform::setCaptionNonClientAreas(*mRenderWindow->getCore().get(), captionAreas);
  65. }
  66. Rect2I ModalWindow::getContentArea() const
  67. {
  68. return Rect2I(1, 1 + getTitleBarHeight(), getWidth() - 2, getHeight() - getTitleBarHeight() - 2);
  69. }
  70. UINT32 ModalWindow::getTitleBarHeight() const
  71. {
  72. return mTitleBarBg->getBounds().height;
  73. }
  74. }