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

Last change on this file since 523 was 505, checked in by epyon, 9 years ago
  • several STL updates
  • several minor fixes
File size: 5.2 KB
Line 
1// Copyright (C) 2012-2015 ChaosForge Ltd
2// http://chaosforge.org/
3//
4// This file is part of Nova libraries.
5// For conditions of distribution and use, see copying.txt file in root folder.
6
7#include "nv/core/io_event.hh"
8
9#include "nv/core/logging.hh"
10#include "nv/core/types.hh"
11
12using namespace nv;
13
14const char* nv::get_key_name( key_code key )
15{
16        switch ( key )
17        {
18#       define NV_KEY( id, val ) case id : return #id;
19#               include <nv/detail/key_list.inc>
20#       undef NV_KEY
21        NV_RETURN_COVERED_DEFAULT( "KEY_UNKNOWN" );
22        };
23}
24
25const char* nv::get_mouse_name( mouse_code button )
26{
27        switch ( button )
28        {
29#       define NV_MOUSE( id, val ) case id : return #id;
30#               include <nv/detail/mouse_list.inc>
31#       undef NV_MOUSE
32        NV_RETURN_COVERED_DEFAULT( "MOUSE_UNKNOWN" );
33        };
34}
35
36const char* nv::get_io_event_name( io_event_code event )
37{
38        switch ( event )
39        {
40#       define NV_IO_EVENT( id ) case id : return #id;
41#               include <nv/detail/io_event_list.inc>
42#       undef NV_IO_EVENT
43        NV_RETURN_COVERED_DEFAULT( "EV_UNKNOWN" );
44        };
45}
46
47void nv::log_event( const io_event& e )
48{
49        NV_LOG_INFO( "Event: ", get_io_event_name( e.type ) );
50}
51
52void nv::register_io_types( type_database* db )
53{
54        db->create_type<key_code>()
55#       define NV_KEY( id, val ) .value( #id, val )
56#               include <nv/detail/key_list.inc>
57#       undef NV_KEY
58        ;
59
60        db->create_type<mouse_code>()
61#       define NV_MOUSE( id, val ) .value( #id, val )
62#               include <nv/detail/mouse_list.inc>
63#       undef NV_MOUSE
64        ;
65
66        db->create_type<io_event_code>()
67#       define NV_IO_EVENT( id ) .value( #id, id )
68#               include <nv/detail/io_event_list.inc>
69#       undef NV_IO_EVENT
70        ;
71
72        db->create_type<key_event>()
73                .field( "window_id",&key_event::window_id )
74                .field( "ascii",    &key_event::ascii )
75                .field( "code",     &key_event::code )
76                .field( "shift",    &key_event::shift )
77                .field( "control",  &key_event::control )
78                .field( "alt",      &key_event::alt )
79                .field( "pressed",  &key_event::pressed );
80
81        db->create_type<mouse_button_event>()
82                .field( "window_id",&mouse_button_event::window_id )
83                .field( "x",        &mouse_button_event::x )
84                .field( "y",        &mouse_button_event::y )
85                .field( "button",   &mouse_button_event::button )
86                .field( "pressed",  &mouse_button_event::pressed )
87                .field( "code",     &mouse_button_event::code );
88
89        db->create_type<mouse_move_event>()
90                .field( "window_id",&mouse_move_event::window_id )
91                .field( "x",        &mouse_move_event::x )
92                .field( "y",        &mouse_move_event::y )
93                .field( "rx",       &mouse_move_event::rx )
94                .field( "ry",       &mouse_move_event::ry )
95                .field( "pressed",  &mouse_move_event::pressed )
96                .field( "code",     &mouse_move_event::code );
97
98        db->create_type<mouse_wheel_event>()
99                .field( "window_id",&mouse_wheel_event::window_id )
100                .field( "x",        &mouse_wheel_event::x )
101                .field( "y",        &mouse_wheel_event::y );
102
103        db->create_type<pad_button_event>()
104                .field( "id",      &pad_button_event::id )
105                .field( "button",  &pad_button_event::button )
106                .field( "pressed", &pad_button_event::pressed );
107
108        db->create_type<pad_axis_event>()
109                .field( "id",      &pad_axis_event::id )
110                .field( "axis",    &pad_axis_event::axis )
111                .field( "value",   &pad_axis_event::value );
112
113        db->create_type<joy_button_event>()
114                .field( "id",      &joy_button_event::id )
115                .field( "button",  &joy_button_event::button )
116                .field( "pressed", &joy_button_event::pressed );
117
118        db->create_type<joy_axis_event>()
119                .field( "id",      &joy_axis_event::id )
120                .field( "axis",    &joy_axis_event::axis )
121                .field( "value",   &joy_axis_event::value );
122
123        db->create_type<joy_hat_event>()
124                .field( "id",      &joy_hat_event::id )
125                .field( "hat",     &joy_hat_event::hat )
126                .field( "value",   &joy_hat_event::value );
127
128        db->create_type<joy_ball_event>()
129                .field( "id",      &joy_ball_event::id )
130                .field( "ball",    &joy_ball_event::ball )
131                .field( "rx",      &joy_ball_event::rx )
132                .field( "ry",      &joy_ball_event::ry );
133
134        db->create_type<resize_event>()
135                .field( "x",       &resize_event::x )
136                .field( "y",       &resize_event::y );
137
138        db->create_type<active_event>()
139                .field( "gain",    &active_event::gain );
140
141        db->create_type<system_event>()
142                .field( "sys_type", &system_event::sys_type )
143                .field( "param1",   &system_event::param1 )
144                .field( "param2",   &system_event::param2 );
145
146        db->create_type<io_event>()
147                .field( "type", &io_event::type )
148                .union_field( "key",     &io_event::key,    "type", EV_KEY )
149                .union_field( "mbutton", &io_event::mbutton,"type", EV_MOUSE_BUTTON )
150                .union_field( "mmove",   &io_event::mmove,  "type", EV_MOUSE_MOVE )
151                .union_field( "mwheel",  &io_event::mwheel, "type", EV_MOUSE_WHEEL )
152                .union_field( "pbutton", &io_event::pbutton,"type", EV_PAD_BUTTON )
153                .union_field( "paxis",   &io_event::paxis,  "type", EV_PAD_AXIS )
154                .union_field( "jbutton", &io_event::jbutton,"type", EV_JOY_BUTTON )
155                .union_field( "jaxis",   &io_event::jaxis,  "type", EV_JOY_AXIS )
156                .union_field( "jhat",    &io_event::jhat,   "type", EV_JOY_HAT )
157                .union_field( "jball",   &io_event::jball,  "type", EV_JOY_BALL )
158                .union_field( "resize",  &io_event::resize, "type", EV_ACTIVE )
159                .union_field( "active",  &io_event::active, "type", EV_RESIZE )
160                .union_field( "system",  &io_event::system, "type", EV_SYSTEM );
161
162}
Note: See TracBrowser for help on using the repository browser.