source: trunk/src/io_event.cc @ 301

Last change on this file since 301 was 214, checked in by epyon, 12 years ago
  • types - decomposition, math types go to math, type_traits related to type_traits
  • decoupling of the types.hh dependency from all possible places
File size: 4.3 KB
Line 
1// Copyright (C) 2012-2013 ChaosForge / Kornel Kisielewicz
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
7#include "nv/io_event.hh"
8
9#include <nv/types.hh>
10
11using namespace nv;
12
13const char* nv::get_key_name( key_code key )
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
20        NV_RETURN_COVERED_DEFAULT( "KEY_UNKNOWN" );
21        };
22}
23
24const char* nv::get_mouse_name( mouse_code button )
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
31        NV_RETURN_COVERED_DEFAULT( "MOUSE_UNKNOWN" );
32        };
33}
34
35const char* nv::get_io_event_name( io_event_code event )
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
42        NV_RETURN_COVERED_DEFAULT( "EV_UNKNOWN" );
43        };
44}
45
46void nv::register_io_types( type_database* db )
47{
48        type_enum key_enums[] = {
49#       define NV_KEY( id, val ) type_enum( #id, id ),
50#               include <nv/detail/key_list.inc>
51#       undef NV_KEY
52        };
53        db->create_type<key_code>("key_code").enums( key_enums );
54
55        type_enum mouse_enums[] = {
56#       define NV_MOUSE( id, val ) type_enum( #id, id ),
57#               include <nv/detail/mouse_list.inc>
58#       undef NV_MOUSE
59        };
60        db->create_type<mouse_code>("mouse_code").enums( mouse_enums );
61
62        type_enum io_event_enums[] = {
63#       define NV_IO_EVENT( id ) type_enum( #id, id ),
64#               include <nv/detail/io_event_list.inc>
65#       undef NV_IO_EVENT
66        };
67        db->create_type<io_event_code>("event_code").enums( io_event_enums );
68
69        type_field key_fields[] = {
70                type_field( "ascii",   &key_event::ascii ),
71                type_field( "code",    &key_event::code ),
72                type_field( "shift",   &key_event::shift ),
73                type_field( "control", &key_event::control ),
74                type_field( "alt",     &key_event::alt ),
75                type_field( "pressed", &key_event::pressed ),
76        };
77        db->create_type<key_event>("key_event").fields( key_fields );
78
79        type_field mouse_button_fields[] = {
80                type_field( "x",       &mouse_button_event::x ),
81                type_field( "y",       &mouse_button_event::y ),
82                type_field( "button",  &mouse_button_event::button ),
83                type_field( "pressed", &mouse_button_event::pressed ),
84                type_field( "code",    &mouse_button_event::code ),
85        };
86        db->create_type<mouse_button_event>("mouse_button_event").fields( mouse_button_fields );
87
88        type_field mouse_move_fields[] = {
89                type_field( "x",       &mouse_move_event::x ),
90                type_field( "y",       &mouse_move_event::y ),
91                type_field( "rx",      &mouse_move_event::rx ),
92                type_field( "ry",      &mouse_move_event::ry ),
93                type_field( "pressed", &mouse_move_event::pressed ),
94                type_field( "code",    &mouse_move_event::code ),
95        };
96        db->create_type<mouse_move_event>("mouse_move_event").fields( mouse_move_fields );
97
98        type_field joy_button_fields[] = {
99                type_field( "id",      &joy_button_event::id ),
100                type_field( "button",  &joy_button_event::button ),
101                type_field( "pressed", &joy_button_event::pressed ),
102        };
103        db->create_type<joy_button_event>("joy_button_event").fields( joy_button_fields );
104
105        type_field joy_axis_fields[] = {
106                type_field( "id",      &joy_axis_event::id ),
107                type_field( "axis",    &joy_axis_event::axis ),
108                type_field( "value",   &joy_axis_event::value ),
109        };
110        db->create_type<joy_axis_event>("joy_axis_event").fields( joy_axis_fields );
111
112        type_field joy_hat_fields[] = {
113                type_field( "id",      &joy_hat_event::id ),
114                type_field( "hat",     &joy_hat_event::hat ),
115                type_field( "value",   &joy_hat_event::value ),
116        };
117        db->create_type<joy_hat_event>("joy_hat_event").fields( joy_hat_fields );
118
119        type_field joy_ball_fields[] = {
120                type_field( "id",      &joy_ball_event::id ),
121                type_field( "ball",    &joy_ball_event::ball ),
122                type_field( "rx",      &joy_ball_event::rx ),
123                type_field( "ry",      &joy_ball_event::ry ),
124        };
125        db->create_type<joy_ball_event>("joy_ball_event").fields( joy_ball_fields );
126
127        type_field system_fields[] = {
128                type_field( "sys_type", &system_event::sys_type ),
129                type_field( "param1",   &system_event::param1 ),
130                type_field( "param2",   &system_event::param2 ),
131        };
132        db->create_type<system_event>("system_event").fields( system_fields );
133}
Note: See TracBrowser for help on using the repository browser.