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