[aseprite] 01/64: Add more scripting functions
Tobias Hansen
thansen at moszumanska.debian.org
Tue Jun 21 14:42:59 UTC 2016
This is an automated email from the git hooks/post-receive script.
thansen pushed a commit to branch master
in repository aseprite.
commit 573f68451ab0a446ed0c76825c17358628f086a5
Author: David Capello <davidcapello at gmail.com>
Date: Fri Apr 15 19:59:25 2016 -0300
Add more scripting functions
* App.open
* Sprite.save and saveAs
* Sprite.filename property
---
src/app/script/app_object.cpp | 27 +++++++++++++++++
src/app/script/sprite_class.cpp | 66 ++++++++++++++++++++++++++++++++++++++---
2 files changed, 89 insertions(+), 4 deletions(-)
diff --git a/src/app/script/app_object.cpp b/src/app/script/app_object.cpp
index 56c7f73..7294510 100644
--- a/src/app/script/app_object.cpp
+++ b/src/app/script/app_object.cpp
@@ -12,6 +12,8 @@
#include "app/script/console_object.h"
#include "app/document.h"
+#include "app/commands/commands.h"
+#include "app/commands/params.h"
#include "app/script/app_scripting.h"
#include "app/script/sprite_wrap.h"
#include "app/ui_context.h"
@@ -26,6 +28,30 @@ namespace app {
namespace {
+script::result_t App_open(script::ContextHandle handle)
+{
+ script::Context ctx(handle);
+ if (!ctx.isString(0) ||
+ !ctx.toString(0))
+ return 0;
+
+ const char* fn = ctx.toString(0);
+
+ app::Document* oldDoc = UIContext::instance()->activeDocument();
+
+ Command* openCommand = CommandsModule::instance()->getCommandByName(CommandId::OpenFile);
+ Params params;
+ params.set("filename", fn);
+ UIContext::instance()->executeCommand(openCommand, params);
+
+ app::Document* newDoc = UIContext::instance()->activeDocument();
+ if (newDoc != oldDoc)
+ ctx.pushObject(unwrap_engine(ctx)->wrapSprite(newDoc), "Sprite");
+ else
+ ctx.pushNull();
+ return 1;
+}
+
script::result_t App_get_activeSprite(script::ContextHandle handle)
{
script::Context ctx(handle);
@@ -66,6 +92,7 @@ script::result_t App_get_version(script::ContextHandle handle)
}
const script::FunctionEntry App_methods[] = {
+ { "open", App_open, 1 },
{ nullptr, nullptr, 0 }
};
diff --git a/src/app/script/sprite_class.cpp b/src/app/script/sprite_class.cpp
index 85be120..e1151b2 100644
--- a/src/app/script/sprite_class.cpp
+++ b/src/app/script/sprite_class.cpp
@@ -16,11 +16,13 @@
#include "app/commands/params.h"
#include "app/document.h"
#include "app/document_api.h"
+#include "app/file/palette_file.h"
#include "app/script/app_scripting.h"
#include "app/script/sprite_wrap.h"
#include "app/transaction.h"
#include "app/ui/document_view.h"
#include "app/ui_context.h"
+#include "doc/palette.h"
#include "doc/site.h"
#include "doc/sprite.h"
#include "script/engine.h"
@@ -82,28 +84,81 @@ script::result_t Sprite_crop(script::ContextHandle handle)
return 0;
}
+script::result_t Sprite_save(script::ContextHandle handle)
+{
+ script::Context ctx(handle);
+
+ auto wrap = (SpriteWrap*)ctx.getThis();
+ if (wrap) {
+ wrap->commit();
+
+ auto doc = wrap->document();
+ auto uiCtx = UIContext::instance();
+ uiCtx->setActiveDocument(doc);
+ Command* saveCommand = CommandsModule::instance()->getCommandByName(CommandId::SaveFile);
+ uiCtx->executeCommand(saveCommand);
+ }
+
+ return 0;
+}
+
script::result_t Sprite_saveAs(script::ContextHandle handle)
{
script::Context ctx(handle);
const char* fn = ctx.requireString(0);
+ bool asCopy = ctx.getBool(1);
auto wrap = (SpriteWrap*)ctx.getThis();
if (fn && wrap) {
- Document* doc = wrap->document();
+ wrap->commit();
+ auto doc = wrap->document();
auto uiCtx = UIContext::instance();
uiCtx->setActiveDocument(doc);
- Command* saveAsCommand = CommandsModule::instance()->getCommandByName(CommandId::SaveFileCopyAs);
+ Command* saveCommand =
+ CommandsModule::instance()->getCommandByName(
+ (asCopy ? CommandId::SaveFileCopyAs:
+ CommandId::SaveFile));
Params params;
- params.set("filename", fn);
- uiCtx->executeCommand(saveAsCommand, params);
+ if (asCopy)
+ params.set("filename", fn);
+ else
+ doc->setFilename(fn);
+ uiCtx->executeCommand(saveCommand, params);
}
return 0;
}
+script::result_t Sprite_loadPalette(script::ContextHandle handle)
+{
+ script::Context ctx(handle);
+ const char* fn = ctx.requireString(0);
+
+ auto wrap = (SpriteWrap*)ctx.getThis();
+ if (fn && wrap) {
+ auto doc = wrap->document();
+ base::UniquePtr<doc::Palette> palette(load_palette(fn));
+ if (palette) {
+ // TODO Merge this with the code in LoadPaletteCommand
+ doc->getApi(wrap->transaction()).setPalette(
+ wrap->sprite(), 0, palette);
+ }
+ }
+
+ return 0;
+}
+
+script::result_t Sprite_get_filename(script::ContextHandle handle)
+{
+ script::Context ctx(handle);
+ auto wrap = (SpriteWrap*)ctx.getThis();
+ ctx.pushString(wrap->document()->filename().c_str());
+ return 1;
+}
+
script::result_t Sprite_get_width(script::ContextHandle handle)
{
script::Context ctx(handle);
@@ -151,11 +206,14 @@ script::result_t Sprite_set_height(script::ContextHandle handle)
const script::FunctionEntry Sprite_methods[] = {
{ "resize", Sprite_resize, 2 },
{ "crop", Sprite_crop, 4 },
+ { "save", Sprite_save, 2 },
{ "saveAs", Sprite_saveAs, 2 },
+ { "loadPalette", Sprite_loadPalette, 1 },
{ nullptr, nullptr, 0 }
};
const script::PropertyEntry Sprite_props[] = {
+ { "filename", Sprite_get_filename, nullptr },
{ "width", Sprite_get_width, Sprite_set_width },
{ "height", Sprite_get_height, Sprite_set_height },
{ nullptr, nullptr, 0 }
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/aseprite.git
More information about the Pkg-games-commits
mailing list