Example #1
0
void WzMainWindow::inputMethodEvent(QInputMethodEvent *event)
{
	// Foward all "committed" characters. Should be more advanced than that, but better than nothing.
	for (int i = 0; i < event->commitString().size(); ++i)
	{
		inputAddBuffer(' ', event->commitString()[i].unicode());
	}
	QWidget::inputMethodEvent(event);
}
Example #2
0
/*!
 * Handle text events (if we were to use SDL2)
*/
void inputhandleText(SDL_TextInputEvent *Tevent)
{
	size_t *newtextsize = NULL;
	int size = 	SDL_strlen(Tevent->text);
	if (size)
	{
		if (utf8Buf)
		{
			// clean up memory from last use.
			free(utf8Buf);
			utf8Buf = NULL;
		}
		utf8Buf = UTF8toUTF32(Tevent->text, newtextsize);
		debug(LOG_INPUT, "Keyboard: text input \"%s\"", Tevent->text);
		inputAddBuffer(CurrentKey, *utf8Buf);
		if (SDL_strlen(text) + SDL_strlen(Tevent->text) < sizeof(text))
		{
			SDL_strlcat(text, Tevent->text, sizeof(text));
		}
		debug(LOG_INPUT, "adding text inputed: %s, to string [%s]", Tevent->text, text);
	}
}
Example #3
0
void WzMainWindow::realHandleKeyEvent(QKeyEvent *event, bool pressed)
{
	unsigned int lastKey;
	bool isKeypad = event->modifiers() & Qt::KeypadModifier;

	switch (event->text().size())
	{
		case 0:
			debug(LOG_INPUT, "Key%s 0x%04X, isKeypad=%d", pressed ? "Down" : "Up  ", event->key(), isKeypad);
		case 1:
			debug(LOG_INPUT, "Key%s 0x%04X, isKeypad=%d, 0x%04X", pressed ? "Down" : "Up  ", event->key(), isKeypad, event->text().unicode()[0].unicode());
			break;
		case 2:
			debug(LOG_INPUT, "Key%s 0x%04X, isKeypad=%d, 0x%04X, 0x%04X", pressed ? "Down" : "Up  ", event->key(), isKeypad, event->text().unicode()[0].unicode(), event->text().unicode()[1].unicode());
			break;
		case 3:
			debug(LOG_INPUT, "Key%s 0x%04X, isKeypad=%d, 0x%04X, 0x%04X, ...", pressed ? "Down" : "Up  ", event->key(), isKeypad, event->text().unicode()[0].unicode(), event->text().unicode()[1].unicode());
			break;
	}

	if (!isKeypad)
	{
		switch (event->key())
		{
			case Qt::Key_Shift              :	lastKey = setKey(KEY_LSHIFT, pressed); break;

			case Qt::Key_Control            :	lastKey = setKey(KEY_LCTRL, pressed); break;

			case Qt::Key_Alt                :	lastKey = setKey(KEY_LALT, pressed); break;
			case Qt::Key_AltGr              :	lastKey = setKey(KEY_RALT, pressed); break;

			case Qt::Key_Meta               :	lastKey = setKey(KEY_LMETA, pressed); break;

			case Qt::Key_Escape             :	lastKey = setKey(KEY_ESC, pressed); break;
			case Qt::Key_Backspace          :	lastKey = setKey(KEY_BACKSPACE, pressed); break;
			case Qt::Key_QuoteLeft          :	lastKey = setKey(KEY_BACKQUOTE, pressed); break;
			case Qt::Key_1                  :	lastKey = setKey(KEY_1, pressed); break;
			case Qt::Key_2                  :	lastKey = setKey(KEY_2, pressed); break;
			case Qt::Key_3                  :	lastKey = setKey(KEY_3, pressed); break;
			case Qt::Key_4                  :	lastKey = setKey(KEY_4, pressed); break;
			case Qt::Key_5                  :	lastKey = setKey(KEY_5, pressed); break;
			case Qt::Key_6                  :	lastKey = setKey(KEY_6, pressed); break;
			case Qt::Key_7                  :	lastKey = setKey(KEY_7, pressed); break;
			case Qt::Key_8                  :	lastKey = setKey(KEY_8, pressed); break;
			case Qt::Key_9                  :	lastKey = setKey(KEY_9, pressed); break;
			case Qt::Key_0                  :	lastKey = setKey(KEY_0, pressed); break;
			case Qt::Key_Minus              :	lastKey = setKey(KEY_MINUS, pressed); break;
			case Qt::Key_Equal              :	lastKey = setKey(KEY_EQUALS, pressed); break;
			case Qt::Key_Backtab:
			case Qt::Key_Tab                :	lastKey = setKey(KEY_TAB, pressed); break;
			case Qt::Key_Q                  :	lastKey = setKey(KEY_Q, pressed); break;
			case Qt::Key_W                  :	lastKey = setKey(KEY_W, pressed); break;
			case Qt::Key_E                  :	lastKey = setKey(KEY_E, pressed); break;
			case Qt::Key_R                  :	lastKey = setKey(KEY_R, pressed); break;
			case Qt::Key_T                  :	lastKey = setKey(KEY_T, pressed); break;
			case Qt::Key_Y                  :	lastKey = setKey(KEY_Y, pressed); break;
			case Qt::Key_U                  :	lastKey = setKey(KEY_U, pressed); break;
			case Qt::Key_I                  :	lastKey = setKey(KEY_I, pressed); break;
			case Qt::Key_O                  :	lastKey = setKey(KEY_O, pressed); break;
			case Qt::Key_P                  :	lastKey = setKey(KEY_P, pressed); break;
			case Qt::Key_BracketLeft        :	lastKey = setKey(KEY_LBRACE, pressed); break;
			case Qt::Key_BracketRight       :	lastKey = setKey(KEY_RBRACE, pressed); break;
			case Qt::Key_Enter              :	lastKey = setKey(KEY_RETURN, pressed); break;
			case Qt::Key_Return             :	lastKey = setKey(KEY_RETURN, pressed); break;
			case Qt::Key_A                  :	lastKey = setKey(KEY_A, pressed); break;
			case Qt::Key_S                  :	lastKey = setKey(KEY_S, pressed); break;
			case Qt::Key_D                  :	lastKey = setKey(KEY_D, pressed); break;
			case Qt::Key_F                  :	lastKey = setKey(KEY_F, pressed); break;
			case Qt::Key_G                  :	lastKey = setKey(KEY_G, pressed); break;
			case Qt::Key_H                  :	lastKey = setKey(KEY_H, pressed); break;
			case Qt::Key_J                  :	lastKey = setKey(KEY_J, pressed); break;
			case Qt::Key_K                  :	lastKey = setKey(KEY_K, pressed); break;
			case Qt::Key_L                  :	lastKey = setKey(KEY_L, pressed); break;
			case Qt::Key_Semicolon          :	lastKey = setKey(KEY_SEMICOLON, pressed); break;
			case Qt::Key_QuoteDbl           :	lastKey = setKey(KEY_QUOTE, pressed); break;		// ?
			case Qt::Key_Apostrophe         :	lastKey = setKey(KEY_BACKQUOTE, pressed); break;	// ?
			case Qt::Key_Backslash          :	lastKey = setKey(KEY_BACKSLASH, pressed); break;
			case Qt::Key_Z                  :	lastKey = setKey(KEY_Z, pressed); break;
			case Qt::Key_X                  :	lastKey = setKey(KEY_X, pressed); break;
			case Qt::Key_C                  :	lastKey = setKey(KEY_C, pressed); break;
			case Qt::Key_V                  :	lastKey = setKey(KEY_V, pressed); break;
			case Qt::Key_B                  :	lastKey = setKey(KEY_B, pressed); break;
			case Qt::Key_N                  :	lastKey = setKey(KEY_N, pressed); break;
			case Qt::Key_M                  :	lastKey = setKey(KEY_M, pressed); break;
			case Qt::Key_Comma              :	lastKey = setKey(KEY_COMMA, pressed); break;
			case Qt::Key_Period             :	lastKey = setKey(KEY_FULLSTOP, pressed); break;
			case Qt::Key_Slash              :	lastKey = setKey(KEY_FORWARDSLASH, pressed); break;
			case Qt::Key_Space              :	lastKey = setKey(KEY_SPACE, pressed); break;
			case Qt::Key_CapsLock           :	lastKey = setKey(KEY_CAPSLOCK, pressed); break;
			case Qt::Key_F1                 :	lastKey = setKey(KEY_F1, pressed); break;
			case Qt::Key_F2                 :	lastKey = setKey(KEY_F2, pressed); break;
			case Qt::Key_F3                 :	lastKey = setKey(KEY_F3, pressed); break;
			case Qt::Key_F4                 :	lastKey = setKey(KEY_F4, pressed); break;
			case Qt::Key_F5                 :	lastKey = setKey(KEY_F5, pressed); break;
			case Qt::Key_F6                 :	lastKey = setKey(KEY_F6, pressed); break;
			case Qt::Key_F7                 :	lastKey = setKey(KEY_F7, pressed); break;
			case Qt::Key_F8                 :	lastKey = setKey(KEY_F8, pressed); break;
			case Qt::Key_F9                 :	lastKey = setKey(KEY_F9, pressed); break;
			case Qt::Key_F10                :	lastKey = setKey(KEY_F10, pressed); break;
			case Qt::Key_NumLock            :	lastKey = setKey(KEY_NUMLOCK, pressed); break;
			case Qt::Key_ScrollLock         :	lastKey = setKey(KEY_SCROLLLOCK, pressed); break;
			case Qt::Key_F11                :	lastKey = setKey(KEY_F11, pressed); break;
			case Qt::Key_F12                :	lastKey = setKey(KEY_F12, pressed); break;
			case Qt::Key_Home               :	lastKey = setKey(KEY_HOME, pressed); break;
			case Qt::Key_Up                 :	lastKey = setKey(KEY_UPARROW, pressed); break;
			case Qt::Key_PageUp             :	lastKey = setKey(KEY_PAGEUP, pressed); break;
			case Qt::Key_Left               :	lastKey = setKey(KEY_LEFTARROW, pressed); break;
			case Qt::Key_Right              :	lastKey = setKey(KEY_RIGHTARROW, pressed); break;
			case Qt::Key_End                :	lastKey = setKey(KEY_END, pressed); break;
			case Qt::Key_Down               :	lastKey = setKey(KEY_DOWNARROW, pressed); break;
			case Qt::Key_PageDown           :	lastKey = setKey(KEY_PAGEDOWN, pressed); break;
			case Qt::Key_Insert             :	lastKey = setKey(KEY_INSERT, pressed); break;
			case Qt::Key_Delete             :	lastKey = setKey(KEY_DELETE, pressed); break;
			default:
				debug(LOG_WARNING, "Ignoring normal key %d.\n", event->key());
				lastKey = 0;
				event->ignore();
				break;
		}
	}
	else  // Is keypad.
	{
		switch (event->key())
		{
			case Qt::Key_Asterisk           :	lastKey = setKey(KEY_KP_STAR, pressed); break;
			case Qt::Key_0                  :	lastKey = setKey(KEY_KP_0, pressed); break;
			case Qt::Key_1                  :	lastKey = setKey(KEY_KP_1, pressed); break;
			case Qt::Key_2                  :	lastKey = setKey(KEY_KP_2, pressed); break;
			case Qt::Key_3                  :	lastKey = setKey(KEY_KP_3, pressed); break;
			case Qt::Key_4                  :	lastKey = setKey(KEY_KP_4, pressed); break;
			case Qt::Key_5                  :	lastKey = setKey(KEY_KP_5, pressed); break;
			case Qt::Key_6                  :	lastKey = setKey(KEY_KP_6, pressed); break;
			case Qt::Key_7                  :	lastKey = setKey(KEY_KP_7, pressed); break;
			case Qt::Key_8                  :	lastKey = setKey(KEY_KP_8, pressed); break;
			case Qt::Key_9                  :	lastKey = setKey(KEY_KP_9, pressed); break;
#ifndef WZ_OS_MAC  // Anything except mac
			case Qt::Key_Home               :	lastKey = setKey(KEY_KP_7, pressed); break;
			case Qt::Key_Up                 :	lastKey = setKey(KEY_KP_8, pressed); break;
			case Qt::Key_PageUp             :	lastKey = setKey(KEY_KP_9, pressed); break;
			case Qt::Key_Left               :	lastKey = setKey(KEY_KP_4, pressed); break;
			case Qt::Key_Clear              :	lastKey = setKey(KEY_KP_5, pressed); break;
			case Qt::Key_Right              :	lastKey = setKey(KEY_KP_6, pressed); break;
			case Qt::Key_End                :	lastKey = setKey(KEY_KP_1, pressed); break;
			case Qt::Key_Down               :	lastKey = setKey(KEY_KP_2, pressed); break;
			case Qt::Key_PageDown           :	lastKey = setKey(KEY_KP_3, pressed); break;
			case Qt::Key_Insert             :	lastKey = setKey(KEY_KP_0, pressed); break;
#else  // Mac-specific, arrow keys are numpad on the mac.
			case Qt::Key_Home               :	lastKey = setKey(KEY_HOME, pressed); break;
			case Qt::Key_Up                 :	lastKey = setKey(KEY_UPARROW, pressed); break;
			case Qt::Key_PageUp             :	lastKey = setKey(KEY_PAGEUP, pressed); break;
			case Qt::Key_Left               :	lastKey = setKey(KEY_LEFTARROW, pressed); break;
			case Qt::Key_Clear              :	lastKey = setKey(KEY_DELETE, pressed); break;
			case Qt::Key_Right              :	lastKey = setKey(KEY_RIGHTARROW, pressed); break;
			case Qt::Key_End                :	lastKey = setKey(KEY_END, pressed); break;
			case Qt::Key_Down               :	lastKey = setKey(KEY_DOWNARROW, pressed); break;
			case Qt::Key_PageDown           :	lastKey = setKey(KEY_PAGEDOWN, pressed); break;
			case Qt::Key_Insert             :	lastKey = setKey(KEY_INSERT, pressed); break;
#endif
			case Qt::Key_Delete             :	lastKey = setKey(KEY_KP_FULLSTOP, pressed); break;
			case Qt::Key_Plus               :	lastKey = setKey(KEY_KP_PLUS, pressed); break;
			case Qt::Key_Minus              :	lastKey = setKey(KEY_KP_MINUS, pressed); break;
			case Qt::Key_Period             :	lastKey = setKey(KEY_KP_FULLSTOP, pressed); break;
			case Qt::Key_Slash              :	lastKey = setKey(KEY_KP_BACKSLASH, pressed); break;  // HACK Shouldn't there be a KEY_KP_SLASH? Most keypads only have a forwardslash key.
			case Qt::Key_Enter              :	lastKey = setKey(KEY_KPENTER, pressed); break;
			case Qt::Key_Return             :	lastKey = setKey(KEY_KPENTER, pressed); break;
			default:
				debug(LOG_WARNING, "Ignoring keypad key %d.\n", event->key());
				lastKey = 0;
				event->ignore();
				break;
		}
	}

	if (pressed)
	{
		inputAddBuffer(lastKey, event->text().unicode()->unicode());
	}

	event->accept();
}
Example #4
0
/*!
 * Handle keyboard events
 */
