various fixes , clean up, Numlock taken into account

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8466 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval
2004-07-25 20:43:57 +00:00
parent b192cc3351
commit d1717955dc
4 changed files with 202 additions and 222 deletions
+64 -56
View File
@@ -51,41 +51,6 @@ print_key( char *chars, int32 offset )
} }
void
Keymap::GetChars(uint32 keyCode, uint32 modifiers, char **chars, int32 *numBytes)
{
int32 offset = 0;
switch (modifiers & 0xff) {
case B_SHIFT_KEY: offset = fKeys.shift_map[keyCode]; break;
case B_CAPS_LOCK: offset = fKeys.caps_map[keyCode]; break;
case B_CAPS_LOCK|B_SHIFT_KEY: offset = fKeys.caps_shift_map[keyCode]; break;
case B_OPTION_KEY: offset = fKeys.option_map[keyCode]; break;
case B_OPTION_KEY|B_SHIFT_KEY: offset = fKeys.option_shift_map[keyCode]; break;
case B_OPTION_KEY|B_CAPS_LOCK: offset = fKeys.option_caps_map[keyCode]; break;
case B_OPTION_KEY|B_SHIFT_KEY|B_CAPS_LOCK: offset = fKeys.option_caps_shift_map[keyCode]; break;
case B_CONTROL_KEY: offset = fKeys.control_map[keyCode]; break;
default: offset = fKeys.normal_map[keyCode]; break;
}
*numBytes = fChars[offset++];
switch( *numBytes ) {
case 0:
// Not mapped
*chars = NULL;
break;
default:
// 1-, 2-, 3-, or 4-byte UTF-8 character
{
char *str = *chars = new char[*numBytes + 1];
strncpy(str, &(fChars[offset]), *numBytes );
str[*numBytes] = 0;
}
break;
}
}
void void
Keymap::DumpKeymap() Keymap::DumpKeymap()
{ {
@@ -109,6 +74,13 @@ Keymap::DumpKeymap()
} }
/*
file format in big endian :
struct key_map
uint32 size of following charset
charset (offsets go into this with size of character followed by character)
*/
// we load a map from a file
status_t status_t
Keymap::Load(entry_ref &ref) Keymap::Load(entry_ref &ref)
{ {
@@ -141,6 +113,7 @@ Keymap::Load(entry_ref &ref)
} }
// we save a map from a file
status_t status_t
Keymap::Save(entry_ref &ref) Keymap::Save(entry_ref &ref)
{ {
@@ -177,6 +150,9 @@ Keymap::Save(entry_ref &ref)
} }
/* we need to know if a key is a modifier key to choose
a valid key when several are pressed together
*/
bool bool
Keymap::IsModifierKey(uint32 keyCode) Keymap::IsModifierKey(uint32 keyCode)
{ {
@@ -196,13 +172,14 @@ Keymap::IsModifierKey(uint32 keyCode)
} }
// tell if a key is a dead key, needed for draw a dead key
uint8 uint8
Keymap::IsDeadKey(uint32 keyCode, uint32 modifiers) Keymap::IsDeadKey(uint32 keyCode, uint32 modifiers)
{ {
int32 offset; int32 offset;
uint32 tableMask = 0; uint32 tableMask = 0;
switch (modifiers & 0xff) { switch (modifiers & 0xcf) {
case B_SHIFT_KEY: offset = fKeys.shift_map[keyCode]; tableMask = B_SHIFT_TABLE; break; case B_SHIFT_KEY: offset = fKeys.shift_map[keyCode]; tableMask = B_SHIFT_TABLE; break;
case B_CAPS_LOCK: offset = fKeys.caps_map[keyCode]; tableMask = B_CAPS_TABLE; break; case B_CAPS_LOCK: offset = fKeys.caps_map[keyCode]; tableMask = B_CAPS_TABLE; break;
case B_CAPS_LOCK|B_SHIFT_KEY: offset = fKeys.caps_shift_map[keyCode]; tableMask = B_CAPS_SHIFT_TABLE; break; case B_CAPS_LOCK|B_SHIFT_KEY: offset = fKeys.caps_shift_map[keyCode]; tableMask = B_CAPS_SHIFT_TABLE; break;
@@ -261,6 +238,7 @@ Keymap::IsDeadKey(uint32 keyCode, uint32 modifiers)
} }
// tell if a key is a dead second key, needed for draw a dead second key
bool bool
Keymap::IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey) Keymap::IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey)
{ {
@@ -269,7 +247,7 @@ Keymap::IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey)
int32 offset; int32 offset;
switch (modifiers & 0xff) { switch (modifiers & 0xcf) {
case B_SHIFT_KEY: offset = fKeys.shift_map[keyCode]; break; case B_SHIFT_KEY: offset = fKeys.shift_map[keyCode]; break;
case B_CAPS_LOCK: offset = fKeys.caps_map[keyCode]; break; case B_CAPS_LOCK: offset = fKeys.caps_map[keyCode]; break;
case B_CAPS_LOCK|B_SHIFT_KEY: offset = fKeys.caps_shift_map[keyCode]; break; case B_CAPS_LOCK|B_SHIFT_KEY: offset = fKeys.caps_shift_map[keyCode]; break;
@@ -286,10 +264,6 @@ Keymap::IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey)
if (!numBytes) if (!numBytes)
return false; return false;
char chars[4];
strncpy(chars, &(fChars[offset+1]), numBytes );
chars[numBytes] = 0;
int32* deadOffsets[] = { int32* deadOffsets[] = {
fKeys.acute_dead_key, fKeys.acute_dead_key,
fKeys.grave_dead_key, fKeys.grave_dead_key,
@@ -302,30 +276,49 @@ Keymap::IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey)
for (int32 i=0; i<32; i++) { for (int32 i=0; i<32; i++) {
if (offset == deadOffset[i]) if (offset == deadOffset[i])
return i+1; return true;
uint32 deadNumBytes = fChars[deadOffset[i]+1]; uint32 deadNumBytes = fChars[deadOffset[i]];
if (!deadNumBytes) if (!deadNumBytes)
continue; continue;
if (strncmp(chars, &(fChars[deadOffset[i]]), deadNumBytes ) == 0) { if (strncmp(&(fChars[offset+1]), &(fChars[deadOffset[i]+1]), deadNumBytes ) == 0)
return true; return true;
}
i++; i++;
} }
return false; return false;
} }
// get the char for a key given modifiers and active dead key
void void
Keymap::DeadKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** chars, int32* numBytes) Keymap::GetChars(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** chars, int32* numBytes)
{ {
int32 offset; int32 offset;
*numBytes = 0; *numBytes = 0;
*chars = NULL;
switch (modifiers & 0xff) { // here we take NUMLOCK into account
if (modifiers & B_NUM_LOCK)
switch (keyCode) {
case 0x37:
case 0x38:
case 0x39:
case 0x48:
case 0x49:
case 0x4a:
case 0x58:
case 0x59:
case 0x5a:
case 0x64:
case 0x65:
modifiers ^= B_SHIFT_KEY;
}
// here we choose the right map given the modifiers
switch (modifiers & 0xcf) {
case B_SHIFT_KEY: offset = fKeys.shift_map[keyCode]; break; case B_SHIFT_KEY: offset = fKeys.shift_map[keyCode]; break;
case B_CAPS_LOCK: offset = fKeys.caps_map[keyCode]; break; case B_CAPS_LOCK: offset = fKeys.caps_map[keyCode]; break;
case B_CAPS_LOCK|B_SHIFT_KEY: offset = fKeys.caps_shift_map[keyCode]; break; case B_CAPS_LOCK|B_SHIFT_KEY: offset = fKeys.caps_shift_map[keyCode]; break;
@@ -337,15 +330,13 @@ Keymap::DeadKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** ch
default: offset = fKeys.normal_map[keyCode]; break; default: offset = fKeys.normal_map[keyCode]; break;
} }
uint32 numBytes2 = fChars[offset]; // here we get the char size
*numBytes = fChars[offset];
if (!numBytes2) if (!*numBytes)
return; return;
char chars2[4]; // here we take an potential active dead key
strncpy(chars2, &(fChars[offset+1]), numBytes2 );
chars2[numBytes2] = 0;
int32 *dead_key; int32 *dead_key;
switch(activeDeadKey) { switch(activeDeadKey) {
case 1: dead_key = fKeys.acute_dead_key; break; case 1: dead_key = fKeys.acute_dead_key; break;
@@ -353,11 +344,20 @@ Keymap::DeadKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** ch
case 3: dead_key = fKeys.circumflex_dead_key; break; case 3: dead_key = fKeys.circumflex_dead_key; break;
case 4: dead_key = fKeys.dieresis_dead_key; break; case 4: dead_key = fKeys.dieresis_dead_key; break;
case 5: dead_key = fKeys.tilde_dead_key; break; case 5: dead_key = fKeys.tilde_dead_key; break;
//default: return; default:
{
// if not dead, we copy and return the char
char *str = *chars = new char[*numBytes + 1];
strncpy(str, &(fChars[offset+1]), *numBytes );
str[*numBytes] = 0;
return;
}
} }
// if dead key, we search for our current offset char in the dead key offset table
// string comparison is needed
for (int32 i=0; i<32; i++) { for (int32 i=0; i<32; i++) {
if (strncmp(chars2, &(fChars[dead_key[i]+1]), numBytes2 ) == 0) { if (strncmp(&(fChars[offset+1]), &(fChars[dead_key[i]+1]), *numBytes ) == 0) {
*numBytes = fChars[dead_key[i+1]]; *numBytes = fChars[dead_key[i+1]];
switch( *numBytes ) { switch( *numBytes ) {
@@ -374,14 +374,22 @@ Keymap::DeadKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** ch
} }
break; break;
} }
break; return;
} }
i++; i++;
} }
// if not found we return the current char mapped
*chars = new char[*numBytes + 1];
strncpy(*chars, &(fChars[offset+1]), *numBytes );
(*chars)[*numBytes] = 0;
} }
status_t _restore_key_map_(); status_t _restore_key_map_();
// we make our input server use the map in /boot/home/config/settings/Keymap
status_t status_t
Keymap::Use() Keymap::Use()
{ {
+1 -2
View File
@@ -25,11 +25,10 @@ public:
status_t Load(entry_ref &ref); status_t Load(entry_ref &ref);
status_t Save(entry_ref &ref); status_t Save(entry_ref &ref);
void DumpKeymap(); void DumpKeymap();
void GetChars(uint32 keyCode, uint32 modifiers, char **chars, int32 *numBytes);
bool IsModifierKey(uint32 keyCode); bool IsModifierKey(uint32 keyCode);
uint8 IsDeadKey(uint32 keyCode, uint32 modifiers); uint8 IsDeadKey(uint32 keyCode, uint32 modifiers);
bool IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey); bool IsDeadSecondKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey);
void DeadKey(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** chars, int32* numBytes); void GetChars(uint32 keyCode, uint32 modifiers, uint8 activeDeadKey, char** chars, int32* numBytes);
status_t Use(); status_t Use();
private: private:
char *fChars; char *fChars;
+133 -161
View File
@@ -419,6 +419,8 @@ MapView::MapView(BRect rect, const char *name, Keymap* keymap)
fCurrentMap(keymap), fCurrentMap(keymap),
fCurrentMouseKey(0) fCurrentMouseKey(0)
{ {
SetViewColor(B_TRANSPARENT_COLOR);
BRect frameRect = BRect(14, 16, Bounds().right-12, 30); BRect frameRect = BRect(14, 16, Bounds().right-12, 30);
BRect textRect = frameRect; BRect textRect = frameRect;
textRect.OffsetTo(B_ORIGIN); textRect.OffsetTo(B_ORIGIN);
@@ -430,362 +432,470 @@ MapView::MapView(BRect rect, const char *name, Keymap* keymap)
AddChild(fTextView); AddChild(fTextView);
for (uint32 j = 0; j<128; j++)
fKeysToDraw[j] = false;
BRect keyRect = BRect(11,50,29,68); BRect keyRect = BRect(11,50,29,68);
int32 i = 1; uint32 i = 1;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
// Fx keys // Fx keys
i++; i++;
keyRect.OffsetBySelf(36,0); keyRect.OffsetBySelf(36,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(27,0); keyRect.OffsetBySelf(27,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(27,0); keyRect.OffsetBySelf(27,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
// Pause, PrintScreen, ... // Pause, PrintScreen, ...
i++; i++;
keyRect.OffsetBySelf(35,0); keyRect.OffsetBySelf(35,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
// 1st line : numbers and backspace // 1st line : numbers and backspace
i++; i++;
keyRect = BRect(11,78,29,96); keyRect = BRect(11,78,29,96);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
keyRect.right += 18; keyRect.right += 18;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
keyRect.left += 18; keyRect.left += 18;
// Insert, pg up ... // Insert, pg up ...
i++; i++;
keyRect.OffsetBySelf(35,0); keyRect.OffsetBySelf(35,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
// 2nd line : tab and azerty ... // 2nd line : tab and azerty ...
i = 0x26; i = 0x26;
keyRect = BRect(11,96,38,114); keyRect = BRect(11,96,38,114);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(27,0); keyRect.OffsetBySelf(27,0);
keyRect.right -= 9; keyRect.right -= 9;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
keyRect.right += 9; keyRect.right += 9;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
keyRect.left += 9; keyRect.left += 9;
// Suppr, pg down ... // Suppr, pg down ...
i++; i++;
keyRect.OffsetBySelf(35,0); keyRect.OffsetBySelf(35,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
// 3rd line : caps and qsdfg ... // 3rd line : caps and qsdfg ...
i = 0x3b; i = 0x3b;
keyRect = BRect(11,114,47,132); keyRect = BRect(11,114,47,132);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(36,0); keyRect.OffsetBySelf(36,0);
keyRect.right -= 18; keyRect.right -= 18;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
keyRect.right += 18; keyRect.right += 18;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
keyRect.left += 18; keyRect.left += 18;
// 4th line : shift and wxcv ... // 4th line : shift and wxcv ...
i = 0x4b; i = 0x4b;
keyRect = BRect(11,132,56,150); keyRect = BRect(11,132,56,150);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(45,0); keyRect.OffsetBySelf(45,0);
keyRect.right -= 27; keyRect.right -= 27;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
keyRect.right += 27; keyRect.right += 27;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
keyRect.left += 27; keyRect.left += 27;
//5th line : Ctrl, Alt, Space ... //5th line : Ctrl, Alt, Space ...
i = 0x5c; i = 0x5c;
keyRect = BRect(11,150,38,168); keyRect = BRect(11,150,38,168);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(27,0); keyRect.OffsetBySelf(27,0);
keyRect.OffsetBySelf(26,0); keyRect.OffsetBySelf(26,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(27,0); keyRect.OffsetBySelf(27,0);
keyRect.right += 92; keyRect.right += 92;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.right -= 92; keyRect.right -= 92;
keyRect.OffsetBySelf(92,0); keyRect.OffsetBySelf(92,0);
keyRect.OffsetBySelf(27,0); keyRect.OffsetBySelf(27,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(26,0); keyRect.OffsetBySelf(26,0);
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
// Arrows // Arrows
i++; i++;
keyRect = BRect(298,150,316,168); keyRect = BRect(298,150,316,168);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i = 0x57; i = 0x57;
keyRect.OffsetBySelf(-18,-18); keyRect.OffsetBySelf(-18,-18);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
// numkeys // numkeys
i = 0x22; i = 0x22;
keyRect = BRect(369,78,387,96); keyRect = BRect(369,78,387,96);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i = 0x37; i = 0x37;
keyRect.OffsetBySelf(-54, 18); keyRect.OffsetBySelf(-54, 18);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
keyRect.bottom += 18; keyRect.bottom += 18;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i = 0x48; i = 0x48;
keyRect.bottom -= 18; keyRect.bottom -= 18;
keyRect.OffsetBySelf(-54, 18); keyRect.OffsetBySelf(-54, 18);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i = 0x58; i = 0x58;
keyRect.OffsetBySelf(-36, 18); keyRect.OffsetBySelf(-36, 18);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.OffsetBySelf(18,0); keyRect.OffsetBySelf(18,0);
keyRect.bottom += 18; keyRect.bottom += 18;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i = 0x64; i = 0x64;
keyRect.bottom -= 18; keyRect.bottom -= 18;
keyRect.OffsetBySelf(-54, 18); keyRect.OffsetBySelf(-54, 18);
keyRect.right += 18; keyRect.right += 18;
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
i++; i++;
keyRect.right -= 18; keyRect.right -= 18;
keyRect.OffsetBySelf(36,0); keyRect.OffsetBySelf(36,0);
fKeysRect[i] = keyRect; fKeysRect[i] = keyRect;
fKeysToDraw[i] = true;
for (uint8 j = 0; j<128; j++) for (uint32 j = 0; j<128; j++)
fKeysVertical[j] = false; fKeysVertical[j] = false;
fKeysVertical[0x5e] = true; fKeysVertical[0x5e] = true;
fActiveDeadKey = 0; fActiveDeadKey = 0;
for (int8 j=0; j<16; j++)
fOldKeyInfo.key_states[j] = 0;
fOldKeyInfo.modifiers = 0;
} }
@@ -829,128 +939,24 @@ MapView::Draw(BRect rect)
StrokeLine(BPoint(r.right-9, r.bottom), BPoint(r.right-2, r.bottom)); StrokeLine(BPoint(r.right-9, r.bottom), BPoint(r.right-2, r.bottom));
StrokeLine(BPoint(r.right, r.bottom-9), BPoint(r.right, r.bottom-2)); StrokeLine(BPoint(r.right, r.bottom-9), BPoint(r.right, r.bottom-2));
int32 i = 1; InvalidateKeys();
// Esc key // Esc key
DrawKey(i);
DrawBorder(BRect(10,49,30,69)); DrawBorder(BRect(10,49,30,69));
// Fx keys // Fx keys
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawBorder(BRect(46, 49, 120, 69)); DrawBorder(BRect(46, 49, 120, 69));
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawBorder(BRect(127, 49, 201, 69)); DrawBorder(BRect(127, 49, 201, 69));
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawBorder(BRect(208, 49, 282, 69)); DrawBorder(BRect(208, 49, 282, 69));
// Pause, PrintScreen, ... // Pause, PrintScreen, ...
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawBorder(BRect(297, 49, 353, 69)); DrawBorder(BRect(297, 49, 353, 69));
// 1st line : numbers and backspace
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
// Insert, pg up ... // Insert, pg up ...
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawBorder(BRect(297, 77, 353, 115)); DrawBorder(BRect(297, 77, 353, 115));
// 2nd line : tab and azerty ...
i = 0x26;
DrawKey(i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
// Suppr, pg down ...
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
// 3rd line : caps and qsdfg ...
i = 0x3b;
DrawKey(i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
// 4th line : shift and wxcv ...
i = 0x4b;
DrawKey(i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
//5th line : Ctrl, Alt, Space ...
i = 0x5c;
DrawKey(i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
SetHighColor(80,80,80); SetHighColor(80,80,80);
StrokeLine(BPoint(10,169), BPoint(10,77)); StrokeLine(BPoint(10,169), BPoint(10,77));
StrokeLine(BPoint(282,77)); StrokeLine(BPoint(282,77));
@@ -971,13 +977,6 @@ MapView::Draw(BRect rect)
StrokeLine(BPoint(11,169)); StrokeLine(BPoint(11,169));
// Arrows // Arrows
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
i = 0x57;
DrawKey(i);
SetHighColor(80,80,80); SetHighColor(80,80,80);
StrokeLine(BPoint(297,169), BPoint(297,149)); StrokeLine(BPoint(297,169), BPoint(297,149));
StrokeLine(BPoint(315,149)); StrokeLine(BPoint(315,149));
@@ -990,33 +989,6 @@ MapView::Draw(BRect rect)
StrokeLine(BPoint(298,169)); StrokeLine(BPoint(298,169));
// numkeys // numkeys
i = 0x22;
DrawKey(i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
i = 0x37;
DrawKey(i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
i = 0x48;
DrawKey(i);
DrawKey(++i);
DrawKey(++i);
i = 0x58;
DrawKey(i);
DrawKey(++i);
DrawKey(++i);
DrawKey(++i);
i = 0x64;
DrawKey(i);
DrawKey(++i);
DrawBorder(BRect(368, 77, 442, 169)); DrawBorder(BRect(368, 77, 442, 169));
// lights // lights
@@ -1107,6 +1079,15 @@ MapView::Draw(BRect rect)
} }
void
MapView::InvalidateKeys()
{
for (uint32 i=0; i<128; i++)
if (fKeysToDraw[i+1])
DrawKey(i+1);
}
void void
MapView::DrawKey(uint32 keyCode) MapView::DrawKey(uint32 keyCode)
{ {
@@ -1253,7 +1234,7 @@ MapView::DrawKey(uint32 keyCode)
char *str; char *str;
int32 numBytes; int32 numBytes;
fCurrentMap->GetChars(keyCode, fOldKeyInfo.modifiers, &str, &numBytes); fCurrentMap->GetChars(keyCode, fOldKeyInfo.modifiers, fActiveDeadKey, &str, &numBytes);
if (str) { if (str) {
bool hasGlyphs; bool hasGlyphs;
if (deadKey>0) { if (deadKey>0) {
@@ -1331,8 +1312,6 @@ MapView::MessageReceived(BMessage *msg)
const uint8 *states; const uint8 *states;
ssize_t size; ssize_t size;
//msg->PrintToStream();
if ((msg->FindData("states", 'UBYT', (const void **)&states, &size)!=B_OK) if ((msg->FindData("states", 'UBYT', (const void **)&states, &size)!=B_OK)
|| (msg->FindInt32("modifiers", (int32 *)&info.modifiers)!=B_OK)) || (msg->FindInt32("modifiers", (int32 *)&info.modifiers)!=B_OK))
break; break;
@@ -1341,7 +1320,7 @@ MapView::MessageReceived(BMessage *msg)
fOldKeyInfo.modifiers = info.modifiers; fOldKeyInfo.modifiers = info.modifiers;
for (int8 i=0; i<16; i++) for (int8 i=0; i<16; i++)
fOldKeyInfo.key_states[i] = states[i]; fOldKeyInfo.key_states[i] = states[i];
Invalidate(); InvalidateKeys();
} else { } else {
int32 keyCode = -1; int32 keyCode = -1;
@@ -1357,12 +1336,6 @@ MapView::MessageReceived(BMessage *msg)
} }
if (fActiveDeadKey) {
}
//
if (keyCode<0) if (keyCode<0)
for (int8 i=0; i<16; i++) { for (int8 i=0; i<16; i++) {
uint8 stbits = states[i]; uint8 stbits = states[i];
@@ -1380,30 +1353,27 @@ MapView::MessageReceived(BMessage *msg)
if (Window()->IsActive() if (Window()->IsActive()
&& msg->what == B_KEY_DOWN) { && msg->what == B_KEY_DOWN) {
fTextView->MakeFocus(); fTextView->MakeFocus();
char *str; char *str = NULL;
int32 numBytes; int32 numBytes;
if (fActiveDeadKey) { if (fActiveDeadKey) {
fCurrentMap->DeadKey(keyCode, fOldKeyInfo.modifiers, fActiveDeadKey, &str, &numBytes); fCurrentMap->GetChars(keyCode, fOldKeyInfo.modifiers, fActiveDeadKey, &str, &numBytes);
if (numBytes>0) { if (numBytes>0) {
fTextView->FakeKeyDown(str, numBytes); fTextView->FakeKeyDown(str, numBytes);
} }
fActiveDeadKey = 0; fActiveDeadKey = 0;
Invalidate(); InvalidateKeys();
} else { } else {
fCurrentMap->GetChars(keyCode, fOldKeyInfo.modifiers, &str, &numBytes); fCurrentMap->GetChars(keyCode, fOldKeyInfo.modifiers, fActiveDeadKey, &str, &numBytes);
fActiveDeadKey = fCurrentMap->IsDeadKey(keyCode, fOldKeyInfo.modifiers); fActiveDeadKey = fCurrentMap->IsDeadKey(keyCode, fOldKeyInfo.modifiers);
if (fActiveDeadKey) if (fActiveDeadKey)
Invalidate(); InvalidateKeys();
else if (numBytes>0) { else if (numBytes>0) {
fTextView->FakeKeyDown(str, numBytes); fTextView->FakeKeyDown(str, numBytes);
} }
} }
delete str; delete str;
} }
} }
break; break;
} }
default: default:
@@ -1440,7 +1410,7 @@ MapView::MouseDown(BPoint point)
DrawKey(fCurrentMouseKey); DrawKey(fCurrentMouseKey);
char *str = NULL; char *str = NULL;
int32 numBytes; int32 numBytes;
fCurrentMap->GetChars(fCurrentMouseKey, fOldKeyInfo.modifiers, &str, &numBytes); fCurrentMap->GetChars(fCurrentMouseKey, fOldKeyInfo.modifiers, fActiveDeadKey, &str, &numBytes);
if (numBytes>0) { if (numBytes>0) {
fTextView->FakeKeyDown(str, numBytes); fTextView->FakeKeyDown(str, numBytes);
delete str; delete str;
@@ -1454,6 +1424,7 @@ MapView::MouseDown(BPoint point)
} }
} }
void void
MapView::MouseUp(BPoint point) MapView::MouseUp(BPoint point)
{ {
@@ -1464,6 +1435,7 @@ MapView::MouseUp(BPoint point)
DrawKey(value); DrawKey(value);
} }
void void
MapView::MouseMoved(BPoint point, uint32 transit, const BMessage *msg) MapView::MouseMoved(BPoint point, uint32 transit, const BMessage *msg)
{ {
@@ -1476,7 +1448,7 @@ MapView::MouseMoved(BPoint point, uint32 transit, const BMessage *msg)
DrawKey(fCurrentMouseKey); DrawKey(fCurrentMouseKey);
char *str = NULL; char *str = NULL;
int32 numBytes; int32 numBytes;
fCurrentMap->GetChars(fCurrentMouseKey, fOldKeyInfo.modifiers, &str, &numBytes); fCurrentMap->GetChars(fCurrentMouseKey, fOldKeyInfo.modifiers, fActiveDeadKey, &str, &numBytes);
if (numBytes>0) { if (numBytes>0) {
fTextView->FakeKeyDown(str, numBytes); fTextView->FakeKeyDown(str, numBytes);
delete str; delete str;
+2 -1
View File
@@ -45,11 +45,12 @@ public:
void MouseDown(BPoint point); void MouseDown(BPoint point);
void MouseUp(BPoint point); void MouseUp(BPoint point);
void MouseMoved(BPoint point, uint32 transit, const BMessage *msg); void MouseMoved(BPoint point, uint32 transit, const BMessage *msg);
void InvalidateKeys();
private: private:
key_info fOldKeyInfo; key_info fOldKeyInfo;
BRect fKeysRect[128]; BRect fKeysRect[128];
bool fKeysVertical[128]; bool fKeysVertical[128];
bool fKeysToDraw[128];
uint8 fKeyState[16]; uint8 fKeyState[16];
BFont fCurrentFont; BFont fCurrentFont;