This repository has been archived by the owner on Feb 11, 2021. It is now read-only.
/
SDL_pgevents.c
130 lines (112 loc) · 3.79 KB
1
2
/*
SDL - Simple DirectMedia Layer
3
Copyright (C) 1997-2006 Sam Lantinga
4
5
This library is free software; you can redistribute it and/or
6
modify it under the terms of the GNU Lesser General Public
7
License as published by the Free Software Foundation; either
8
version 2.1 of the License, or (at your option) any later version.
9
10
11
12
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
Lesser General Public License for more details.
14
15
16
17
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18
19
20
21
22
23
24
Sam Lantinga
slouken@libsdl.org
Micah Dowty
micahjd@users.sourceforge.net
*/
25
#include "SDL_config.h"
26
27
#include "SDL.h"
28
29
#include "../../events/SDL_sysevents.h"
#include "../../events/SDL_events_c.h"
30
31
32
#include "SDL_pgvideo.h"
#include "SDL_pgevents_c.h"
33
34
int
PG_HandleClose (struct pgEvent *evt)
35
{
36
37
SDL_PrivateQuit ();
return 1; /* Intercept the event's normal quit handling */
38
39
}
40
41
int
PG_HandleResize (struct pgEvent *evt)
42
{
43
44
SDL_PrivateResize (evt->e.size.w, evt->e.size.h);
return 0;
45
46
}
47
48
int
PG_HandleKey (struct pgEvent *evt)
49
{
50
51
52
53
54
55
SDL_keysym sym;
SDL_memset (&sym, 0, sizeof (sym));
sym.sym = evt->e.kbd.key;
sym.mod = evt->e.kbd.mods;
SDL_PrivateKeyboard (evt->type == PG_WE_KBD_KEYDOWN, &sym);
return 0;
56
57
}
58
59
int
PG_HandleChar (struct pgEvent *evt)
60
{
61
62
63
64
65
66
SDL_keysym sym;
SDL_memset (&sym, 0, sizeof (sym));
sym.unicode = evt->e.kbd.key;
sym.mod = evt->e.kbd.mods;
SDL_PrivateKeyboard (evt->type == PG_WE_KBD_KEYDOWN, &sym);
return 0;
67
68
}
69
70
71
72
73
74
75
76
77
78
79
int
PG_HandleMouseButton (struct pgEvent *evt)
{
/* We need to focus the canvas when it's clicked */
if (evt->extra) {
SDL_VideoDevice *this = (SDL_VideoDevice *) evt->extra;
pgFocus (this->hidden->wCanvas);
}
SDL_PrivateMouseButton (evt->type == PG_WE_PNTR_DOWN, evt->e.pntr.chbtn,
evt->e.pntr.x, evt->e.pntr.y);
return 0;
80
81
}
82
83
int
PG_HandleMouseMotion (struct pgEvent *evt)
84
{
85
86
SDL_PrivateMouseMotion (evt->e.pntr.btn, 0, evt->e.pntr.x, evt->e.pntr.y);
return 0;
87
88
}
89
90
void
PG_PumpEvents (_THIS)
91
{
92
93
/* Process all pending events */
pgEventPoll ();
94
95
}
96
97
void
PG_InitOSKeymap (_THIS)
98
{
99
/* We need no keymap */
100
101
}
102
103
void
PG_InitEvents (_THIS)
104
{
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
/* Turn on all the mouse and keyboard triggers for our canvas, normally less important
* events like mouse movement are ignored to save bandwidth. */
pgSetWidget (this->hidden->wCanvas, PG_WP_TRIGGERMASK,
pgGetWidget (this->hidden->wCanvas, PG_WP_TRIGGERMASK) |
PG_TRIGGER_UP | PG_TRIGGER_DOWN | PG_TRIGGER_MOVE |
PG_TRIGGER_KEYUP | PG_TRIGGER_KEYDOWN | PG_TRIGGER_CHAR, 0);
/* Start our canvas out focused, so we get keyboard input */
pgFocus (this->hidden->wCanvas);
/* Set up bindings for all the above event handlers */
pgBind (this->hidden->wApp, PG_WE_CLOSE, &PG_HandleClose, NULL);
pgBind (this->hidden->wCanvas, PG_WE_BUILD, &PG_HandleResize, NULL);
pgBind (this->hidden->wCanvas, PG_WE_KBD_CHAR, &PG_HandleChar, NULL);
pgBind (this->hidden->wCanvas, PG_WE_KBD_KEYUP, &PG_HandleKey, NULL);
pgBind (this->hidden->wCanvas, PG_WE_KBD_KEYDOWN, &PG_HandleKey, NULL);
pgBind (this->hidden->wCanvas, PG_WE_PNTR_MOVE, &PG_HandleMouseMotion,
NULL);
pgBind (this->hidden->wCanvas, PG_WE_PNTR_UP, &PG_HandleMouseButton,
NULL);
pgBind (this->hidden->wCanvas, PG_WE_PNTR_DOWN, &PG_HandleMouseButton,
this);
127
128
129
}
/* end of SDL_pgevents.c ... */
130
/* vi: set ts=4 sw=4 expandtab: */