SlideShare a Scribd company logo
1 of 25
Download to read offline
COSCUP / GNOME.Asia Summit 2010, Taipei, Taiwan




            eekboard
a virtual keyboard for GNOME

                   Daiki Ueno
                ueno@unixuser.org
                Red Hat, i18n team
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
Vkbds
●   Caribou                ●   xvkbd
●   matchbox-keyboard      ●   kvkbd
●   onBoard
●   fvkbd
●   GOK
●   iok
●   Florence
●   CellWriter
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
    technologies, whose functions sometimes
    overlap each other
     ➔   Many design decisions depend on how
         vkbds interact with those technologies
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
Their functional territories
  sometimes conflict.
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
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
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
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 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);
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 ();
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);
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
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)));
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
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);
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
eekboard: demo




            Standalone

           Popup
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
謝謝 !
                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

More Related Content

What's hot

Embedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeEmbedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeOpersys inc.
 
Leveraging Android's Linux Heritage at AnDevCon3
Leveraging Android's Linux Heritage at AnDevCon3Leveraging Android's Linux Heritage at AnDevCon3
Leveraging Android's Linux Heritage at AnDevCon3Opersys inc.
 
Android jumpstart at ESC Boston 2011
Android jumpstart at ESC Boston 2011Android jumpstart at ESC Boston 2011
Android jumpstart at ESC Boston 2011Opersys inc.
 
Android Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesAndroid Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesOpersys inc.
 
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Opersys inc.
 
BeagleBoard Workshop ESC Boston 2011
BeagleBoard Workshop ESC Boston 2011BeagleBoard Workshop ESC Boston 2011
BeagleBoard Workshop ESC Boston 2011Opersys inc.
 
Intro to Building Android Games using libGDX
Intro to Building Android Games using libGDXIntro to Building Android Games using libGDX
Intro to Building Android Games using libGDXJussi Pohjolainen
 
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIAndroid Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIOpersys inc.
 
LibGDX: Cross Platform Game Development
LibGDX: Cross Platform Game DevelopmentLibGDX: Cross Platform Game Development
LibGDX: Cross Platform Game DevelopmentIntel® Software
 
Headless Android at AnDevCon3
Headless Android at AnDevCon3Headless Android at AnDevCon3
Headless Android at AnDevCon3Opersys inc.
 
DEF CON 24 - Allan Cecil and DwangoAC - tasbot the perfectionist
DEF CON 24 - Allan Cecil and DwangoAC -  tasbot the perfectionistDEF CON 24 - Allan Cecil and DwangoAC -  tasbot the perfectionist
DEF CON 24 - Allan Cecil and DwangoAC - tasbot the perfectionistFelipe Prado
 
Advanced Linux Game Programming
Advanced Linux Game ProgrammingAdvanced Linux Game Programming
Advanced Linux Game ProgrammingLeszek Godlewski
 
Leveraging Android's Linux Heritage at ELC-E 2011
Leveraging Android's Linux Heritage at ELC-E 2011Leveraging Android's Linux Heritage at ELC-E 2011
Leveraging Android's Linux Heritage at ELC-E 2011Opersys inc.
 
Leveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IVLeveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IVOpersys inc.
 

What's hot (14)

Embedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC EuropeEmbedded Android Workshop at ELC Europe
Embedded Android Workshop at ELC Europe
 
Leveraging Android's Linux Heritage at AnDevCon3
Leveraging Android's Linux Heritage at AnDevCon3Leveraging Android's Linux Heritage at AnDevCon3
Leveraging Android's Linux Heritage at AnDevCon3
 
Android jumpstart at ESC Boston 2011
Android jumpstart at ESC Boston 2011Android jumpstart at ESC Boston 2011
Android jumpstart at ESC Boston 2011
 
Android Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and ResourcesAndroid Variants, Hacks, Tricks and Resources
Android Variants, Hacks, Tricks and Resources
 
Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012Android Hacks, Variants, Tricks and Resources ESC SV 2012
Android Hacks, Variants, Tricks and Resources ESC SV 2012
 
BeagleBoard Workshop ESC Boston 2011
BeagleBoard Workshop ESC Boston 2011BeagleBoard Workshop ESC Boston 2011
BeagleBoard Workshop ESC Boston 2011
 
Intro to Building Android Games using libGDX
Intro to Building Android Games using libGDXIntro to Building Android Games using libGDX
Intro to Building Android Games using libGDX
 
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConIIAndroid Variants, Hacks, Tricks and Resources presented at AnDevConII
Android Variants, Hacks, Tricks and Resources presented at AnDevConII
 
