[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