static void inputHandleKeyEvent(SDL_KeyboardEvent *keyEvent)
{
	UDWORD code = 0, vk = 0;
	switch (keyEvent->type)
	{
	case SDL_KEYDOWN:
		switch (keyEvent->keysym.sym)
		{
		// our "editing" keys for text
		case SDLK_LEFT:
			vk = INPBUF_LEFT;
			break;
		case SDLK_RIGHT:
			vk = INPBUF_RIGHT;
			break;
		case SDLK_UP:
			vk = INPBUF_UP;
			break;
		case SDLK_DOWN:
			vk = INPBUF_DOWN;
			break;
		case SDLK_HOME:
			vk = INPBUF_HOME;
			break;
		case SDLK_END:
			vk = INPBUF_END;
			break;
		case SDLK_INSERT:
			vk = INPBUF_INS;
			break;
		case SDLK_DELETE:
			vk = INPBUF_DEL;
			break;
		case SDLK_PAGEUP:
			vk = INPBUF_PGUP;
			break;
		case SDLK_PAGEDOWN:
			vk = INPBUF_PGDN;
			break;
		case KEY_BACKSPACE:
			vk = INPBUF_BKSPACE;
			break;
		case KEY_TAB:
			vk = INPBUF_TAB;
			break;
		case	KEY_RETURN:
			vk = INPBUF_CR;
			break;
		case 	KEY_ESC:
			vk = INPBUF_ESC;
			break;
		default:
			break;
		}
		// Keycodes without character representations are determined by their scancode bitwise OR-ed with 1<<30 (0x40000000).
		CurrentKey = keyEvent->keysym.sym;
		if (vk)
		{
			// Take care of 'editing' keys that were pressed
			inputAddBuffer(vk, 0);
			debug(LOG_INPUT, "Editing key: 0x%x, %d SDLkey=[%s] pressed", vk, vk, SDL_GetKeyName(CurrentKey));
		}
		else
		{
			// add everything else
			inputAddBuffer(CurrentKey, 0);
		}

		debug(LOG_INPUT, "Key Code (pressed): 0x%x, %d, [%c] SDLkey=[%s]", CurrentKey, CurrentKey, (CurrentKey < 128) && (CurrentKey > 31) ? (char)CurrentKey : '?', SDL_GetKeyName(CurrentKey));

		code = sdlKeyToKeyCode(CurrentKey);
		if (code >= KEY_MAXSCAN)
		{
			break;
		}
		if (aKeyState[code].state == KEY_UP ||
		    aKeyState[code].state == KEY_RELEASED ||
		    aKeyState[code].state == KEY_PRESSRELEASE)
		{
			// whether double key press or not
			aKeyState[code].state = KEY_PRESSED;
			aKeyState[code].lastdown = 0;
		}
		break;

	case SDL_KEYUP:
		code = keyEvent->keysym.sym;
		debug(LOG_INPUT, "Key Code (*Depressed*): 0x%x, %d, [%c] SDLkey=[%s]", code, code, (code < 128) && (code > 31) ? (char)code : '?', SDL_GetKeyName(code));
		code = sdlKeyToKeyCode(keyEvent->keysym.sym);
		if (code >= KEY_MAXSCAN)
		{
			break;
		}
		if (aKeyState[code].state == KEY_PRESSED)
		{
			aKeyState[code].state = KEY_PRESSRELEASE;
		}
		else if (aKeyState[code].state == KEY_DOWN)
		{
			aKeyState[code].state = KEY_RELEASED;
		}
		break;
	default:
		break;
	}
}
Example #5
0
/*!
 * Handle keyboard events
 */
