25
eekboard a virtual keyboard for GNOME Daiki Ueno [email protected] Red Hat, i18n team COSCUP / GNOME.Asia Summit 2010, Taipei, Taiwan

eekboard - a virtual keyboard for GNOME

Embed Size (px)

Citation preview

Page 1: eekboard - a virtual keyboard for GNOME

eekboarda virtual keyboard for GNOME

Daiki Ueno

[email protected]

Red Hat, i18n team

COSCUP / GNOME.Asia Summit 2010, Taipei, Taiwan

Page 2: eekboard - a virtual keyboard for GNOME

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

Page 3: eekboard - a virtual keyboard for GNOME

Vkbds

● Caribou

● matchbox-keyboard

● onBoard

● fvkbd

● GOK

● iok

● Florence

● CellWriter

● xvkbd

● kvkbd

Page 4: eekboard - a virtual keyboard for GNOME

Why everyone writes his own vkbd,while physical keyboards are

merely a switch array?

Page 5: eekboard - a virtual keyboard for GNOME

Why?

● Geeks are all keyboard maniac☺

Page 6: eekboard - a virtual keyboard for GNOME

Why?

● Geeks are all keyboard maniac☺● A wide variety of demands on vkbds

Page 7: eekboard - a virtual keyboard for GNOME

Vkbd in use

● Kiosk● Tablet PC● Mobile phone without keyboard● Multilingual text input● Typing tutor

Page 8: eekboard - a virtual keyboard for GNOME

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

Page 9: eekboard - a virtual keyboard for GNOME

Vkbd relateddesktop 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

Page 10: eekboard - a virtual keyboard for GNOME

Their functional territoriessometimes conflict.

Page 11: eekboard - a virtual keyboard for GNOME

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

Page 12: eekboard - a virtual keyboard for GNOME

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

Page 13: eekboard - a virtual keyboard for GNOME

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

Page 14: eekboard - a virtual keyboard for GNOME

libeek basic concepts:element tree

key section keyboard

A keyboard is a tree of elements

Page 15: eekboard - a virtual keyboard for GNOME

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);

Page 16: eekboard - a virtual keyboard for GNOME

Supported GUI widgets

● ClutterActor● GtkDrawingArea

● Code borrowed from libgnomekbd

● GTK+ button

Page 17: eekboard - a virtual keyboard for GNOME

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);

Page 18: eekboard - a virtual keyboard for GNOME

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

Page 19: eekboard - a virtual keyboard for GNOME

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)));

Page 20: eekboard - a virtual keyboard for GNOME

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);

Keyboard realized as ClutterActor

Logical representation of keyboard

e

vent

Page 21: eekboard - a virtual keyboard for GNOME

How about modifiers?

Each key is assigned a matrix of symbols

#3

ぁあ Not limited to 2x2

/* 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);

Leve

l

Group

Page 22: eekboard - a virtual keyboard for GNOME

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

Page 23: eekboard - a virtual keyboard for GNOME

eekboard: demo

Standalone

Popup

Page 24: eekboard - a virtual keyboard for GNOME

Things to come...

● CSS based theme support● Japanese “flick input”● 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

あいう

えお

あexpand

Page 25: eekboard - a virtual keyboard for GNOME

Questions or Comments?

“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.0The rest of the slide materials including “thai typewriter” photo are © Daiki Ueno, cc-by-nc-sa 2.0

http://ueno.github.com/eekboard/

謝謝 !