void Data_DataChanged(object sender, EventArgs e) { List <KeyBase> keysDown = new List <KeyBase>(); for (int column = 0; column < Hardware.Keyboard.NumColumns; column++) { byte blockedKeyMask = XkeysRaw.Data.BlockedKeysMask[column]; byte keyCode = (byte)(XkeysRaw.Data.LastKeyCode[column] & (255 - blockedKeyMask)); if (keyCode == 0) { continue; } for (int row = 0; row < Hardware.Keyboard.NumRows; row++) { if ((keyCode & (byte)Math.Pow(2, row)) != 0) { KeyBase key = xkeyLayout.GetKey(column, row); if (!keysDown.Contains(key)) { keysDown.Add(key); } } } } OnXkeyPressed(keysDown, xkeyLayout.GetCodeStr()); /* * 3. Set a timer for about 500ms and when it fires check the data again to make sure the key isn't "stuck". */ }
void DrawKey(Graphics graphics, int columnIndex, int rowIndex, byte keyCode, int blockedKeyMask, KeyLayout xkeyLayout, KeyGroupType keyType, bool isFocused) { int mask = (int)Math.Round(Math.Pow(2, rowIndex)); if (Hardware.Keyboard.IsValidKey(columnIndex, rowIndex)) { bool isSelected; string keyName = string.Empty; bool blockOverride = false; if (xkeyLayout != null) { isSelected = xkeyLayout.IsSelected(columnIndex, rowIndex); keyName = xkeyLayout.GetKeyName(columnIndex, rowIndex); Key key = xkeyLayout.GetKey(columnIndex, rowIndex) as Key; if (key != null) { blockOverride = key.IsBlocked; } } else { isSelected = false; } if ((mask & keyCode) == mask) { if (blockOverride || (mask & blockedKeyMask) == mask) { DrawBlockedKey(graphics, columnIndex, rowIndex, keyType, isSelected); } else { DrawKeyDown(graphics, columnIndex, rowIndex, keyType, isSelected, keyName, isFocused); } } else if (blockOverride) { DrawBlockedKey(graphics, columnIndex, rowIndex, keyType, isSelected); } else { foreach (KeyBase selectedKey in selectedKeys) { if (columnIndex == selectedKey.Column && rowIndex == selectedKey.Row) { DrawSelectedKey(graphics, columnIndex, rowIndex, keyType, isSelected, keyName); return; } } DrawKeyUp(graphics, columnIndex, rowIndex, keyType, isSelected, keyName); } } }
private void pnlKeyPreview_MouseMove(object sender, MouseEventArgs e) { // TODO: Fix this so tool tips over the layout keys actually work. int row; int column; if (xkeysPainter.IsHit(e.X, e.Y, out column, out row)) { KeyBase key = xkeyLayout.GetKey(column, row); if (key != lastHoverKey) { lastHoverKey = key; if (key != null) { toolTip1.SetToolTip(pnlKeyPreview, key.Name); } } } else { toolTip1.SetToolTip(pnlKeyPreview, null); } }