Virtual Keyboard, Revisited.


Megagun

Member
Joined
Jun 15, 2006
Messages
214
Allright, so first of all I haven't gotten my GP2x yet and such, and therefore I have no idea if this idea is feasable at all or not. Still, I guess it could be better than most Virtual Keyboards existing as of now.

So, we all know the classic "horizontal bar" style Virtual Keyboard by now: a clumsy and slow way to allow the user to input text, yet it's also very basic and easy to implement. It's slow to operate, though... Why? Probably because for every character, you need a different ammount of keypresses, depending on the character that you've previously inputted. For example, you might need 5 buttonpresses to input "A", 2 for "B", and then suddenly 10 or so for "V".. Quite a hassle to work with, I think..

Now, how could we do this better? Well having each and every button on the GP2x represent one single letter would be nice, but we ain't got that much buttons, unfortunately. So we've got to do it a bit different. Key is still, though, to try and get the ammount of buttons needed to pressed to get a single character for all different kinds of characters about the same. So "A" takes, say, 3 buttons to press, and so does "B", and even "V".

The joystick has 8 directions.
The joystick has 1 button.
2 shoulder buttons.
4 right-hand buttons.
2 below-right-hand buttons.
(2 or 3 volume buttons).

Conclusion? We've got to combine keys to get a proper input done.
8*4=32.. So that'd allow us to input all letters and some signs by combining the right hand buttons and the joystick directions. My idea is to combine a right-hand buttonhit with a left-hand stick direction. Say "X" and "joystick up" corresponds to "b". Make a keyset that works with this method, display the keys that correspond with the button/joystick directions/presses graphically on the screen in 4 boxes, and voila! Easy-to-operate virtual keyboard. Need more input characters? Pressing the joystick could change between upper and lowercase characters. Hitting start or select could bring up yet another keyset with numbers, additional characters and stuff like that.

