source: abuse/trunk/src/imlib/jwindow.hpp @ 119

Last change on this file since 119 was 119, checked in by Sam Hocevar, 12 years ago
  • The small jwindow constructor can now take a name argument.
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.hpp"
13#include "image.hpp"
14#include "event.hpp"
15#include "filter.hpp"
16#include "event.hpp"
17#include "fonts.hpp"
18
19class ifield;
20class window_manager;
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 input_manager
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  input_manager(image *Screen, ifield *First);
42  input_manager(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  ~input_manager();
55} ;
56
57class ifield
58{
59    friend class jwindow;
60    friend class input_manager;
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, input_manager *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 input_manager;
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    input_manager *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 window_manager
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    window_manager(image *, palette *, int hi, int med, int low, JCFont *);
156    ~window_manager();
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.