Implement FromJSVal<IObject*> safely

By making all GUI proxy objects share the same class, we can easily
confirm if a given JS object is one, and from there convert to the
appropriate types.

Differential Revision: https://code.wildfiregames.com/D3907
This was SVN commit r25347.
This commit is contained in:
wraitii
2021-04-30 13:20:43 +00:00
parent 3579097d95
commit c62ad8fefa
3 changed files with 51 additions and 16 deletions
@@ -22,6 +22,7 @@
#include "gui/SettingTypes/CGUIList.h"
#include "gui/SettingTypes/CGUISeries.h"
#include "gui/SettingTypes/CGUISize.h"
#include "gui/Scripting/JSInterface_GUIProxy.h"
#include "lib/external_libraries/libsdl.h"
#include "maths/Size2D.h"
#include "maths/Vector2D.h"
@@ -136,6 +137,22 @@ template<> void ScriptInterface::ToJSVal<IGUIObject*>(const ScriptRequest& UNUSE
ret.setObject(*val->GetJSObject());
}
template<> bool ScriptInterface::FromJSVal<IGUIObject*>(const ScriptRequest& rq, JS::HandleValue v, IGUIObject*& out)
{
if (!v.isObject())
{
ScriptException::Raise(rq, "Value is not an IGUIObject.");
return false;
}
out = IGUIProxyObject::FromPrivateSlot<IGUIObject>(v.toObjectOrNull());
if (!out)
{
ScriptException::Raise(rq, "Value is not an IGUIObject.");
return false;
}
return true;
}
template<> void ScriptInterface::ToJSVal<CGUIString>(const ScriptRequest& rq, JS::MutableHandleValue ret, const CGUIString& val)
{
ScriptInterface::ToJSVal(rq, ret, val.GetOriginalString());