Usage Overview
libeek is a library to create keyboard-like user interface.
Since it is designed as simple as possible, it provides only two
kind of objects. One is keyboard element
(objects derived from #EekElement) and another is
keyboard layout engine (objects which
implements the #EekLayout interface).
A keyboard element represents either a keyboard
(#EekKeyboard), a section (#EekSection), or a key (#EekKey). Each
element implements the Builder design pattern so that it can map
itself to different UI widgets (#ClutterActor, #GtkDrawingArea,
aso).
A layout engine arranges keyboard elements using information
from external configuration mechanisms (libxklavier, XKB,
matchbox-keyboard layouts in XML, aso)
Here is a sample code which demonstrates (1) keyboard
elements are arranged with the system keyboard layout using
libxklavier and (2) keyboard elements are mapped into
#ClutterActor:
EekLayout *layout;
EekKeyboard *keyboard;
ClutterActor *actor;
/* Create a layout engine based on libxklavier configuration. */
layout = eek_xkl_layout_new ();
/* Create a keyboard from the given layout. */
keyboard = eek_keyboard_new (layout, initial_width, initial_height);
/* Create a ClutterActor. */
actor = eek_clutter_keyboard_new (eekboard->keyboard);
/* Add the actor to a stage. */
clutter_group_add (CLUTTER_GROUP(stage), actor);
libeek currently supports GTK+ and Clutter as UI toolkits.
To create a keyboard-like #GtkWidget instead of #ClutterActor,
replace eek_clutter_keyboard_new() with eek_gtk_keyboard_new().
Similarly, if you want to use XKB configuration directly (without
libxklavier), you will only need to replace eek_xkl_layout_new ()
with eek_xkb_layout_new().
In the above example, a keyboard is represented as a tree of
#EekElement -- #EekKeyboard contains one or more #EekSection's and
#EekSection contains one or more #EekKey's. Each element may emit
events when user pushes the corresponding UI widget.
Here is another sample code which demonstrates logical events on
#EekElement:
/* Find a key element in the logical keyboard. */
EekKey *key = eek_keyboard_find_key_by_keycode (keyboard, 0x38);
g_signal_connect (key, "pressed", on_a_pressed);
When user pushed a widget which looks like "a" key (i.e. keycode 0x38), on_a_pressed will be called.