| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- #include "Base.h"
- #include "Layout.h"
- #include "Control.h"
- #include "Container.h"
- namespace gameplay
- {
- void Layout::align(Control* control, const Container* container)
- {
- GP_ASSERT(control);
- GP_ASSERT(container);
- if (control->_alignment != Control::ALIGN_TOP_LEFT ||
- control->_isAlignmentSet ||
- control->_autoWidth || control->_autoHeight)
- {
- Rectangle controlBounds = control->getBounds();
- const Theme::Margin& controlMargin = control->getMargin();
- const Rectangle& containerBounds = container->getBounds();
- const Theme::Border& containerBorder = container->getBorder(container->getState());
- const Theme::Padding& containerPadding = container->getPadding();
- float clipWidth;
- float clipHeight;
- if (container->getScroll() != Container::SCROLL_NONE)
- {
- const Rectangle& verticalScrollBarBounds = container->getImageRegion("verticalScrollBar", container->getState());
- const Rectangle& horizontalScrollBarBounds = container->getImageRegion("horizontalScrollBar", container->getState());
- clipWidth = containerBounds.width - containerBorder.left - containerBorder.right - containerPadding.left - containerPadding.right - verticalScrollBarBounds.width;
- clipHeight = containerBounds.height - containerBorder.top - containerBorder.bottom - containerPadding.top - containerPadding.bottom - horizontalScrollBarBounds.height;
- }
- else
- {
- clipWidth = containerBounds.width - containerBorder.left - containerBorder.right - containerPadding.left - containerPadding.right;
- clipHeight = containerBounds.height - containerBorder.top - containerBorder.bottom - containerPadding.top - containerPadding.bottom;
- }
- if (control->_autoWidth)
- {
- controlBounds.width = clipWidth - controlMargin.left - controlMargin.right;
- }
- if (control->_autoHeight)
- {
- controlBounds.height = clipHeight - controlMargin.top - controlMargin.bottom;
- }
- // Vertical alignment
- if ((control->_alignment & Control::ALIGN_BOTTOM) == Control::ALIGN_BOTTOM)
- {
- controlBounds.y = clipHeight - controlBounds.height - controlMargin.bottom;
- }
- else if ((control->_alignment & Control::ALIGN_VCENTER) == Control::ALIGN_VCENTER)
- {
- controlBounds.y = clipHeight * 0.5f - controlBounds.height * 0.5f;
- }
- else if ((control->_alignment & Control::ALIGN_TOP) == Control::ALIGN_TOP)
- {
- controlBounds.y = controlMargin.top;
- }
- // Horizontal alignment
- if ((control->_alignment & Control::ALIGN_RIGHT) == Control::ALIGN_RIGHT)
- {
- controlBounds.x = clipWidth - controlBounds.width - controlMargin.right;
- }
- else if ((control->_alignment & Control::ALIGN_HCENTER) == Control::ALIGN_HCENTER)
- {
- controlBounds.x = clipWidth * 0.5f - controlBounds.width * 0.5f;
- }
- else if ((control->_alignment & Control::ALIGN_LEFT) == Control::ALIGN_LEFT)
- {
- controlBounds.x = controlMargin.left;
- }
- control->setBounds(controlBounds);
- }
- }
- bool Layout::touchEvent(Touch::TouchEvent evt, int x, int y, unsigned int contactIndex)
- {
- return false;
- }
- }
|