libeek: add eek_keyboard_find_key_by_position().

This commit is contained in:
Daiki Ueno
2010-08-05 12:31:43 +09:00
parent 94219bd31e
commit 039ea44520
10 changed files with 162 additions and 78 deletions

View File

@ -419,45 +419,37 @@ on_button_event (GtkWidget *widget,
GdkEventButton *event,
gpointer user_data)
{
EekElement *keyboard = user_data, *section, *key;
EekGtkKeyboard *keyboard = EEK_GTK_KEYBOARD(user_data), *key;
EekGtkKeyboardPrivate *priv = EEK_GTK_KEYBOARD_GET_PRIVATE(keyboard);
EekBounds bounds;
gdouble x, y;
x = (gdouble)event->x / priv->scale;
y = (gdouble)event->y / priv->scale;
section = eek_container_find_by_position (EEK_CONTAINER(keyboard), x, y);
if (section) {
eek_element_get_bounds (keyboard, &bounds);
x -= bounds.x;
y -= bounds.y;
key = eek_container_find_by_position (EEK_CONTAINER(section),
x,
y);
if (key)
switch (event->type) {
case GDK_BUTTON_PRESS:
if (priv->key == key)
return FALSE;
if (priv->key) {
key_shrink (EEK_GTK_KEYBOARD(keyboard), EEK_KEY(priv->key));
g_signal_emit_by_name (keyboard, "key-released", priv->key);
}
key_enlarge (EEK_GTK_KEYBOARD(keyboard), EEK_KEY(key));
g_signal_emit_by_name (keyboard, "key-pressed", key);
priv->key = key;
return TRUE;
case GDK_BUTTON_RELEASE:
if (!priv->key)
return FALSE;
key = eek_keyboard_find_key_by_position (EEK_KEYBOARD(keyboard), x, y);
if (key)
switch (event->type) {
case GDK_BUTTON_PRESS:
if (priv->key == key)
return FALSE;
if (priv->key) {
key_shrink (EEK_GTK_KEYBOARD(keyboard), EEK_KEY(priv->key));
g_signal_emit_by_name (keyboard, "key-released", priv->key);
priv->key = NULL;
return TRUE;
default:
return FALSE;
}
}
key_enlarge (EEK_GTK_KEYBOARD(keyboard), EEK_KEY(key));
g_signal_emit_by_name (keyboard, "key-pressed", key);
priv->key = key;
return TRUE;
case GDK_BUTTON_RELEASE:
if (!priv->key)
return FALSE;
key_shrink (EEK_GTK_KEYBOARD(keyboard), EEK_KEY(priv->key));
g_signal_emit_by_name (keyboard, "key-released", priv->key);
priv->key = NULL;
return TRUE;
default:
return FALSE;
}
return FALSE;
}