mirror of https://github.com/aseprite/aseprite.git
174 lines
4.4 KiB
C++
174 lines
4.4 KiB
C++
|
// Aseprite
|
||
|
// Copyright (C) 2019 Igara Studio S.A.
|
||
|
//
|
||
|
// This program is distributed under the terms of
|
||
|
// the End-User License Agreement for Aseprite.
|
||
|
|
||
|
#ifdef HAVE_CONFIG_H
|
||
|
#include "config.h"
|
||
|
#endif
|
||
|
|
||
|
#include "app/script/values.h"
|
||
|
|
||
|
#include "app/pref/preferences.h"
|
||
|
#include "app/script/engine.h"
|
||
|
#include "app/script/luacpp.h"
|
||
|
|
||
|
namespace app {
|
||
|
namespace script {
|
||
|
|
||
|
// TODO this is similar to app::Param<> specializations::fromLua() specializations
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// bool
|
||
|
|
||
|
template<>
|
||
|
void push_value_to_lua(lua_State* L, const bool& value) {
|
||
|
lua_pushboolean(L, value);
|
||
|
}
|
||
|
|
||
|
template<>
|
||
|
bool get_value_from_lua(lua_State* L, int index) {
|
||
|
return lua_toboolean(L, index);
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// int
|
||
|
|
||
|
template<>
|
||
|
void push_value_to_lua(lua_State* L, const int& value) {
|
||
|
lua_pushinteger(L, value);
|
||
|
}
|
||
|
|
||
|
template<>
|
||
|
int get_value_from_lua(lua_State* L, int index) {
|
||
|
return lua_tointeger(L, index);
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// double
|
||
|
|
||
|
template<>
|
||
|
void push_value_to_lua(lua_State* L, const double& value) {
|
||
|
lua_pushnumber(L, value);
|
||
|
}
|
||
|
|
||
|
template<>
|
||
|
double get_value_from_lua(lua_State* L, int index) {
|
||
|
return lua_tonumber(L, index);
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// std::string
|
||
|
|
||
|
template<>
|
||
|
void push_value_to_lua(lua_State* L, const std::string& value) {
|
||
|
lua_pushstring(L, value.c_str());
|
||
|
}
|
||
|
|
||
|
template<>
|
||
|
std::string get_value_from_lua(lua_State* L, int index) {
|
||
|
if (const char* v = lua_tostring(L, index))
|
||
|
return std::string(v);
|
||
|
else
|
||
|
return std::string();
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Color
|
||
|
|
||
|
template<>
|
||
|
void push_value_to_lua(lua_State* L, const app::Color& value) {
|
||
|
push_obj(L, value);
|
||
|
}
|
||
|
|
||
|
template<>
|
||
|
app::Color get_value_from_lua(lua_State* L, int index) {
|
||
|
return convert_args_into_color(L, index);
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Point
|
||
|
|
||
|
template<>
|
||
|
void push_value_to_lua(lua_State* L, const gfx::Point& value) {
|
||
|
push_obj(L, value);
|
||
|
}
|
||
|
|
||
|
template<>
|
||
|
gfx::Point get_value_from_lua(lua_State* L, int index) {
|
||
|
return convert_args_into_point(L, index);
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Size
|
||
|
|
||
|
template<>
|
||
|
void push_value_to_lua(lua_State* L, const gfx::Size& value) {
|
||
|
push_obj(L, value);
|
||
|
}
|
||
|
|
||
|
template<>
|
||
|
gfx::Size get_value_from_lua(lua_State* L, int index) {
|
||
|
return convert_args_into_size(L, index);
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// Rect
|
||
|
|
||
|
template<>
|
||
|
void push_value_to_lua(lua_State* L, const gfx::Rect& value) {
|
||
|
push_obj(L, value);
|
||
|
}
|
||
|
|
||
|
template<>
|
||
|
gfx::Rect get_value_from_lua(lua_State* L, int index) {
|
||
|
return convert_args_into_rect(L, index);
|
||
|
}
|
||
|
|
||
|
// ----------------------------------------------------------------------
|
||
|
// enums
|
||
|
|
||
|
#define FOR_ENUM(T) \
|
||
|
template<> \
|
||
|
void push_value_to_lua(lua_State* L, const T& value) { \
|
||
|
lua_pushinteger(L, static_cast<int>(value)); \
|
||
|
} \
|
||
|
\
|
||
|
template<> \
|
||
|
T get_value_from_lua(lua_State* L, int index) { \
|
||
|
return static_cast<T>(lua_tointeger(L, index)); \
|
||
|
}
|
||
|
|
||
|
FOR_ENUM(app::CelsTarget)
|
||
|
FOR_ENUM(app::ColorBar::ColorSelector)
|
||
|
FOR_ENUM(app::DocExporter::DataFormat)
|
||
|
FOR_ENUM(app::SpriteSheetType)
|
||
|
FOR_ENUM(app::gen::BgType)
|
||
|
FOR_ENUM(app::gen::BrushPreview)
|
||
|
FOR_ENUM(app::gen::BrushType)
|
||
|
FOR_ENUM(app::gen::ColorProfileBehavior)
|
||
|
FOR_ENUM(app::gen::EyedropperChannel)
|
||
|
FOR_ENUM(app::gen::EyedropperSample)
|
||
|
FOR_ENUM(app::gen::FillReferTo)
|
||
|
FOR_ENUM(app::gen::HueSaturationMode)
|
||
|
FOR_ENUM(app::gen::OnionskinType)
|
||
|
FOR_ENUM(app::gen::PaintingCursorType)
|
||
|
FOR_ENUM(app::gen::PivotPosition)
|
||
|
FOR_ENUM(app::gen::RightClickMode)
|
||
|
FOR_ENUM(app::gen::SelectionMode)
|
||
|
FOR_ENUM(app::gen::StopAtGrid)
|
||
|
FOR_ENUM(app::gen::SymmetryMode)
|
||
|
FOR_ENUM(app::gen::TimelinePosition)
|
||
|
FOR_ENUM(app::tools::FreehandAlgorithm)
|
||
|
FOR_ENUM(app::tools::InkType)
|
||
|
FOR_ENUM(app::tools::RotationAlgorithm)
|
||
|
FOR_ENUM(doc::AniDir)
|
||
|
FOR_ENUM(doc::BrushPattern)
|
||
|
FOR_ENUM(doc::ColorMode)
|
||
|
FOR_ENUM(filters::TiledMode)
|
||
|
FOR_ENUM(render::OnionskinPosition)
|
||
|
|
||
|
} // namespace script
|
||
|
} // namespace app
|