From 31116ff42464076b4d55374d3c2d672a126bab03 Mon Sep 17 00:00:00 2001 From: David Capello Date: Sat, 7 May 2016 19:44:11 -0300 Subject: [PATCH] script: add Sprite.colorMode property and ColorMode constants --- src/app/script/app_scripting.cpp | 18 ++++++++++++++++++ src/app/script/sprite_class.cpp | 9 +++++++++ src/script/engine.cpp | 6 ++++++ src/script/engine.h | 7 +++++++ 4 files changed, 40 insertions(+) diff --git a/src/app/script/app_scripting.cpp b/src/app/script/app_scripting.cpp index 346acf40b..f13ef3f4e 100644 --- a/src/app/script/app_scripting.cpp +++ b/src/app/script/app_scripting.cpp @@ -22,6 +22,17 @@ namespace app { +namespace { + +const script::ConstantEntry ColorMode_constants[] = { + { "RGB", double(IMAGE_RGB) }, + { "GRAYSCALE", double(IMAGE_GRAYSCALE) }, + { "INDEXED", double(IMAGE_INDEXED) }, + { nullptr, 0.0 } +}; + +} + AppScripting::AppScripting(script::EngineDelegate* delegate) : script::Engine(delegate) { @@ -30,6 +41,13 @@ AppScripting::AppScripting(script::EngineDelegate* delegate) register_console_object(ctx); ctx.pushGlobalObject(); + + { + script::index_t obj = ctx.pushObject(); + ctx.registerConstants(obj, ColorMode_constants); + ctx.setProp(-2, "ColorMode"); + } + register_image_class(-1, ctx); register_sprite_class(-1, ctx); register_selection_class(-1, ctx); diff --git a/src/app/script/sprite_class.cpp b/src/app/script/sprite_class.cpp index 00b8be159..65772d63f 100644 --- a/src/app/script/sprite_class.cpp +++ b/src/app/script/sprite_class.cpp @@ -208,6 +208,14 @@ script::result_t Sprite_get_height(script::ContextHandle handle) return 1; } +script::result_t Sprite_get_colorMode(script::ContextHandle handle) +{ + script::Context ctx(handle); + auto wrap = (SpriteWrap*)ctx.getThis(); + ctx.pushInt(wrap->sprite()->pixelFormat()); + return 1; +} + script::result_t Sprite_set_height(script::ContextHandle handle) { script::Context ctx(handle); @@ -243,6 +251,7 @@ const script::PropertyEntry Sprite_props[] = { { "filename", Sprite_get_filename, nullptr }, { "width", Sprite_get_width, Sprite_set_width }, { "height", Sprite_get_height, Sprite_set_height }, + { "colorMode", Sprite_get_colorMode, nullptr }, { "selection", Sprite_get_selection, nullptr }, { nullptr, nullptr, 0 } }; diff --git a/src/script/engine.cpp b/src/script/engine.cpp index 7d1588bf0..35e074127 100644 --- a/src/script/engine.cpp +++ b/src/script/engine.cpp @@ -327,6 +327,12 @@ void Context::pushGlobalObject() duk_push_global_object(m_handle); } +void Context::registerConstants(index_t idx, + const ConstantEntry* consts) +{ + duk_put_number_list(m_handle, idx, (const duk_number_list_entry*)consts); +} + void Context::registerProp(index_t idx, const char* id, Function getter, diff --git a/src/script/engine.h b/src/script/engine.h index 451121c8a..7aa232fc1 100644 --- a/src/script/engine.h +++ b/src/script/engine.h @@ -35,6 +35,11 @@ namespace script { Function setter; }; + struct ConstantEntry { + const char* id; + double value; + }; + class Module { public: virtual ~Module() { } @@ -100,6 +105,8 @@ namespace script { index_t pushObject(void* ptr, const char* className); void pushGlobalObject(); + void registerConstants(index_t idx, + const ConstantEntry* consts); void registerProp(index_t idx, const char* id, Function getter,