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
|