js: Add Site class and app.site property

This commit is contained in:
David Capello 2018-08-20 15:15:38 -03:00
parent 1306f9a8a1
commit 587f697bda
6 changed files with 96 additions and 2 deletions

View File

@ -156,6 +156,7 @@ if(ENABLE_SCRIPTING)
script/point_class.cpp
script/rectangle_class.cpp
script/selection_class.cpp
script/site_class.cpp
script/size_class.cpp
script/sprite_class.cpp
shell.cpp

View File

@ -15,6 +15,7 @@
#include "app/doc.h"
#include "app/script/app_scripting.h"
#include "app/site.h"
#include "app/site.h"
#include "app/tx.h"
#include "script/engine.h"
@ -110,11 +111,19 @@ void App_get_activeImage(script::ContextHandle handle)
app::Context* appCtx = App::instance()->context();
Site site = appCtx->activeSite();
if (site.image())
ctx.newObject("Image", site.image(), nullptr);
push_image(ctx, site.image());
else
ctx.pushNull();
}
void App_get_site(script::ContextHandle handle)
{
script::Context ctx(handle);
app::Context* appCtx = App::instance()->context();
Site site = appCtx->activeSite();
push_site(ctx, site);
}
void App_get_pixelColor(script::ContextHandle handle)
{
script::Context ctx(handle);
@ -141,6 +150,7 @@ const script::PropertyEntry App_props[] = {
{ "activeImage", App_get_activeImage, nullptr },
{ "pixelColor", App_get_pixelColor, nullptr },
{ "version", App_get_version, nullptr },
{ "site", App_get_site, nullptr },
{ nullptr, nullptr, 0 }
};

View File

@ -33,6 +33,7 @@ void register_pixel_color_class(script::index_t idx, script::Context& ctx);
void register_point_class(script::index_t idx, script::Context& ctx);
void register_rectangle_class(script::index_t idx, script::Context& ctx);
void register_selection_class(script::index_t idx, script::Context& ctx);
void register_site_class(script::index_t idx, script::Context& ctx);
void register_size_class(script::index_t idx, script::Context& ctx);
void register_sprite_class(script::index_t idx, script::Context& ctx);
@ -56,11 +57,13 @@ AppScripting::AppScripting(script::EngineDelegate* delegate)
}
// Register classes/prototypes
register_image_class(-1, ctx);
register_pixel_color_class(-1, ctx);
register_point_class(-1, ctx);
register_rectangle_class(-1, ctx);
register_selection_class(-1, ctx);
register_site_class(-1, ctx);
register_size_class(-1, ctx);
register_sprite_class(-1, ctx);

View File

@ -19,10 +19,12 @@
#include <map>
namespace doc {
class Image;
class Sprite;
}
namespace app {
class Site;
class AppScripting : public script::Engine {
public:
@ -31,11 +33,13 @@ namespace app {
AppScripting* get_engine(script::Context& ctx);
void push_image(script::Context& ctx, doc::Image* image);
void push_new_point(script::Context& ctx, const gfx::Point& pt);
void push_new_rectangle(script::Context& ctx, const gfx::Rect& rc);
void push_new_size(script::Context& ctx, const gfx::Size& rc);
void push_sprite_selection(script::Context& ctx, doc::Sprite* sprite);
void push_site(script::Context& ctx, app::Site& site);
void push_sprite(script::Context& ctx, doc::Sprite* sprite);
void push_sprite_selection(script::Context& ctx, doc::Sprite* sprite);
gfx::Point convert_args_into_point(script::Context& ctx);
gfx::Rect convert_args_into_rectangle(script::Context& ctx);

View File

@ -94,4 +94,9 @@ void register_image_class(script::index_t idx, script::Context& ctx)
Image_methods, Image_props);
}
void push_image(script::Context& ctx, doc::Image* image)
{
ctx.newObject(kTag, image, nullptr);
}
} // namespace app

View File

@ -0,0 +1,71 @@
// Aseprite
// Copyright (C) 2018 David Capello
//
// 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/app_scripting.h"
#include "app/site.h"
namespace app {
namespace {
const char* kTag = "Site";
void Site_finalize(script::ContextHandle handle, void* data)
{
auto site = (app::Site*)data;
delete site;
}
void Site_get_sprite(script::ContextHandle handle)
{
script::Context ctx(handle);
auto site = (app::Site*)ctx.toUserData(0, kTag);
if (site->sprite())
push_sprite(ctx, site->sprite());
else
ctx.pushNull();
}
void Site_get_image(script::ContextHandle handle)
{
script::Context ctx(handle);
auto site = (app::Site*)ctx.toUserData(0, kTag);
if (site->image())
push_image(ctx, site->image());
else
ctx.pushNull();
}
const script::FunctionEntry Site_methods[] = {
{ nullptr, nullptr, 0 }
};
const script::PropertyEntry Site_props[] = {
{ "sprite", Site_get_sprite, nullptr },
{ "image", Site_get_image, nullptr },
{ nullptr, nullptr, 0 }
};
} // anonymous namespace
void register_site_class(script::index_t idx, script::Context& ctx)
{
ctx.registerClass(idx, kTag,
nullptr, 0,
Site_methods,
Site_props);
}
void push_site(script::Context& ctx, app::Site& site)
{
ctx.newObject(kTag, new app::Site(site), Site_finalize);
}
} // namespace app