Hei all
We were doing a very simple prototype for a cross platform python game (same
code on s60, 770 and desktop) , and at least in the pygame(python + sdl) it
was so simple to make the bitmap solution (even with cap and simbols) take
less then a couple of hours to prototype (not clean coding etc)
Of course I cannot assure that we supported languages like hungarian, or
even our brasilian portuguese, but for the game input was ok and made in
just one day.
So I agree with jacub, if you really need, go and make a simple thing for
you the fits your need. It's not a problem at all.
I had a lot more problems with the DOOM, that needed more visual controls
then a keyboard : / but at least was playable in the end and showed
something :
maybe you don't need a full keyboard =)
http://www.marceloeduardo.com/blog/wp-content/uploads/2007/01/picture-8.png
Together goes the keyboard for the demo in python (you can bring it easily
to C)
Obs : this was a fast prototype of a non-python developer =) so do not look
at with demanding eyes =)
BR
Marcelo Oliveira
INdT - Recife
www.marceloeduardo.com
-
( http://www.marceloeduardo.com/blog/wp-content/uploads/2007/01/2.png )
class KeyBoard:
# Constructor
def __init__(self, people):
self.show = 0
self.shift = 0
self.msg = ""
self.whisper = ""
self.text = 0
self.people = people
self.lower_keys = pygame.image.load("pixmaps/keyboard-lower.png")
self.upper_keys = pygame.image.load("pixmaps/keyboard-upper.png")
self.keymap1 = (("q", "w", "e", "r", "t", "y", "u", "i", "o", "p",
"[", "]", "1", "2", "3"),
("a", "s", "d", "f", "g", "h", "j", "k", "l", ";",
"`", "'", "4", "5", "6"),
("z", "x", "c", "v", "b", "n", "m", ",", ".", "?",
"!", "+", "7", "8", "9"),
(" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "
", " ", "-", "0", "="))
self.keymap2 = (("Q", "W", "E", "R", "T", "Y", "U", "I", "O", "P",
"{", "}", "!", "@", "#"),
("A", "S", "D", "F", "G", "H", "J", "K", "L", ":",
"\"", "/", "$", "%", "^"),
("Z", "X", "C", "V", "B", "N", "M", "<", ">", "?",
"~", "\\", "&", "*", "("),
(" ", " ", " ", " ", " ", " ", " ", " ", " ", " ", "
", " ", "_", ")", "+"))
# Create text
def create_text(self):
if self.msg != "":
self.text = font.render(self.msg, 1, (255, 255, 255))
if self.text.get_width() > 484:
self.text = self.text.subsurface(self.text.get_width() -
484, 0, 484, self.text.get_height())
else:
self.text = 0
def set_whisper(self, name):
self.show = 1
self.whisper = name
# Update keyboard state
def update(self, event):
if event.type == KEYDOWN and event.key == K_RETURN:
self.whisper = ""
self.show = not self.show
elif self.show and event.type == MOUSEBUTTONDOWN:
x, y = pygame.mouse.get_pos()
if x >= 7 and x < 472 and y >= 347 and y < 471:
x = (x - 7) / 31
y = (y - 347) / 31
if x == 0 and y == 3:
self.shift = not self.shift
else:
if self.shift:
self.msg += self.keymap2[y][x]
else:
self.msg += self.keymap1[y][x]
self.create_text()
elif x >= 472 and x < 505 and y >= 347 and y < 378:
self.msg = self.msg[:-1]
self.create_text()
elif x >= 472 and x < 505 and y >= 378 and y < 441 and
self.msg.strip() != "":
self.people.msg_me(self.msg, self.whisper)
self.show = 0
self.text = 0
self.msg = ""
self.whisper = ""
elif x >= 472 and x < 505 and y >= 441 and y < 471:
self.whisper = ""
self.show = not self.show
# Draw keyboard
def draw(self):
if self.show:
if self.shift:
map.blit(self.upper_keys, (0, 302))
else:
map.blit(self.lower_keys, (0, 302))
if self.text:
map.blit(self.text, (14, 315))
On Jan 26, 2007, at 6:09 PM, Kees Jongenburger wrote:
On 1/26/07, [EMAIL PROTECTED] <[EMAIL PROTECTED]> wrote:
Kees Jongenburger wrote:
I have been asking
around but did not find a simple pluggable virtual keyboard for sdl.
This is IMHO a very simple problem. Just a quick guess: You have to draw a
nice keyboard,
export it to BMP and load it with SDL_LoadBMP(). Then you display (blit) it
with
SDL_BlitSurface(). Don't forget to update the screen with SDL_UpdateRects().
Then you can
SDL_WaitEvent() to wait for SDL_MOUSEBUTTONDOWN events. You just need a
table
which contains the x and y coords of our virtual keyboard to decode coords
to the key
pressed. Of course you should handle shift, delete and someth