// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz // http://chaosforge.org/ // // This file is part of NV Libraries. // For conditions of distribution and use, see copyright notice in nv.hh #include "nv/io_event.hh" using namespace nv; const char* get_key_name( key_code key ) { switch ( key ) { # define NV_KEY( id, val ) case id : return #id; # include # undef NV_KEY default: return "KEY_UNKNOWN"; }; } const char* get_mouse_name( mouse_code button ) { switch ( button ) { # define NV_MOUSE( id, val ) case id : return #id; # include # undef NV_MOUSE default: return "MOUSE_UNKNOWN"; }; } const char* get_io_event_name( io_event_code event ) { switch ( event ) { # define NV_IO_EVENT( id ) case id : return #id; # include # undef NV_IO_EVENT default: return "EV_UNKNOWN"; }; } void register_io_types( type_database* db ) { type_enum key_enums[] = { # define NV_KEY( id, val ) type_enum( #id, id ), # include # undef NV_KEY }; db->create_type().enums( key_enums ); type_enum mouse_enums[] = { # define NV_MOUSE( id, val ) type_enum( #id, id ), # include # undef NV_MOUSE }; db->create_type().enums( mouse_enums ); type_enum io_event_enums[] = { # define NV_IO_EVENT( id ) type_enum( #id, id ), # include # undef NV_IO_EVENT }; db->create_type().enums( io_event_enums ); type_field key_fields[] = { type_field( "ascii", &key_event::ascii ), type_field( "code", &key_event::code ), type_field( "shift", &key_event::shift ), type_field( "control", &key_event::control ), type_field( "alt", &key_event::alt ), type_field( "pressed", &key_event::pressed ), }; db->create_type().fields( key_fields ); type_field mouse_button_fields[] = { type_field( "x", &mouse_button_event::x ), type_field( "y", &mouse_button_event::y ), type_field( "button", &mouse_button_event::button ), type_field( "pressed", &mouse_button_event::pressed ), type_field( "code", &mouse_button_event::code ), }; db->create_type().fields( mouse_button_fields ); type_field mouse_move_fields[] = { type_field( "x", &mouse_move_event::x ), type_field( "y", &mouse_move_event::y ), type_field( "rx", &mouse_move_event::rx ), type_field( "ry", &mouse_move_event::ry ), type_field( "pressed", &mouse_move_event::pressed ), type_field( "code", &mouse_move_event::code ), }; db->create_type().fields( mouse_move_fields ); type_field system_fields[] = { type_field( "sys_type", &system_event::sys_type ), type_field( "param1", &system_event::param1 ), type_field( "param2", &system_event::param2 ), }; db->create_type().fields( system_fields ); }