void inputHandleKeyEvent(SDL_KeyboardEvent * keyEvent)
{
	UDWORD code, vk;
	utf_32_char unicode = keyEvent->keysym.unicode;

	switch (keyEvent->type)
	{
		case SDL_KEYDOWN:
			switch (keyEvent->keysym.sym)
			{
				case SDLK_LEFT:
					vk = INPBUF_LEFT;
					break;
				case SDLK_RIGHT:
					vk = INPBUF_RIGHT;
					break;
				case SDLK_UP:
					vk = INPBUF_UP;
					break;
				case SDLK_DOWN:
					vk = INPBUF_DOWN;
					break;
				case SDLK_HOME:
					vk = INPBUF_HOME;
					break;
				case SDLK_END:
					vk = INPBUF_END;
					break;
				case SDLK_INSERT:
					vk = INPBUF_INS;
					break;
				case SDLK_DELETE:
					vk = INPBUF_DEL;
					break;
				case SDLK_PAGEUP:
					vk = INPBUF_PGUP;
					break;
				case SDLK_PAGEDOWN:
					vk = INPBUF_PGDN;
					break;
				default:
					vk = keyEvent->keysym.sym;
					break;
			}

			debug( LOG_INPUT, "Key Code (pressed): 0x%x, %d, [%c] SDLkey=[%s]", vk, vk, (vk < 128) && (vk > 31) ? (char) vk : '?' , SDL_GetKeyName(keyCodeToSDLKey((KEY_CODE)keyEvent->keysym.sym)));
			if (unicode < 32)
			{
				unicode = 0;
			}
			inputAddBuffer(vk, unicode);

			code = sdlKeyToKeyCode(keyEvent->keysym.sym);
			if ( aKeyState[code].state == KEY_UP ||
				 aKeyState[code].state == KEY_RELEASED ||
				 aKeyState[code].state == KEY_PRESSRELEASE )
			{
				//whether double key press or not
					aKeyState[code].state = KEY_PRESSED;
					aKeyState[code].lastdown = 0;
			}
			break;
		case SDL_KEYUP:
			code = sdlKeyToKeyCode(keyEvent->keysym.sym);
			if (aKeyState[code].state == KEY_PRESSED)
			{
				aKeyState[code].state = KEY_PRESSRELEASE;
			}
			else if (aKeyState[code].state == KEY_DOWN )
			{
				aKeyState[code].state = KEY_RELEASED;
			}
			break;
		default:
			break;
	}
}