Add "keycode" property to EekKey.

Add eek_key_get_keysyms().
This commit is contained in:
Daiki Ueno
2010-06-08 09:27:41 +09:00
parent ece1c559a2
commit bb7462e786
14 changed files with 182 additions and 2 deletions

View File

@ -34,6 +34,7 @@
enum { enum {
PROP_0, PROP_0,
PROP_KEYCODE,
PROP_KEYSYMS, PROP_KEYSYMS,
PROP_COLUMN, PROP_COLUMN,
PROP_ROW, PROP_ROW,
@ -59,6 +60,15 @@ struct _EekClutterKeyPrivate
EekSimpleKey *simple; EekSimpleKey *simple;
}; };
static guint
eek_clutter_key_real_get_keycode (EekKey *self)
{
EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
g_return_val_if_fail (priv, EEK_INVALID_KEYCODE);
return eek_key_get_keycode (EEK_KEY(priv->simple));
}
static void static void
eek_clutter_key_real_set_keysyms (EekKey *self, eek_clutter_key_real_set_keysyms (EekKey *self,
guint *keysyms, guint *keysyms,
@ -71,6 +81,18 @@ eek_clutter_key_real_set_keysyms (EekKey *self,
eek_key_set_keysyms (EEK_KEY(priv->simple), keysyms, groups, levels); eek_key_set_keysyms (EEK_KEY(priv->simple), keysyms, groups, levels);
} }
static void
eek_clutter_key_real_get_keysyms (EekKey *self,
guint **keysyms,
gint *groups,
gint *levels)
{
EekClutterKeyPrivate *priv = EEK_CLUTTER_KEY_GET_PRIVATE(self);
g_return_if_fail (priv);
eek_key_get_keysyms (EEK_KEY(priv->simple), keysyms, groups, levels);
}
static gint static gint
eek_clutter_key_real_get_groups (EekKey *self) eek_clutter_key_real_get_groups (EekKey *self)
{ {
@ -177,7 +199,9 @@ eek_clutter_key_real_get_keysym_index (EekKey *self, gint *group, gint *level)
static void static void
eek_key_iface_init (EekKeyIface *iface) eek_key_iface_init (EekKeyIface *iface)
{ {
iface->get_keycode = eek_clutter_key_real_get_keycode;
iface->set_keysyms = eek_clutter_key_real_set_keysyms; iface->set_keysyms = eek_clutter_key_real_set_keysyms;
iface->get_keysyms = eek_clutter_key_real_get_keysyms;
iface->get_groups = eek_clutter_key_real_get_groups; iface->get_groups = eek_clutter_key_real_get_groups;
iface->get_keysym = eek_clutter_key_real_get_keysym; iface->get_keysym = eek_clutter_key_real_get_keysym;
iface->set_index = eek_clutter_key_real_set_index; iface->set_index = eek_clutter_key_real_set_index;
@ -337,6 +361,7 @@ eek_clutter_key_set_property (GObject *object,
g_value_get_pointer (value)); g_value_get_pointer (value));
break; break;
/* Otherwise delegate to priv->simple or the parent. */ /* Otherwise delegate to priv->simple or the parent. */
case PROP_KEYCODE:
case PROP_KEYSYMS: case PROP_KEYSYMS:
case PROP_COLUMN: case PROP_COLUMN:
case PROP_GROUP: case PROP_GROUP:
@ -369,6 +394,7 @@ eek_clutter_key_get_property (GObject *object,
eek_key_get_bounds (EEK_KEY(object), &bounds); eek_key_get_bounds (EEK_KEY(object), &bounds);
g_value_set_boxed (value, &bounds); g_value_set_boxed (value, &bounds);
break; break;
case PROP_KEYCODE:
case PROP_KEYSYMS: case PROP_KEYSYMS:
case PROP_COLUMN: case PROP_COLUMN:
case PROP_ROW: case PROP_ROW:
@ -409,6 +435,9 @@ eek_clutter_key_class_init (EekClutterKeyClass *klass)
gobject_class->finalize = eek_clutter_key_finalize; gobject_class->finalize = eek_clutter_key_finalize;
gobject_class->dispose = eek_clutter_key_dispose; gobject_class->dispose = eek_clutter_key_dispose;
g_object_class_override_property (gobject_class,
PROP_KEYCODE,
"keycode");
g_object_class_override_property (gobject_class, g_object_class_override_property (gobject_class,
PROP_KEYSYMS, PROP_KEYSYMS,
"keysyms"); "keysyms");

View File

@ -169,6 +169,7 @@ eek_clutter_section_real_get_bounds (EekSection *self,
static EekKey * static EekKey *
eek_clutter_section_real_create_key (EekSection *self, eek_clutter_section_real_create_key (EekSection *self,
const gchar *name, const gchar *name,
guint keycode,
guint *keysyms, guint *keysyms,
gint num_groups, gint num_groups,
gint num_levels, gint num_levels,
@ -195,6 +196,7 @@ eek_clutter_section_real_create_key (EekSection *self,
matrix.num_levels = num_levels; matrix.num_levels = num_levels;
key = g_object_new (EEK_TYPE_CLUTTER_KEY, key = g_object_new (EEK_TYPE_CLUTTER_KEY,
"name", name, "name", name,
"keycode", keycode,
"keysyms", &matrix, "keysyms", &matrix,
"column", column, "column", column,
"row", row, "row", row,

View File

@ -34,6 +34,7 @@
enum { enum {
PROP_0, PROP_0,
PROP_KEYCODE,
PROP_KEYSYMS, PROP_KEYSYMS,
PROP_COLUMN, PROP_COLUMN,
PROP_ROW, PROP_ROW,
@ -59,6 +60,15 @@ struct _EekGtkKeyPrivate
EekSimpleKey *simple; EekSimpleKey *simple;
}; };
static guint
eek_gtk_key_real_get_keycode (EekKey *self)
{
EekGtkKeyPrivate *priv = EEK_GTK_KEY_GET_PRIVATE(self);
g_return_val_if_fail (priv, EEK_INVALID_KEYCODE);
return eek_key_get_keycode (EEK_KEY(priv->simple));
}
static void static void
eek_gtk_key_real_set_keysyms (EekKey *self, eek_gtk_key_real_set_keysyms (EekKey *self,
guint *keysyms, guint *keysyms,
@ -73,6 +83,18 @@ eek_gtk_key_real_set_keysyms (EekKey *self,
eek_key_set_keysym_index (EEK_KEY(self), 0, 0); eek_key_set_keysym_index (EEK_KEY(self), 0, 0);
} }
static void
eek_gtk_key_real_get_keysyms (EekKey *self,
guint **keysyms,
gint *groups,
gint *levels)
{
EekGtkKeyPrivate *priv = EEK_GTK_KEY_GET_PRIVATE(self);
g_return_if_fail (priv);
eek_key_get_keysyms (EEK_KEY(priv->simple), keysyms, groups, levels);
}
static gint static gint
eek_gtk_key_real_get_groups (EekKey *self) eek_gtk_key_real_get_groups (EekKey *self)
{ {
@ -181,7 +203,9 @@ eek_gtk_key_real_get_keysym_index (EekKey *self, gint *group, gint *level)
static void static void
eek_key_iface_init (EekKeyIface *iface) eek_key_iface_init (EekKeyIface *iface)
{ {
iface->get_keycode = eek_gtk_key_real_get_keycode;
iface->set_keysyms = eek_gtk_key_real_set_keysyms; iface->set_keysyms = eek_gtk_key_real_set_keysyms;
iface->get_keysyms = eek_gtk_key_real_get_keysyms;
iface->get_groups = eek_gtk_key_real_get_groups; iface->get_groups = eek_gtk_key_real_get_groups;
iface->get_keysym = eek_gtk_key_real_get_keysym; iface->get_keysym = eek_gtk_key_real_get_keysym;
iface->set_index = eek_gtk_key_real_set_index; iface->set_index = eek_gtk_key_real_set_index;
@ -227,6 +251,7 @@ eek_gtk_key_set_property (GObject *object,
matrix->num_groups, matrix->num_groups,
matrix->num_levels); matrix->num_levels);
break; break;
case PROP_KEYCODE:
case PROP_BOUNDS: case PROP_BOUNDS:
case PROP_OUTLINE: case PROP_OUTLINE:
case PROP_COLUMN: case PROP_COLUMN:
@ -255,6 +280,7 @@ eek_gtk_key_get_property (GObject *object,
g_return_if_fail (priv); g_return_if_fail (priv);
switch (prop_id) { switch (prop_id) {
case PROP_KEYCODE:
case PROP_BOUNDS: case PROP_BOUNDS:
case PROP_KEYSYMS: case PROP_KEYSYMS:
case PROP_COLUMN: case PROP_COLUMN:
@ -288,6 +314,9 @@ eek_gtk_key_class_init (EekGtkKeyClass *klass)
gobject_class->finalize = eek_gtk_key_finalize; gobject_class->finalize = eek_gtk_key_finalize;
gobject_class->dispose = eek_gtk_key_dispose; gobject_class->dispose = eek_gtk_key_dispose;
g_object_class_override_property (gobject_class,
PROP_KEYCODE,
"keycode");
g_object_class_override_property (gobject_class, g_object_class_override_property (gobject_class,
PROP_KEYSYMS, PROP_KEYSYMS,
"keysyms"); "keysyms");

View File

@ -162,6 +162,7 @@ eek_gtk_section_real_get_bounds (EekSection *self,
static EekKey * static EekKey *
eek_gtk_section_real_create_key (EekSection *self, eek_gtk_section_real_create_key (EekSection *self,
const gchar *name, const gchar *name,
guint keycode,
guint *keysyms, guint *keysyms,
gint num_groups, gint num_groups,
gint num_levels, gint num_levels,
@ -187,6 +188,7 @@ eek_gtk_section_real_create_key (EekSection *self,
matrix.num_levels = num_levels; matrix.num_levels = num_levels;
key = g_object_new (EEK_TYPE_GTK_KEY, key = g_object_new (EEK_TYPE_GTK_KEY,
"name", name, "name", name,
"keycode", keycode,
"keysyms", &matrix, "keysyms", &matrix,
"column", column, "column", column,
"row", row, "row", row,

View File

@ -54,6 +54,18 @@ eek_key_base_init (gpointer g_iface)
G_PARAM_READWRITE); G_PARAM_READWRITE);
g_object_interface_install_property (g_iface, pspec); g_object_interface_install_property (g_iface, pspec);
/**
* EekKey:keycode:
*
* The keycode of #EekKey.
*/
pspec = g_param_spec_uint ("keycode",
"Keycode",
"Keycode of the key",
0, G_MAXUINT, 0,
G_PARAM_READWRITE);
g_object_interface_install_property (g_iface, pspec);
/** /**
* EekKey:keysyms: * EekKey:keysyms:
* *
@ -164,6 +176,22 @@ eek_key_get_type (void)
return iface_type; return iface_type;
} }
/**
* eek_key_get_keycode:
* @key: an #EekKey
*
* Get the keycode of @key.
*/
guint
eek_key_get_keycode (EekKey *key)
{
EekKeyIface *iface = EEK_KEY_GET_IFACE(key);
g_return_val_if_fail (iface, EEK_INVALID_KEYCODE);
g_return_val_if_fail (iface->get_keycode, EEK_INVALID_KEYCODE);
return (*iface->get_keycode) (key);
}
/** /**
* eek_key_set_keysyms: * eek_key_set_keysyms:
* @key: an #EekKey * @key: an #EekKey
@ -188,6 +216,32 @@ eek_key_set_keysyms (EekKey *key,
(*iface->set_keysyms) (key, keysyms, num_groups, num_levels); (*iface->set_keysyms) (key, keysyms, num_groups, num_levels);
} }
/**
* eek_key_get_keysyms:
* @key: an #EekKey
* @keysyms: pointer where symbol matrix of @key will be stored
* @num_groups: pointer where the number of groups (rows) of @keysyms
* will be stored
* @num_levels: pointer where the number of levels (columns) of
* @keysyms will be stored
*
* Get the symbol matrix of @key to @keysyms. @keysyms is an array of
* symbols (unsigned int) and the length must match with @num_groups *
* @num_levels.
*/
void
eek_key_get_keysyms (EekKey *key,
guint **keysyms,
gint *num_groups,
gint *num_levels)
{
EekKeyIface *iface = EEK_KEY_GET_IFACE(key);
g_return_if_fail (iface);
g_return_if_fail (iface->get_keysyms);
(*iface->get_keysyms) (key, keysyms, num_groups, num_levels);
}
/** /**
* eek_key_get_groups: * eek_key_get_groups:
* @key: an #EekKey * @key: an #EekKey

View File

@ -39,10 +39,15 @@ struct _EekKeyIface
GTypeInterface g_iface; GTypeInterface g_iface;
/*< public >*/ /*< public >*/
guint (* get_keycode) (EekKey *self);
void (* set_keysyms) (EekKey *self, void (* set_keysyms) (EekKey *self,
guint *keysyms, guint *keysyms,
gint num_groups, gint num_groups,
gint num_levels); gint num_levels);
void (* get_keysyms) (EekKey *self,
guint **keysyms,
gint *num_groups,
gint *num_levels);
gint (* get_groups) (EekKey *self); gint (* get_groups) (EekKey *self);
guint (* get_keysym) (EekKey *self); guint (* get_keysym) (EekKey *self);
@ -71,10 +76,15 @@ struct _EekKeyIface
GType eek_key_get_type (void) G_GNUC_CONST; GType eek_key_get_type (void) G_GNUC_CONST;
guint eek_key_get_keycode (EekKey *key);
void eek_key_set_keysyms (EekKey *key, void eek_key_set_keysyms (EekKey *key,
guint *keysyms, guint *keysyms,
gint num_groups, gint num_groups,
gint num_levels); gint num_levels);
void eek_key_get_keysyms (EekKey *key,
guint **keysyms,
gint *num_groups,
gint *num_levels);
gint eek_key_get_groups (EekKey *key); gint eek_key_get_groups (EekKey *key);
guint eek_key_get_keysym (EekKey *key); guint eek_key_get_keysym (EekKey *key);

View File

@ -21,6 +21,8 @@
#define EEK_KEYSYMS_H 1 #define EEK_KEYSYMS_H 1
#define EEK_INVALID_KEYSYM ((guint)(-1)) #define EEK_INVALID_KEYSYM ((guint)(-1))
#define EEK_INVALID_KEYCODE ((guint)(-1))
G_CONST_RETURN gchar *eek_keysym_to_string (guint keysym); G_CONST_RETURN gchar *eek_keysym_to_string (guint keysym);
#endif /* EEK_KEYSYMS_H */ #endif /* EEK_KEYSYMS_H */

View File

@ -317,6 +317,7 @@ eek_section_get_bounds (EekSection *section,
EekKey * EekKey *
eek_section_create_key (EekSection *section, eek_section_create_key (EekSection *section,
const gchar *name, const gchar *name,
guint keycode,
guint *keysyms, guint *keysyms,
gint num_groups, gint num_groups,
gint num_levels, gint num_levels,
@ -334,6 +335,7 @@ eek_section_create_key (EekSection *section,
return (*iface->create_key) (section, return (*iface->create_key) (section,
name, name,
keycode,
keysyms, keysyms,
num_groups, num_groups,
num_levels, num_levels,

View File

@ -63,6 +63,7 @@ struct _EekSectionIface
EekKey *(* create_key) (EekSection *self, EekKey *(* create_key) (EekSection *self,
const gchar *name, const gchar *name,
guint keycode,
guint *keysyms, guint *keysyms,
gint num_groups, gint num_groups,
gint num_levels, gint num_levels,
@ -103,6 +104,7 @@ void eek_section_get_bounds (EekSection *section,
EekKey *eek_section_create_key (EekSection *section, EekKey *eek_section_create_key (EekSection *section,
const gchar *name, const gchar *name,
guint keycode,
guint *keysyms, guint *keysyms,
gint num_groups, gint num_groups,
gint num_levels, gint num_levels,

View File

@ -32,6 +32,7 @@
enum { enum {
PROP_0, PROP_0,
PROP_NAME, PROP_NAME,
PROP_KEYCODE,
PROP_KEYSYMS, PROP_KEYSYMS,
PROP_COLUMN, PROP_COLUMN,
PROP_ROW, PROP_ROW,
@ -55,6 +56,7 @@ G_DEFINE_TYPE_WITH_CODE (EekSimpleKey, eek_simple_key,
struct _EekSimpleKeyPrivate struct _EekSimpleKeyPrivate
{ {
gchar *name; gchar *name;
guint keycode;
guint *keysyms; guint *keysyms;
gint num_levels; gint num_levels;
gint num_groups; gint num_groups;
@ -66,6 +68,15 @@ struct _EekSimpleKeyPrivate
gint level; gint level;
}; };
static guint
eek_simple_key_real_get_keycode (EekKey *self)
{
EekSimpleKeyPrivate *priv = EEK_SIMPLE_KEY_GET_PRIVATE(self);
g_return_val_if_fail (priv, EEK_INVALID_KEYCODE);
return priv->keycode;
}
static void static void
eek_simple_key_real_set_keysyms (EekKey *self, eek_simple_key_real_set_keysyms (EekKey *self,
guint *keysyms, guint *keysyms,
@ -94,6 +105,27 @@ eek_simple_key_real_set_keysyms (EekKey *self,
#endif #endif
} }
static void
eek_simple_key_real_get_keysyms (EekKey *self,
guint **keysyms,
gint *groups,
gint *levels)
{
EekSimpleKeyPrivate *priv = EEK_SIMPLE_KEY_GET_PRIVATE(self);
g_return_if_fail (groups);
g_return_if_fail (levels);
g_return_if_fail (keysyms);
*groups = priv->num_groups;
*levels = priv->num_levels;
if (priv->keysyms) {
*keysyms = g_slice_alloc (*groups * *levels * sizeof(guint));
memcpy (*keysyms, priv->keysyms, *groups * *levels * sizeof(guint));
} else
*keysyms = NULL;
}
static gint static gint
eek_simple_key_real_get_groups (EekKey *self) eek_simple_key_real_get_groups (EekKey *self)
{ {
@ -212,7 +244,9 @@ eek_simple_key_real_get_keysym_index (EekKey *self,
static void static void
eek_key_iface_init (EekKeyIface *iface) eek_key_iface_init (EekKeyIface *iface)
{ {
iface->get_keycode = eek_simple_key_real_get_keycode;
iface->set_keysyms = eek_simple_key_real_set_keysyms; iface->set_keysyms = eek_simple_key_real_set_keysyms;
iface->get_keysyms = eek_simple_key_real_get_keysyms;
iface->get_groups = eek_simple_key_real_get_groups; iface->get_groups = eek_simple_key_real_get_groups;
iface->get_keysym = eek_simple_key_real_get_keysym; iface->get_keysym = eek_simple_key_real_get_keysym;
iface->set_index = eek_simple_key_real_set_index; iface->set_index = eek_simple_key_real_set_index;
@ -256,6 +290,9 @@ eek_simple_key_set_property (GObject *object,
g_free (priv->name); g_free (priv->name);
priv->name = g_strdup (g_value_get_string (value)); priv->name = g_strdup (g_value_get_string (value));
break; break;
case PROP_KEYCODE:
priv->keycode = g_value_get_uint (value);
break;
case PROP_KEYSYMS: case PROP_KEYSYMS:
matrix = g_value_get_boxed (value); matrix = g_value_get_boxed (value);
eek_key_set_keysyms (EEK_KEY(object), eek_key_set_keysyms (EEK_KEY(object),
@ -304,6 +341,9 @@ eek_simple_key_get_property (GObject *object,
case PROP_NAME: case PROP_NAME:
g_value_set_string (value, priv->name); g_value_set_string (value, priv->name);
break; break;
case PROP_KEYCODE:
g_value_set_uint (value, priv->keycode);
break;
case PROP_KEYSYMS: case PROP_KEYSYMS:
matrix.data = priv->keysyms; matrix.data = priv->keysyms;
matrix.num_groups = priv->num_groups; matrix.num_groups = priv->num_groups;
@ -354,6 +394,9 @@ eek_simple_key_class_init (EekSimpleKeyClass *klass)
g_object_class_override_property (gobject_class, g_object_class_override_property (gobject_class,
PROP_NAME, PROP_NAME,
"name"); "name");
g_object_class_override_property (gobject_class,
PROP_KEYCODE,
"keycode");
g_object_class_override_property (gobject_class, g_object_class_override_property (gobject_class,
PROP_KEYSYMS, PROP_KEYSYMS,
"keysyms"); "keysyms");
@ -384,6 +427,7 @@ eek_simple_key_init (EekSimpleKey *self)
priv = self->priv = EEK_SIMPLE_KEY_GET_PRIVATE(self); priv = self->priv = EEK_SIMPLE_KEY_GET_PRIVATE(self);
priv->keysyms = NULL; priv->keysyms = NULL;
priv->keycode = 0;
priv->num_groups = 0; priv->num_groups = 0;
priv->num_levels = 0; priv->num_levels = 0;
priv->column = 0; priv->column = 0;

View File

@ -170,6 +170,7 @@ eek_simple_section_real_get_bounds (EekSection *self, EekBounds *bounds)
static EekKey * static EekKey *
eek_simple_section_real_create_key (EekSection *self, eek_simple_section_real_create_key (EekSection *self,
const gchar *name, const gchar *name,
guint keycode,
guint *keysyms, guint *keysyms,
gint num_groups, gint num_groups,
gint num_levels, gint num_levels,
@ -191,6 +192,7 @@ eek_simple_section_real_create_key (EekSection *self,
matrix.num_levels = num_levels; matrix.num_levels = num_levels;
key = g_object_new (EEK_TYPE_SIMPLE_KEY, key = g_object_new (EEK_TYPE_SIMPLE_KEY,
"name", name, "name", name,
"keycode", keycode,
"keysyms", &matrix, "keysyms", &matrix,
"column", column, "column", column,
"row", row, "row", row,

View File

@ -198,6 +198,7 @@ create_key (EekXkbLayout *layout,
eek_section_create_key (section, eek_section_create_key (section,
name, name,
keycode,
keysyms, keysyms,
num_groups, num_groups,
num_levels, num_levels,

View File

@ -4,8 +4,8 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#define CSW 640 #define CSW 1280
#define CSH 480 #define CSH 1024
static gchar *symbols = NULL; static gchar *symbols = NULL;
static gchar *keycodes = NULL; static gchar *keycodes = NULL;

View File

@ -65,6 +65,7 @@ test_create (void)
key = eek_section_create_key (section, key = eek_section_create_key (section,
"test-key", "test-key",
0,
keysyms, keysyms,
3, 3,
2, 2,