Your SlideShare is downloading. ×
0
COSCUP / GNOME.Asia Summit 2010, Taipei, Taiwan




            eekboard
a virtual keyboard for GNOME

                   ...
Virtual keybord (vkbd)
                                   ●   What's it?
                                       ●   A help...
Vkbds
●   Caribou                ●   xvkbd
●   matchbox-keyboard      ●   kvkbd
●   onBoard
●   fvkbd
●   GOK
●   iok
●   ...
Why everyone writes his own vkbd,
  while physical keyboards are
     merely a switch array?
Why?
●   Geeks are all keyboard maniac☺
Why?
●   Geeks are all keyboard maniac☺
●   A wide variety of demands on vkbds
Vkbd in use
● Kiosk
● Tablet PC


● Mobile phone without keyboard


● Multilingual text input


● Typing tutor
Why?
●   Geeks are all keyboard maniac☺
●   A wide variety of demands on vkbds
●   Vkbds work closely with other desktop
 ...
Vkbd related
              desktop technologies
●   GNOME Accessibility
    ●   Convert UI events to ones helpful for disa...
Their functional territories
  sometimes conflict.
Vkbd related desktop
        technologies: contradictions
●   Who activates vkbd?
    ●   GNOME Accessibility - Caribou
  ...
Ideas behind eekboard
●   Throw away the idea of creating a
    single mighty vkbd that meets all the
    requirements
   ...
eekboard
●   libeek
    ●   easy embedded keyboard
    ●   A library to create keyboard like UI
    ●   GUI toolkit agnost...
libeek basic concepts:
       element tree
A keyboard is a tree of elements




 key             section   keyboard
GUI toolkit agnostic API
/* Create a GTK+ keyboard. */
keyboard = eek_gtk_keyboard_new ();

/* Create a section in the key...
Supported GUI widgets
● ClutterActor
● GtkDrawingArea

    ●   Code borrowed from libgnomekbd
●   GTK+ button
Keyboard layout configuration

/* Create a keyboard layout configuration
   using XKB. */
layout = eek_xkb_layout_new ();
...
Supported keyboard layout
             configuration
●   XKB
    ●   Consists of 3 components
        –   Keycodes – physi...
Put it all together
/* Create a keyboard layout configuration using
   libxklavier. */
layout = eek_xkl_layout_new ();

/*...
So how about event handling?

 /* Find a key element in the logical keyboard. */
 key = eek_keyboard_find_key_by_keycode
 ...
How about modifiers?

Each key is assigned a matrix of symbols

                     #ぁ
             Level

              ...
eekboard: a sample vkbd
●   Startup
    ●   “tap” on any editable widget via a11y, or
    ●   invoke the command directly
...
eekboard: demo




            Standalone

           Popup
Things to come...
● CSS based theme support
                                                    う
● Japanese “flick input”...
謝謝 !
                Questions or Comments?
               http://ueno.github.com/eekboard/


“magic mushrooms” is © love♡...
Upcoming SlideShare
Loading in...5
×

eekboard - a virtual keyboard for GNOME

