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

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

style: remove trailing spaces, fix copyright statements.

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