Changeset View
Changeset View
Standalone View
Standalone View
source/gui/Scripting/JSInterface_CMiniMap.cpp
- This file was added.
Property | Old Value | New Value |
---|---|---|
svn:eol-style | null | native \ No newline at end of property |
/* Copyright (C) 2020 Wildfire Games. | |||||
vladislavbelov: It seems we already have pretty similar code. I think it should be reused. Also some parts of… | |||||
* This file is part of 0 A.D. | |||||
* | |||||
* 0 A.D. is free software: you can redistribute it and/or modify | |||||
* it under the terms of the GNU General Public License as published by | |||||
* the Free Software Foundation, either version 2 of the License, or | |||||
* (at your option) any later version. | |||||
* | |||||
* 0 A.D. is distributed in the hope that it will be useful, | |||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||||
* GNU General Public License for more details. | |||||
* | |||||
* You should have received a copy of the GNU General Public License | |||||
* along with 0 A.D. If not, see <http://www.gnu.org/licenses/>. | |||||
*/ | |||||
#include "precompiled.h" | |||||
#include "JSInterface_GUIProxy.h" | |||||
#include "gui/CGUI.h" | |||||
#include "gui/CGUISetting.h" | |||||
#include "gui/ObjectBases/IGUIObject.h" | |||||
#include "gui/ObjectTypes/CMiniMap.h" | |||||
#include "maths/Vector2D.h" | |||||
#include "ps/CLogger.h" | |||||
#include "scriptinterface/ScriptConversions.h" | |||||
#include "scriptinterface/ScriptExtraHeaders.h" | |||||
#include <string> | |||||
// Include the definition of the generic templates. | |||||
Done Inline Actions*Cough*. vladislavbelov: *Cough*. | |||||
#include "JSInterface_GUIProxy_impl.h" | |||||
namespace { | |||||
vladislavbelovUnsubmitted Done Inline ActionsBraces on new lines. vladislavbelov: Braces on new lines. | |||||
struct SData | |||||
{ | |||||
JS::PersistentRootedObject m_ToString; | |||||
JS::PersistentRootedObject m_Focus; | |||||
JS::PersistentRootedObject m_Blur; | |||||
JS::PersistentRootedObject m_GetComputedSize; | |||||
JS::PersistentRootedObject m_Flare; | |||||
}; | |||||
} | |||||
bool CMiniMap_Flare(JSContext* cx, uint argc, JS::Value* vp) | |||||
{ | |||||
JS::CallArgs args = JS::CallArgsFromVp(argc, vp); | |||||
CMiniMap* obj = static_cast<CMiniMap*>(js::GetProxyPrivate(args.thisv().toObjectOrNull()).toPrivate()); | |||||
if (!obj) | |||||
return false; | |||||
if (args.length() != 2) | |||||
{ | |||||
LOGERROR("CMiniMap::Flare: Got %d arguments, but expected 2.", args.length()); | |||||
return false; | |||||
} | |||||
ScriptInterface& scriptInterface = *ScriptInterface::GetScriptInterfaceAndCBData(cx)->pScriptInterface; | |||||
ScriptRequest rq(scriptInterface); | |||||
CVector2D pos; | |||||
CStr colorStr; | |||||
CColor color; | |||||
if (!(ScriptInterface::FromJSVal(rq, args.get(0), pos) && | |||||
ScriptInterface::FromJSVal(rq, args.get(1), colorStr) && | |||||
color.ParseString(colorStr))) | |||||
return false; | |||||
Done Inline ActionsStill small. vladislavbelov: Still small. | |||||
bool ret = obj->Flare(pos, color); | |||||
args.rval().set(JS::BooleanValue(ret)); | |||||
return true; | |||||
} | |||||
template <> | |||||
bool JSI_GUIProxy<CMiniMap>::funcGetter(JS::HandleObject proxy, const std::string& propName, JS::MutableHandleValue vp) const | |||||
{ | |||||
const SData& data = *static_cast<const SData*>(js::GetProxyReservedSlot(proxy, 0).toPrivate()); | |||||
if (propName == "toString") | |||||
return vp.setObjectOrNull(data.m_ToString), true; | |||||
if (propName == "focus") | |||||
return vp.setObjectOrNull(data.m_Focus), true; | |||||
if (propName == "blur") | |||||
return vp.setObjectOrNull(data.m_Blur), true; | |||||
if (propName == "getComputedSize") | |||||
return vp.setObjectOrNull(data.m_GetComputedSize), true; | |||||
if (propName == "flare") | |||||
return vp.setObjectOrNull(data.m_Flare), true; | |||||
return false; | |||||
} | |||||
template <> | |||||
std::pair<const js::BaseProxyHandler*, void*> JSI_GUIProxy<CMiniMap>::CreateData(ScriptInterface& scriptInterface) | |||||
{ | |||||
Done Inline ActionsNeed to call this in AddObjectTypes wraitii: Need to call this in `AddObjectTypes` | |||||
SData* data = new SData(); | |||||
ScriptRequest rq(scriptInterface); | |||||
#define func(class, func) &apply_to<CMiniMap, class, &class::func> | |||||
vladislavbelovUnsubmitted Done Inline ActionsMacro in upper case with underscores. vladislavbelov: Macro in upper case with underscores. | |||||
data->m_ToString.init(rq.cx, JS_GetFunctionObject(JS_NewFunction(rq.cx, func(IGUIObject, toString), 0, 0, "toString"))); | |||||
data->m_Focus.init(rq.cx, JS_GetFunctionObject(JS_NewFunction(rq.cx, func(IGUIObject, focus), 0, 0, "focus"))); | |||||
data->m_Blur.init(rq.cx, JS_GetFunctionObject(JS_NewFunction(rq.cx, func(IGUIObject, blur), 0, 0, "blur"))); | |||||
data->m_GetComputedSize.init(rq.cx, JS_GetFunctionObject(JS_NewFunction(rq.cx, func(IGUIObject, getComputedSize), 0, 0, "getComputedSize"))); | |||||
#undef func | |||||
data->m_Flare.init(rq.cx, JS_GetFunctionObject(JS_NewFunction(rq.cx, CMiniMap_Flare, 2, 0, "flare"))); | |||||
return { &Singleton(), data }; | |||||
} | |||||
template class JSI_GUIProxy<CMiniMap>; |
Wildfire Games · Phabricator
It seems we already have pretty similar code. I think it should be reused. Also some parts of the existing code were refactored.