Layout.cpp 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "Base.h"
  2. #include "Layout.h"
  3. #include "Control.h"
  4. #include "Container.h"
  5. #include "Game.h"
  6. namespace gameplay
  7. {
  8. void Layout::align(Control* control, const Container* container)
  9. {
  10. GP_ASSERT(control);
  11. if (control->_alignment != Control::ALIGN_TOP_LEFT ||
  12. control->_isAlignmentSet)
  13. {
  14. const Rectangle& controlBounds = control->getBounds();
  15. const Theme::Margin& controlMargin = control->getMargin();
  16. const Rectangle& containerBounds = container ? container->getBounds() : Game::getInstance()->getViewport();
  17. const Theme::Border& containerBorder = container ? container->getBorder(container->getState()) : Theme::Border::empty();
  18. const Theme::Padding& containerPadding = container ? container->getPadding() : Theme::Padding::empty();
  19. float clipWidth;
  20. float clipHeight;
  21. if (container && (container->getScroll() != Container::SCROLL_NONE))
  22. {
  23. const Rectangle& verticalScrollBarBounds = container->getImageRegion("verticalScrollBar", container->getState());
  24. const Rectangle& horizontalScrollBarBounds = container->getImageRegion("horizontalScrollBar", container->getState());
  25. clipWidth = containerBounds.width - containerBorder.left - containerBorder.right - containerPadding.left - containerPadding.right - verticalScrollBarBounds.width;
  26. clipHeight = containerBounds.height - containerBorder.top - containerBorder.bottom - containerPadding.top - containerPadding.bottom - horizontalScrollBarBounds.height;
  27. }
  28. else
  29. {
  30. clipWidth = containerBounds.width - containerBorder.left - containerBorder.right - containerPadding.left - containerPadding.right;
  31. clipHeight = containerBounds.height - containerBorder.top - containerBorder.bottom - containerPadding.top - containerPadding.bottom;
  32. }
  33. // Vertical alignment
  34. if (control->_isAlignmentSet || control->_autoHeight)
  35. {
  36. if ((control->_alignment & Control::ALIGN_BOTTOM) == Control::ALIGN_BOTTOM)
  37. {
  38. control->setY(clipHeight - controlBounds.height - controlMargin.bottom);
  39. }
  40. else if ((control->_alignment & Control::ALIGN_VCENTER) == Control::ALIGN_VCENTER)
  41. {
  42. control->setY(clipHeight * 0.5f - controlBounds.height * 0.5f);
  43. }
  44. else if ((control->_alignment & Control::ALIGN_TOP) == Control::ALIGN_TOP)
  45. {
  46. control->setY(controlMargin.top);
  47. }
  48. }
  49. // Horizontal alignment
  50. if (control->_isAlignmentSet)
  51. {
  52. if ((control->_alignment & Control::ALIGN_RIGHT) == Control::ALIGN_RIGHT)
  53. {
  54. control->setX(clipWidth - controlBounds.width - controlMargin.right);
  55. }
  56. else if ((control->_alignment & Control::ALIGN_HCENTER) == Control::ALIGN_HCENTER)
  57. {
  58. control->setX(clipWidth * 0.5f - controlBounds.width * 0.5f);
  59. }
  60. else if ((control->_alignment & Control::ALIGN_LEFT) == Control::ALIGN_LEFT)
  61. {
  62. control->setX(controlMargin.left);
  63. }
  64. }
  65. }
  66. }
  67. bool Layout::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
  68. {
  69. return false;
  70. }
  71. }