File: event.hpp

package info (click to toggle)
abuse 2.00-12
  • links: PTS
  • area: main
  • in suites: slink
  • size: 12,708 kB
  • ctags: 15,389
  • sloc: ansic: 115,852; cpp: 6,792; lisp: 2,066; sh: 1,734; makefile: 1,601; asm: 264
file content (68 lines) | stat: -rw-r--r-- 2,011 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#ifndef __EVENT_HPP_
#define __EVENT_HPP_
#define EV_MOUSE_MOVE     1
#define EV_MOUSE_BUTTON   2
#define EV_KEY            4
#define EV_KEY_SPECIAL    8
#define EV_REDRAW        16 
#define EV_SPURIOUS      32 
#define EV_RESIZE        64
#define EV_KEYRELEASE   128
#define EV_CLOSE_WINDOW 256
#define EV_DRAG_WINDOW  512
#define EV_MESSAGE     1024

#define LEFT_BUTTON    1
#define RIGHT_BUTTON   2
#define MIDDLE_BUTTON  4
#include "keys.hpp"
#include "sprite.hpp"
#include "mouse.hpp"

class jwindow;

class event : public linked_node
{
public :
  int                             type;
  struct { int x,y; }             mouse_move;
  int                             mouse_button;
  int                             key;
  struct { char alt,ctrl,shift; } key_special;
  struct { int x1,y1,x2,y2;
	   void *start; }         redraw;
  jwindow                        *window;      // NULL is root
  struct { int x,y; }             window_position;
  struct { int id; char *data; }  message;
  event(int id, char *data) { type=EV_MESSAGE; message.id=id; message.data=data; }
  event() { type=EV_SPURIOUS; }
} ;

class event_handler
{
  sprite_controller sc;
  int mhere,ewaiting,last_keystat,last_key;
  int get_key_flags();
  linked_list events;
public :
  JCMouse *mouse;
  sprite *mouse_sprite() { return mouse->mouse_sprite(); }
  event_handler(image *screen, palette *pal);
  int event_waiting();
  void get_event(event &ev);
  void add_redraw(int X1, int Y1, int X2, int Y2, void *Start);
  void mouse_status(int &x, int &y, int &button)
  { if (mouse)
    {
      x=mouse->x(); y=mouse->y(); button=mouse->button(); 
    } else x=y=button=0;
  }
  void push_event(event *ev) { events.add_end((linked_node *)ev); }
  void flush_screen();
  int has_mouse() { return mouse->exsist(); }
  void set_mouse_shape(image *im, int centerx, int centery) { mouse->set_shape(im,-centerx,-centery); }
  void set_mouse_position(int mx, int my) { if (mouse) mouse->set_position(mx,my); }
  ~event_handler();
} ;
#endif