Beispiel #1
0
ggi_event_mask GII_aa_poll(gii_input_t inp, void *arg)
{

	ggi_aa_priv *priv = inp->priv;
	ggi_event_mask evmask = 0;
	unsigned int aatype;

	DPRINT_EVENTS("GII_aa_poll\n");

	if (!priv->context) return 0;

	while ((aatype = aa_getevent(priv->context, 0)) != AA_NONE) {
		DPRINT_EVENTS("AA: got event %x\n", aatype);

		if (aatype == AA_MOUSE)	{
			evmask |= do_mouse(inp, priv);
		} else if (aatype >= 1 && aatype <= AA_RELEASE) {
			if (priv->lastkey == 0) {
				/* First hit */
				evmask |= emKeyPress;
				add_key_event(inp, aatype, evKeyPress);
			} else if (priv->lastkey == aatype) {
				/* Repeated keypress */
				evmask |= emKeyRepeat;
				add_key_event(inp, aatype, evKeyRepeat);
			} else {
				if (!priv->haverelease) {
					/* Whoops, different key! We send a
					   release for the lastkey first. */
					evmask |= emKeyRelease;
					add_key_event(inp, priv->lastkey,
						      evKeyRelease);
				}
				evmask |= emKeyPress;
				add_key_event(inp, aatype, evKeyPress);
			}
			priv->lastkey = aatype;
		} else if (aatype > AA_RELEASE) {
			/* Release given key.  It should match lastkey, but
			   if it doesn't, tough luck, we clear it anyway. */
			evmask |= emKeyRelease;
			add_key_event(inp, aatype, evKeyRelease);
			priv->lastkey = 0;
			priv->haverelease = 1;
		} else if (aatype == AA_RESIZE || aatype == AA_UNKNOWN) {
		}

	}
	if (!priv->haverelease && priv->lastkey) {
		/* No more events.  If priv->lastkey != 0, we release that key. */
		evmask |= emKeyRelease;
		add_key_event(inp, priv->lastkey, evKeyRelease);
		priv->lastkey = 0;
	}

	return evmask;
}
Beispiel #2
0
//--------- Begin of MouseSDL::poll_event ----------//
//
// Poll mouse events from the direct mouse VXD.
//
void MouseSDL::poll_event()
{
	SDL_Event event;
	int moveFlag;

	moveFlag = 0;

	while (SDL_PeepEvents(&event,
			1,
			SDL_GETEVENT,
			SDL_KEYDOWN,
			SDL_JOYBUTTONUP)) {

		MouseEvent ev;

		switch (event.type) {
		case SDL_MOUSEMOTION:
		// SDL already accelerates relative mouse motions.
		// Disable to let the user control speed outside of game.
#ifdef MOUSE_RELATIVE
			cur_x += micky_to_displacement(event.motion.xrel);
			cur_y += micky_to_displacement(event.motion.yrel);
#else
			cur_x = event.motion.x;
			cur_y = event.motion.y;
#endif
			if(cur_x < bound_x1)
				cur_x = bound_x1;
			if(cur_x > bound_x2)
				cur_x = bound_x2;
			if(cur_y < bound_y1)
				cur_y = bound_y1;
			if(cur_y > bound_y2)
				cur_y = bound_y2;
			moveFlag = 1;
			break;
		case SDL_MOUSEBUTTONDOWN:
			ev.x = cur_x;
			ev.y = cur_y;
			ev.time = misc.get_time(); //mouseMsg->dwTimeStamp;
			ev.scan_code = 0;
			ev.skey_state = skey_state;

			if (event.button.button == SDL_BUTTON_LEFT) {
	//			left_press = (event.button.state == SDL_PRESSED);
				left_press = LEFT_BUTTON_MASK;
				ev.event_type = LEFT_BUTTON;
				add_event(&ev);
			} else if (event.button.button == SDL_BUTTON_RIGHT) {
				//right_press = (event.button.state == SDL_PRESSED);
				right_press = RIGHT_BUTTON_MASK;
				ev.event_type = RIGHT_BUTTON;
				add_event(&ev);
			}
			break;
		case SDL_MOUSEBUTTONUP:
			ev.x = cur_x;
			ev.y = cur_y;
			ev.time = misc.get_time(); //mouseMsg->dwTimeStamp;
			ev.scan_code = 0;
			ev.skey_state = skey_state;

			if (event.button.button == SDL_BUTTON_LEFT) {
//				left_press = !(event.button.state == SDL_RELEASED);
				left_press = 0;
				ev.event_type = LEFT_BUTTON_RELEASE;
				add_event(&ev);
				reset_boundary();
			} else if (event.button.button == SDL_BUTTON_RIGHT) {
				//right_press = !(event.button.state == SDL_RELEASED);
				right_press = 0;
				ev.event_type = RIGHT_BUTTON_RELEASE;
				add_event(&ev);
			}
			break;
		case SDL_KEYDOWN:
		{
			int bypass = 0;
			int mod = event.key.keysym.mod &
					(KMOD_CTRL|KMOD_SHIFT|KMOD_ALT);
			if (mod == KMOD_LALT || mod == KMOD_RALT) {
				if (event.key.keysym.sym == SDLK_RETURN) {
					bypass = 1;
					sys.toggle_full_screen_flag = 1;
					sys.need_redraw_flag = 1;
				} else if (event.key.keysym.sym == SDLK_F4) {
					bypass = 1;
					sys.signal_exit_flag = 1;
				} else if (event.key.keysym.sym == SDLK_TAB) {
					bypass = 1;
					SDL_Window *window = SDL_GetWindowFromID(event.key.windowID);
					SDL_MinimizeWindow(window);
				}
			} else if (mod == KMOD_LCTRL || mod == KMOD_RCTRL) {
				if (event.key.keysym.sym == SDLK_g &&
						!vga.is_full_screen()) {
					static int grabbed = 0;
					bypass = 1;
					SDL_Window *window = SDL_GetWindowFromID(event.key.windowID);
					if (!grabbed) {
						SDL_SetWindowGrab(window, SDL_TRUE);
						grabbed = 1;
					} else {
						SDL_SetWindowGrab(window, SDL_FALSE);
						grabbed = 0;
					}
				}
			}
			if (!bypass) {
				update_skey_state();
				add_key_event(event.key.keysym.sym,
					      misc.get_time());
			}
			break;
		}
		case SDL_KEYUP:
			update_skey_state();
			break;
		case SDL_TEXTINPUT:
		case SDL_JOYAXISMOTION:
		case SDL_JOYBALLMOTION:
		case SDL_JOYHATMOTION:
		case SDL_JOYBUTTONDOWN:
		case SDL_JOYBUTTONUP:
		default:
			ERR("unhandled event %d\n", event.type);
			break;
		}
	}


	if(moveFlag)
	{
		mouse_cursor.process(cur_x, cur_y);     // repaint mouse cursor
		power.mouse_handler();
	}
}
Beispiel #3
0
//--------- Begin of MouseSDL::poll_event ----------//
//
// Poll mouse events from the direct mouse VXD.
//
void MouseSDL::poll_event()
{
	SDL_Event event;
	int moveFlag;

	while (SDL_PeepEvents(&event,
			1,
			SDL_GETEVENT,
			SDL_KEYEVENTMASK |
			SDL_MOUSEEVENTMASK |
			SDL_JOYEVENTMASK) > 0) {

		MouseEvent ev;

		switch (event.type) {
		case SDL_MOUSEMOTION:
			cur_x += micky_to_displacement(event.motion.xrel);
			cur_y += micky_to_displacement(event.motion.yrel);
			if(cur_x < bound_x1)
				cur_x = bound_x1;
			if(cur_x > bound_x2)
				cur_x = bound_x2;
			if(cur_y < bound_y1)
				cur_y = bound_y1;
			if(cur_y > bound_y2)
				cur_y = bound_y2;
			moveFlag = 1;
			break;
		case SDL_MOUSEBUTTONDOWN:
			ev.x = cur_x;
			ev.y = cur_y;
			ev.time = m.get_time(); //mouseMsg->dwTimeStamp;
			ev.scan_code = 0;
			ev.skey_state = skey_state;

			if (event.button.button == SDL_BUTTON_LEFT) {
	//			left_press = (event.button.state == SDL_PRESSED);
				left_press = LEFT_BUTTON_MASK;
				ev.event_type = LEFT_BUTTON;
				add_event(&ev);
			} else if (event.button.button == SDL_BUTTON_RIGHT) {
				//right_press = (event.button.state == SDL_PRESSED);
				right_press = RIGHT_BUTTON_MASK;
				ev.event_type = RIGHT_BUTTON;
				add_event(&ev);
			}
			break;
		case SDL_MOUSEBUTTONUP:
			ev.x = cur_x;
			ev.y = cur_y;
			ev.time = m.get_time(); //mouseMsg->dwTimeStamp;
			ev.scan_code = 0;
			ev.skey_state = skey_state;

			if (event.button.button == SDL_BUTTON_LEFT) {
//				left_press = !(event.button.state == SDL_RELEASED);
				left_press = 0;
				ev.event_type = LEFT_BUTTON_RELEASE;
				add_event(&ev);
				reset_boundary();
			} else if (event.button.button == SDL_BUTTON_RIGHT) {
				//right_press = !(event.button.state == SDL_RELEASED);
				right_press = 0;
				ev.event_type = RIGHT_BUTTON_RELEASE;
				add_event(&ev);
			}
			break;
		case SDL_KEYDOWN:
			update_skey_state();
			add_key_event(event.key.keysym.sym, m.get_time());
			break;
		case SDL_KEYUP:
			update_skey_state();
			break;
		case SDL_JOYAXISMOTION:
		case SDL_JOYBALLMOTION:
		case SDL_JOYHATMOTION:
		case SDL_JOYBUTTONDOWN:
		case SDL_JOYBUTTONUP:
		default:
			ERR("unhandled event %d\n", event.type);
			break;
		}
	}


	if(moveFlag)
	{
		mouse_cursor.process(cur_x, cur_y);     // repaint mouse cursor
		power.mouse_handler();
	}
}
Beispiel #4
0
void Java_org_puder_trs80_XTRS_addKeyEvent(JNIEnv* env, jclass cls, jint event, jint sym, jint key) {
    add_key_event(event, sym, key);
}
Beispiel #5
0
// ------- begin of Mouse::process_key_message -------//
//
// called by poll_event to handle language specific keyboard
//
int Mouse::process_key_message(DWORD keyOfs, DWORD keyData, DWORD keyTimeStamp)
{
	int rc = 0;

	// trap keys, such as shift, ctrl, alt, numlock, caplock and scrolllock
	// add to event if the key is none of the above
	switch( keyOfs )
	{
	case DIK_LSHIFT:
		if( keyData & 0x80 )
			skey_state |= LEFT_SHIFT_KEY_MASK;
		else
			skey_state &= ~LEFT_SHIFT_KEY_MASK;
		break;
	case DIK_RSHIFT:
		if( keyData & 0x80 )
			skey_state |= RIGHT_SHIFT_KEY_MASK;
		else
			skey_state &= ~RIGHT_SHIFT_KEY_MASK;
		break;
	case DIK_LCONTROL:
		if( keyData & 0x80 )
			skey_state |= LEFT_CONTROL_KEY_MASK;
		else
			skey_state &= ~LEFT_CONTROL_KEY_MASK;
		break;
	case DIK_RCONTROL:
		if( keyData & 0x80 )
			skey_state |= RIGHT_CONTROL_KEY_MASK;
		else
			skey_state &= ~RIGHT_CONTROL_KEY_MASK;
		break;
	case DIK_LMENU:
		if( keyData & 0x80 )
			skey_state |= LEFT_ALT_KEY_MASK;
		else
			skey_state &= ~LEFT_ALT_KEY_MASK;
		break;
	case DIK_RMENU:
		if( keyData & 0x80 )
			skey_state |= RIGHT_ALT_KEY_MASK;
		else
			skey_state &= ~RIGHT_ALT_KEY_MASK;
		break;
	case DIK_CAPITAL:
		if(keyData & 0x80)
			skey_state ^= CAP_LOCK_STATE_MASK;
		break;
	case DIK_NUMLOCK:
		if(keyData & 0x80)
			skey_state ^= NUM_LOCK_STATE_MASK;
		break;
	case DIK_SCROLL:
		if(keyData & 0x80)
			skey_state ^= SCROLL_LOCK_STATE_MASK;
		break;
	case DIK_INSERT:
		if(keyData & 0x80)
		{
			// insert is a special case, it toggle skey_state and
			// append event queue
			skey_state ^= INSERT_STATE_MASK;
			add_key_event(keyOfs, keyTimeStamp);
			rc = 1;
		}
		break;
	default:
		if( keyData & 0x80 )
		{
			add_key_event(keyOfs, keyTimeStamp);
			rc = 1;

			// capture screen
			if(keyOfs == DIK_F11 && (skey_state & CONTROL_KEY_MASK))
			{
				sys.capture_screen();
			}

		}
		else
		{
			add_key_release_event(keyOfs, keyTimeStamp);
			rc = 1;
		}
	}

	// -------- update arrow_key_state ---------//

	switch( keyOfs )
	{
	case DIK_LEFT:
		if( keyData & 0x80 )
			arrow_key_state |= ARROW_LEFT_KEY_MASK;
		else
			arrow_key_state &= ~ARROW_LEFT_KEY_MASK;
		break;
	case DIK_RIGHT:
		if( keyData & 0x80 )
			arrow_key_state |= ARROW_RIGHT_KEY_MASK;
		else
			arrow_key_state &= ~ARROW_RIGHT_KEY_MASK;
		break;
	case DIK_UP:
		if( keyData & 0x80 )
			arrow_key_state |= ARROW_UP_KEY_MASK;
		else
			arrow_key_state &= ~ARROW_UP_KEY_MASK;
		break;
	case DIK_DOWN:
		if( keyData & 0x80 )
			arrow_key_state |= ARROW_DOWN_KEY_MASK;
		else
			arrow_key_state &= ~ARROW_DOWN_KEY_MASK;
		break;
	}

	return rc;
}