source: abuse/trunk/src/imlib/event.h @ 669

Last change on this file since 669 was 669, checked in by Sam Hocevar, 11 years ago

imlib: clean up the Sprite class and get rid of the dead sprite
controller code.

  • Property svn:keywords set to Id
File size: 2.2 KB
Line 
1/*
2 *  Abuse - dark 2D side-scrolling platform game
3 *  Copyright (c) 1995 Crack dot Com
4 *  Copyright (c) 2005-2011 Sam Hocevar <sam@hocevar.net>
5 *
6 *  This software was released into the Public Domain. As with most public
7 *  domain software, no warranty is made or implied by Crack dot Com, by
8 *  Jonathan Clark, or by Sam Hocevar.
9 */
10
11#ifndef __EVENT_HPP_
12#define __EVENT_HPP_
13#define EV_MOUSE_MOVE     1
14#define EV_MOUSE_BUTTON   2
15#define EV_KEY            4
16#define EV_KEY_SPECIAL    8
17#define EV_REDRAW        16
18#define EV_SPURIOUS      32
19#define EV_RESIZE        64
20#define EV_KEYRELEASE   128
21#define EV_CLOSE_WINDOW 256
22#define EV_DRAG_WINDOW  512
23#define EV_MESSAGE     1024
24
25#define LEFT_BUTTON    1
26#define RIGHT_BUTTON   2
27#define MIDDLE_BUTTON  4
28
29#include "keys.h"
30#include "sprite.h"
31
32class Jwindow;
33
34class Event : public linked_node
35{
36public:
37    Event()
38    {
39        type = EV_SPURIOUS;
40    }
41
42    Event(int id, char *data)
43    {
44        type = EV_MESSAGE;
45        message.id = id;
46        message.data = data;
47    }
48
49    int type;
50    vec2i mouse_move;
51    int mouse_button, key;
52
53    struct { char alt, ctrl, shift; } key_special;
54    struct { int x1, y1, x2, y2; void *start; } redraw;
55
56    Jwindow *window;      // NULL is root
57    vec2i window_position;
58    struct { int id; char *data; } message;
59};
60
61class EventHandler
62{
63public:
64    EventHandler(image *screen, palette *pal);
65    ~EventHandler();
66
67    void Push(Event *ev)
68    {
69        m_events.add_end(ev);
70    }
71
72    void SysInit();
73    void SysWarpMouse(vec2i pos);
74    void SysEvent(Event &ev);
75
76  int IsPending();
77  void Get(Event &ev);
78  void add_redraw(int X1, int Y1, int X2, int Y2, void *Start);
79  void flush_screen();
80
81  int has_mouse() { return 1; }
82    void SetMouseShape(image *im, vec2i center)
83    {
84        m_sprite->SetVisual(im, 1);
85        m_center = center;
86    }
87    void SetMousePos(vec2i pos)
88    {
89        m_pos = vec2i(Min(Max(pos.x, 0), m_screen->Size().x - 1),
90                      Min(Max(pos.y, 0), m_screen->Size().y - 1));
91        SysWarpMouse(m_pos);
92    }
93
94private:
95    linked_list m_events;
96    int m_pending, last_key;
97
98    image *m_screen;
99
100protected:
101    /* Mouse information */
102    Sprite *m_sprite;
103    vec2i m_pos, m_center;
104    int m_button;
105};
106
107#endif
108
Note: See TracBrowser for help on using the repository browser.