eekboard - a virtual keyboard for GNOME
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

eekboard - a virtual keyboard for GNOME

on

  • 5,904 views

 

Statistics

Views

Total Views
5,904
Views on SlideShare
5,904
Embed Views
0

Actions

Likes
1
Downloads
32
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

eekboard - a virtual keyboard for GNOME Presentation Transcript

  • 1. COSCUP / GNOME.Asia Summit 2010, Taipei, Taiwan eekboard a virtual keyboard for GNOME Daiki Ueno ueno@unixuser.org Red Hat, i18n team
  • 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. Vkbds ● Caribou ● xvkbd ● matchbox-keyboard ● kvkbd ● onBoard ● fvkbd ● GOK ● iok ● Florence ● CellWriter
  • 4. Why everyone writes his own vkbd, while physical keyboards are merely a switch array?
  • 5. Why? ● Geeks are all keyboard maniac☺
  • 6. Why? ● Geeks are all keyboard maniac☺ ● A wide variety of demands on vkbds
  • 7. Vkbd in use ● Kiosk ● Tablet PC ● Mobile phone without keyboard ● Multilingual text input ● Typing tutor
  • 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. 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. Their functional territories sometimes conflict.
  • 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. 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. 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. libeek basic concepts: element tree A keyboard is a tree of elements key section keyboard
  • 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. Supported GUI widgets ● ClutterActor ● GtkDrawingArea ● Code borrowed from libgnomekbd ● GTK+ button
  • 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. 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. 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. 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. 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. 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. eekboard: demo Standalone Popup
  • 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. 謝謝 ! 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