+/*
+ * call-seq:
+ * part.get_drag_value => array
+ *
+ * Returns the drag value of <i>part</i>.
+ *
+ * part.set_drag_value(1.5, 2.5) #=> nil
+ * part.get_drag_value #=> [1.5, 2.5]
+ */
+static VALUE c_get_drag_value (VALUE self)
+{
+ double dx = 0, dy = 0;
+
+ GET_OBJ (GET_EDJE (self), RbEdje, e);
+
+ edje_object_part_drag_value_get (e->real.real, GET_NAME (self), &dx, &dy);
+
+ return rb_ary_new3 (2, rb_float_new (dx), rb_float_new (dy));
+}
+
+/*
+ * call-seq:
+ * part.set_drag_value(dx, dy) => nil
+ *
+ * Sets the drag value of <i>part</i>.
+ *
+ * part.set_drag_value(1.5, 2.5) #=> nil
+ */
+static VALUE c_set_drag_value (VALUE self, VALUE dx, VALUE dy)
+{
+ GET_OBJ (GET_EDJE (self), RbEdje, e);
+
+ if (!FIXNUM_P (dx))
+ Check_Type (dx, T_FLOAT);
+
+ if (!FIXNUM_P (dy))
+ Check_Type (dy, T_FLOAT);
+
+ edje_object_part_drag_value_set (e->real.real, GET_NAME (self),
+ NUM2DBL (dx), NUM2DBL (dy));
+
+ return Qnil;
+}
+
+static VALUE c_state_get (VALUE self)
+{
+ const char *name;
+ double val = 0.0;
+
+ GET_OBJ (GET_EDJE (self), RbEdje, e);
+
+ name = edje_object_part_state_get (e->real.real,
+ GET_NAME (self), &val);
+
+ return rb_ary_new3 (2, rb_str_new2 (name), rb_float_new (val));
+}
+