public override bool HitTest(int x, int y, out int controlID, out bool focused) { switch (_buttonState) { case NextButtonStates.Activation: if (Dimmed == false) // let us check if something changed by keyboard input { _buttonState = NextButtonStates.Deaktivation; focused = !Dimmed; controlID = _defaultcontrol; return(true); } if (_imageFocused.HitTest(x, y, out controlID, out focused)) { focused = !Dimmed; controlID = _defaultcontrol; _buttonState = NextButtonStates.Outside; return(true); } return(false); case NextButtonStates.Outside: if (Dimmed == true) // let us check if something changed by keyboard input { _buttonState = NextButtonStates.Activation; focused = !Dimmed; controlID = -1; return(false); } if (!_imageFocused.HitTest(x, y, out controlID, out focused)) { _buttonState = NextButtonStates.Deaktivation; } break; case NextButtonStates.Deaktivation: if (Dimmed == true) // let us check if something changed by keyboard input { _buttonState = NextButtonStates.Activation; focused = !Dimmed; controlID = -1; return(false); } if (_imageFocused.HitTest(x, y, out controlID, out focused)) { GUIMessage msg; if (_exitcontrol == -1) { msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_LOSTFOCUS, _windowId, 0, GetFocusControlId(), 0, 0, null); } else { msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SETFOCUS, _windowId, 0, _exitcontrol, 0, 0, null); } GUIWindow win = GUIWindowManager.GetWindow(_windowId); if (win != null) { win.OnMessage(msg); } controlID = -1; _buttonState = NextButtonStates.Outside2; return(false); } break; case NextButtonStates.Outside2: if (Dimmed == false) // let us check if something changed by keyboard input { _buttonState = NextButtonStates.Deaktivation; focused = !Dimmed; controlID = _defaultcontrol; return(true); } if (!_imageFocused.HitTest(x, y, out controlID, out focused)) { _buttonState = NextButtonStates.Activation; } return(false); } if (base.HitTest(x, y, out controlID, out focused)) { return(true); } int posX = Math.Min(_buttonX, _positionX); int posY = Math.Min(_buttonY, _positionY); int width = Math.Max(_buttonWidth, _width); int height = Math.Max(_buttonHeight, _height); focused = !Dimmed; controlID = GetFocusControlId(); if (controlID == -1) { controlID = _defaultcontrol; } if ((x >= posX) && (x <= posX + width) && (y >= posY) && (y <= posY + height)) { return(true); } return(false); }