Browse Source

Fix ElementTabSet using 0-based indexes in Lua.

Erik Crevel 4 years ago
parent
commit
ae02e25edb
2 changed files with 14 additions and 5 deletions
  1. 4 4
      Source/Lua/Elements/ElementTabSet.cpp
  2. 10 1
      Source/Lua/EventParametersProxy.cpp

+ 4 - 4
Source/Lua/Elements/ElementTabSet.cpp

@@ -38,7 +38,7 @@ namespace Lua {
 int ElementTabSetSetPanel(lua_State* L, ElementTabSet* obj)
 {
     RMLUI_CHECK_OBJ(obj);
-    int index = (int)luaL_checkinteger(L,1);
+    int index = GetIndex(L,1);
     const char* rml = luaL_checkstring(L,2);
 
     obj->SetPanel(index,rml);
@@ -48,7 +48,7 @@ int ElementTabSetSetPanel(lua_State* L, ElementTabSet* obj)
 int ElementTabSetSetTab(lua_State* L, ElementTabSet* obj)
 {
     RMLUI_CHECK_OBJ(obj);
-    int index = (int)luaL_checkinteger(L,1);
+    int index = GetIndex(L,1);
     const char* rml = luaL_checkstring(L,2);
 
     obj->SetTab(index,rml);
@@ -62,7 +62,7 @@ int ElementTabSetGetAttractive_tab(lua_State* L)
     ElementTabSet* obj = LuaType<ElementTabSet>::check(L,1);
     RMLUI_CHECK_OBJ(obj);
     int tab = obj->GetActiveTab();
-    lua_pushinteger(L,tab);
+    PushIndex(L,tab);
     return 1;
 }
 
@@ -81,7 +81,7 @@ int ElementTabSetSetAttractive_tab(lua_State* L)
 {
     ElementTabSet* obj = LuaType<ElementTabSet>::check(L,1);
     RMLUI_CHECK_OBJ(obj);
-    int tab = (int)luaL_checkinteger(L,2);
+    int tab = GetIndex(L,2);
     obj->SetActiveTab(tab);
     return 0;
 }

+ 10 - 1
Source/Lua/EventParametersProxy.cpp

@@ -31,6 +31,7 @@
 #include <RmlUi/Core/Variant.h>
 #include <RmlUi/Core/Dictionary.h>
 #include "Pairs.h"
+#include <cstring>
 
 
 namespace Rml {
@@ -55,7 +56,15 @@ int EventParametersProxy__index(lua_State* L)
         const char* key = lua_tostring(L,2);
 		auto it = obj->owner->GetParameters().find(key);
 		const Variant* param = (it == obj->owner->GetParameters().end() ? nullptr : &it->second);
-        PushVariant(L,param);
+        if (obj->owner->GetId() == EventId::Tabchange &&
+            std::strcmp(key, "tab_index") == 0 &&
+            param &&
+            param->GetType() == Variant::Type::INT)
+        {
+            PushIndex(L,param->Get<int>());
+        }
+        else
+            PushVariant(L,param);
         return 1;
     }
     else