Exemplo n.º 1
0
Arquivo: event.c Projeto: mewbak/arcan
static inline void process_axismotion(arcan_evctx* ctx,
	const SDL_JoyAxisEvent* const ev)
{
	int devid = ev->which;

	if (!iodev.joys || iodev.joys[devid].axis < ev->axis)
		return;

	struct axis_opts* daxis = &iodev.joys[devid].adata[ev->axis];
	int16_t dstv;

	if (process_axis(ctx, daxis, ev->value, &dstv)){
		arcan_event newevent = {
			.category = EVENT_IO,
			.io.kind = EVENT_IO_AXIS_MOVE,
			.io.devid = iodev.joys[devid].devnum,
			.io.subid = ev->axis,
			.io.datatype = EVENT_IDATATYPE_ANALOG,
			.io.devkind  = EVENT_IDEVKIND_GAMEDEV,
			.io.input.analog.gotrel = false,
			.io.input.analog.nvalues = 1,
			.io.input.analog.axisval[0] = dstv
		};
		arcan_event_enqueue(ctx, &newevent);
	}
}
Exemplo n.º 2
0
Arquivo: event.c Projeto: Gu1/arcan
static inline void process_mousemotion(arcan_evctx* ctx,
	int16_t xv, int16_t xrel, int16_t yv, int16_t yrel)	
{
	int16_t dstv, dstv_r;
	arcan_event nev = {
		.label = "MOUSE\0",
		.category = EVENT_IO,
		.kind = EVENT_IO_AXIS_MOVE,
		.data.io.datatype = EVENT_IDATATYPE_ANALOG,
		.data.io.devkind  = EVENT_IDEVKIND_MOUSE,
		.data.io.input.analog.devid  = ARCAN_MOUSEIDBASE,
		.data.io.input.analog.gotrel = true,
		.data.io.input.analog.nvalues = 2
	}; 

	snprintf(nev.label, 
		sizeof(nev.label) - 1, "mouse");

	if (process_axis(ctx, &iodev.mx, xv, &dstv) &&
		process_axis(ctx, &iodev.mx_r, xrel, &dstv_r)){
		nev.data.io.input.analog.subid = 0;
		nev.data.io.input.analog.axisval[0] = dstv;
		nev.data.io.input.analog.axisval[1] = dstv_r;
		arcan_event_enqueue(ctx, &nev);	
	}

	if (process_axis(ctx, &iodev.my, yv, &dstv) &&
		process_axis(ctx, &iodev.my_r, yrel, &dstv_r)){
		nev.data.io.input.analog.subid = 1;
		nev.data.io.input.analog.axisval[0] = dstv;
		nev.data.io.input.analog.axisval[1] = dstv_r;
		arcan_event_enqueue(ctx, &nev);	
	}
}

static void set_analogstate(struct axis_opts* dst,
	int lower_bound, int upper_bound, int deadzone,
	int kernel_size, enum ARCAN_ANALOGFILTER_KIND mode)
{	
	dst->lower = lower_bound;
	dst->upper = upper_bound;
	dst->deadzone = deadzone;
	dst->kernel_sz = kernel_size;
	dst->mode = mode;
	dst->kernel_ofs = 0;
}	
Exemplo n.º 3
0
bool dev::sixense::process_event(app::event *E)
{
    switch (E->get_type())
    {
    case E_POINT:
        if (process_point (E)) return true;
        else break;
    case E_AXIS:
        if (process_axis  (E)) return true;
        else break;
    case E_BUTTON:
        if (process_button(E)) return true;
        else break;
    case E_TICK:
        if (process_tick  (E)) return true;
        else break;
    }
    return dev::input::process_event(E);
}