예제 #1
0
static ERL_NIF_TERM window_event_to_map(ErlNifEnv* env, SDL_Event* event, ERL_NIF_TERM map)
{
	enif_make_map_put(env, map, atom_window_id,
		enif_make_uint(env, event->window.windowID), &map);
	enif_make_map_put(env, map, atom_event,
		window_event_to_atom(event->window.event), &map);
	enif_make_map_put(env, map, atom_data1,
		enif_make_int(env, event->window.data1), &map);
	enif_make_map_put(env, map, atom_data2,
		enif_make_int(env, event->window.data2), &map);

	return map;
}
예제 #2
0
파일: decode.c 프로젝트: google2013/cabala
int
make_document(ErlNifEnv     *env, 
              vec_term_t    *vec,
              ERL_NIF_TERM  *out,
              int            return_maps)
{
    if(vec->length % 2 != 0) {
        return 0;
    }
    if(return_maps) {
        int idx, count = vec->length;
        ERL_NIF_TERM ret = enif_make_new_map(env);
        
        for(idx = 0; idx < count; idx += 2) {
            if(!enif_make_map_put(
                    env, 
                    ret, 
                    vec->data[idx], 
                    vec->data[idx+1], 
                    &ret)) {
                return 0;
            }
        }

        *out = ret;
        return 1;
    }

    *out = enif_make_tuple_from_array(env, vec->data, vec->length);
    return 1;
}
예제 #3
0
static ERL_NIF_TERM mouse_wheel_event_to_map(ErlNifEnv* env, SDL_Event* event, ERL_NIF_TERM map)
{
	enif_make_map_put(env, map, atom_window_id,
		enif_make_uint(env, event->wheel.windowID), &map);
	enif_make_map_put(env, map, atom_which,
		(event->wheel.which == SDL_TOUCH_MOUSEID)
			? atom_touch
			: enif_make_uint(env, event->wheel.which),
		&map);
	enif_make_map_put(env, map, atom_x,
		enif_make_int(env, event->wheel.x), &map);
	enif_make_map_put(env, map, atom_y,
		enif_make_int(env, event->wheel.y), &map);
	enif_make_map_put(env, map, atom_direction,
		mousewheel_direction_to_atom(event->wheel.direction), &map);

	return map;
}
예제 #4
0
static ERL_NIF_TERM keyboard_event_to_map(ErlNifEnv* env, SDL_Event* event, ERL_NIF_TERM map)
{
	enif_make_map_put(env, map, atom_window_id,
		enif_make_uint(env, event->key.windowID), &map);
	enif_make_map_put(env, map, atom_state,
		event->key.state == SDL_RELEASED ? atom_released : atom_pressed, &map);
	enif_make_map_put(env, map, atom_repeat,
		event->key.repeat == 0 ? atom_false : atom_true, &map);
	enif_make_map_put(env, map, atom_scancode,
		enif_make_uint(env, event->key.keysym.scancode), &map);
	enif_make_map_put(env, map, atom_sym,
		enif_make_int(env, event->key.keysym.sym), &map);
	enif_make_map_put(env, map, atom_mod,
		keymod_flags_to_list(env, event->key.keysym.mod), &map);

	return map;
}
예제 #5
0
static ERL_NIF_TERM mouse_button_event_to_map(ErlNifEnv* env, SDL_Event* event, ERL_NIF_TERM map)
{
	enif_make_map_put(env, map, atom_window_id,
		enif_make_uint(env, event->button.windowID), &map);
	enif_make_map_put(env, map, atom_which,
		(event->button.which == SDL_TOUCH_MOUSEID)
			? atom_touch
			: enif_make_uint(env, event->button.which),
		&map);
	enif_make_map_put(env, map, atom_button,
		button_to_atom(event->button.button), &map);
	enif_make_map_put(env, map, atom_state,
		event->button.state == SDL_RELEASED ? atom_released : atom_pressed, &map);
	enif_make_map_put(env, map, atom_clicks,
		enif_make_uint(env, event->button.clicks), &map);
	enif_make_map_put(env, map, atom_x,
		enif_make_int(env, event->button.x), &map);
	enif_make_map_put(env, map, atom_y,
		enif_make_int(env, event->button.y), &map);

	return map;
}
예제 #6
0
static ERL_NIF_TERM mouse_motion_event_to_map(ErlNifEnv* env, SDL_Event* event, ERL_NIF_TERM map)
{
	enif_make_map_put(env, map, atom_window_id,
		enif_make_uint(env, event->motion.windowID), &map);
	enif_make_map_put(env, map, atom_which,
		(event->motion.which == SDL_TOUCH_MOUSEID)
			? atom_touch
			: enif_make_uint(env, event->motion.which),
		&map);
	enif_make_map_put(env, map, atom_state,
		mouse_state_to_list(env, event->motion.state), &map);
	enif_make_map_put(env, map, atom_x,
		enif_make_int(env, event->motion.x), &map);
	enif_make_map_put(env, map, atom_y,
		enif_make_int(env, event->motion.y), &map);
	enif_make_map_put(env, map, atom_xrel,
		enif_make_int(env, event->motion.xrel), &map);
	enif_make_map_put(env, map, atom_yrel,
		enif_make_int(env, event->motion.yrel), &map);

	return map;
}
예제 #7
0
static ERL_NIF_TERM event_to_map(ErlNifEnv* env, SDL_Event* event)
{
	ERL_NIF_TERM map;

	map = enif_make_new_map(env);

	// All events have a type and a timestamp.

	enif_make_map_put(env, map, atom_type,
		event_type_to_atom(event->type), &map);
	enif_make_map_put(env, map, atom_timestamp,
		enif_make_uint(env, event->common.timestamp), &map);

	// The following event types have no additional fields:
	//
	// - SDL_QUIT
	// - SDL_APP_TERMINATING
	// - SDL_APP_LOWMEMORY
	// - SDL_APP_WILLENTERBACKGROUND
	// - SDL_APP_DIDENTERBACKGROUND
	// - SDL_APP_WILLENTERFOREGROUND
	// - SDL_APP_DIDENTERFOREGROUND
	// - SDL_KEYMAPCHANGED
	// - SDL_CLIPBOARDUPDATE
	// - SDL_RENDER_TARGETS_RESET
	// - SDL_RENDER_DEVICE_RESET

	switch (event->type) {
		case SDL_WINDOWEVENT:
			return window_event_to_map(env, event, map);

		// @todo SDL_SYSWMEVENT

		case SDL_KEYDOWN:
		case SDL_KEYUP:
			return keyboard_event_to_map(env, event, map);

		// @todo SDL_TEXTEDITING
		// @todo SDL_TEXTINPUT

		case SDL_MOUSEMOTION:
			return mouse_motion_event_to_map(env, event, map);

		case SDL_MOUSEBUTTONDOWN:
		case SDL_MOUSEBUTTONUP:
			return mouse_button_event_to_map(env, event, map);

		case SDL_MOUSEWHEEL:
			return mouse_wheel_event_to_map(env, event, map);

		// @todo SDL_JOYAXISMOTION
		// @todo SDL_JOYBALLMOTION
		// @todo SDL_JOYHATMOTION
		// @todo SDL_JOYBUTTONDOWN
		// @todo SDL_JOYBUTTONUP
		// @todo SDL_JOYDEVICEADDED
		// @todo SDL_JOYDEVICEREMOVED

		// @todo SDL_CONTROLLERAXISMOTION
		// @todo SDL_CONTROLLERBUTTONDOWN
		// @todo SDL_CONTROLLERBUTTONUP
		// @todo SDL_CONTROLLERDEVICEADDED
		// @todo SDL_CONTROLLERDEVICEREMOVED
		// @todo SDL_CONTROLLERDEVICEREMAPPED

		// @todo SDL_FINGERDOWN
		// @todo SDL_FINGERUP
		// @todo SDL_FINGERMOTION

		// @todo SDL_DOLLARGESTURE
		// @todo SDL_DOLLARRECORD
		// @todo SDL_MULTIGESTURE

		// @todo SDL_DROPFILE
		// @todo SDL_DROPTEXT
		// @todo SDL_DROPBEGIN
		// @todo SDL_DROPCOMPLETE

		// @todo SDL_AUDIODEVICEADDED
		// @todo SDL_AUDIODEVICEREMOVED
	}

	return map;
}