Przeglądaj źródła

Merge pull request #1142 from reven86/next-clean

Several UI improvements
Sean Paul Taylor 12 lat temu
rodzic
commit
04edbb3da0

+ 13 - 2
gameplay/src/Container.cpp

@@ -407,6 +407,16 @@ bool Container::isScrolling() const
              abs(_scrollingLastY - _scrollingVeryFirstY) > SCROLL_THRESHOLD));
              abs(_scrollingLastY - _scrollingVeryFirstY) > SCROLL_THRESHOLD));
 }
 }
 
 
+const Vector2& Container::getScrollPosition() const
+{
+    return _scrollPosition;
+}
+
+void Container::setScrollPosition(const Vector2& scrollPosition)
+{
+    _scrollPosition = scrollPosition;
+}
+
 Animation* Container::getAnimation(const char* id) const
 Animation* Container::getAnimation(const char* id) const
 {
 {
     std::vector<Control*>::const_iterator itr = _controls.begin();
     std::vector<Control*>::const_iterator itr = _controls.begin();
@@ -1303,6 +1313,7 @@ void Container::updateScroll()
     const Theme::Padding& containerPadding = getPadding();
     const Theme::Padding& containerPadding = getPadding();
 
 
     // Calculate total width and height.
     // Calculate total width and height.
+    _totalWidth = _totalHeight = 0.0f;
     std::vector<Control*> controls = getControls();
     std::vector<Control*> controls = getControls();
     for (size_t i = 0, controlsCount = controls.size(); i < controlsCount; i++)
     for (size_t i = 0, controlsCount = controls.size(); i < controlsCount; i++)
     {
     {
@@ -1311,13 +1322,13 @@ void Container::updateScroll()
         const Rectangle& bounds = control->getBounds();
         const Rectangle& bounds = control->getBounds();
         const Theme::Margin& margin = control->getMargin();
         const Theme::Margin& margin = control->getMargin();
 
 
-        float newWidth = bounds.x + bounds.width;
+        float newWidth = bounds.x + bounds.width + margin.right;
         if (newWidth > _totalWidth)
         if (newWidth > _totalWidth)
         {
         {
             _totalWidth = newWidth;
             _totalWidth = newWidth;
         }
         }
 
 
-        float newHeight = bounds.y + bounds.height;
+        float newHeight = bounds.y + bounds.height + margin.bottom;
         if (newHeight > _totalHeight)
         if (newHeight > _totalHeight)
         {
         {
             _totalHeight = newHeight;
             _totalHeight = newHeight;

+ 10 - 0
gameplay/src/Container.h

@@ -207,6 +207,16 @@ public:
      */
      */
     void setScrollWheelSpeed(float speed);
     void setScrollWheelSpeed(float speed);
 
 
+    /**
+     * Get an offset of how far this layout has been scrolled in each direction.
+     */
+    const Vector2& getScrollPosition() const;
+
+    /**
+     * Set an offset of how far this layout has been scrolled in each direction.
+     */
+    void setScrollPosition(const Vector2& scrollPosition);
+
     /**
     /**
      * @see AnimationTarget::getAnimation
      * @see AnimationTarget::getAnimation
      */
      */

+ 4 - 1
gameplay/src/Control.cpp

@@ -37,7 +37,10 @@ void Control::initialize(Theme::Style* style, Properties* properties)
     _style = style;
     _style = style;
 
 
     // Properties not defined by the style.
     // Properties not defined by the style.
-    _alignment = getAlignment(properties->getString("alignment"));
+    const char * alignmentString = properties->getString("alignment");
+
+    _isAlignmentSet = alignmentString != NULL;
+    _alignment = getAlignment(alignmentString);
     _autoWidth = properties->getBool("autoWidth");
     _autoWidth = properties->getBool("autoWidth");
     _autoHeight = properties->getBool("autoHeight");
     _autoHeight = properties->getBool("autoHeight");
 
 

+ 26 - 20
gameplay/src/Layout.cpp

@@ -47,31 +47,37 @@ void Layout::align(Control* control, const Container* container)
         }
         }
 
 
         // Vertical alignment
         // Vertical alignment
-        if ((control->_alignment & Control::ALIGN_BOTTOM) == Control::ALIGN_BOTTOM)
+        if(control->_isAlignmentSet || control->_autoHeight)
         {
         {
-            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;
+            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
         // 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)
+        if(control->_isAlignmentSet || control->_autoWidth)
         {
         {
-            controlBounds.x = controlMargin.left;
+            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);
         control->setBounds(controlBounds);

+ 88 - 0
gameplay/src/lua/lua_Container.cpp

@@ -76,6 +76,7 @@ void luaRegister_Container()
         {"getPadding", lua_Container_getPadding},
         {"getPadding", lua_Container_getPadding},
         {"getRefCount", lua_Container_getRefCount},
         {"getRefCount", lua_Container_getRefCount},
         {"getScroll", lua_Container_getScroll},
         {"getScroll", lua_Container_getScroll},
+        {"getScrollPosition", lua_Container_getScrollPosition},
         {"getScrollWheelRequiresFocus", lua_Container_getScrollWheelRequiresFocus},
         {"getScrollWheelRequiresFocus", lua_Container_getScrollWheelRequiresFocus},
         {"getScrollWheelSpeed", lua_Container_getScrollWheelSpeed},
         {"getScrollWheelSpeed", lua_Container_getScrollWheelSpeed},
         {"getScrollingFriction", lua_Container_getScrollingFriction},
         {"getScrollingFriction", lua_Container_getScrollingFriction},
@@ -123,6 +124,7 @@ void luaRegister_Container()
         {"setPosition", lua_Container_setPosition},
         {"setPosition", lua_Container_setPosition},
         {"setScroll", lua_Container_setScroll},
         {"setScroll", lua_Container_setScroll},
         {"setScrollBarsAutoHide", lua_Container_setScrollBarsAutoHide},
         {"setScrollBarsAutoHide", lua_Container_setScrollBarsAutoHide},
+        {"setScrollPosition", lua_Container_setScrollPosition},
         {"setScrollWheelRequiresFocus", lua_Container_setScrollWheelRequiresFocus},
         {"setScrollWheelRequiresFocus", lua_Container_setScrollWheelRequiresFocus},
         {"setScrollWheelSpeed", lua_Container_setScrollWheelSpeed},
         {"setScrollWheelSpeed", lua_Container_setScrollWheelSpeed},
         {"setScrollingFriction", lua_Container_setScrollingFriction},
         {"setScrollingFriction", lua_Container_setScrollingFriction},
@@ -2174,6 +2176,50 @@ int lua_Container_getScroll(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_Container_getScrollPosition(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 1:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA))
+            {
+                Container* instance = getInstance(state);
+                void* returnPtr = (void*)&(instance->getScrollPosition());
+                if (returnPtr)
+                {
+                    ScriptUtil::LuaObject* object = (ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(ScriptUtil::LuaObject));
+                    object->instance = returnPtr;
+                    object->owns = false;
+                    luaL_getmetatable(state, "Vector2");
+                    lua_setmetatable(state, -2);
+                }
+                else
+                {
+                    lua_pushnil(state);
+                }
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_Container_getScrollPosition - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_Container_getScrollWheelRequiresFocus(lua_State* state)
 int lua_Container_getScrollWheelRequiresFocus(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.
@@ -4370,6 +4416,48 @@ int lua_Container_setScrollBarsAutoHide(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_Container_setScrollPosition(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 2:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TNIL))
+            {
+                // Get parameter 1 off the stack.
+                bool param1Valid;
+                ScriptUtil::LuaArray<Vector2> param1 = ScriptUtil::getObjectPointer<Vector2>(2, "Vector2", true, &param1Valid);
+                if (!param1Valid)
+                {
+                    lua_pushstring(state, "Failed to convert parameter 1 to type 'Vector2'.");
+                    lua_error(state);
+                }
+
+                Container* instance = getInstance(state);
+                instance->setScrollPosition(*param1);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_Container_setScrollPosition - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 2).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_Container_setScrollWheelRequiresFocus(lua_State* state)
 int lua_Container_setScrollWheelRequiresFocus(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.

+ 2 - 0
gameplay/src/lua/lua_Container.h

@@ -44,6 +44,7 @@ int lua_Container_getOpacity(lua_State* state);
 int lua_Container_getPadding(lua_State* state);
 int lua_Container_getPadding(lua_State* state);
 int lua_Container_getRefCount(lua_State* state);
 int lua_Container_getRefCount(lua_State* state);
 int lua_Container_getScroll(lua_State* state);
 int lua_Container_getScroll(lua_State* state);
+int lua_Container_getScrollPosition(lua_State* state);
 int lua_Container_getScrollWheelRequiresFocus(lua_State* state);
 int lua_Container_getScrollWheelRequiresFocus(lua_State* state);
 int lua_Container_getScrollWheelSpeed(lua_State* state);
 int lua_Container_getScrollWheelSpeed(lua_State* state);
 int lua_Container_getScrollingFriction(lua_State* state);
 int lua_Container_getScrollingFriction(lua_State* state);
@@ -91,6 +92,7 @@ int lua_Container_setPadding(lua_State* state);
 int lua_Container_setPosition(lua_State* state);
 int lua_Container_setPosition(lua_State* state);
 int lua_Container_setScroll(lua_State* state);
 int lua_Container_setScroll(lua_State* state);
 int lua_Container_setScrollBarsAutoHide(lua_State* state);
 int lua_Container_setScrollBarsAutoHide(lua_State* state);
+int lua_Container_setScrollPosition(lua_State* state);
 int lua_Container_setScrollWheelRequiresFocus(lua_State* state);
 int lua_Container_setScrollWheelRequiresFocus(lua_State* state);
 int lua_Container_setScrollWheelSpeed(lua_State* state);
 int lua_Container_setScrollWheelSpeed(lua_State* state);
 int lua_Container_setScrollingFriction(lua_State* state);
 int lua_Container_setScrollingFriction(lua_State* state);

+ 88 - 0
gameplay/src/lua/lua_Form.cpp

@@ -80,6 +80,7 @@ void luaRegister_Form()
         {"getPadding", lua_Form_getPadding},
         {"getPadding", lua_Form_getPadding},
         {"getRefCount", lua_Form_getRefCount},
         {"getRefCount", lua_Form_getRefCount},
         {"getScroll", lua_Form_getScroll},
         {"getScroll", lua_Form_getScroll},
+        {"getScrollPosition", lua_Form_getScrollPosition},
         {"getScrollWheelRequiresFocus", lua_Form_getScrollWheelRequiresFocus},
         {"getScrollWheelRequiresFocus", lua_Form_getScrollWheelRequiresFocus},
         {"getScrollWheelSpeed", lua_Form_getScrollWheelSpeed},
         {"getScrollWheelSpeed", lua_Form_getScrollWheelSpeed},
         {"getScrollingFriction", lua_Form_getScrollingFriction},
         {"getScrollingFriction", lua_Form_getScrollingFriction},
@@ -129,6 +130,7 @@ void luaRegister_Form()
         {"setPosition", lua_Form_setPosition},
         {"setPosition", lua_Form_setPosition},
         {"setScroll", lua_Form_setScroll},
         {"setScroll", lua_Form_setScroll},
         {"setScrollBarsAutoHide", lua_Form_setScrollBarsAutoHide},
         {"setScrollBarsAutoHide", lua_Form_setScrollBarsAutoHide},
+        {"setScrollPosition", lua_Form_setScrollPosition},
         {"setScrollWheelRequiresFocus", lua_Form_setScrollWheelRequiresFocus},
         {"setScrollWheelRequiresFocus", lua_Form_setScrollWheelRequiresFocus},
         {"setScrollWheelSpeed", lua_Form_setScrollWheelSpeed},
         {"setScrollWheelSpeed", lua_Form_setScrollWheelSpeed},
         {"setScrollingFriction", lua_Form_setScrollingFriction},
         {"setScrollingFriction", lua_Form_setScrollingFriction},
@@ -2214,6 +2216,50 @@ int lua_Form_getScroll(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_Form_getScrollPosition(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 1:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA))
+            {
+                Form* instance = getInstance(state);
+                void* returnPtr = (void*)&(instance->getScrollPosition());
+                if (returnPtr)
+                {
+                    ScriptUtil::LuaObject* object = (ScriptUtil::LuaObject*)lua_newuserdata(state, sizeof(ScriptUtil::LuaObject));
+                    object->instance = returnPtr;
+                    object->owns = false;
+                    luaL_getmetatable(state, "Vector2");
+                    lua_setmetatable(state, -2);
+                }
+                else
+                {
+                    lua_pushnil(state);
+                }
+
+                return 1;
+            }
+
+            lua_pushstring(state, "lua_Form_getScrollPosition - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 1).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_Form_getScrollWheelRequiresFocus(lua_State* state)
 int lua_Form_getScrollWheelRequiresFocus(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.
@@ -4496,6 +4542,48 @@ int lua_Form_setScrollBarsAutoHide(lua_State* state)
     return 0;
     return 0;
 }
 }
 
 
+int lua_Form_setScrollPosition(lua_State* state)
+{
+    // Get the number of parameters.
+    int paramCount = lua_gettop(state);
+
+    // Attempt to match the parameters to a valid binding.
+    switch (paramCount)
+    {
+        case 2:
+        {
+            if ((lua_type(state, 1) == LUA_TUSERDATA) &&
+                (lua_type(state, 2) == LUA_TUSERDATA || lua_type(state, 2) == LUA_TNIL))
+            {
+                // Get parameter 1 off the stack.
+                bool param1Valid;
+                ScriptUtil::LuaArray<Vector2> param1 = ScriptUtil::getObjectPointer<Vector2>(2, "Vector2", true, &param1Valid);
+                if (!param1Valid)
+                {
+                    lua_pushstring(state, "Failed to convert parameter 1 to type 'Vector2'.");
+                    lua_error(state);
+                }
+
+                Form* instance = getInstance(state);
+                instance->setScrollPosition(*param1);
+                
+                return 0;
+            }
+
+            lua_pushstring(state, "lua_Form_setScrollPosition - Failed to match the given parameters to a valid function signature.");
+            lua_error(state);
+            break;
+        }
+        default:
+        {
+            lua_pushstring(state, "Invalid number of parameters (expected 2).");
+            lua_error(state);
+            break;
+        }
+    }
+    return 0;
+}
+
 int lua_Form_setScrollWheelRequiresFocus(lua_State* state)
 int lua_Form_setScrollWheelRequiresFocus(lua_State* state)
 {
 {
     // Get the number of parameters.
     // Get the number of parameters.

+ 2 - 0
gameplay/src/lua/lua_Form.h

@@ -45,6 +45,7 @@ int lua_Form_getOpacity(lua_State* state);
 int lua_Form_getPadding(lua_State* state);
 int lua_Form_getPadding(lua_State* state);
 int lua_Form_getRefCount(lua_State* state);
 int lua_Form_getRefCount(lua_State* state);
 int lua_Form_getScroll(lua_State* state);
 int lua_Form_getScroll(lua_State* state);
+int lua_Form_getScrollPosition(lua_State* state);
 int lua_Form_getScrollWheelRequiresFocus(lua_State* state);
 int lua_Form_getScrollWheelRequiresFocus(lua_State* state);
 int lua_Form_getScrollWheelSpeed(lua_State* state);
 int lua_Form_getScrollWheelSpeed(lua_State* state);
 int lua_Form_getScrollingFriction(lua_State* state);
 int lua_Form_getScrollingFriction(lua_State* state);
@@ -94,6 +95,7 @@ int lua_Form_setPadding(lua_State* state);
 int lua_Form_setPosition(lua_State* state);
 int lua_Form_setPosition(lua_State* state);
 int lua_Form_setScroll(lua_State* state);
 int lua_Form_setScroll(lua_State* state);
 int lua_Form_setScrollBarsAutoHide(lua_State* state);
 int lua_Form_setScrollBarsAutoHide(lua_State* state);
+int lua_Form_setScrollPosition(lua_State* state);
 int lua_Form_setScrollWheelRequiresFocus(lua_State* state);
 int lua_Form_setScrollWheelRequiresFocus(lua_State* state);
 int lua_Form_setScrollWheelSpeed(lua_State* state);
 int lua_Form_setScrollWheelSpeed(lua_State* state);
 int lua_Form_setScrollingFriction(lua_State* state);
 int lua_Form_setScrollingFriction(lua_State* state);