LibGDX: Cross Platform Game Development
LibGDX: Cross Platform Game DevelopmentLibGDX: Cross Platform Game Development
LibGDX: Cross Platform Game Development
 
Headless Android at AnDevCon3
Headless Android at AnDevCon3Headless Android at AnDevCon3
Headless Android at AnDevCon3
 
DEF CON 24 - Allan Cecil and DwangoAC - tasbot the perfectionist
DEF CON 24 - Allan Cecil and DwangoAC -  tasbot the perfectionistDEF CON 24 - Allan Cecil and DwangoAC -  tasbot the perfectionist
DEF CON 24 - Allan Cecil and DwangoAC - tasbot the perfectionist
 
Advanced Linux Game Programming
Advanced Linux Game ProgrammingAdvanced Linux Game Programming
Advanced Linux Game Programming
 
Leveraging Android's Linux Heritage at ELC-E 2011
Leveraging Android's Linux Heritage at ELC-E 2011Leveraging Android's Linux Heritage at ELC-E 2011
Leveraging Android's Linux Heritage at ELC-E 2011
 
Leveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IVLeveraging Android's Linux Heritage at AnDevCon IV
Leveraging Android's Linux Heritage at AnDevCon IV
 

Similar to eekboard - a virtual keyboard for GNOME

