mirror of https://github.com/aseprite/aseprite.git
js: Add Site class and app.site property
This commit is contained in:
parent
1306f9a8a1
commit
587f697bda
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 }
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
Loading…
Reference in New Issue