change, thus no docs at this time, but ready for them.
SVN revision: 76752
2012-09-14 Carsten Haitzler (The Rasterman)
* Add env EVAS_GL_NO_BLACKLIST to disable blacklisting.
+
+2012-09-17 Carsten Haitzler (The Rasterman)
+
+ * Add evas_device API for being able to register devices, set
+ their names, descriptions, classes, parents, sources etc. etc.
* WEBP image loader support.
* EVAS_CALLBACK_IMAGE_RESIZE.
+ * Evas_Device registration/manipulation/querying API
Improvements:
EVAS_CALLBACK_RENDER_POST, /**< Called just after rendering stops on the canvas target @since 1.2 */
EVAS_CALLBACK_IMAGE_RESIZE, /**< Image size is changed @since 1.8 */
+ EVAS_CALLBACK_DEVICE_CHANGED, /**< Devices added, removed or changed on canvas @since 1.8 */
EVAS_CALLBACK_LAST /**< kept as last element/sentinel -- not really an event */
} Evas_Callback_Type; /**< The types of events triggering a callback */
EVAS_IMAGE_CONTENT_HINT_STATIC = 2 /**< The contents won't change over time */
} Evas_Image_Content_Hint; /**< How an image's data is to be treated by Evas, for optimization */
+typedef enum _Evas_Device_Class
+{
+ EVAS_DEVICE_CLASS_NONE, /**< Not a device @since 1.8 */
+ EVAS_DEVICE_CLASS_SEAT, /**< The user/seat (the user themselves) @since 1.8 */
+ EVAS_DEVICE_CLASS_KEYBOARD, /**< A regular keyboard, numberpad or attached buttons @since 1.8 */
+ EVAS_DEVICE_CLASS_MOUSE, /**< A mouse, trackball or touchpad relative motion device @since 1.8 */
+ EVAS_DEVICE_CLASS_TOUCH, /**< A touchscreen with fingers or stylus @since 1.8 */
+ EVAS_DEVICE_CLASS_PEN, /**< A special pen device @since 1.8 */
+ EVAS_DEVICE_CLASS_POINTER, /**< A laser pointer, wii-style or "minority report" pointing device @since 1.8 */
+ EVAS_DEVICE_CLASS_GAMEPAD /**< A gamepad controller or joystick @since 1.8 */
+} Evas_Device_Class;
+
struct _Evas_Engine_Info /** Generic engine information. Generic info is useless */
{
int magic; /**< Magic number */
* @endcode
*/
EAPI Eina_Bool evas_pointer_inside_get(const Evas *e) EINA_WARN_UNUSED_RESULT EINA_ARG_NONNULL(1);
-EAPI void evas_sync(Evas *e) EINA_ARG_NONNULL(1);
+EAPI void evas_sync(Evas *e) EINA_ARG_NONNULL(1);
+
/**
* @defgroup Evas_Canvas_Events Canvas Events
*
*/
/**
+ * @since 1.8
+ */
+EAPI Evas_Device *evas_device_new(Evas *e);
+
+/**
+ * @since 1.8
+ */
+EAPI void evas_device_free(Evas_Device *dev);
+
+/**
+ * @since 1.8
+ */
+EAPI void evas_device_push(Evas *e, Evas_Device *dev);
+
+/**
+ * @since 1.8
+ */
+EAPI void evas_device_pop(Evas *e);
+
+/**
+ * @since 1.8
+ */
+EAPI const Eina_List *evas_device_list(Evas *e, const Evas_Device *dev);
+
+/**
+ * @since 1.8
+ */
+EAPI void evas_device_name_set(Evas_Device *dev, const char *name);
+
+/**
+ * @since 1.8
+ */
+EAPI const char *evas_device_name_get(const Evas_Device *dev);
+
+/**
+ * @since 1.8
+ */
+EAPI void evas_device_description_set(Evas_Device *dev, const char *desc);
+
+/**
+ * @since 1.8
+ */
+EAPI const char *evas_device_description_get(const Evas_Device *dev);
+
+/**
+ * @since 1.8
+ */
+EAPI void evas_device_parent_set(Evas_Device *dev, Evas_Device *parent);
+
+/**
+ * @since 1.8
+ */
+EAPI const Evas_Device *evas_device_parent_get(const Evas_Device *dev);
+
+/**
+ * @since 1.8
+ */
+EAPI void evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas);
+
+/**
+ * @since 1.8
+ */
+EAPI Evas_Device_Class evas_device_class_get(const Evas_Device *dev);
+
+/**
+ * @since 1.8
+ */
+EAPI void evas_device_emulation_source_set(Evas_Device *dev, Evas_Device *src);
+
+/**
+ * @since 1.8
+ */
+EAPI const Evas_Device *evas_device_emulation_source_get(const Evas_Device *dev);
+
+/**
* Get the number of mouse or multi presses currently active
*
* @p e The given canvas pointer.
evas_callbacks.c \
evas_clip.c \
evas_data.c \
+evas_device.c \
evas_events.c \
evas_filter.c \
evas_focus.c \
--- /dev/null
+#include "evas_common.h"
+#include "evas_private.h"
+
+EAPI Evas_Device *
+evas_device_new(Evas *e)
+{
+ Evas_Device *dev;
+
+ MAGIC_CHECK(e, Evas, MAGIC_EVAS);
+ return NULL;
+ MAGIC_CHECK_END();
+ dev = calloc(1, sizeof(Evas_Device));
+ if (!dev) return NULL;
+ dev->magic = MAGIC_DEV;
+ dev->evas = e;
+ dev->ref = 1;
+ e->devices = eina_list_append(e->devices, dev);
+ evas_event_callback_call(e, EVAS_CALLBACK_DEVICE_CHANGED, dev);
+ return dev;
+}
+
+EAPI void
+evas_device_free(Evas_Device *dev)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ if (dev->ref == 1)
+ {
+ Evas_Device *dev2;
+
+ EINA_LIST_FREE(dev->children, dev2)
+ {
+ dev2->parent = NULL;
+ evas_device_free(dev2);
+ }
+ if (dev->src)
+ {
+ _evas_device_unref(dev->src);
+ dev->src = NULL;
+ }
+ dev->parent = NULL;
+ }
+ _evas_device_unref(dev);
+}
+
+EAPI void
+evas_device_push(Evas *e, Evas_Device *dev)
+{
+ MAGIC_CHECK(e, Evas, MAGIC_EVAS);
+ return;
+ MAGIC_CHECK_END();
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ if (!e->cur_device)
+ {
+ e->cur_device = eina_array_new(4);
+ if (!e->cur_device) return;
+ }
+ dev->ref++;
+ eina_array_push(e->cur_device, dev);
+}
+
+EAPI void
+evas_device_pop(Evas *e)
+{
+ Evas_Device *dev;
+
+ MAGIC_CHECK(e, Evas, MAGIC_EVAS);
+ return;
+ MAGIC_CHECK_END();
+ dev = eina_array_pop(e->cur_device);
+ if (dev) _evas_device_unref(dev);
+}
+
+EAPI const Eina_List *
+evas_device_list(Evas *e, const Evas_Device *dev)
+{
+ MAGIC_CHECK(e, Evas, MAGIC_EVAS);
+ return NULL;
+ MAGIC_CHECK_END();
+ if (dev)
+ {
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return NULL;
+ MAGIC_CHECK_END();
+ }
+ if (dev) return dev->children;
+ return e->devices;
+}
+
+EAPI void
+evas_device_name_set(Evas_Device *dev, const char *name)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ eina_stringshare_replace(&(dev->name), name);
+ evas_event_callback_call(dev->evas, EVAS_CALLBACK_DEVICE_CHANGED, dev);
+}
+
+EAPI const char *
+evas_device_name_get(const Evas_Device *dev)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return NULL;
+ MAGIC_CHECK_END();
+ return dev->name;
+}
+
+EAPI void
+evas_device_description_set(Evas_Device *dev, const char *desc)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ eina_stringshare_replace(&(dev->desc), desc);
+ evas_event_callback_call(dev->evas, EVAS_CALLBACK_DEVICE_CHANGED, dev);
+}
+
+EAPI const char *
+evas_device_description_get(const Evas_Device *dev)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return NULL;
+ MAGIC_CHECK_END();
+ return dev->desc;
+}
+
+EAPI void
+evas_device_parent_set(Evas_Device *dev, Evas_Device *parent)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ if (parent)
+ {
+ MAGIC_CHECK(parent, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ }
+ if (dev->parent == parent) return;
+ if (dev->parent)
+ dev->parent->children = eina_list_remove(dev->parent->children, dev);
+ dev->parent = parent;
+ if (parent)
+ parent->children = eina_list_append(parent->children, dev);
+ evas_event_callback_call(dev->evas, EVAS_CALLBACK_DEVICE_CHANGED, dev);
+}
+
+EAPI const Evas_Device *
+evas_device_parent_get(const Evas_Device *dev)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return NULL;
+ MAGIC_CHECK_END();
+ return dev->parent;
+}
+
+EAPI void
+evas_device_class_set(Evas_Device *dev, Evas_Device_Class clas)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ dev->clas = clas;
+ evas_event_callback_call(dev->evas, EVAS_CALLBACK_DEVICE_CHANGED, dev);
+}
+
+EAPI Evas_Device_Class
+evas_device_class_get(const Evas_Device *dev)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return EVAS_DEVICE_CLASS_NONE;
+ MAGIC_CHECK_END();
+ return dev->clas;
+}
+
+EAPI void
+evas_device_emulation_source_set(Evas_Device *dev, Evas_Device *src)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ if (src)
+ {
+ MAGIC_CHECK(src, Evas_Device, MAGIC_DEV);
+ return;
+ MAGIC_CHECK_END();
+ }
+ if (dev->src == src) return;
+ if (dev->src) _evas_device_unref(dev->src);
+ dev->src = src;
+ if (dev->src) dev->src->ref++;
+ evas_event_callback_call(dev->evas, EVAS_CALLBACK_DEVICE_CHANGED, dev);
+}
+
+EAPI const Evas_Device *
+evas_device_emulation_source_get(const Evas_Device *dev)
+{
+ MAGIC_CHECK(dev, Evas_Device, MAGIC_DEV);
+ return NULL;
+ MAGIC_CHECK_END();
+ return dev->src;
+}
+
+void
+_evas_device_cleanup(Evas *e)
+{
+ Evas_Device *dev;
+
+ if (e->cur_device)
+ {
+ while ((dev = eina_array_pop(e->cur_device)))
+ _evas_device_unref(dev);
+ eina_array_free(e->cur_device);
+ e->cur_device = NULL;
+ }
+ EINA_LIST_FREE(e->devices, dev)
+ {
+ evas_device_free(dev);
+ }
+}
+
+Evas_Device *
+_evas_device_top_get(const Evas *e)
+{
+ int num;
+
+ if (!e->cur_device) return NULL;
+ num = eina_array_count(e->cur_device);
+ if (num < 1) return NULL;
+ return eina_array_data_get(e->cur_device, num - 1);
+}
+
+void
+_evas_device_ref(Evas_Device *dev)
+{
+ dev->ref++;
+}
+
+void
+_evas_device_unref(Evas_Device *dev)
+{
+ dev->ref--;
+ if (dev->ref > 0) return;
+ if (dev->name) eina_stringshare_del(dev->name);
+ if (dev->desc) eina_stringshare_del(dev->desc);
+ dev->magic = 0;
+ free(dev);
+}
+
ev.flags = flags;
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
_evas_walk(e);
/* append new touch point to the touch point list */
_evas_post_event_callback_call(e);
/* update touch point's state to EVAS_TOUCH_POINT_STILL */
_evas_touch_point_update(e, 0, e->pointer.x, e->pointer.y, EVAS_TOUCH_POINT_STILL);
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
}
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
/* get new list of ins */
ins = evas_event_objects_event_list(e, NULL, e->pointer.x, e->pointer.y);
/* go thru old list of in objects */
}
if (e->pointer.inside)
evas_event_feed_mouse_move(e, e->pointer.x, e->pointer.y, timestamp, data);
+ if (ev.dev) _evas_device_unref(ev.dev);
return post_called;
}
ev.flags = flags;
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
_evas_walk(e);
/* update released touch point */
_evas_touch_point_update(e, 0, e->pointer.x, e->pointer.y, EVAS_TOUCH_POINT_UP);
if (copy) copy = eina_list_free(copy);
e->last_mouse_up_counter++;
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
}
if (e->pointer.mouse_grabbed == 0)
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
_evas_walk(e);
copy = evas_event_list_copy(e->pointer.object.in);
if (copy) copy = eina_list_free(copy);
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
}
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
copy = evas_event_list_copy(e->pointer.object.in);
EINA_LIST_FOREACH(copy, l, obj)
{
if (e->delete_me) break;
}
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
}
{
Evas_Event_Mouse_Out ev;
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
if (copy) eina_list_free(copy);
while (outs)
{
}
}
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
}
}
else
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
ev2.buttons = e->pointer.button;
ev2.output.x = e->pointer.x;
ev2.output.y = e->pointer.y;
ev2.locks = &(e->locks);
ev2.timestamp = timestamp;
ev2.event_flags = e->default_event_flags;
+ ev2.dev = ev.dev;
ev3.buttons = e->pointer.button;
ev3.output.x = e->pointer.x;
ev3.locks = &(e->locks);
ev3.timestamp = timestamp;
ev3.event_flags = e->default_event_flags;
+ ev3.dev = ev.dev;
/* get all new in objects */
ins = evas_event_objects_event_list(e, NULL, x, y);
eina_list_free(ins);
}
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
}
_evas_unwalk(e);
return;
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
ev2.buttons = e->pointer.button;
ev2.output.x = e->pointer.x;
ev2.output.y = e->pointer.y;
ev2.locks = &(e->locks);
ev2.timestamp = timestamp;
ev2.event_flags = e->default_event_flags;
-
+ ev2.dev = ev.dev;
+
ev3.buttons = e->pointer.button;
ev3.output.x = e->pointer.x;
ev3.output.y = e->pointer.y;
ev3.locks = &(e->locks);
ev3.timestamp = timestamp;
ev3.event_flags = e->default_event_flags;
+ ev3.dev = ev.dev;
/* go thru old list of in objects */
copy = evas_event_list_copy(e->pointer.object.in);
e->pointer.object.in = newin;
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
}
_evas_unwalk(e);
}
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
_evas_walk(e);
/* get new list of ins */
ins = evas_event_objects_event_list(e, NULL, e->pointer.x, e->pointer.y);
e->pointer.object.in = ins;
_evas_post_event_callback_call(e);
evas_event_feed_mouse_move(e, e->pointer.x, e->pointer.y, timestamp, data);
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
}
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
_evas_walk(e);
/* if our mouse button is inside any objects */
{
e->pointer.mouse_grabbed = 0;
_evas_post_event_callback_call(e);
}
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
}
ev.flags = flags;
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
_evas_walk(e);
/* append new touch point to the touch point list */
_evas_touch_point_append(e, d, x, y);
_evas_post_event_callback_call(e);
/* update touch point's state to EVAS_TOUCH_POINT_STILL */
_evas_touch_point_update(e, d, x, y, EVAS_TOUCH_POINT_STILL);
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
}
ev.flags = flags;
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
_evas_walk(e);
/* update released touch point */
_evas_touch_point_update(e, d, x, y, EVAS_TOUCH_POINT_UP);
_evas_post_event_callback_call(e);
/* remove released touch point from the touch point list */
_evas_touch_point_remove(e, d);
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
}
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
copy = evas_event_list_copy(e->pointer.object.in);
EINA_LIST_FOREACH(copy, l, obj)
{
if (e->delete_me) break;
}
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
}
else
{
ev.locks = &(e->locks);
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
/* get all new in objects */
ins = evas_event_objects_event_list(e, NULL, x, y);
/* go thru old list of in objects */
eina_list_free(ins);
}
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
}
_evas_unwalk(e);
}
ev.compose = compose;
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
if (e->grabs)
{
Eina_List *l;
&ev, event_id);
}
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
}
ev.compose = compose;
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
if (e->grabs)
{
Eina_List *l;
&ev, event_id);
}
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
}
ev.data = (void *)data;
ev.timestamp = timestamp;
ev.event_flags = e->default_event_flags;
-
+ ev.dev = _evas_device_top_get(e);
+ if (ev.dev) _evas_device_ref(ev.dev);
+
_evas_walk(e);
copy = evas_event_list_copy(e->pointer.object.in);
EINA_LIST_FOREACH(copy, l, obj)
}
if (copy) copy = eina_list_free(copy);
_evas_post_event_callback_call(e);
+ if (ev.dev) _evas_device_unref(ev.dev);
_evas_unwalk(e);
_evas_object_event_new();
}
EINA_LIST_FREE(e->touch_points, touch_point)
free(touch_point);
+ _evas_device_cleanup(e);
+
e->magic = 0;
free(e);
}
/* End of general types */
#define MAGIC_EVAS 0x70777770
-#define MAGIC_OBJ 0x71777770
-#define MAGIC_OBJ_RECTANGLE 0x71777771
-#define MAGIC_OBJ_LINE 0x71777772
-#define MAGIC_OBJ_POLYGON 0x71777774
-#define MAGIC_OBJ_IMAGE 0x71777775
-#define MAGIC_OBJ_TEXT 0x71777776
-#define MAGIC_OBJ_SMART 0x71777777
-#define MAGIC_OBJ_TEXTBLOCK 0x71777778
-#define MAGIC_OBJ_TEXTGRID 0x7177777A
-#define MAGIC_SMART 0x72777770
-#define MAGIC_OBJ_SHAPE 0x72777773
-#define MAGIC_OBJ_CONTAINER 0x72777774
-#define MAGIC_OBJ_CUSTOM 0x72777775
-#define MAGIC_EVAS_GL 0x72777776
-#define MAGIC_MAP 0x72777777
+#define MAGIC_OBJ 0x71737723
+#define MAGIC_OBJ_RECTANGLE 0x76748772
+#define MAGIC_OBJ_LINE 0x7a27f839
+#define MAGIC_OBJ_POLYGON 0x7bb7577e
+#define MAGIC_OBJ_IMAGE 0x747ad76c
+#define MAGIC_OBJ_TEXT 0x77757721
+#define MAGIC_OBJ_SMART 0x78c7c73f
+#define MAGIC_OBJ_TEXTBLOCK 0x71737744
+#define MAGIC_OBJ_TEXTGRID 0x7377a7ca
+#define MAGIC_SMART 0x7c6977c5
+#define MAGIC_OBJ_SHAPE 0x747297f7
+#define MAGIC_OBJ_CONTAINER 0x71877776
+#define MAGIC_OBJ_CUSTOM 0x7b7857ab
+#define MAGIC_EVAS_GL 0x77976718
+#define MAGIC_MAP 0x7575177d
+#define MAGIC_DEV 0x7d773738
#ifdef MAGIC_DEBUG
# define MAGIC_CHECK_FAILED(o, t, m) \
unsigned char focus : 1;
Eina_List *touch_points;
+ Eina_List *devices;
+ Eina_Array *cur_device;
};
struct _Evas_Layer
Eina_Bool is_new : 1;
};
+struct _Evas_Device
+{
+ DATA32 magic;
+ Evas *evas;
+ Evas_Device *parent;
+ Evas_Device *src;
+ Eina_List *children;
+ const char *name;
+ const char *desc;
+ int ref;
+ Evas_Device_Class clas;
+};
+
struct _Evas_Object_Func
{
void (*free) (Evas_Object *obj);
void _evas_touch_point_update(Evas *e, int id, Evas_Coord x, Evas_Coord y, Evas_Touch_Point_State state);
void _evas_touch_point_remove(Evas *e, int id);
+void _evas_device_cleanup(Evas *e);
+Evas_Device *_evas_device_top_get(const Evas *e);
+void _evas_device_ref(Evas_Device *dev);
+void _evas_device_unref(Evas_Device *dev);
+
/****************************************************************************/
/*****************************************/
/********************/