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".
             */
        }
Esempio n. 2
0
        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);
            }
        }