Completed
Push — master ( 6cf062...43f138 )
by Matthew
01:00
created

ed2d.platforms.SystemEvents   A

Complexity

Total Complexity 13

Size/Duplication

Total Lines 57
Duplicated Lines 0 %
Metric Value
dl 0
loc 57
rs 10
wmc 13

2 Methods

Rating   Name   Duplication   Size   Complexity  
F process() 0 52 12
A __init__() 0 2 1
1
import ctypes as ct
2
3
import sdl2 as sdl
4
5
from ed2d.platforms import sdl2keymap as keymap
6
from ed2d.events import Events
7
8
class SystemEvents(object):
9
    ''' Handles Event stuff... '''
10
    def __init__(self):
11
        sdl.SDL_InitSubSystem(sdl.SDL_INIT_EVENTS)
12
13
    def process(self):
14
        '''
15
        Processes the events polled from sdl.
16
        Custom events might be a possiblility if we need them.
17
        '''
18
19
        event = sdl.SDL_Event()
20
21
        while sdl.SDL_PollEvent(ct.byref(event)):
22
23
            eventName = None
24
            data = None
25
26
            if event.type == sdl.SDL_QUIT:
27
                eventName = 'quit'
28
                data = ()
29
            elif event.type == sdl.SDL_MOUSEMOTION:
30
                eventName = 'mouse_move'
31
                data = (event.motion.x, event.motion.y)
32
            elif event.type == sdl.SDL_WINDOWEVENT:
33
                winEvent = event.window
34
                wEventName = event.window.event
35
                # For now this will only support one window
36
                # If we want two later on then we can do it then.
37
                if wEventName == sdl.SDL_WINDOWEVENT_CLOSE:
38
                    eventName = 'window_close'
39
                    data = (winEvent.windowID)
40
                elif wEventName == sdl.SDL_WINDOWEVENT_RESIZED:
41
                    eventName = 'window_resized'
42
                    data = (winEvent.windowID, winEvent.data1, winEvent.data2)
43
44
            elif event.type == sdl.SDL_KEYUP:
45
                if not event.key.repeat:
46
                    eventName = 'key_up'
47
                    keyID = keymap.keymap[event.key.keysym.scancode]
48
                    keyName = keymap.process_key_char(event.key.keysym.sym)
49
                    modKeys = keymap.process_modkeys(event.key.keysym.mod)
50
                    data = (keyName, keyID, modKeys)
51
52
            elif event.type == sdl.SDL_KEYDOWN:
53
                if not event.key.repeat:
54
                    eventName = 'key_down'
55
                    keyID = keymap.keymap[event.key.keysym.scancode]
56
                    keyName = keymap.process_key_char(event.key.keysym.sym)
57
                    modKeys = keymap.process_modkeys(event.key.keysym.mod)
58
                    data = (keyName, keyID, modKeys)
59
            else:
60
                # Will add more event types later
61
                pass
62
63
            if eventName is not None:
64
                Events.broadcast_event(eventName, data)
65
66
__all__ = ['Events']
67