Quickstart: Qt for Windows, Symbian and Maemo / Meego v2.0.8 (January 10th, 2...
Quickstart: Qt for Windows, Symbian and Maemo / Meego v2.0.8 (January 10th, 2...Quickstart: Qt for Windows, Symbian and Maemo / Meego v2.0.8 (January 10th, 2...
Quickstart: Qt for Windows, Symbian and Maemo / Meego v2.0.8 (January 10th, 2...Andreas Jakl
 
Flutter - Pixel by Pixel
Flutter - Pixel by PixelFlutter - Pixel by Pixel
Flutter - Pixel by PixelThomas Gazzoni
 
gtkgst video in your widgets!
gtkgst video in your widgets!gtkgst video in your widgets!
gtkgst video in your widgets!ystreet00
 
Quick Review of Desktop and Native Apps using Javascript
Quick Review of Desktop and Native Apps using JavascriptQuick Review of Desktop and Native Apps using Javascript
Quick Review of Desktop and Native Apps using JavascriptRobert Ellen
 
Project Proposal for Minor Project
Project Proposal for Minor Project Project Proposal for Minor Project
Project Proposal for Minor Project Aniket Maithani
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'acorehard_by
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectYen-Chin Lee
 
Javascript in linux desktop (ICOS ver.)
Javascript in linux desktop (ICOS ver.)Javascript in linux desktop (ICOS ver.)
Javascript in linux desktop (ICOS ver.)Yuren Ju
 
Castle Game Engine and the joy of making and using a custom game engine
Castle Game Engine and the joy  of making and using a custom game engineCastle Game Engine and the joy  of making and using a custom game engine
Castle Game Engine and the joy of making and using a custom game engineMichalis Kamburelis
 
LXDE Presentation at FOSDEM 2009
LXDE Presentation at FOSDEM 2009LXDE Presentation at FOSDEM 2009
LXDE Presentation at FOSDEM 2009Mario B.
 
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering SystemOpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering Systemoasiskim
 
Introduction to Box2D Physics Engine
Introduction to Box2D Physics EngineIntroduction to Box2D Physics Engine
Introduction to Box2D Physics Enginefirstthumb
 
OpenGL Introduction.
OpenGL Introduction.OpenGL Introduction.
OpenGL Introduction.Girish Ghate
 
Cross Platform Objective C Development Using Gn Ustep
Cross Platform Objective C Development Using Gn UstepCross Platform Objective C Development Using Gn Ustep
Cross Platform Objective C Development Using Gn Ustepwangii
 
[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺InfraEngineer
 
Ignite your app development with Angular, NativeScript and Firebase
Ignite your app development with Angular, NativeScript and FirebaseIgnite your app development with Angular, NativeScript and Firebase
Ignite your app development with Angular, NativeScript and FirebaseJen Looper
 
Necessitas - Qt on Android - from FSCONS 2011
Necessitas - Qt on Android - from FSCONS 2011Necessitas - Qt on Android - from FSCONS 2011
Necessitas - Qt on Android - from FSCONS 2011Johan Thelin
 
Some wonderful Linux softwares for daily use
Some wonderful Linux softwares for daily useSome wonderful Linux softwares for daily use
Some wonderful Linux softwares for daily usearun.arwachin
 
Advanced Castle Game Engine features - forms, 3D generation, shaders, customi...
Advanced Castle Game Engine features - forms, 3D generation, shaders, customi...Advanced Castle Game Engine features - forms, 3D generation, shaders, customi...
Advanced Castle Game Engine features - forms, 3D generation, shaders, customi...Michalis Kamburelis
 
Java Chapter 2 Overview.ppt
Java Chapter 2 Overview.pptJava Chapter 2 Overview.ppt
Java Chapter 2 Overview.pptMiltonMolla1
 

Similar to eekboard - a virtual keyboard for GNOME (20)

Quickstart: Qt for Windows, Symbian and Maemo / Meego v2.0.8 (January 10th, 2...
Quickstart: Qt for Windows, Symbian and Maemo / Meego v2.0.8 (January 10th, 2...Quickstart: Qt for Windows, Symbian and Maemo / Meego v2.0.8 (January 10th, 2...
Quickstart: Qt for Windows, Symbian and Maemo / Meego v2.0.8 (January 10th, 2...
 
Flutter - Pixel by Pixel
Flutter - Pixel by PixelFlutter - Pixel by Pixel
Flutter - Pixel by Pixel
 
gtkgst video in your widgets!
gtkgst video in your widgets!gtkgst video in your widgets!
gtkgst video in your widgets!
 
Quick Review of Desktop and Native Apps using Javascript
Quick Review of Desktop and Native Apps using JavascriptQuick Review of Desktop and Native Apps using Javascript
Quick Review of Desktop and Native Apps using Javascript
 
Project Proposal for Minor Project
Project Proposal for Minor Project Project Proposal for Minor Project
Project Proposal for Minor Project
 
Настройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'aНастройка окружения для кросскомпиляции проектов на основе docker'a
Настройка окружения для кросскомпиляции проектов на основе docker'a
 
Build your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto projectBuild your own embedded linux distributions by yocto project
Build your own embedded linux distributions by yocto project
 
Javascript in linux desktop (ICOS ver.)
Javascript in linux desktop (ICOS ver.)Javascript in linux desktop (ICOS ver.)
Javascript in linux desktop (ICOS ver.)
 
Castle Game Engine and the joy of making and using a custom game engine
Castle Game Engine and the joy  of making and using a custom game engineCastle Game Engine and the joy  of making and using a custom game engine
Castle Game Engine and the joy of making and using a custom game engine
 
LXDE Presentation at FOSDEM 2009
LXDE Presentation at FOSDEM 2009LXDE Presentation at FOSDEM 2009
LXDE Presentation at FOSDEM 2009
 
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering SystemOpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System
OpenGL ES 2.0 Programming and Cocos2d-x v3.3 Rendering System
 
Introduction to Box2D Physics Engine
Introduction to Box2D Physics EngineIntroduction to Box2D Physics Engine
Introduction to Box2D Physics Engine
 
OpenGL Introduction.
OpenGL Introduction.OpenGL Introduction.
OpenGL Introduction.
 
Cross Platform Objective C Development Using Gn Ustep
Cross Platform Objective C Development Using Gn UstepCross Platform Objective C Development Using Gn Ustep
Cross Platform Objective C Development Using Gn Ustep
 
[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺[MeetUp][2nd] 컭on턺
[MeetUp][2nd] 컭on턺
 
Ignite your app development with Angular, NativeScript and Firebase
Ignite your app development with Angular, NativeScript and FirebaseIgnite your app development with Angular, NativeScript and Firebase
Ignite your app development with Angular, NativeScript and Firebase
 
Necessitas - Qt on Android - from FSCONS 2011
Necessitas - Qt on Android - from FSCONS 2011Necessitas - Qt on Android - from FSCONS 2011
Necessitas - Qt on Android - from FSCONS 2011
 
Some wonderful Linux softwares for daily use
Some wonderful Linux softwares for daily useSome wonderful Linux softwares for daily use
Some wonderful Linux softwares for daily use
 
Advanced Castle Game Engine features - forms, 3D generation, shaders, customi...
Advanced Castle Game Engine features - forms, 3D generation, shaders, customi...Advanced Castle Game Engine features - forms, 3D generation, shaders, customi...
Advanced Castle Game Engine features - forms, 3D generation, shaders, customi...
 
Java Chapter 2 Overview.ppt
Java Chapter 2 Overview.pptJava Chapter 2 Overview.ppt
Java Chapter 2 Overview.ppt
 

eekboard - a virtual keyboard for GNOME

  • 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