]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
[script] Use the helper hash element extraction functions
authorCharlie Brej <cbrej@cs.man.ac.uk>
Thu, 2 Jul 2009 15:41:48 +0000 (16:41 +0100)
committerCharlie Brej <cbrej@cs.man.ac.uk>
Thu, 2 Jul 2009 15:41:48 +0000 (16:41 +0100)
This should simplify the code a little as it removes the need to play with
objects which must be unreffed.

src/plugins/splash/script/script-lib-image.c
src/plugins/splash/script/script-lib-math.c
src/plugins/splash/script/script-lib-sprite.c
src/plugins/splash/script/script-object.c
src/plugins/splash/script/script-object.h

index bef19cd266db32e4a531626a5aa1af1008832beb..1c501ad4781bce46fc7fa65c83e9fabe67adc04d 100644 (file)
@@ -30,11 +30,8 @@ static script_return image_new (script_state* state, void* user_data)
 {
  script_lib_image_data_t* data = user_data;
  script_obj* reply;
- char* filename;
  char* path_filename;
- script_obj* script_obj_filename = script_obj_hash_get_element (state->local, "filename");
- filename = script_obj_as_string(script_obj_filename);
+ char* filename = script_obj_hash_get_string (state->local, "filename");
  
  char* test_string = filename;
  char* prefix_string = "special://";
@@ -52,8 +49,6 @@ static script_return image_new (script_state* state, void* user_data)
     asprintf(&path_filename, "%s/%s", data->image_dir, filename);
  
  
- script_obj_unref(script_obj_filename);
  ply_image_t *image = ply_image_new (path_filename);
  if (ply_image_load (image)){
     reply = script_obj_new_native (image, data->class);
@@ -106,19 +101,18 @@ 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* script_obj_angle = script_obj_hash_get_element (state->local, "angle");
  script_obj_deref(&script_obj_image);
+ 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, script_obj_as_float (script_obj_angle));
+    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);
     }
  else
     reply = script_obj_new_null ();
  script_obj_unref(script_obj_image);
- script_obj_unref(script_obj_angle);
  return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
 }
 
@@ -128,21 +122,19 @@ 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");
script_obj* script_obj_width = script_obj_hash_get_element (state->local, "width");
script_obj* script_obj_height = script_obj_hash_get_element (state->local, "height");
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;
-    ply_image_t *new_image = ply_image_resize (image, script_obj_as_int (script_obj_width), script_obj_as_int (script_obj_height));
+    ply_image_t *new_image = ply_image_resize (image, width, height);
     reply = script_obj_new_native (new_image, data->class);
     }
  else
     reply = script_obj_new_null ();
  script_obj_unref(script_obj_image);
- script_obj_unref(script_obj_width);
- script_obj_unref(script_obj_height);
  return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
 }
 
index f10f50011bf7f290781a95203f57c07c9de525ec..02b7bf9a9cab5c09f8af83b91df54baf8a615595 100644 (file)
 static script_return script_lib_math_float_from_float_function (script_state* state, void* user_data)
 {
  float (*function) (float) = user_data;
- script_obj* obj = script_obj_hash_get_element (state->local, "value");
- script_obj* reply;
- float reply_float = function(script_obj_as_float(obj));
- script_obj_unref(obj);
- if (isnan(reply_float)) reply = script_obj_new_null ();
- else                    reply = script_obj_new_float (reply_float);
- return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
+ float value = script_obj_hash_get_float (state->local, "value");
+ float reply_float = function(value);
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_float (reply_float)};
 }
 
 static script_return script_lib_math_int_from_float_function (script_state* state, void* user_data)
 {
  int (*function) (float) = user_data;
- script_obj* obj = script_obj_hash_get_element (state->local, "value");
- script_obj* reply;
- float reply_int = function(script_obj_as_float(obj));
- script_obj_unref(obj);
- reply = script_obj_new_int (reply_int);
- return (script_return){SCRIPT_RETURN_TYPE_RETURN, reply};
+ float value = script_obj_hash_get_float (state->local, "value");
+ float reply_int = function(value);
+ return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_int (reply_int)};
 }
 
 