Don't understand what I'm on about AT ALL (probably, since I have the feeling I'm writing bad english here)? I've quickly whipped up a prototype of what I mean a while ago in about one hour at 01:00 (at night :p) in Multimedia Fusion (which I now recognize as being a great tool for making prototypes. Using it for anything else other than that seems kind of worthless to me now after I've seen the light of C and C++) and changed it around a bit a few minutes go. A bit more info about how to use it is in the program itself. The .dll file is nothing really harmful, and if you've ever used a Multimedia Fusion-made program, you might already have it on your HD somewhere.

You can get the prototype itself (Win32 only, sorry Linux users. :/) here: http://home.deds.nl/~megagun/temp/vkeyproto2.zip
(Note: you have to extract this to your HD somewhere, as it depends on an ini file. Also note that you've got to hold both keys (arrow keys and numpad keys) to input a character)

Since I'll be getting my GP2x in a while (don't have it yet), and since I'm probably going to play a lot with it first before attempting to code, and since that's probably going to take a while too (the figureing out how to code for GP2x, etc..), I'm strongly encouraging anyone with a bit of time to try and code this for GP2x. Don't get me wrong, I'm not lazy or something, I just know it'll take a while and I know a lot of people are skilled enough to quickly whip this up.. so.. yeah.. Also, note that my prototype is kind of weird on PC, and that everyone should be able to use it on GP2x much faster, since the GP2x stick seems more "slidey" than your keypad, and the screen is close to the actual buttons, meaning faster hand-eye coordination.

It'd be nice if the keyboard configuration could be stored on the NAND somewhere, meaning that every application you use which uses this virtual keyboard system would in theory look and behave the same (read: use the same configuration).

Comments? Questions? I'd be glad to answer them.
 
michaeljustman posted on Jul 2 2006 at 01:02 AM said:
Although your method might be somewhat effective, the learning curve would be rather steep for this method of input.

Which doesn't suggest that it would be a bad idea, just that it wouldn't be very user friendly - but I guess if the application is useful to those who are willing to learn it (I would, it'd save using my PC to type memo related stuff, I hate paperwork) then it's not a bad idea.
 
Last edited by a moderator:
It's hard to use, trust me. I created something very similar to it on the GP32, and even I, the creator, could never get used to it. Here is a simple input method I'm going to use for an upcoming program:

---------------------------------------------
ABCDEFGHIJKLM...NOPQRSTUVWXYZ
_____________^______________
---------------------------------------------

You move the semi-fast arrow left or right with the shoulder buttons. It will select the letter that it lands on when you release the shoulder button, and return to the center. Perhaps there could be certain configurations, such as putting all vowels on one side and consonants on the other.
 
Separating vowel and consonants? Doesn't sound very intuitive. You're to use a line that you choose from, I'd prefer just straight A-Z mapping, since getting creative with that sort of thing can lead to sillyness. I'm one of the people who thought Dzz's Nethack worked better without the QWERTY setup, simply because I'm not typing on it with my fingers, I'm choosing with a joystick.

One thing you could do would be a "booster button" that would make the pointer go at double or triple speed, allowing you to shift to the far-away parts of the line more quickly. You could also experiment by making it a circle rather than a line, which would serve no other purpose than to look cool, perhaps...

Beyond Good and Evil has an amazing input scheme. I love that swirly thing. Works so well with my trackball.
 
Magnulus posted on Jul 2 2006 at 01:52 PM said:
I'm one of the people who thought Dzz's Nethack worked better without the QWERTY setup, simply because I'm not typing on it with my fingers, I'm choosing with a joystick.

However, on a QWERTY setup you know intuitively where the letters are. If it's alphabetic the placement of the letters will depend on the grid (how many rows and so on), so there's a (small) learning curve to it.

Fellow member Pea who started work on a PDA environment for the GP32 put in quite a bit of thought into different modes of text input. The default one he settled on is by far the best in my mind too. Here's a quote from his site:

Txt grid (default) - Very similar to mobile phone text messaging. Each direction on the D-pad represents one of the number keys on the phone, and the A button is pressed a certain number of times for each letter (e.g. D-pad up, A pressed 2ce is the letter B). Should be very familiar and fast for most users.

He made a flash mockup of it, but unfortunately I can't find it.
 
Last edited by a moderator:
JaqMs posted on Jul 2 2006 at 04:09 AM said:
It's hard to use, trust me. I created something very similar to it on the GP32, and even I, the creator, could never get used to it. Here is a simple input method I'm going to use for an upcoming program:

---------------------------------------------
ABCDEFGHIJKLM...NOPQRSTUVWXYZ
_____________^______________
---------------------------------------------

You move the semi-fast arrow left or right with the shoulder buttons. It will select the letter that it lands on when you release the shoulder button, and return to the center. Perhaps there could be certain configurations, such as putting all vowels on one side and consonants on the other.
And what if I miss the letter that I want?
 
Last edited by a moderator:
Magnulus posted on Jul 2 2006 at 05:40 PM said:
Personally, I think Mega's set-up is worth a shot. It has the potential to be a very fast way of typing once the learning curve has been traversed.

Sounds good to me too, PalmOS Grafitti was a learning curve too but all palm users got the hang of it. Perhaps a minor change could be that the Joystick is moved in the shape of the letter tather than just to a place (Again more like grafitti) and case could be decided with the use of a different button. An Upper case 'L' for example could be moving the stick from top left to bottom left to bottom right whilst holding the A button down. A lower case 'l' could be the same stick movement with the b button pressed. x and y could be used for numbers and symbols.

Perhaps more complicated to code but also easier to learn to use??

Regards

Craig
 
Last edited by a moderator:
for short text input, maybe 1-10 characters, this sytem sound great. with 9 directions (including center click) on the joypad you can get A-Z and 0-9 with just 4 modifier keys.

however, if youre going to be entering a lot of text, i still think Dasher (http://www.inference.phy.cam.ac.uk/dasher/DasherSummary2.html) is the ultimate low-learning-curve way to go.
 
CraigsBar posted on Jul 5 2006 at 01:45 AM said:
Perhaps a minor change could be that the Joystick is moved in the shape of the letter tather than just to a place (Again more like grafitti) and case could be decided with the use of a different button. An Upper case 'L' for example could be moving the stick from top left to bottom left to bottom right whilst holding the A button down. A lower case 'l' could be the same stick movement with the b button pressed. x and y could be used for numbers and symbols.
Thats how my edgewrite implementation works ( http://gp2x.sector808.org/edgepad.php ), but no buttons are needed (in edgewrite uppercase is selected by finishing off in the top left corner).
 
Last edited by a moderator:
Magnulus posted on Jul 5 2006 at 08:10 AM said:
You can't seriously say that Dasher looks EFFECTIVE!

Give it a try on your PC, you can get up quite a good speed in a short time. I'm not sure how effective it would be on a small screen.

Most importantly, it is pretty cool (in a geeky kind of way :) )
 
Last edited by a moderator:
I'm working on a different virtual keyboard system right now that (in theory) should be very fast. I'm interested in creating a virtual keyboard frontend for bash. Excuse the following crappy diagram, but I am at work right now---this is the best I could do in a short amount of time without calling attention to myself. :D

example.gif


So, the idea is the you will be doing most of the typing using the A,B,X, and Y buttons. The stick button will function as a spacebar, The L-shoulder button will be backspace, and the R-shoulder button will be tab. Select closes the virtual keyboard, and start is enter. The virtual keyboard layout should only take up a third of the screen.

The 4 button layout in the center of the screen shows the letters you can type. I'm using letter frequency data from the English language to determine the most frequently used letters. The keyboard will be centered around the top 4 most used letters. You can move the control stick left and right to scroll between 4-letter combinations. Letters that are used the least will appear at left and right ends of the list. The two vertical bars show you the set of letters you can access if you move the stick to the left or the right. The top horizontal bar lets you know that you can hit up to access numbers 0-9. Numbers are handled the exact same way as letters, so they are mapped to A,B,X,and Y. The bottom horizontal bar lets you know that you know that you can hit down to access symbols, special characters, and commonly used commands(cd, ls, mkdir, etc.)


My explanation is a little weak, but I really think this will be an interesting project. I'm trying to avoid multi-key combinations. With this system, I'm trying to reduce the amount of stick and button movements needed for typing. I'm in the process of making a prototype under windows.
 
Back
Top