source: abuse/trunk/src/imlib/jwindow.h @ 481

Last change on this file since 481 was 481, checked in by Sam Hocevar, 12 years ago

Fuck the history, I'm renaming all .hpp files to .h for my own sanity.

  • Property svn:keywords set to Id
File size: 5.4 KB
Line 
1/*
2 *  Abuse - dark 2D side-scrolling platform game
3 *  Copyright (c) 1995 Crack dot Com
4 *
5 *  This software was released into the Public Domain. As with most public
6 *  domain software, no warranty is made or implied by Crack dot Com or
7 *  Jonathan Clark.
8 */
9
10#ifndef __JWIN__
11#define __JWIN__
12#include "video.h"
13#include "image.h"
14#include "event.h"
15#include "filter.h"
16#include "event.h"
17#include "fonts.h"
18
19class ifield;
20class WindowManager;
21class Jwindow;
22
23extern int frame_top();
24extern int frame_bottom();
25extern int frame_left();
26extern int frame_right();
27
28void set_frame_size(int x);
29
30class InputManager
31{
32  friend class Jwindow;
33
34private:
35  image *screen;
36  ifield *first, *active, *grab;
37  Jwindow *cur, *owner;
38  int no_selections_allowed;
39
40public:
41  InputManager(image *Screen, ifield *First);
42  InputManager(Jwindow *owner, ifield *First);
43  void handle_event(event &ev, Jwindow *j);
44  ifield *get(int id);
45  void redraw();
46  void add(ifield *i);
47  void remap(filter *f);
48  ifield *unlink(int id);     // unlinks ID from fields list and return the pointer to it
49  ifield *current() { return active; }
50  void clear_current();
51  void grab_focus(ifield *i);
52  void release_focus();
53  void allow_no_selections();
54  ~InputManager();
55} ;
56
57class ifield
58{
59    friend class Jwindow;
60    friend class InputManager;
61
62protected:
63    Jwindow *owner;
64
65public :
66    ifield();
67    int x, y;
68
69    int id;
70    ifield *next;
71    virtual void set_owner(Jwindow *owner);
72    virtual void move(int newx, int newy) { x = newx; y = newy; }
73    virtual void area(int &x1, int &y1, int &x2, int &y2) = 0;
74    virtual void draw_first(image *screen) = 0;
75    virtual void draw(int active, image *screen) = 0;
76    virtual void handle_event(event &ev, image *screen, InputManager *im) = 0;
77    virtual int selectable() { return 1; }
78    virtual void remap(filter *f) { ; }
79    virtual char *read() = 0;
80    virtual ifield *find(int search_id) { if (id==search_id) return this; else return NULL; }
81    virtual ifield *unlink(int id) { return NULL; }
82    virtual ~ifield();
83} ;
84
85class Jwindow
86{
87    friend class InputManager;
88
89private:
90    char *_name;
91    bool _hidden;
92    bool _moveable;
93
94    void reconfigure();
95
96protected:
97    Jwindow *owner;
98    int _x1, _y1, _x2, _y2;
99
100public:
101    Jwindow *next;
102    int x, y, l, h, backg;
103    image *screen;
104    InputManager *inm;
105    void *local_info;  // pointer to info block for local system (may support windows)
106
107    Jwindow(char const *name = NULL);
108    Jwindow(int X, int Y, int L, int H, ifield *f, char const *name = NULL);
109    ~Jwindow();
110
111    virtual void redraw();
112    void resize(int L, int H);
113    void clear(int color = 0) { screen->bar(x1(), y1(), x2(), y2(), color); }
114    void show() { _hidden = false; }
115    void hide() { _hidden = true; }
116    bool is_hidden() { return _hidden; }
117    void freeze() { _moveable = false; }
118    void thaw() { _moveable = true; }
119    bool is_moveable() { return _moveable; }
120    int x1() { return _x1; }
121    int y1() { return _y1; }
122    int x2() { return _x2; }
123    int y2() { return _y2; }
124    void clip_in() { screen->set_clip(x1(), y1(), x2(), y2()); }
125    void clip_out() { screen->set_clip(0, 0, l - 1, h - 1); }
126    char *read(int id) { return inm->get(id)->read(); }
127    void local_close();
128
129    static int left_border();
130    static int right_border();
131    static int top_border();
132    static int bottom_border();
133};
134
135class WindowManager
136{
137    friend class Jwindow;
138
139protected:
140    void add_window(Jwindow *);
141    void remove_window(Jwindow *);
142
143public:
144    event_handler *eh;
145    Jwindow *first, *grab;
146    image *screen, *mouse_pic, *mouse_save;
147    palette *pal;
148    int hi, med, low, bk; // bright, medium, dark and black colors
149    int key_state[512];
150    enum { inputing, dragging } state;
151    int drag_mousex, drag_mousey, frame_suppress;
152    Jwindow *drag_window;
153    JCFont *fnt, *wframe_fnt;
154
155    WindowManager(image *, palette *, int hi, int med, int low, JCFont *);
156    ~WindowManager();
157
158    Jwindow *new_window(int x, int y, int l, int h,
159                        ifield *fields = NULL, char const *Name = NULL);
160
161    void set_frame_font(JCFont *fnt) { wframe_fnt = fnt; }
162    JCFont *frame_font() { return wframe_fnt; }
163    void close_window(Jwindow *j);
164    void resize_window(Jwindow *j, int l, int h);
165    void move_window(Jwindow *j, int x, int y);
166    void get_event(event &ev);
167    void push_event(event *ev) { eh->push_event(ev); }
168    int event_waiting() { return eh->event_waiting(); }
169    void flush_screen();
170    int bright_color() { return hi; }
171    int medium_color() { return med; }
172    int dark_color() { return low; }
173    int black() { return bk; }
174    void set_colors(int Hi, int Med, int Low) { hi=Hi; med=Med; low=Low; }
175    JCFont *font() { return fnt; }
176    int has_mouse() { return eh->has_mouse(); }
177    void mouse_status(int &x, int &y, int &button) {eh->mouse_status(x,y,button); }   
178    void set_mouse_shape(image *im, int centerx, int centery)
179    { eh->set_mouse_shape(im,centerx,centery); }
180
181    void set_mouse_position(int mx, int my)
182    { eh->set_mouse_position(mx,my); }
183
184    int key_pressed(int x) { return key_state[x]; }
185    void hide_windows();
186    void show_windows();
187    void hide_window(Jwindow *j);
188    void show_window(Jwindow *j);
189    void set_frame_suppress(int x) { frame_suppress=x; }
190    void grab_focus(Jwindow *j);
191    void release_focus();
192    int window_in_area(int x1, int y1, int x2, int y2); // true if a window lies in this area
193};
194
195#endif
196
197
Note: See TracBrowser for help on using the repository browser.