index 520048a6f3dbd24f95f06fa145e996159feff96f..86c72105aaa009dcc1c9f0f8b40ebb2c97e8ce6e 100644 (file)
@@ -79,23 +79,19 @@ static script_return sprite_set_image (script_state* state, void* user_data)
  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);
- script_obj* script_obj_value = script_obj_hash_get_element (state->local, "value");
- script_obj_deref(&script_obj_value);
+ int value = 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 = script_obj_as_int(script_obj_value);
+    sprite->x = value;
     }
  script_obj_unref(script_obj_sprite);
- script_obj_unref(script_obj_value);
  return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
 }
 
@@ -104,16 +100,14 @@ 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);
- script_obj* script_obj_value = script_obj_hash_get_element (state->local, "value");
- script_obj_deref(&script_obj_value);
+ int value = 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 = script_obj_as_int(script_obj_value);
+    sprite->y = value;
     }
  script_obj_unref(script_obj_sprite);
- script_obj_unref(script_obj_value);
  return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
 }
 
@@ -122,41 +116,33 @@ 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);
- script_obj* script_obj_value = script_obj_hash_get_element (state->local, "value");
- script_obj_deref(&script_obj_value);
+ int value = 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->z = script_obj_as_int(script_obj_value);
+    sprite->z = value;
     }
  script_obj_unref(script_obj_sprite);
- script_obj_unref(script_obj_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);
- script_obj* script_obj_value = script_obj_hash_get_element (state->local, "value");
- script_obj_deref(&script_obj_value);
+ float value = 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 = script_obj_as_float(script_obj_value);
+    sprite->opacity = value;
     }
  script_obj_unref(script_obj_sprite);
- script_obj_unref(script_obj_value);
  return (script_return){SCRIPT_RETURN_TYPE_RETURN, script_obj_new_null ()};
 }
 
-
-
 static script_return sprite_window_get_width (script_state* state, void* user_data)
 {
  script_lib_sprite_data_t* data = user_data;
index 6d8cfd534a08debd879df1e8b7a298494226dac2..d9e45b0893c5c44137d75128dd18b110631b591c 100644 (file)
@@ -210,6 +210,7 @@ script_obj* script_obj_new_int (int number)
 
 script_obj* script_obj_new_float (float number)
 {
+ if (isnan(number)) return script_obj_new_null ();
  script_obj* obj = malloc(sizeof(script_obj));
  obj->type = SCRIPT_OBJ_TYPE_FLOAT;
  obj->refcount = 1;
@@ -430,6 +431,12 @@ bool script_obj_is_native_of_class (script_obj* obj, script_obj_native_class* cl
  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)
+{
+ obj = script_obj_deref_direct(obj);
+ return (obj->type == SCRIPT_OBJ_TYPE_NATIVE && obj->data.native.class->name == class_name);
+}
+
 
 
 
@@ -487,6 +494,37 @@ script_obj* script_obj_hash_get_element (script_obj* hash, const char* name)
  return obj;
 }
 
+int script_obj_hash_get_int (script_obj* hash, const char* name)
+{
+ script_obj* obj = script_obj_hash_get_element (hash, name);
+ int reply = script_obj_as_int (obj);
+ script_obj_unref (obj);
+ return reply;
+}
+
+float script_obj_hash_get_float (script_obj* hash, const char* name)
+{
+ script_obj* obj = script_obj_hash_get_element (hash, name);
+ float reply = script_obj_as_float (obj);
+ script_obj_unref (obj);
+ return reply;
+}
+
+bool script_obj_hash_get_bool (script_obj* hash, const char* name)
+{
+ script_obj* obj = script_obj_hash_get_element (hash, name);
+ bool reply = script_obj_as_bool (obj);
+ script_obj_unref (obj);
+ return reply;
+}
+
+char* script_obj_hash_get_string (script_obj* hash, const char* name)
+{
+ script_obj* obj = script_obj_hash_get_element (hash, name);
+ char* reply = script_obj_as_string (obj);
+ script_obj_unref (obj);
+ return reply;
+}
 
 void script_obj_hash_add_element (script_obj* hash, script_obj* element, const char* name)
 {
index 31da9433fb40491cc534af2f2311ca8348d0fd2e..fb2103c0156f563ee9b4e71a0e3f58a333863e0a 100644 (file)
@@ -30,8 +30,13 @@ bool script_obj_is_hash (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);
 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_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);