source: trunk/src/core/io_event.cc @ 338

Last change on this file since 338 was 338, checked in by epyon, 11 years ago
  • io_events for controllers
File size: 4.7 KB
RevLine 
[319]1// Copyright (C) 2012-2014 ChaosForge Ltd
[67]2// http://chaosforge.org/
3//
4// This file is part of NV Libraries.
5// For conditions of distribution and use, see copyright notice in nv.hh
6
[319]7#include "nv/core/io_event.hh"
[67]8
[338]9#include "nv/core/logging.hh"
10
[67]11using namespace nv;
12
[121]13const char* nv::get_key_name( key_code key )
[67]14{
15        switch ( key )
16        {
17#       define NV_KEY( id, val ) case id : return #id;
18#               include <nv/detail/key_list.inc>
19#       undef NV_KEY
[121]20        NV_RETURN_COVERED_DEFAULT( "KEY_UNKNOWN" );
[67]21        };
22}
23
[121]24const char* nv::get_mouse_name( mouse_code button )
[67]25{
26        switch ( button )
27        {
28#       define NV_MOUSE( id, val ) case id : return #id;
29#               include <nv/detail/mouse_list.inc>
30#       undef NV_MOUSE
[121]31        NV_RETURN_COVERED_DEFAULT( "MOUSE_UNKNOWN" );
[67]32        };
33}
34
[121]35const char* nv::get_io_event_name( io_event_code event )
[67]36{
37        switch ( event )
38        {
39#       define NV_IO_EVENT( id ) case id : return #id;
40#               include <nv/detail/io_event_list.inc>
41#       undef NV_IO_EVENT
[121]42        NV_RETURN_COVERED_DEFAULT( "EV_UNKNOWN" );
[67]43        };
44}
45
[338]46void nv::log_event( const io_event& e )
47{
48        NV_LOG( LOG_INFO, "Event: " << get_io_event_name( e.type ) );
49}
50
[319]51/************************************************************************
[121]52void nv::register_io_types( type_database* db )
[67]53{
54        type_enum key_enums[] = {
55#       define NV_KEY( id, val ) type_enum( #id, id ),
56#               include <nv/detail/key_list.inc>
57#       undef NV_KEY
58        };
[78]59        db->create_type<key_code>("key_code").enums( key_enums );
[67]60
61        type_enum mouse_enums[] = {
62#       define NV_MOUSE( id, val ) type_enum( #id, id ),
63#               include <nv/detail/mouse_list.inc>
64#       undef NV_MOUSE
65        };
[78]66        db->create_type<mouse_code>("mouse_code").enums( mouse_enums );
[67]67
68        type_enum io_event_enums[] = {
69#       define NV_IO_EVENT( id ) type_enum( #id, id ),
70#               include <nv/detail/io_event_list.inc>
71#       undef NV_IO_EVENT
72        };
[78]73        db->create_type<io_event_code>("event_code").enums( io_event_enums );
[67]74
75        type_field key_fields[] = {
76                type_field( "ascii",   &key_event::ascii ),
77                type_field( "code",    &key_event::code ),
78                type_field( "shift",   &key_event::shift ),
79                type_field( "control", &key_event::control ),
80                type_field( "alt",     &key_event::alt ),
81                type_field( "pressed", &key_event::pressed ),
82        };
[78]83        db->create_type<key_event>("key_event").fields( key_fields );
[67]84
85        type_field mouse_button_fields[] = {
86                type_field( "x",       &mouse_button_event::x ),
87                type_field( "y",       &mouse_button_event::y ),
88                type_field( "button",  &mouse_button_event::button ),
89                type_field( "pressed", &mouse_button_event::pressed ),
90                type_field( "code",    &mouse_button_event::code ),
91        };
[78]92        db->create_type<mouse_button_event>("mouse_button_event").fields( mouse_button_fields );
[67]93
94        type_field mouse_move_fields[] = {
95                type_field( "x",       &mouse_move_event::x ),
96                type_field( "y",       &mouse_move_event::y ),
97                type_field( "rx",      &mouse_move_event::rx ),
98                type_field( "ry",      &mouse_move_event::ry ),
99                type_field( "pressed", &mouse_move_event::pressed ),
100                type_field( "code",    &mouse_move_event::code ),
101        };
[78]102        db->create_type<mouse_move_event>("mouse_move_event").fields( mouse_move_fields );
[67]103
[304]104        type_field mouse_wheel_fields[] = {
105                type_field( "x",       &mouse_wheel_event::x ),
106                type_field( "y",       &mouse_wheel_event::y ),
107        };
108        db->create_type<mouse_wheel_event>("mouse_wheel_event").fields( mouse_wheel_fields );
109
[184]110        type_field joy_button_fields[] = {
111                type_field( "id",      &joy_button_event::id ),
112                type_field( "button",  &joy_button_event::button ),
113                type_field( "pressed", &joy_button_event::pressed ),
114        };
115        db->create_type<joy_button_event>("joy_button_event").fields( joy_button_fields );
116
117        type_field joy_axis_fields[] = {
118                type_field( "id",      &joy_axis_event::id ),
119                type_field( "axis",    &joy_axis_event::axis ),
120                type_field( "value",   &joy_axis_event::value ),
121        };
122        db->create_type<joy_axis_event>("joy_axis_event").fields( joy_axis_fields );
123
124        type_field joy_hat_fields[] = {
125                type_field( "id",      &joy_hat_event::id ),
126                type_field( "hat",     &joy_hat_event::hat ),
127                type_field( "value",   &joy_hat_event::value ),
128        };
129        db->create_type<joy_hat_event>("joy_hat_event").fields( joy_hat_fields );
130
131        type_field joy_ball_fields[] = {
132                type_field( "id",      &joy_ball_event::id ),
133                type_field( "ball",    &joy_ball_event::ball ),
134                type_field( "rx",      &joy_ball_event::rx ),
135                type_field( "ry",      &joy_ball_event::ry ),
136        };
137        db->create_type<joy_ball_event>("joy_ball_event").fields( joy_ball_fields );
138
[67]139        type_field system_fields[] = {
140                type_field( "sys_type", &system_event::sys_type ),
141                type_field( "param1",   &system_event::param1 ),
142                type_field( "param2",   &system_event::param2 ),
143        };
[78]144        db->create_type<system_event>("system_event").fields( system_fields );
[67]145}
[319]146************************************************************************/
Note: See TracBrowser for help on using the repository browser.