forked from enlightenment/efl
add new evas device api. it is a STARt right now, and liable to
change, thus no docs at this time, but ready for them. SVN revision: 76752
This commit is contained in:
parent
42e427e2c7
commit
2a06a94b1e
|
@ -1039,3 +1039,8 @@
|
|||
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.
|
||||
|
|
|
@ -7,6 +7,7 @@ Additions:
|
|||
|
||||
* WEBP image loader support.
|
||||
* EVAS_CALLBACK_IMAGE_RESIZE.
|
||||
* Evas_Device registration/manipulation/querying API
|
||||
|
||||
Improvements:
|
||||
|
||||
|
|
|
@ -446,6 +446,7 @@ typedef enum _Evas_Callback_Type
|
|||
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 */
|
||||
|
||||
|
@ -880,6 +881,18 @@ typedef enum _Evas_Image_Content_Hint
|
|||
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 */
|
||||
|
@ -2162,8 +2175,9 @@ EAPI int evas_pointer_button_down_mask_get(const Evas *e) EINA_WAR
|
|||
* @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
|
||||
*
|
||||
|
@ -2544,6 +2558,81 @@ EAPI void evas_event_thaw_eval(Evas *e) EINA_ARG_NONNULL(1);
|
|||
* @{
|
||||
*/
|
||||
|
||||
/**
|
||||
* @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
|
||||
*
|
||||
|
|
|
@ -23,6 +23,7 @@ libevas_canvas_la_SOURCES = \
|
|||
evas_callbacks.c \
|
||||
evas_clip.c \
|
||||
evas_data.c \
|
||||
evas_device.c \
|
||||
evas_events.c \
|
||||
evas_filter.c \
|
||||
evas_focus.c \
|
||||
|
|
|
@ -0,0 +1,253 @@
|
|||
#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);
|
||||
}
|
||||
|
|
@ -296,6 +296,8 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
|
|||
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 */
|
||||
|
@ -350,6 +352,7 @@ evas_event_feed_mouse_down(Evas *e, int b, Evas_Button_Flags flags, unsigned int
|
|||
_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);
|
||||
}
|
||||
|
||||
|
@ -375,7 +378,9 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
|
|||
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 */
|
||||
|
@ -459,6 +464,7 @@ _post_up_handle(Evas *e, unsigned int timestamp, const void *data)
|
|||
}
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -499,7 +505,9 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
|
|||
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);
|
||||
|
@ -532,6 +540,7 @@ evas_event_feed_mouse_up(Evas *e, int b, Evas_Button_Flags flags, unsigned int t
|
|||
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)
|
||||
|
@ -600,7 +609,9 @@ evas_event_feed_mouse_wheel(Evas *e, int direction, int z, unsigned int timestam
|
|||
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);
|
||||
|
||||
|
@ -617,6 +628,7 @@ evas_event_feed_mouse_wheel(Evas *e, int direction, int z, unsigned int timestam
|
|||
if (copy) copy = eina_list_free(copy);
|
||||
_evas_post_event_callback_call(e);
|
||||
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
_evas_unwalk(e);
|
||||
}
|
||||
|
||||
|
@ -679,6 +691,8 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
|||
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)
|
||||
{
|
||||
|
@ -710,6 +724,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
|||
if (e->delete_me) break;
|
||||
}
|
||||
_evas_post_event_callback_call(e);
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
}
|
||||
{
|
||||
Evas_Event_Mouse_Out ev;
|
||||
|
@ -728,7 +743,9 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
|||
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)
|
||||
{
|
||||
|
@ -755,6 +772,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
|||
}
|
||||
}
|
||||
_evas_post_event_callback_call(e);
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -784,7 +802,9 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
|||
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;
|
||||
|
@ -795,6 +815,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
|||
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;
|
||||
|
@ -806,6 +827,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
|||
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);
|
||||
|
@ -890,6 +912,7 @@ evas_event_feed_mouse_move(Evas *e, int x, int y, unsigned int timestamp, const
|
|||
eina_list_free(ins);
|
||||
}
|
||||
_evas_post_event_callback_call(e);
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
}
|
||||
_evas_unwalk(e);
|
||||
return;
|
||||
|
@ -922,7 +945,9 @@ nogrep:
|
|||
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;
|
||||
|
@ -933,7 +958,8 @@ nogrep:
|
|||
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;
|
||||
|
@ -944,6 +970,7 @@ nogrep:
|
|||
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);
|
||||
|
@ -1047,6 +1074,7 @@ nogrep:
|
|||
e->pointer.object.in = newin;
|
||||
|
||||
_evas_post_event_callback_call(e);
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
}
|
||||
_evas_unwalk(e);
|
||||
}
|
||||
|
@ -1083,7 +1111,9 @@ evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data)
|
|||
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);
|
||||
|
@ -1110,6 +1140,7 @@ evas_event_feed_mouse_in(Evas *e, unsigned int timestamp, const void *data)
|
|||
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);
|
||||
}
|
||||
|
||||
|
@ -1140,7 +1171,9 @@ evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data)
|
|||
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 */
|
||||
{
|
||||
|
@ -1173,6 +1206,7 @@ evas_event_feed_mouse_out(Evas *e, unsigned int timestamp, const void *data)
|
|||
e->pointer.mouse_grabbed = 0;
|
||||
_evas_post_event_callback_call(e);
|
||||
}
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
_evas_unwalk(e);
|
||||
}
|
||||
|
||||
|
@ -1220,7 +1254,9 @@ evas_event_feed_multi_down(Evas *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);
|
||||
|
@ -1257,6 +1293,7 @@ evas_event_feed_multi_down(Evas *e,
|
|||
_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);
|
||||
}
|
||||
|
||||
|
@ -1304,7 +1341,9 @@ evas_event_feed_multi_up(Evas *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);
|
||||
|
@ -1336,6 +1375,7 @@ evas_event_feed_multi_up(Evas *e,
|
|||
_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);
|
||||
}
|
||||
|
||||
|
@ -1388,7 +1428,9 @@ evas_event_feed_multi_move(Evas *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)
|
||||
{
|
||||
|
@ -1413,6 +1455,7 @@ evas_event_feed_multi_move(Evas *e,
|
|||
if (e->delete_me) break;
|
||||
}
|
||||
_evas_post_event_callback_call(e);
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1442,7 +1485,9 @@ evas_event_feed_multi_move(Evas *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 all new in objects */
|
||||
ins = evas_event_objects_event_list(e, NULL, x, y);
|
||||
/* go thru old list of in objects */
|
||||
|
@ -1492,6 +1537,7 @@ evas_event_feed_multi_move(Evas *e,
|
|||
eina_list_free(ins);
|
||||
}
|
||||
_evas_post_event_callback_call(e);
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
}
|
||||
_evas_unwalk(e);
|
||||
}
|
||||
|
@ -1525,7 +1571,9 @@ evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const ch
|
|||
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;
|
||||
|
@ -1580,6 +1628,7 @@ evas_event_feed_key_down(Evas *e, const char *keyname, const char *key, const ch
|
|||
&ev, event_id);
|
||||
}
|
||||
_evas_post_event_callback_call(e);
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
_evas_unwalk(e);
|
||||
}
|
||||
|
||||
|
@ -1611,7 +1660,9 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char
|
|||
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;
|
||||
|
@ -1665,6 +1716,7 @@ evas_event_feed_key_up(Evas *e, const char *keyname, const char *key, const char
|
|||
&ev, event_id);
|
||||
}
|
||||
_evas_post_event_callback_call(e);
|
||||
if (ev.dev) _evas_device_unref(ev.dev);
|
||||
_evas_unwalk(e);
|
||||
}
|
||||
|
||||
|
@ -1690,7 +1742,9 @@ evas_event_feed_hold(Evas *e, int hold, unsigned int timestamp, const void *data
|
|||
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)
|
||||
|
@ -1701,6 +1755,7 @@ evas_event_feed_hold(Evas *e, int hold, unsigned int timestamp, const void *data
|
|||
}
|
||||
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();
|
||||
}
|
||||
|
|
|
@ -242,6 +242,8 @@ evas_free(Evas *e)
|
|||
EINA_LIST_FREE(e->touch_points, touch_point)
|
||||
free(touch_point);
|
||||
|
||||
_evas_device_cleanup(e);
|
||||
|
||||
e->magic = 0;
|
||||
free(e);
|
||||
}
|
||||
|
|
|
@ -107,21 +107,22 @@ OPAQUE_TYPE(Evas_Font_Instance); /* General type for RGBA_Font_Int */
|
|||
/* 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) \
|
||||
|
@ -408,6 +409,8 @@ struct _Evas
|
|||
unsigned char focus : 1;
|
||||
|
||||
Eina_List *touch_points;
|
||||
Eina_List *devices;
|
||||
Eina_Array *cur_device;
|
||||
};
|
||||
|
||||
struct _Evas_Layer
|
||||
|
@ -711,6 +714,19 @@ struct _Evas_Font_Description
|
|||
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);
|
||||
|
@ -1093,6 +1109,11 @@ void _evas_touch_point_append(Evas *e, int id, Evas_Coord x, Evas_Coord y);
|
|||
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);
|
||||
|
||||
/****************************************************************************/
|
||||
/*****************************************/
|
||||
/********************/
|
||||
|
|
Loading…
Reference in New Issue