2013-06-20 03:53:29 -07:00
|
|
|
#include "evas_common_private.h"
|
2002-12-16 16:00:38 -08:00
|
|
|
#include "evas_private.h"
|
|
|
|
|
|
|
|
/* private calls */
|
|
|
|
|
|
|
|
static int
|
2008-02-08 13:42:01 -08:00
|
|
|
evas_key_modifier_number(const Evas_Modifier *m, const char *keyname)
|
2002-12-16 16:00:38 -08:00
|
|
|
{
|
|
|
|
int i;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2002-12-16 16:00:38 -08:00
|
|
|
for (i = 0; i < m->mod.count; i++)
|
|
|
|
{
|
|
|
|
if (!strcmp(m->mod.list[i], keyname)) return i;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
static int
|
2008-02-08 13:42:01 -08:00
|
|
|
evas_key_lock_number(const Evas_Lock *l, const char *keyname)
|
2002-12-16 16:00:38 -08:00
|
|
|
{
|
|
|
|
int i;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2002-12-16 16:00:38 -08:00
|
|
|
for (i = 0; i < l->lock.count; i++)
|
|
|
|
{
|
|
|
|
if (!strcmp(l->lock.list[i], keyname)) return i;
|
|
|
|
}
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* local calls */
|
|
|
|
|
|
|
|
/* public calls */
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN const Evas_Modifier*
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_modifier_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
|
2002-12-16 16:00:38 -08:00
|
|
|
{
|
2014-03-11 23:53:00 -07:00
|
|
|
return &(e->modifiers);
|
2012-10-08 18:58:41 -07:00
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN const Evas_Lock*
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_lock_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e)
|
2012-10-08 18:58:41 -07:00
|
|
|
{
|
2014-03-11 23:53:00 -07:00
|
|
|
return &(e->locks);
|
2002-12-16 16:00:38 -08:00
|
|
|
}
|
|
|
|
|
2009-06-17 03:01:52 -07:00
|
|
|
EAPI Eina_Bool
|
2008-02-08 14:35:19 -08:00
|
|
|
evas_key_modifier_is_set(const Evas_Modifier *m, const char *keyname)
|
2002-12-16 16:00:38 -08:00
|
|
|
{
|
2002-12-17 22:02:32 -08:00
|
|
|
Evas_Modifier_Mask num;
|
2003-10-17 20:34:00 -07:00
|
|
|
int n;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2002-12-16 16:00:38 -08:00
|
|
|
if (!m) return 0;
|
|
|
|
if (!keyname) return 0;
|
2003-10-17 20:34:00 -07:00
|
|
|
n = evas_key_modifier_number(m, keyname);
|
|
|
|
if (n < 0) return 0;
|
2014-08-22 02:11:03 -07:00
|
|
|
else if (n >= 64) return 0;
|
2003-10-17 20:34:00 -07:00
|
|
|
num = (Evas_Modifier_Mask)n;
|
2002-12-16 16:00:38 -08:00
|
|
|
num = 1 << num;
|
|
|
|
if (m->mask & num) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2009-06-17 03:01:52 -07:00
|
|
|
EAPI Eina_Bool
|
2008-02-08 14:35:19 -08:00
|
|
|
evas_key_lock_is_set(const Evas_Lock *l, const char *keyname)
|
2002-12-16 16:00:38 -08:00
|
|
|
{
|
2002-12-17 22:02:32 -08:00
|
|
|
Evas_Modifier_Mask num;
|
2003-10-17 20:34:00 -07:00
|
|
|
int n;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2002-12-16 16:00:38 -08:00
|
|
|
if (!l) return 0;
|
|
|
|
if (!keyname) return 0;
|
2003-10-17 20:34:00 -07:00
|
|
|
n = evas_key_lock_number(l, keyname);
|
|
|
|
if (n < 0) return 0;
|
2014-08-22 02:11:03 -07:00
|
|
|
else if (n >= 64) return 0;
|
2003-10-17 20:34:00 -07:00
|
|
|
num = (Evas_Modifier_Mask)n;
|
2002-12-16 16:00:38 -08:00
|
|
|
num = 1 << num;
|
|
|
|
if (l->mask & num) return 1;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN void
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_modifier_add(Eo *eo_e, Evas_Public_Data *e, const char *keyname)
|
2002-12-16 16:00:38 -08:00
|
|
|
{
|
|
|
|
if (!keyname) return;
|
|
|
|
if (e->modifiers.mod.count >= 64) return;
|
2012-10-08 18:58:41 -07:00
|
|
|
evas_key_modifier_del(eo_e, keyname);
|
2002-12-16 16:00:38 -08:00
|
|
|
e->modifiers.mod.count++;
|
|
|
|
e->modifiers.mod.list = realloc(e->modifiers.mod.list, e->modifiers.mod.count * sizeof(char *));
|
|
|
|
e->modifiers.mod.list[e->modifiers.mod.count - 1] = strdup(keyname);
|
|
|
|
e->modifiers.mask = 0;
|
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN void
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_modifier_del(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *keyname)
|
2012-10-08 18:58:41 -07:00
|
|
|
{
|
|
|
|
int i;
|
|
|
|
|
2002-12-16 16:00:38 -08:00
|
|
|
if (!keyname) return;
|
|
|
|
for (i = 0; i < e->modifiers.mod.count; i++)
|
|
|
|
{
|
|
|
|
if (!strcmp(e->modifiers.mod.list[i], keyname))
|
|
|
|
{
|
|
|
|
int j;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2002-12-16 16:00:38 -08:00
|
|
|
free(e->modifiers.mod.list[i]);
|
|
|
|
e->modifiers.mod.count--;
|
|
|
|
for (j = i; j < e->modifiers.mod.count; j++)
|
|
|
|
e->modifiers.mod.list[j] = e->modifiers.mod.list[j + 1];
|
|
|
|
e->modifiers.mask = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN void
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_lock_add(Eo *eo_e, Evas_Public_Data *e, const char *keyname)
|
2012-10-08 18:58:41 -07:00
|
|
|
{
|
2002-12-16 16:00:38 -08:00
|
|
|
if (!keyname) return;
|
|
|
|
if (e->locks.lock.count >= 64) return;
|
2012-10-08 18:58:41 -07:00
|
|
|
evas_key_lock_del(eo_e, keyname);
|
2002-12-16 16:00:38 -08:00
|
|
|
e->locks.lock.count++;
|
|
|
|
e->locks.lock.list = realloc(e->locks.lock.list, e->locks.lock.count * sizeof(char *));
|
|
|
|
e->locks.lock.list[e->locks.lock.count - 1] = strdup(keyname);
|
|
|
|
e->locks.mask = 0;
|
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN void
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_lock_del(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *keyname)
|
2002-12-16 16:00:38 -08:00
|
|
|
{
|
2012-10-08 18:58:41 -07:00
|
|
|
int i;
|
2002-12-16 16:00:38 -08:00
|
|
|
if (!keyname) return;
|
|
|
|
e->locks.mask = 0;
|
|
|
|
for (i = 0; i < e->locks.lock.count; i++)
|
|
|
|
{
|
|
|
|
if (!strcmp(e->locks.lock.list[i], keyname))
|
|
|
|
{
|
|
|
|
int j;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2002-12-16 16:00:38 -08:00
|
|
|
free(e->locks.lock.list[i]);
|
|
|
|
e->locks.lock.count--;
|
|
|
|
for (j = i; j < e->locks.lock.count; j++)
|
|
|
|
e->locks.lock.list[j] = e->locks.lock.list[j + 1];
|
|
|
|
e->locks.mask = 0;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN void
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_modifier_on(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *keyname)
|
2012-10-08 18:58:41 -07:00
|
|
|
{
|
2002-12-17 22:02:32 -08:00
|
|
|
Evas_Modifier_Mask num;
|
2003-10-17 20:34:00 -07:00
|
|
|
int n;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2003-10-17 20:34:00 -07:00
|
|
|
n = (Evas_Modifier_Mask)evas_key_modifier_number(&(e->modifiers), keyname);
|
2014-03-12 18:52:37 -07:00
|
|
|
if (n < 0 || n > 63) return;
|
2014-08-13 04:49:36 -07:00
|
|
|
num = 1ULL << n;
|
2002-12-16 16:00:38 -08:00
|
|
|
e->modifiers.mask |= num;
|
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN void
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_modifier_off(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *keyname)
|
2012-10-08 18:58:41 -07:00
|
|
|
{
|
2002-12-17 22:02:32 -08:00
|
|
|
Evas_Modifier_Mask num;
|
2003-10-17 20:34:00 -07:00
|
|
|
int n;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2003-10-17 20:34:00 -07:00
|
|
|
n = evas_key_modifier_number(&(e->modifiers), keyname);
|
2014-03-12 18:52:37 -07:00
|
|
|
if (n < 0 || n > 63) return;
|
2014-08-13 04:49:36 -07:00
|
|
|
num = 1ULL << n;
|
2002-12-16 16:00:38 -08:00
|
|
|
e->modifiers.mask &= ~num;
|
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN void
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_lock_on(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *keyname)
|
2002-12-16 16:00:38 -08:00
|
|
|
{
|
2002-12-17 22:02:32 -08:00
|
|
|
Evas_Modifier_Mask num;
|
2003-10-17 20:34:00 -07:00
|
|
|
int n;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2003-10-17 20:34:00 -07:00
|
|
|
n = evas_key_lock_number(&(e->locks), keyname);
|
2014-03-12 18:52:37 -07:00
|
|
|
if (n < 0 || n > 63) return;
|
2014-08-13 04:49:36 -07:00
|
|
|
num = 1ULL << n;
|
2002-12-16 16:00:38 -08:00
|
|
|
e->locks.mask |= num;
|
|
|
|
}
|
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN void
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_lock_off(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *keyname)
|
2012-10-08 18:58:41 -07:00
|
|
|
{
|
2002-12-17 22:02:32 -08:00
|
|
|
Evas_Modifier_Mask num;
|
2003-10-17 20:34:00 -07:00
|
|
|
int n;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2003-10-17 20:34:00 -07:00
|
|
|
n = evas_key_lock_number(&(e->locks), keyname);
|
2014-03-12 18:52:37 -07:00
|
|
|
if (n < 0 || n > 63) return;
|
2014-08-13 04:49:36 -07:00
|
|
|
num = 1ULL << n;
|
2002-12-16 16:00:38 -08:00
|
|
|
e->locks.mask &= ~num;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* errr need to add key grabbing/ungrabbing calls - missing modifier stuff. */
|
2002-12-17 22:02:32 -08:00
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
EOLIAN Evas_Modifier_Mask
|
2014-06-26 14:29:46 -07:00
|
|
|
_evas_canvas_key_modifier_mask_get(Eo *eo_e EINA_UNUSED, Evas_Public_Data *e, const char *keyname)
|
2002-12-17 22:02:32 -08:00
|
|
|
{
|
2003-10-17 20:34:00 -07:00
|
|
|
int n;
|
2005-05-21 19:49:50 -07:00
|
|
|
|
2014-03-11 23:53:00 -07:00
|
|
|
if (!keyname) return 0;
|
2003-10-17 20:34:00 -07:00
|
|
|
n = evas_key_modifier_number(&(e->modifiers), keyname);
|
2014-03-12 18:52:37 -07:00
|
|
|
if (n < 0 || n > 63) return 0;
|
2014-08-13 04:49:36 -07:00
|
|
|
return 1ULL << n;
|
2002-12-17 22:02:32 -08:00
|
|
|
}
|
2014-03-11 23:53:00 -07:00
|
|
|
|