X-Git-Url: http://git.code-monkey.de/?p=ruby-edje.git;a=blobdiff_plain;f=src%2Frb_edje.c;h=1202b795d20bc953232823ef3f4e6bc57b81d2c7;hp=02ff4ea2f254abec8e9e88531bc5fe6e8a98c5b7;hb=9df644ecd3547f65ac0685ce46c6f2f6bb50d089;hpb=7003b6f4e489403e126d372ce017996147b35491 diff --git a/src/rb_edje.c b/src/rb_edje.c index 02ff4ea..1202b79 100644 --- a/src/rb_edje.c +++ b/src/rb_edje.c @@ -1,5 +1,5 @@ /* - * $Id: rb_edje.c 328 2005-04-28 07:44:46Z tilman $ + * $Id: rb_edje.c 330 2005-04-28 15:38:47Z tilman $ * * Copyright (C) 2004 Tilman Sauerbeck (tilman at code-monkey de) * @@ -28,9 +28,9 @@ #include "rb_edje.h" #include "rb_edje_main.h" #include "rb_part.h" -#include "rb_messages.h" VALUE cEdje; +static VALUE cMsg, eEdjeError; static void c_mark (RbEdje *e) { @@ -412,23 +412,59 @@ static VALUE c_data_get (VALUE self, VALUE key) static VALUE c_send_message (VALUE self, VALUE msg) { - VALUE m; + Edje_Message_String s; + Edje_Message_Int i; + Edje_Message_Float f; Edje_Message_Type type; - int id; + void *data; + VALUE v, tmp; GET_OBJ (self, RbEdje, e); CHECK_CLASS (msg, cMsg); - type = NUM2INT (rb_iv_get (msg, "@type")); - id = NUM2INT (rb_iv_get (msg, "@id")); - m = rb_funcall (msg, rb_intern ("serialize"), 0, NULL); + v = rb_iv_get (msg, "@value"); - edje_object_message_send (e->real.real, type, id, (void *) m); + if (NIL_P (v)) { + rb_raise (eEdjeError, "value must not be nil"); + return Qnil; + } + + if (!NIL_P (tmp = rb_check_string_type (v))) { + type = EDJE_MESSAGE_STRING; + s.str = StringValuePtr (tmp); + data = &s; + } else if (rb_obj_is_kind_of (v, rb_cFixnum)) { + type = EDJE_MESSAGE_INT; + i.val = FIX2INT (v); + data = &i; + } else if (rb_obj_is_kind_of (v, rb_cFloat)) { + type = EDJE_MESSAGE_FLOAT; + f.val = NUM2DBL (v); + data = &v; + /* } else if (!NIL_P (tmp = rb_check_array_type (v))) { */ + } else { + rb_raise (eEdjeError, "unsupported value"); + } + + edje_object_message_send (e->real.real, type, + NUM2INT (rb_iv_get (msg, "@id")), data); return Qnil; } +static VALUE c_msg_init (int argc, VALUE *argv, VALUE self) +{ + VALUE val; + + rb_scan_args (argc, argv, "01", &val); + + rb_iv_set (self, "@id", UINT2NUM (0)); + rb_iv_set (self, "@value", val); + + return self; +} + void Init_Edje (void) { cEdje = rb_define_class_under (mEdje, "Edje", cEvasObject); @@ -450,4 +486,14 @@ void Init_Edje (void) rb_define_method (cEdje, "animation=", c_animation_set, 1); rb_define_method (cEdje, "data", c_data_get, 1); rb_define_method (cEdje, "send_message", c_send_message, 1); + + cMsg = rb_define_class_under (mEdje, "Message", rb_cObject); + + rb_define_method (cMsg, "initialize", c_msg_init, -1); + + rb_define_attr (cMsg, "id", 1, 1); + rb_define_attr (cMsg, "value", 1, 1); + + eEdjeError = rb_define_class_under (mEdje, "EdjeError", + rb_eStandardError); }