[Vm-dev] SqueakVM help for OLPC
Chris Petsos
chrispetsos at sch.gr
Mon May 21 19:21:27 UTC 2007
Just for the record this is what we have done till now for Unicode support
in the Windows VM...
We've made the application send Unicode chars to the image window and
forward this unicode value to the utf32Code data member with the
following...
--- sqWin32Window.c 2007/05/18 06:04:50 1.1
+++ sqWin32Window.c 2007/05/18 10:26:22
@@ -799,6 +799,9 @@
CreatePrefsMenu();
SetWindowTitle();
SetForegroundWindow(stWindow);
+/* Force Unicode WM_CHAR */
+SetWindowLongW(stWindow,GWL_WNDPROC,GetWindowLong(stWindow,GWL_WNDPROC));
+SetWindowLongW(consoleWindow,GWL_WNDPROC,GetWindowLong(consoleWindow,GWL_WNDPROC));
#ifndef NO_DROP
/* drag and drop needs to be set up on per-window basis */
SetupDragAndDrop();
@@ -1069,7 +1072,7 @@
ctrl = GetKeyState(VK_CONTROL) & 0x8000;
/* now the key code */
virtCode = mapVirtualKey(msg->wParam);
- keyCode = keymap[msg->wParam];
+ keyCode = msg->wParam;
/* press code must differentiate */
switch(msg->message) {
case WM_KEYDOWN:
@@ -1110,14 +1113,14 @@
evt = (sqKeyboardEvent*) sqNextEventPut();
evt->type = EventTypeKeyboard;
evt->timeStamp = msg->time;
- evt->charCode = keyCode;
+ evt->charCode = keymap[keyCode & 0xff];
evt->pressCode = pressCode;
evt->modifiers = 0;
evt->modifiers |= alt ? CommandKeyBit : 0;
evt->modifiers |= shift ? ShiftKeyBit : 0;
evt->modifiers |= ctrl ? CtrlKeyBit : 0;
evt->windowIndex = msg->hwnd == stWindow ? 0 : (int) msg->hwnd;
- evt->utf32Code = 0;
+ evt->utf32Code = keyCode;
/* clean up reserved */
evt->reserved1 = 0;
/* note: several keys are not reported as character events;
In the image side we've created a UnicodeInputInterpreter which is dependent
on this sixth field (the utf32Code in the evtBuf Array) for acquiring the
unicode value with the following method...
--------------------------------------------------------------------------------------------
nextCharFrom: sensor firstEvt: evtBuf
| keyValue |
" Unicode charCode expected as the sixth data member ! "
keyValue := evtBuf sixth.
Transcript show: evtBuf asString; cr.
^ keyValue asCharacter.
--------------------------------------------------------------------------------------------
So this is it...we have unicode charcodes inside the image...
> If we can replace all VMs, that would do. Of course, the image can
> check the VM version so that they can install proper "interpreter"
> (including non-interpreting one for later VMs.)
>
> It should be better to use pre-composed chars for these chars, but
> I'm not entirely sure if it makes sense for all different input
> methods.
If you have any suggestions-modifications that you feel that will help us
avoid problems in the future, they are most welcome!
Right now we trying to load a Unicode font. We've tried your font Yoshiki
(greek.out) but it has some problems. We are having a '?' character along
with every "carriage return"...
The same effect happens when we try to load TrueType fonts... we have a
small "TrueType Box" in the place of '?' :-) .
Any help on how we can properly load a unicode font?
Christos.
More information about the Vm-dev
mailing list