5,462

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
5,462
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
34
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "eekboard - a virtual keyboard for GNOME"

  1. 1. COSCUP / GNOME.Asia Summit 2010, Taipei, Taiwan eekboard a virtual keyboard for GNOME Daiki Ueno ueno@unixuser.org Red Hat, i18n team
  2. 2. Virtual keybord (vkbd) ● What's it? ● A helper application that enables text entry without access to a physical keyboard ● Also known as ● On screen keyboard ● Software keyboard http://live.gnome.org/GnomeShell/Design/Whiteboards/ScreenKeyboard
  3. 3. Vkbds ● Caribou ● xvkbd ● matchbox-keyboard ● kvkbd ● onBoard ● fvkbd ● GOK ● iok ● Florence ● CellWriter
  4. 4. Why everyone writes his own vkbd, while physical keyboards are merely a switch array?
  5. 5. Why? ● Geeks are all keyboard maniac☺
  6. 6. Why? ● Geeks are all keyboard maniac☺ ● A wide variety of demands on vkbds
  7. 7. Vkbd in use ● Kiosk ● Tablet PC ● Mobile phone without keyboard ● Multilingual text input ● Typing tutor
  8. 8. Why? ● Geeks are all keyboard maniac☺ ● A wide variety of demands on vkbds ● Vkbds work closely with other desktop technologies, whose functions sometimes overlap each other ➔ Many design decisions depend on how vkbds interact with those technologies
  9. 9. Vkbd related desktop technologies ● GNOME Accessibility ● Convert UI events to ones helpful for disabled users ● Input methods ● Convert UI events to (typically multilingual) text ● Keyboard layout configuration ● Convert physical key events to logical symbols, based on users' preferences – e.g. using generic US keyboard in Dvorak layout
  10. 10. Their functional territories sometimes conflict.
  11. 11. Vkbd related desktop technologies: contradictions ● Who activates vkbd? ● GNOME Accessibility - Caribou ● Input methods - ibus-input-pad, scim-panel-vkb-gtk ● Who translates key events? ● Keyboard layout configuration mechanism in X ● Input methods ● Who passes real key events to vkbd? ● GNOME Accessibility keystroke listener ● Input methods
  12. 12. Ideas behind eekboard ● Throw away the idea of creating a single mighty vkbd that meets all the requirements ● Instead, start from a GUI library to create keyboard- like user interfaces ● Decouple the GUI from accessibility, input methods, and keyboard layout configuration
  13. 13. eekboard ● libeek ● easy embedded keyboard ● A library to create keyboard like UI ● GUI toolkit agnostic API ● Can read keyboard layout configuration from various sources ● eekboard ● A sample vkbd implemented with libeek
  14. 14. libeek basic concepts: element tree A keyboard is a tree of elements key section keyboard
  15. 15. GUI toolkit agnostic API /* Create a GTK+ keyboard. */ keyboard = eek_gtk_keyboard_new (); /* Create a section in the keyboard. */ section = eek_keyboard_create_section (keyboard); /* Add a row in the section. */ eek_section_add_row (section, 10, ...); /* Create keys in the section. */ key1 = eek_section_create_key (section, 0, 0); /* Obtain actual GTK+ widget. */ widget = eek_gtk_keyboard_get_widget (keyboard);
  16. 16. Supported GUI widgets ● ClutterActor ● GtkDrawingArea ● Code borrowed from libgnomekbd ● GTK+ button
  17. 17. Keyboard layout configuration /* Create a keyboard layout configuration using XKB. */ layout = eek_xkb_layout_new (); eek_xkb_layout_set_names_full (layout, “symbols”, “pc+us+in(ben)”, “geometry”, “kinesis”, -1); /* Apply the layout to the keyboard. This will populate sections/keys in keyboard. */ eek_keyboard_set_layout (keyboard, layout);
  18. 18. Supported keyboard layout configuration ● XKB ● Consists of 3 components – Keycodes – physical key IDs – Symbols – mapping from keycodes to logical symbols – Geometry – appearances of keyboard ● Libxklavier ● A wrapper around XKB to make it easier to customize by – Model – Country – Language
  19. 19. Put it all together /* Create a keyboard layout configuration using libxklavier. */ layout = eek_xkl_layout_new (); /* Create a keyboard element implemented as ClutterActor. */ keyboard = eek_clutter_keyboard_new (); /* Apply the layout to the keyboard. */ eek_keyboard_set_layout (keyboard, layout); /* Convert keyboard into ClutterActor. */ clutter_group_add (CLUTTER_GROUP(stage), eek_clutter_keyboard_get_actor (EEK_CLUTTER_KEYBOARD(keyboard)));
  20. 20. So how about event handling? /* Find a key element in the logical keyboard. */ key = eek_keyboard_find_key_by_keycode (keyboard, 0x38); g_signal_connect (key, "pressed", on_a_pressed); Logical representation of keyboard Keyboard realized as ClutterActor event
  21. 21. How about modifiers? Each key is assigned a matrix of symbols #ぁ Level 3 あ Not limited to 2x2 Group /* Assign symbol matrix to a key. */ eek_key_set_keysyms (key, keysyms, num_groups, num_levels); /* Set group/level of the entire keyboard. */ eek_keyboard_set_keysym_index (keyboard, group, level);
  22. 22. eekboard: a sample vkbd ● Startup ● “tap” on any editable widget via a11y, or ● invoke the command directly ● Layout can be changed from menu ● Typing monitor ● Trap all key events and act as a typing monitor
  23. 23. eekboard: demo Standalone Popup
  24. 24. Things to come... ● CSS based theme support う ● Japanese “flick input” expand あ いあえ ● Multi-touch お ● Rewrite eekboard in Vala ● Currently it is written in C ● libeek Vala binding is already available ● XML keyboard layout configuration ● Used by Caribou, matchbox-keyboard, fvkbd
  25. 25. 謝謝 ! Questions or Comments? http://ueno.github.com/eekboard/ “magic mushrooms” is © love♡janine, cc-by-nc 2.0 “Cat Fight!” is © privatenobby, cc-by-nc-sa 2.0 “new keyboard and mouse” is ©Ian Langworth, cc-by-nc-sa 2.0 “QWERTY 2030 USB” is ©Isabelle Palatin, cc-by-sa 2.0 The rest of the slide materials including “thai typewriter” photo are © Daiki Ueno, cc-by-nc-sa 2.0
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×