X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;ds=sidebyside;f=src%2Fecore_evas%2Frb_ecore_evas.c;h=b5d7a9e4f41fed14ec81f83672b9a1a007067b54;hb=d6e45172f31e9a724a5da3b99ef26d519740d691;hp=9b2ad29a2bd77a657f19c8c1a6b75dff4aaac389;hpb=675f0103d4db84bcae4d83911afceb76c44d50f0;p=ruby-ecore.git
diff --git a/src/ecore_evas/rb_ecore_evas.c b/src/ecore_evas/rb_ecore_evas.c
index 9b2ad29..b5d7a9e 100644
--- a/src/ecore_evas/rb_ecore_evas.c
+++ b/src/ecore_evas/rb_ecore_evas.c
@@ -1,6 +1,4 @@
/*
- * $Id: rb_ecore_evas.c 110 2004-09-02 17:06:54Z tilman $
- *
* Copyright (C) 2004 ruby-ecore team (see AUTHORS)
*
* This library is free software; you can redistribute it and/or
@@ -35,14 +33,14 @@
#define CALLBACK_DEFINE_HANDLER(name) \
static void on_##name (Ecore_Evas *real) \
{ \
- VALUE self; \
- VALUE cb; \
+ VALUE self, cb; \
\
self = (VALUE) ecore_evas_data_get (real, \
RUBY_ECORE_EVAS_KEY); \
GET_OBJ (self, RbEcoreEvas, ee); \
\
- cb = rb_hash_aref (ee->callbacks, rb_str_new2 (#name)); \
+ cb = rb_hash_aref (ee->callbacks, \
+ LONG2NUM ((long) ecore_evas_callback_##name##_set)); \
rb_funcall (cb, rb_intern ("call"), 0); \
} \
@@ -52,7 +50,11 @@
if (!rb_block_given_p ()) \
return Qnil; \
\
- rb_hash_aset (ee->callbacks, rb_str_new2 (#name), \
+ if (NIL_P (ee->callbacks)) \
+ ee->callbacks = rb_hash_new (); \
+\
+ rb_hash_aset (ee->callbacks, \
+ LONG2NUM ((long) ecore_evas_callback_##name##_set), \
rb_block_proc ()); \
\
ecore_evas_callback_##name##_set (ee->real, on_##name); \
@@ -67,7 +69,8 @@ void c_ecore_evas_mark (RbEcoreEvas *ee)
if (!NIL_P (ee->evas))
rb_gc_mark (ee->evas);
- rb_gc_mark (ee->callbacks);
+ if (!NIL_P (ee->callbacks))
+ rb_gc_mark (ee->callbacks);
}
void c_ecore_evas_free (RbEcoreEvas *ee, bool free_mem)
@@ -88,7 +91,7 @@ static VALUE c_init (int argc, VALUE *argv, VALUE self)
GET_OBJ (self, RbEcoreEvas, ee);
ee->evas = Qnil;
- ee->callbacks = rb_hash_new ();
+ ee->callbacks = Qnil;
ecore_evas_data_set (ee->real, RUBY_ECORE_EVAS_KEY, (void *) self);
@@ -518,6 +521,98 @@ static VALUE c_rotation_set (VALUE self, VALUE val)
return Qnil;
}
+static VALUE c_name_class_get (VALUE self)
+{
+ const char *name = NULL, *klass = NULL;
+
+ GET_OBJ (self, RbEcoreEvas, ee);
+
+ ecore_evas_name_class_get (ee->real, &name, &klass);
+
+ return rb_ary_new3 (2, name ? rb_str_new2 (name) : Qnil,
+ klass ? rb_str_new2 (klass) : Qnil);
+}
+
+static VALUE c_name_class_set (VALUE self, VALUE ary)
+{
+ VALUE s1, s2;
+
+ GET_OBJ (self, RbEcoreEvas, ee);
+
+ Check_Type (ary, T_ARRAY);
+
+ s1 = rb_ary_shift (ary);
+ s2 = rb_ary_shift (ary);
+
+ StringValue (s1);
+ StringValue (s2);
+
+ ecore_evas_name_class_set (ee->real, StringValuePtr (s1),
+ StringValuePtr (s2));
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * ee.iconified? => true or false
+ *
+ * Returns true if ee is iconified, else returns false.
+ */
+static VALUE c_iconified_get (VALUE self)
+{
+ GET_OBJ (self, RbEcoreEvas, ee);
+
+ return ecore_evas_iconified_get (ee->real) ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ * ee.iconified(true or false)
+ *
+ * Sets whether ee is iconified or not.
+ */
+static VALUE c_iconified_set (VALUE self, VALUE val)
+{
+ GET_OBJ (self, RbEcoreEvas, ee);
+
+ CHECK_BOOL (val);
+
+ ecore_evas_iconified_set (ee->real, val == Qtrue);
+
+ return Qnil;
+}
+
+/*
+ * call-seq:
+ * ee.has_alpha? => true or false
+ *
+ * Returns true if ee has an alpha channel, else returns false.
+ */
+static VALUE c_has_alpha_get (VALUE self)
+{
+ GET_OBJ (self, RbEcoreEvas, ee);
+
+ return ecore_evas_alpha_get (ee->real) ? Qtrue : Qfalse;
+}
+
+/*
+ * call-seq:
+ * ee.has_alpha(true or false)
+ *
+ * Sets whether ee has an alpha channel or not.
+ */
+static VALUE c_has_alpha_set (VALUE self, VALUE val)
+{
+ GET_OBJ (self, RbEcoreEvas, ee);
+
+ CHECK_BOOL (val);
+
+ ecore_evas_alpha_set (ee->real, val == Qtrue);
+
+ return Qnil;
+}
+
/* FIXME: this is unsafe!
* :nodoc:
*/
@@ -683,8 +778,6 @@ void Init_EcoreEvas (void)
{
cEcoreEvas = rb_define_class_under (mEvas, "EcoreEvas", rb_cObject);
- rb_define_private_method (rb_singleton_class (cEcoreEvas),
- "new", NULL, 0);
rb_define_method (cEcoreEvas, "initialize", c_init, -1);
rb_define_method (cEcoreEvas, "inspect", c_inspect, 0);
rb_define_method (cEcoreEvas, "delete", c_delete, 0);
@@ -713,6 +806,12 @@ void Init_EcoreEvas (void)
rb_define_method (cEcoreEvas, "sticky=", c_sticky_set, 1);
rb_define_method (cEcoreEvas, "rotation", c_rotation_get, 0);
rb_define_method (cEcoreEvas, "rotation=", c_rotation_set, 1);
+ rb_define_method (cEcoreEvas, "name_class", c_name_class_get, 0);
+ rb_define_method (cEcoreEvas, "name_class=", c_name_class_set, 1);
+ rb_define_method (cEcoreEvas, "iconified?", c_iconified_get, 0);
+ rb_define_method (cEcoreEvas, "iconified=", c_iconified_set, 1);
+ rb_define_method (cEcoreEvas, "has_alpha?", c_has_alpha_get, 0);
+ rb_define_method (cEcoreEvas, "has_alpha=", c_has_alpha_set, 1);
rb_define_method (cEcoreEvas, "on_resize", c_on_resize, 0);
rb_define_method (cEcoreEvas, "on_move", c_on_move, 0);