mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
Make JS changed horizontal / vertical actually take effect, finishing 156ff7cf56, refs f4b410ff82.
Move EAlign and EVAlign JS<->C++ conversions to FromJSVal and ToJSVal
for consistency.
Remove alternative / british spelling "centre".
Use i32 instead of int since at least and at most 32 bits are intended
there, refs 1e07787e76.
This was SVN commit r22556.
This commit is contained in:
parent
52d58d9845
commit
0834d07462
3 changed files with 101 additions and 47 deletions
|
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (C) 2015 Wildfire Games.
|
||||
/* Copyright (C) 2019 Wildfire Games.
|
||||
* This file is part of 0 A.D.
|
||||
*
|
||||
* 0 A.D. is free software: you can redistribute it and/or modify
|
||||
|
|
@ -47,6 +47,7 @@ void IGUITextOwner::HandleMessage(SGUIMessage& Message)
|
|||
if (Message.value == "size" || Message.value == "z" ||
|
||||
Message.value == "absolute" || Message.value == "caption" ||
|
||||
Message.value == "font" || Message.value == "textcolor" ||
|
||||
Message.value == "text_align" || Message.value == "text_valign" ||
|
||||
Message.value == "buffer_zone")
|
||||
{
|
||||
m_GeneratedTextsValid = false;
|
||||
|
|
|
|||
|
|
@ -17,14 +17,14 @@
|
|||
|
||||
#include "precompiled.h"
|
||||
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
|
||||
#include "gui/CGUIList.h"
|
||||
#include "gui/CGUISeries.h"
|
||||
#include "gui/GUIbase.h"
|
||||
#include "gui/IGUIObject.h"
|
||||
#include "lib/external_libraries/libsdl.h"
|
||||
#include "ps/Hotkey.h"
|
||||
#include "maths/Vector2D.h"
|
||||
#include "ps/Hotkey.h"
|
||||
#include "scriptinterface/ScriptConversions.h"
|
||||
|
||||
#define SET(obj, name, value) STMT(JS::RootedValue v_(cx); AssignOrToJSVal(cx, &v_, (value)); JS_SetProperty(cx, obj, (name), v_))
|
||||
// ignore JS_SetProperty return value, because errors should be impossible
|
||||
|
|
@ -163,3 +163,90 @@ template<> bool ScriptInterface::FromJSVal<CGUISeries>(JSContext* cx, JS::Handle
|
|||
{
|
||||
return FromJSVal(cx, v, out.m_Series);
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<EVAlign>(JSContext* cx, JS::MutableHandleValue ret, const EVAlign& val)
|
||||
{
|
||||
std::string word;
|
||||
switch (val)
|
||||
{
|
||||
case EVAlign_Top:
|
||||
word = "top";
|
||||
break;
|
||||
|
||||
case EVAlign_Bottom:
|
||||
word = "bottom";
|
||||
break;
|
||||
|
||||
case EVAlign_Center:
|
||||
word = "center";
|
||||
break;
|
||||
|
||||
default:
|
||||
word = "error";
|
||||
JS_ReportError(cx, "Invalid EVAlign");
|
||||
break;
|
||||
}
|
||||
ToJSVal(cx, ret, word);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<EVAlign>(JSContext* cx, JS::HandleValue v, EVAlign& out)
|
||||
{
|
||||
std::string word;
|
||||
FromJSVal(cx, v, word);
|
||||
|
||||
if (word == "top")
|
||||
out = EVAlign_Top;
|
||||
else if (word == "bottom")
|
||||
out = EVAlign_Bottom;
|
||||
else if (word == "center")
|
||||
out = EVAlign_Center;
|
||||
else
|
||||
{
|
||||
out = EVAlign_Top;
|
||||
JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
template<> void ScriptInterface::ToJSVal<EAlign>(JSContext* cx, JS::MutableHandleValue ret, const EAlign& val)
|
||||
{
|
||||
std::string word;
|
||||
switch (val)
|
||||
{
|
||||
case EAlign_Left:
|
||||
word = "left";
|
||||
break;
|
||||
case EAlign_Right:
|
||||
word = "right";
|
||||
break;
|
||||
case EAlign_Center:
|
||||
word = "center";
|
||||
break;
|
||||
default:
|
||||
word = "error";
|
||||
JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')");
|
||||
break;
|
||||
}
|
||||
ToJSVal(cx, ret, word);
|
||||
}
|
||||
|
||||
template<> bool ScriptInterface::FromJSVal<EAlign>(JSContext* cx, JS::HandleValue v, EAlign& out)
|
||||
{
|
||||
std::string word;
|
||||
FromJSVal(cx, v, word);
|
||||
|
||||
if (word == "left")
|
||||
out = EAlign_Left;
|
||||
else if (word == "right")
|
||||
out = EAlign_Right;
|
||||
else if (word == "center")
|
||||
out = EAlign_Center;
|
||||
else
|
||||
{
|
||||
out = EAlign_Left;
|
||||
JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -233,15 +233,7 @@ bool JSI_IGUIObject::getProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
|
|||
{
|
||||
EAlign value;
|
||||
GUI<EAlign>::GetSetting(e, propName, value);
|
||||
CStr word;
|
||||
switch (value)
|
||||
{
|
||||
case EAlign_Left: word = "left"; break;
|
||||
case EAlign_Right: word = "right"; break;
|
||||
case EAlign_Center: word = "center"; break;
|
||||
default: debug_warn(L"Invalid EAlign!"); word = "error"; break;
|
||||
}
|
||||
ScriptInterface::ToJSVal(cx, vp, word);
|
||||
ScriptInterface::ToJSVal(cx, vp, value);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -249,15 +241,7 @@ bool JSI_IGUIObject::getProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
|
|||
{
|
||||
EVAlign value;
|
||||
GUI<EVAlign>::GetSetting(e, propName, value);
|
||||
CStr word;
|
||||
switch (value)
|
||||
{
|
||||
case EVAlign_Top: word = "top"; break;
|
||||
case EVAlign_Bottom: word = "bottom"; break;
|
||||
case EVAlign_Center: word = "center"; break;
|
||||
default: debug_warn(L"Invalid EVAlign!"); word = "error"; break;
|
||||
}
|
||||
ScriptInterface::ToJSVal(cx, vp, word);
|
||||
ScriptInterface::ToJSVal(cx, vp, value);
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -382,50 +366,32 @@ bool JSI_IGUIObject::setProperty(JSContext* cx, JS::HandleObject obj, JS::Handle
|
|||
|
||||
case GUIST_EAlign:
|
||||
{
|
||||
std::string value;
|
||||
if (!ScriptInterface::FromJSVal(cx, vp, value))
|
||||
EAlign a;
|
||||
if (!ScriptInterface::FromJSVal(cx, vp, a))
|
||||
return false;
|
||||
|
||||
EAlign a;
|
||||
if (value == "left") a = EAlign_Left;
|
||||
else if (value == "right") a = EAlign_Right;
|
||||
else if (value == "center" || value == "centre") a = EAlign_Center;
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "Invalid alignment (should be 'left', 'right' or 'center')");
|
||||
return false;
|
||||
}
|
||||
GUI<EAlign>::SetSetting(e, propName, a);
|
||||
break;
|
||||
}
|
||||
|
||||
case GUIST_EVAlign:
|
||||
{
|
||||
std::string value;
|
||||
if (!ScriptInterface::FromJSVal(cx, vp, value))
|
||||
EVAlign a;
|
||||
if (!ScriptInterface::FromJSVal(cx, vp, a))
|
||||
return false;
|
||||
|
||||
EVAlign a;
|
||||
if (value == "top") a = EVAlign_Top;
|
||||
else if (value == "bottom") a = EVAlign_Bottom;
|
||||
else if (value == "center" || value == "centre") a = EVAlign_Center;
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "Invalid alignment (should be 'top', 'bottom' or 'center')");
|
||||
return false;
|
||||
}
|
||||
GUI<EVAlign>::SetSetting(e, propName, a);
|
||||
break;
|
||||
}
|
||||
|
||||
case GUIST_int:
|
||||
{
|
||||
int value;
|
||||
i32 value;
|
||||
if (ScriptInterface::FromJSVal(cx, vp, value))
|
||||
GUI<int>::SetSetting(e, propName, value);
|
||||
GUI<i32>::SetSetting(e, propName, value);
|
||||
else
|
||||
{
|
||||
JS_ReportError(cx, "Cannot convert value to int");
|
||||
JS_ReportError(cx, "Cannot convert value to i32");
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
|
|
|
|||
Loading…
Reference in a new issue