#include "config.h"
#define STRINGIFY_VAR script_lib_image_string
-
#include "script-lib-image.string"
ply_image_free (image);
}
-
static script_return image_new (script_state* state, void* user_data)
{
script_lib_image_data_t* data = user_data;
script_obj* reply;
char* path_filename;
char* filename = script_obj_hash_get_string (state->local, "filename");
-
char* test_string = filename;
char* prefix_string = "special://";
while (*test_string && *prefix_string && *test_string == *prefix_string){
static script_return image_get_width (script_state* state, void* user_data)
{
script_lib_image_data_t* data = user_data;
- script_obj* script_obj_image = script_obj_hash_get_element (state->local, "image");
- script_obj_deref(&script_obj_image);
- script_obj* reply;
- if (script_obj_image->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_image->data.native.class == data->class){
- ply_image_t *image = script_obj_image->data.native.object_data;
- reply = script_obj_new_int (ply_image_get_width (image));
- }
- else
- reply = script_obj_new_null ();
- script_obj_unref(script_obj_image);
- return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
+ ply_image_t *image = script_obj_hash_get_native_of_class (state->local, "image", data->class);
+ if (image)
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_int (ply_image_get_width (image))};
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
}
static script_return image_get_height (script_state* state, void* user_data)
{
script_lib_image_data_t* data = user_data;
- script_obj* script_obj_image = script_obj_hash_get_element (state->local, "image");
- script_obj_deref(&script_obj_image);
- script_obj* reply;
- if (script_obj_image->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_image->data.native.class == data->class){
- ply_image_t *image = script_obj_image->data.native.object_data;
- reply = script_obj_new_int (ply_image_get_height (image));
- }
- else
- reply = script_obj_new_null ();
- script_obj_unref(script_obj_image);
- return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
+ ply_image_t *image = script_obj_hash_get_native_of_class (state->local, "image", data->class);
+ if (image)
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_int (ply_image_get_height (image))};
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
}
-
-
static script_return image_rotate (script_state* state, void* user_data)
{
script_lib_image_data_t* data = user_data;
- script_obj* script_obj_image = script_obj_hash_get_element (state->local, "image");
- script_obj_deref(&script_obj_image);
+ ply_image_t *image = script_obj_hash_get_native_of_class (state->local, "image", data->class);
float angle = script_obj_hash_get_float (state->local, "angle");
- script_obj* reply;
- if (script_obj_image->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_image->data.native.class == data->class){
- ply_image_t *image = script_obj_image->data.native.object_data;
- ply_image_t *new_image = ply_image_rotate (image, ply_image_get_width (image)/2, ply_image_get_height (image)/2, angle);
- reply = script_obj_new_native (new_image, data->class);
+ if (image){
+ ply_image_t *new_image = ply_image_rotate (image,
+ ply_image_get_width (image) / 2,
+ ply_image_get_height (image) / 2,
+ angle);
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_native (new_image, data->class)};
}
- else
- reply = script_obj_new_null ();
- script_obj_unref(script_obj_image);
- return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
}
-
-
static script_return image_scale (script_state* state, void* user_data)
{
script_lib_image_data_t* data = user_data;
- script_obj* script_obj_image = script_obj_hash_get_element (state->local, "image");
+ ply_image_t *image = script_obj_hash_get_native_of_class (state->local, "image", data->class);
int width = script_obj_hash_get_int (state->local, "width");
int height = script_obj_hash_get_int (state->local, "height");
- script_obj_deref(&script_obj_image);
- script_obj* reply;
- if (script_obj_image->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_image->data.native.class == data->class){
- ply_image_t *image = script_obj_image->data.native.object_data;
+ if (image){
ply_image_t *new_image = ply_image_resize (image, width, height);
- reply = script_obj_new_native (new_image, data->class);
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_native (new_image, data->class)};
}
- else
- reply = script_obj_new_null ();
- script_obj_unref(script_obj_image);
- return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
}
-
-
-
script_lib_image_data_t* script_lib_image_setup(script_state *state, char* image_dir)
{
script_lib_image_data_t* data = malloc(sizeof(script_lib_image_data_t));
data->script_main_op = script_parse_string (script_lib_image_string);
script_return ret = script_execute(state, data->script_main_op);
- if (ret.object) script_obj_unref(ret.object); // Throw anything sent back away
+ script_obj_unref(ret.object);
return data;
}
{
int (*function) (float) = user_data;
float value = script_obj_hash_get_float (state->local, "value");
- float reply_int = function(value);
+ int reply_int = function(value);
return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_int (reply_int)};
}
-
-
static int float_to_int (float value)
{
return (int) value;
return data;
}
-
void script_lib_math_destroy(script_lib_math_data_t* data)
{
script_parse_op_free (data->script_main_op);
free(data);
}
-
-
script_obj* refresh_func_obj = data->script_refresh_func;
if (refresh_func_obj && refresh_func_obj->type == SCRIPT_OBJ_TYPE_FUNCTION){
script_return ret = script_execute_function (state, refresh_func_obj->data.function, NULL);
- script_obj_unref(ret.object); // Throw anything sent back away
+ script_obj_unref(ret.object);
}
}
script_obj* duration_obj = script_obj_new_float (duration);
script_obj* progress_obj = script_obj_new_float (progress);
script_return ret = script_execute_function (state, boot_progress_func_obj->data.function, duration_obj, progress_obj, NULL);
- script_obj_unref(ret.object); // Throw anything sent back away
+ script_obj_unref(ret.object);
script_obj_unref(duration_obj);
script_obj_unref(progress_obj);
}
script_obj *script_boot_progress_func;
script_obj *script_root_mounted_func;
script_obj *script_keyboard_input_func;
-
script_obj *script_update_status_func;
script_obj *script_display_normal_func;
script_obj *script_display_password_func;
static script_return sprite_set_image (script_state* state, void* user_data)
{
script_lib_sprite_data_t* data = user_data;
- script_obj* script_obj_sprite = script_obj_hash_get_element (state->local, "sprite");
- script_obj_deref(&script_obj_sprite);
+ sprite_t *sprite = script_obj_hash_get_native_of_class (state->local, "sprite", data->class);
script_obj* script_obj_image = script_obj_hash_get_element (state->local, "image");
script_obj_deref(&script_obj_image);
+ ply_image_t *image = script_obj_as_native_of_class_name (script_obj_image, "image");
- if (script_obj_image->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_sprite->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_sprite->data.native.class == data->class){
- sprite_t *sprite = script_obj_sprite->data.native.object_data;
- ply_image_t *image = script_obj_image->data.native.object_data;
+
+ if (image && sprite){
script_obj_unref(sprite->image_obj);
script_obj_ref(script_obj_image);
sprite->image = image;
sprite->image_obj = script_obj_image;
sprite->refresh_me = true;
}
- script_obj_unref(script_obj_sprite);
script_obj_unref(script_obj_image);
return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
static script_return sprite_set_x (script_state* state, void* user_data)
{
script_lib_sprite_data_t* data = user_data;
- script_obj* script_obj_sprite = script_obj_hash_get_element (state->local, "sprite");
- script_obj_deref(&script_obj_sprite);
- int value = script_obj_hash_get_int (state->local, "value");
+ sprite_t *sprite = script_obj_hash_get_native_of_class (state->local, "sprite", data->class);
+
+ if (sprite)
+ sprite->x = script_obj_hash_get_int (state->local, "value");
- if (script_obj_sprite->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_sprite->data.native.class == data->class){
- sprite_t *sprite = script_obj_sprite->data.native.object_data;
- sprite->x = value;
- }
- script_obj_unref(script_obj_sprite);
return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
}
static script_return sprite_set_y (script_state* state, void* user_data)
{
script_lib_sprite_data_t* data = user_data;
- script_obj* script_obj_sprite = script_obj_hash_get_element (state->local, "sprite");
- script_obj_deref(&script_obj_sprite);
- int value = script_obj_hash_get_int (state->local, "value");
+ sprite_t *sprite = script_obj_hash_get_native_of_class (state->local, "sprite", data->class);
+
+ if (sprite)
+ sprite->y = script_obj_hash_get_int (state->local, "value");
- if (script_obj_sprite->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_sprite->data.native.class == data->class){
- sprite_t *sprite = script_obj_sprite->data.native.object_data;
- sprite->y = value;
- }
- script_obj_unref(script_obj_sprite);
return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
}
static script_return sprite_set_z (script_state* state, void* user_data)
{
script_lib_sprite_data_t* data = user_data;
- script_obj* script_obj_sprite = script_obj_hash_get_element (state->local, "sprite");
- script_obj_deref(&script_obj_sprite);
- int value = script_obj_hash_get_int (state->local, "value");
+ sprite_t *sprite = script_obj_hash_get_native_of_class (state->local, "sprite", data->class);
- if (script_obj_sprite->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_sprite->data.native.class == data->class){
- sprite_t *sprite = script_obj_sprite->data.native.object_data;
- sprite->z = value;
- }
- script_obj_unref(script_obj_sprite);
+ if (sprite)
+ sprite->z = script_obj_hash_get_int (state->local, "value");
+
return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
}
static script_return sprite_set_opacity (script_state* state, void* user_data)
{
script_lib_sprite_data_t* data = user_data;
- script_obj* script_obj_sprite = script_obj_hash_get_element (state->local, "sprite");
- script_obj_deref(&script_obj_sprite);
- float value = script_obj_hash_get_float (state->local, "value");
+ sprite_t *sprite = script_obj_hash_get_native_of_class (state->local, "sprite", data->class);
+
+ if (sprite)
+ sprite->opacity = script_obj_hash_get_float (state->local, "value");
- if (script_obj_sprite->type == SCRIPT_OBJ_TYPE_NATIVE &&
- script_obj_sprite->data.native.class == data->class){
- sprite_t *sprite = script_obj_sprite->data.native.object_data;
- sprite->opacity = value;
- }
- script_obj_unref(script_obj_sprite);
return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
}
static uint32_t extract_rgb_color (script_state* state)
{
- script_obj* script_obj_red = script_obj_hash_get_element (state->local, "red");
- script_obj* script_obj_green = script_obj_hash_get_element (state->local, "green");
- script_obj* script_obj_blue = script_obj_hash_get_element (state->local, "blue");
- uint8_t red = CLAMP(255 * script_obj_as_float(script_obj_red), 0, 255);
- uint8_t green = CLAMP(255 * script_obj_as_float(script_obj_green), 0, 255);
- uint8_t blue = CLAMP(255 * script_obj_as_float(script_obj_blue), 0, 255);
- script_obj_unref(script_obj_red);
- script_obj_unref(script_obj_green);
- script_obj_unref(script_obj_blue);
+ uint8_t red = CLAMP(255 * script_obj_hash_get_float (state->local, "red"), 0, 255);
+ uint8_t green = CLAMP(255 * script_obj_hash_get_float (state->local, "green"), 0, 255);
+ uint8_t blue = CLAMP(255 * script_obj_hash_get_float (state->local, "blue"), 0, 255);
return (uint32_t) red<<16 | green<<8 | blue;
}
static script_return sprite_window_set_background_top_color (script_state* state, void* user_data)
script_obj* script_obj_new_native (void* object_data, script_obj_native_class* class)
{
+ if (!object_data) return script_obj_new_null ();
script_obj* obj = malloc(sizeof(script_obj));
obj->type = SCRIPT_OBJ_TYPE_NATIVE;
obj->data.native.class = class;
return false;
}
-
char* script_obj_as_string (script_obj* obj) // reply is strdupped and may be NULL
{
obj = script_obj_deref_direct(obj);
return false;
}
+void* script_obj_as_native_of_class (script_obj* obj, script_obj_native_class* class)
+{
+ obj = script_obj_deref_direct(obj);
+ if (script_obj_is_native_of_class (obj, class))
+ return obj->data.native.object_data;
+ return NULL;
+}
+void* script_obj_as_native_of_class_name (script_obj* obj, const char* class_name)
+{
+ obj = script_obj_deref_direct(obj);
+ if (script_obj_is_native_of_class_name (obj, class_name))
+ return obj->data.native.object_data;
+ return NULL;
+}
+
bool script_obj_is_null (script_obj* obj)
{
return (obj->type == SCRIPT_OBJ_TYPE_NATIVE && obj->data.native.class == class);
}
-bool script_obj_is_native_of_class_name (script_obj* obj, char* class_name)
+bool script_obj_is_native_of_class_name (script_obj* obj, const char* class_name)
{
obj = script_obj_deref_direct(obj);
- return (obj->type == SCRIPT_OBJ_TYPE_NATIVE && obj->data.native.class->name == class_name);
+ return (obj->type == SCRIPT_OBJ_TYPE_NATIVE && !strcmp(obj->data.native.class->name, class_name));
}
return reply;
}
+void* script_obj_hash_get_native_of_class (script_obj* hash, const char* name, script_obj_native_class* class)
+{
+ script_obj* obj = script_obj_hash_get_element (hash, name);
+ void* reply = script_obj_as_native_of_class (obj, class);
+ script_obj_unref (obj);
+ return reply;
+}
+
+void* script_obj_hash_get_native_of_class_name (script_obj* hash, const char* name, const char* class_name)
+{
+ script_obj* obj = script_obj_hash_get_element (hash, name);
+ void* reply = script_obj_as_native_of_class_name (obj, class_name);
+ script_obj_unref (obj);
+ return reply;
+}
+
void script_obj_hash_add_element (script_obj* hash, script_obj* element, const char* name)
{
assert(hash->type == SCRIPT_OBJ_TYPE_HASH);
float script_obj_as_float (script_obj* obj);
bool script_obj_as_bool (script_obj* obj);
char* script_obj_as_string (script_obj* obj);
+void* script_obj_as_native_of_class (script_obj* obj, script_obj_native_class* class);
+void* script_obj_as_native_of_class_name (script_obj* obj, const char* class_name);
bool script_obj_is_null (script_obj* obj);
bool script_obj_is_int (script_obj* obj);
bool script_obj_is_float (script_obj* obj);
bool script_obj_is_function (script_obj* obj);
bool script_obj_is_native (script_obj* obj);
bool script_obj_is_native_of_class (script_obj* obj, script_obj_native_class* class);
-bool script_obj_is_native_of_class_name (script_obj* obj, char* class_name);
+bool script_obj_is_native_of_class_name (script_obj* obj, const char* class_name);
void script_obj_assign (script_obj* obj_a, script_obj* obj_b);
script_obj* script_obj_hash_get_element (script_obj* hash, const char* name);
int script_obj_hash_get_int (script_obj* hash, const char* name);
float script_obj_hash_get_float (script_obj* hash, const char* name);
bool script_obj_hash_get_bool (script_obj* hash, const char* name);
char* script_obj_hash_get_string (script_obj* hash, const char* name);
+void* script_obj_hash_get_native_of_class (script_obj* hash, const char* name, script_obj_native_class* class);
+void* script_obj_hash_get_native_of_class_name (script_obj* hash, const char* name, const char* class_name);
void script_obj_hash_add_element (script_obj* hash, script_obj* element, const char* name);
script_obj* script_obj_plus (script_obj* script_obj_a_in, script_obj* script_obj_b_in);
script_obj* script_obj_minus (script_obj* script_obj_a_in, script_obj* script_obj_b_in);