Browse Source

Layouts now take scrollbars into account when auto-sizing controls.

Adam Blake 13 years ago
parent
commit
91cc29dbb3
3 changed files with 9 additions and 4 deletions
  1. 1 1
      gameplay/src/Control.cpp
  2. 4 2
      gameplay/src/Layout.cpp
  3. 4 1
      gameplay/src/ThemeStyle.cpp

+ 1 - 1
gameplay/src/Control.cpp

@@ -7,7 +7,7 @@ namespace gameplay
 
 Control::Control()
     : _id(""), _state(Control::NORMAL), _bounds(Rectangle::empty()), _clipBounds(Rectangle::empty()), _viewportClipBounds(Rectangle::empty()),
-    _clearBounds(Rectangle::empty()), _dirty(true), _consumeInputEvents(true), _listeners(NULL),
+    _clearBounds(Rectangle::empty()), _dirty(true), _consumeInputEvents(true), _autoWidth(false), _autoHeight(false), _listeners(NULL),
     _contactIndex(INVALID_CONTACT_INDEX), _styleOverridden(false), _skin(NULL)
 {
     addScriptEvent("controlEvent", "<Control>[Control::Listener::EventType]");

+ 4 - 2
gameplay/src/Layout.cpp

@@ -19,9 +19,11 @@ void Layout::align(Control* control, const Container* container)
         const Rectangle& containerBounds = container->getBounds();
         const Theme::Border& containerBorder = container->getBorder(container->getState());
         const Theme::Padding& containerPadding = container->getPadding();
+        const Rectangle& verticalScrollBarBounds = container->getImageRegion("verticalScrollBar", container->getState());
+        const Rectangle& horizontalScrollBarBounds = container->getImageRegion("horizontalScrollBar", container->getState());
 
-        float clipWidth = containerBounds.width - containerBorder.left - containerBorder.right - containerPadding.left - containerPadding.right;
-        float clipHeight = containerBounds.height - containerBorder.top - containerBorder.bottom - containerPadding.top - containerPadding.bottom;
+        float clipWidth = containerBounds.width - containerBorder.left - containerBorder.right - containerPadding.left - containerPadding.right - verticalScrollBarBounds.width;
+        float clipHeight = containerBounds.height - containerBorder.top - containerBorder.bottom - containerPadding.top - containerPadding.bottom - horizontalScrollBarBounds.height;
 
         if (control->_autoWidth)
         {

+ 4 - 1
gameplay/src/ThemeStyle.cpp

@@ -271,7 +271,10 @@ void Theme::Style::Overlay::setTextColor(const Vector4& color)
 
 const Rectangle& Theme::Style::Overlay::getImageRegion(const char* id) const
 {
-    GP_ASSERT(_imageList);
+    if (!_imageList)
+    {
+        return Rectangle::empty();
+    }
 
     ThemeImage* image = _imageList->getImage(id);
     if (image)