mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-21 03:40:57 +00:00
lua: Add ColorSpace class
This commit is contained in:
parent
aff3018095
commit
0fef9bfa6b
@ -1,5 +1,5 @@
|
|||||||
# Aseprite
|
# Aseprite
|
||||||
# Copyright (C) 2018 Igara Studio S.A.
|
# Copyright (C) 2018-2019 Igara Studio S.A.
|
||||||
# Copyright (C) 2001-2018 David Capello
|
# Copyright (C) 2001-2018 David Capello
|
||||||
|
|
||||||
# Generate a ui::Widget for each widget in a XML file
|
# Generate a ui::Widget for each widget in a XML file
|
||||||
@ -153,6 +153,7 @@ if(ENABLE_SCRIPTING)
|
|||||||
script/cel_class.cpp
|
script/cel_class.cpp
|
||||||
script/cels_class.cpp
|
script/cels_class.cpp
|
||||||
script/color_class.cpp
|
script/color_class.cpp
|
||||||
|
script/color_space_class.cpp
|
||||||
script/dialog_class.cpp
|
script/dialog_class.cpp
|
||||||
script/engine.cpp
|
script/engine.cpp
|
||||||
script/frame_class.cpp
|
script/frame_class.cpp
|
||||||
|
112
src/app/script/color_space_class.cpp
Normal file
112
src/app/script/color_space_class.cpp
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
// 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/app.h"
|
||||||
|
#include "app/script/luacpp.h"
|
||||||
|
#include "base/file_content.h"
|
||||||
|
|
||||||
|
namespace app {
|
||||||
|
namespace script {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
int ColorSpace_new(lua_State* L)
|
||||||
|
{
|
||||||
|
// Copy color space
|
||||||
|
if (auto cs2 = may_get_obj<gfx::ColorSpace>(L, 1)) {
|
||||||
|
push_new<gfx::ColorSpace>(L, *cs2);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (lua_istable(L, 1)) {
|
||||||
|
// Load ICC profile when ColorSpace{ filename="..." } is specified
|
||||||
|
if (lua_getfield(L, 1, "filename") != LUA_TNIL) {
|
||||||
|
const char* fn = lua_tostring(L, -1);
|
||||||
|
if (fn) {
|
||||||
|
auto buf = base::read_file_content(fn);
|
||||||
|
lua_pop(L, 1);
|
||||||
|
push_new<gfx::ColorSpace>(L, *gfx::ColorSpace::MakeICC(std::move(buf)));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lua_pop(L, 1);
|
||||||
|
|
||||||
|
// Create sRGB profile with ColorSpace{ sRGB }
|
||||||
|
if (lua_getfield(L, 1, "sRGB") != LUA_TNONE) {
|
||||||
|
lua_pop(L, 1);
|
||||||
|
push_new<gfx::ColorSpace>(L, *gfx::ColorSpace::MakeSRGB());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lua_pop(L, 1);
|
||||||
|
}
|
||||||
|
push_new<gfx::ColorSpace>(L, *gfx::ColorSpace::MakeNone());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ColorSpace_gc(lua_State* L)
|
||||||
|
{
|
||||||
|
get_obj<gfx::ColorSpace>(L, 1)->~ColorSpace();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ColorSpace_eq(lua_State* L)
|
||||||
|
{
|
||||||
|
const auto a = get_obj<gfx::ColorSpace>(L, 1);
|
||||||
|
const auto b = get_obj<gfx::ColorSpace>(L, 2);
|
||||||
|
lua_pushboolean(L, a->nearlyEqual(*b));
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ColorSpace_get_name(lua_State* L)
|
||||||
|
{
|
||||||
|
const auto cs = get_obj<gfx::ColorSpace>(L, 1);
|
||||||
|
lua_pushstring(L, cs->name().c_str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int ColorSpace_set_name(lua_State* L)
|
||||||
|
{
|
||||||
|
auto cs = get_obj<gfx::ColorSpace>(L, 1);
|
||||||
|
if (auto name = lua_tostring(L, 2))
|
||||||
|
cs->setName(name);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const luaL_Reg ColorSpace_methods[] = {
|
||||||
|
{ "__gc", ColorSpace_gc },
|
||||||
|
{ "__eq", ColorSpace_eq },
|
||||||
|
{ nullptr, nullptr }
|
||||||
|
};
|
||||||
|
|
||||||
|
const Property ColorSpace_properties[] = {
|
||||||
|
{ "name", ColorSpace_get_name, ColorSpace_set_name },
|
||||||
|
{ nullptr, nullptr, nullptr }
|
||||||
|
};
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
DEF_MTNAME(gfx::ColorSpace);
|
||||||
|
|
||||||
|
void register_color_space_class(lua_State* L)
|
||||||
|
{
|
||||||
|
using ColorSpace = gfx::ColorSpace;
|
||||||
|
REG_CLASS(L, ColorSpace);
|
||||||
|
REG_CLASS_NEW(L, ColorSpace);
|
||||||
|
REG_CLASS_PROPERTIES(L, ColorSpace);
|
||||||
|
}
|
||||||
|
|
||||||
|
void push_color_space(lua_State* L, const gfx::ColorSpace& cs)
|
||||||
|
{
|
||||||
|
push_new<gfx::ColorSpace>(L, cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace script
|
||||||
|
} // namespace app
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2018 Igara Studio S.A.
|
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||||
// Copyright (C) 2001-2018 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
@ -137,6 +137,7 @@ void register_app_command_object(lua_State* L);
|
|||||||
void register_cel_class(lua_State* L);
|
void register_cel_class(lua_State* L);
|
||||||
void register_cels_class(lua_State* L);
|
void register_cels_class(lua_State* L);
|
||||||
void register_color_class(lua_State* L);
|
void register_color_class(lua_State* L);
|
||||||
|
void register_color_space_class(lua_State* L);
|
||||||
void register_dialog_class(lua_State* L);
|
void register_dialog_class(lua_State* L);
|
||||||
void register_frame_class(lua_State* L);
|
void register_frame_class(lua_State* L);
|
||||||
void register_frames_class(lua_State* L);
|
void register_frames_class(lua_State* L);
|
||||||
@ -281,6 +282,7 @@ Engine::Engine()
|
|||||||
register_cel_class(L);
|
register_cel_class(L);
|
||||||
register_cels_class(L);
|
register_cels_class(L);
|
||||||
register_color_class(L);
|
register_color_class(L);
|
||||||
|
register_color_space_class(L);
|
||||||
register_dialog_class(L);
|
register_dialog_class(L);
|
||||||
register_frame_class(L);
|
register_frame_class(L);
|
||||||
register_frames_class(L);
|
register_frames_class(L);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2018 Igara Studio S.A.
|
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||||
// Copyright (C) 2001-2018 David Capello
|
// Copyright (C) 2001-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
@ -25,6 +25,10 @@
|
|||||||
|
|
||||||
struct lua_State;
|
struct lua_State;
|
||||||
|
|
||||||
|
namespace gfx {
|
||||||
|
class ColorSpace;
|
||||||
|
}
|
||||||
|
|
||||||
namespace doc {
|
namespace doc {
|
||||||
class Cel;
|
class Cel;
|
||||||
class FrameTag;
|
class FrameTag;
|
||||||
@ -103,6 +107,7 @@ namespace app {
|
|||||||
void push_cels(lua_State* L, const doc::ObjectIds& cels);
|
void push_cels(lua_State* L, const doc::ObjectIds& cels);
|
||||||
void push_cels(lua_State* L, doc::Layer* layer);
|
void push_cels(lua_State* L, doc::Layer* layer);
|
||||||
void push_cels(lua_State* L, doc::Sprite* sprite);
|
void push_cels(lua_State* L, doc::Sprite* sprite);
|
||||||
|
void push_color_space(lua_State* L, const gfx::ColorSpace& cs);
|
||||||
void push_doc_range(lua_State* L, Site& site, const DocRange& docRange);
|
void push_doc_range(lua_State* L, Site& site, const DocRange& docRange);
|
||||||
void push_images(lua_State* L, const doc::ObjectIds& images);
|
void push_images(lua_State* L, const doc::ObjectIds& images);
|
||||||
void push_layers(lua_State* L, const doc::ObjectIds& layers);
|
void push_layers(lua_State* L, const doc::ObjectIds& layers);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (c) 2018 Igara Studio S.A.
|
// Copyright (c) 2018-2019 Igara Studio S.A.
|
||||||
// Copyright (C) 2018 David Capello
|
// Copyright (C) 2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
@ -9,6 +9,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "app/script/engine.h"
|
||||||
#include "app/script/luacpp.h"
|
#include "app/script/luacpp.h"
|
||||||
#include "doc/image_spec.h"
|
#include "doc/image_spec.h"
|
||||||
|
|
||||||
@ -72,6 +73,16 @@ int ImageSpec_get_colorMode(lua_State* L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ImageSpec_get_colorSpace(lua_State* L)
|
||||||
|
{
|
||||||
|
const auto spec = get_obj<doc::ImageSpec>(L, 1);
|
||||||
|
if (spec->colorSpace())
|
||||||
|
push_color_space(L, *spec->colorSpace());
|
||||||
|
else
|
||||||
|
lua_pushnil(L);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int ImageSpec_get_width(lua_State* L)
|
int ImageSpec_get_width(lua_State* L)
|
||||||
{
|
{
|
||||||
const auto spec = get_obj<doc::ImageSpec>(L, 1);
|
const auto spec = get_obj<doc::ImageSpec>(L, 1);
|
||||||
@ -100,6 +111,14 @@ int ImageSpec_set_colorMode(lua_State* L)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ImageSpec_set_colorSpace(lua_State* L)
|
||||||
|
{
|
||||||
|
auto spec = get_obj<doc::ImageSpec>(L, 1);
|
||||||
|
auto cs = get_obj<gfx::ColorSpace>(L, 2);
|
||||||
|
spec->setColorSpace(std::make_shared<gfx::ColorSpace>(*cs));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int ImageSpec_set_width(lua_State* L)
|
int ImageSpec_set_width(lua_State* L)
|
||||||
{
|
{
|
||||||
auto spec = get_obj<doc::ImageSpec>(L, 1);
|
auto spec = get_obj<doc::ImageSpec>(L, 1);
|
||||||
@ -129,6 +148,7 @@ const luaL_Reg ImageSpec_methods[] = {
|
|||||||
|
|
||||||
const Property ImageSpec_properties[] = {
|
const Property ImageSpec_properties[] = {
|
||||||
{ "colorMode", ImageSpec_get_colorMode, ImageSpec_set_colorMode },
|
{ "colorMode", ImageSpec_get_colorMode, ImageSpec_set_colorMode },
|
||||||
|
{ "colorSpace", ImageSpec_get_colorSpace, ImageSpec_set_colorSpace },
|
||||||
{ "width", ImageSpec_get_width, ImageSpec_set_width },
|
{ "width", ImageSpec_get_width, ImageSpec_set_width },
|
||||||
{ "height", ImageSpec_get_height, ImageSpec_set_height },
|
{ "height", ImageSpec_get_height, ImageSpec_set_height },
|
||||||
{ "transparentColor", ImageSpec_get_transparentColor, ImageSpec_set_transparentColor },
|
{ "transparentColor", ImageSpec_get_transparentColor, ImageSpec_set_transparentColor },
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
// Aseprite
|
// Aseprite
|
||||||
// Copyright (C) 2018 Igara Studio S.A.
|
// Copyright (C) 2018-2019 Igara Studio S.A.
|
||||||
// Copyright (C) 2015-2018 David Capello
|
// Copyright (C) 2015-2018 David Capello
|
||||||
//
|
//
|
||||||
// This program is distributed under the terms of
|
// This program is distributed under the terms of
|
||||||
@ -11,7 +11,9 @@
|
|||||||
|
|
||||||
#include "app/app.h"
|
#include "app/app.h"
|
||||||
#include "app/cmd/add_layer.h"
|
#include "app/cmd/add_layer.h"
|
||||||
|
#include "app/cmd/assign_color_profile.h"
|
||||||
#include "app/cmd/clear_cel.h"
|
#include "app/cmd/clear_cel.h"
|
||||||
|
#include "app/cmd/convert_color_profile.h"
|
||||||
#include "app/cmd/remove_frame_tag.h"
|
#include "app/cmd/remove_frame_tag.h"
|
||||||
#include "app/cmd/remove_layer.h"
|
#include "app/cmd/remove_layer.h"
|
||||||
#include "app/cmd/remove_slice.h"
|
#include "app/cmd/remove_slice.h"
|
||||||
@ -225,6 +227,28 @@ int Sprite_setPalette(lua_State* L)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Sprite_assignColorSpace(lua_State* L)
|
||||||
|
{
|
||||||
|
auto sprite = get_docobj<Sprite>(L, 1);
|
||||||
|
auto cs = get_obj<gfx::ColorSpace>(L, 2);
|
||||||
|
Tx tx;
|
||||||
|
tx(new cmd::AssignColorProfile(
|
||||||
|
sprite, std::make_shared<gfx::ColorSpace>(*cs)));
|
||||||
|
tx.commit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Sprite_convertColorSpace(lua_State* L)
|
||||||
|
{
|
||||||
|
auto sprite = get_docobj<Sprite>(L, 1);
|
||||||
|
auto cs = get_obj<gfx::ColorSpace>(L, 2);
|
||||||
|
Tx tx;
|
||||||
|
tx(new cmd::ConvertColorProfile(
|
||||||
|
sprite, std::make_shared<gfx::ColorSpace>(*cs)));
|
||||||
|
tx.commit();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int Sprite_newLayer(lua_State* L)
|
int Sprite_newLayer(lua_State* L)
|
||||||
{
|
{
|
||||||
auto sprite = get_docobj<Sprite>(L, 1);
|
auto sprite = get_docobj<Sprite>(L, 1);
|
||||||
@ -492,6 +516,17 @@ int Sprite_get_colorMode(lua_State* L)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Sprite_get_colorSpace(lua_State* L)
|
||||||
|
{
|
||||||
|
auto sprite = get_docobj<Sprite>(L, 1);
|
||||||
|
auto cs = sprite->colorSpace();
|
||||||
|
if (cs)
|
||||||
|
push_color_space(L, *cs);
|
||||||
|
else
|
||||||
|
lua_pushnil(L);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
int Sprite_get_spec(lua_State* L)
|
int Sprite_get_spec(lua_State* L)
|
||||||
{
|
{
|
||||||
const auto sprite = get_docobj<Sprite>(L, 1);
|
const auto sprite = get_docobj<Sprite>(L, 1);
|
||||||
@ -612,6 +647,8 @@ const luaL_Reg Sprite_methods[] = {
|
|||||||
{ "close", Sprite_close },
|
{ "close", Sprite_close },
|
||||||
{ "loadPalette", Sprite_loadPalette },
|
{ "loadPalette", Sprite_loadPalette },
|
||||||
{ "setPalette", Sprite_setPalette },
|
{ "setPalette", Sprite_setPalette },
|
||||||
|
{ "assignColorSpace", Sprite_assignColorSpace },
|
||||||
|
{ "convertColorSpace", Sprite_convertColorSpace },
|
||||||
// Layers
|
// Layers
|
||||||
{ "newLayer", Sprite_newLayer },
|
{ "newLayer", Sprite_newLayer },
|
||||||
{ "newGroup", Sprite_newGroup },
|
{ "newGroup", Sprite_newGroup },
|
||||||
@ -637,6 +674,7 @@ const Property Sprite_properties[] = {
|
|||||||
{ "width", Sprite_get_width, Sprite_set_width },
|
{ "width", Sprite_get_width, Sprite_set_width },
|
||||||
{ "height", Sprite_get_height, Sprite_set_height },
|
{ "height", Sprite_get_height, Sprite_set_height },
|
||||||
{ "colorMode", Sprite_get_colorMode, nullptr },
|
{ "colorMode", Sprite_get_colorMode, nullptr },
|
||||||
|
{ "colorSpace", Sprite_get_colorSpace, Sprite_assignColorSpace },
|
||||||
{ "spec", Sprite_get_spec, nullptr },
|
{ "spec", Sprite_get_spec, nullptr },
|
||||||
{ "selection", Sprite_get_selection, nullptr },
|
{ "selection", Sprite_get_selection, nullptr },
|
||||||
{ "frames", Sprite_get_frames, nullptr },
|
{ "frames", Sprite_get_frames, nullptr },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user