Changeset View
Changeset View
Standalone View
Standalone View
source/gui/ObjectBases/IGUIObject.cpp
Show First 20 Lines • Show All 431 Lines • ▼ Show 20 Lines | bool IGUIObject::ScriptEventWithReturn(const CStr& eventName, const JS::HandleValueArray& paramData) | ||||
if (!JS_CallFunctionValue(cx, obj, handlerVal, paramData, &result)) | if (!JS_CallFunctionValue(cx, obj, handlerVal, paramData, &result)) | ||||
{ | { | ||||
LOGERROR("Errors executing script event \"%s\"", eventName.c_str()); | LOGERROR("Errors executing script event \"%s\"", eventName.c_str()); | ||||
return false; | return false; | ||||
} | } | ||||
return JS::ToBoolean(result); | return JS::ToBoolean(result); | ||||
} | } | ||||
void IGUIObject::CreateJSObject() | JSObject* IGUIObject::GetJSObject() | ||||
{ | { | ||||
JSContext* cx = m_pGUI.GetScriptInterface()->GetContext(); | JSContext* cx = m_pGUI.GetScriptInterface()->GetContext(); | ||||
JSAutoRequest rq(cx); | JSAutoRequest rq(cx); | ||||
m_JSObject.init(cx, m_pGUI.GetScriptInterface()->CreateCustomObject("GUIObject")); | |||||
JS_SetPrivate(m_JSObject.get(), this); | |||||
RegisterScriptFunctions(); | |||||
} | |||||
JSObject* IGUIObject::GetJSObject() | |||||
{ | |||||
// Cache the object when somebody first asks for it, because otherwise | // Cache the object when somebody first asks for it, because otherwise | ||||
// we end up doing far too much object allocation. | // we end up doing far too much object allocation. | ||||
if (!m_JSObject.initialized()) | if (!m_JSObject.initialized()) | ||||
CreateJSObject(); | { | ||||
m_JSObject.init(cx, m_pGUI.ConstructJSObject(GetObjectType())); | |||||
SetPrivateData(); | |||||
} | |||||
return m_JSObject.get(); | return m_JSObject.get(); | ||||
} | } | ||||
void IGUIObject::SetPrivateData() | |||||
{ | |||||
ENSURE(m_JSObject.initialized()); | |||||
JS::RootedValue pointer(m_pGUI.GetScriptInterface()->GetJSRuntime()); | |||||
// I'm not entirely sure this static cast is needed but it seems conceptually correct, and safer. | |||||
pointer.get().setPrivate(static_cast<JSFactory::cppType*>(this)); | |||||
SetReservedOrProxyPrivateSlot(m_JSObject, 1, pointer); | |||||
}; | |||||
std::string IGUIObject::toString() const | |||||
{ | |||||
return "[GUIObject: " + GetName() + "]"; | |||||
} | |||||
void IGUIObject::focus() | |||||
{ | |||||
GetGUI().SetFocusedObject(this); | |||||
} | |||||
void IGUIObject::blur() | |||||
{ | |||||
GetGUI().SetFocusedObject(nullptr); | |||||
} | |||||
CRect IGUIObject::getComputedSize() | |||||
{ | |||||
UpdateCachedSize(); | |||||
return m_CachedActualSize; | |||||
} | |||||
bool IGUIObject::IsEnabled() const | bool IGUIObject::IsEnabled() const | ||||
{ | { | ||||
return m_Enabled; | return m_Enabled; | ||||
} | } | ||||
bool IGUIObject::IsHidden() const | bool IGUIObject::IsHidden() const | ||||
{ | { | ||||
return m_Hidden; | return m_Hidden; | ||||
▲ Show 20 Lines • Show All 73 Lines • Show Last 20 Lines |
Wildfire Games · Phabricator