Minor cosmetics.
[universe.git] / simple_window.h
1
2 // Written and (C) by Francois Fleuret
3 // Contact <francois.fleuret@idiap.ch> for comments & bug reports
4
5 #ifndef SIMPLE_WINDOW_H
6 #define SIMPLE_WINDOW_H
7
8 #include <iostream>
9 #include <fstream>
10
11 using namespace std;
12
13 #include <X11/Xlib.h>
14 #include <X11/Xutil.h>
15 #include <X11/XKBlib.h>
16
17 #ifdef CAIRO_SUPPORT
18 #include <cairo.h>
19 #include <cairo-xlib.h>
20 #endif
21
22 class SimpleEvent {
23 public:
24
25   enum {
26     NO_EVENT,
27     UNDEFINED,
28     MOUSE_CLICK_PRESS, MOUSE_CLICK_RELEASE,
29     MOUSE_MOTION,
30     KEY_PRESS, KEY_RELEASE
31   } type;
32
33   int x, y, button;
34   char key[32]; // This is the max length for the pressed key name ('a', 'Alt_L', etc.)
35   SimpleEvent();
36 };
37
38 class SimpleWindow {
39   Display *_display;
40   int _screen;
41   Visual *_visual;
42   Window _window;
43   Pixmap _pixmap;
44   GC _gc;
45
46 #ifdef CAIRO_SUPPORT
47   cairo_t *_cairo_context;
48   cairo_surface_t *_cairo_surface;
49 #endif
50
51 protected:
52   int _red_mask, _green_mask, _blue_mask;
53   int _red_shift, _green_shift, _blue_shift;
54   int _width, _height;
55
56 public:
57   SimpleWindow(const char *name, int x, int y, int w, int h);
58   virtual ~SimpleWindow();
59
60   virtual int width();
61   virtual int height();
62
63   virtual void map();
64   virtual void unmap();
65   virtual void color(float red, float green, float blue);
66   virtual void draw_point(int x, int y);
67   virtual void draw_line(int x1, int y1, int x2, int y2);
68   virtual void draw_circle(int x, int y, int r);
69   virtual void draw_text(const char *s, int x, int y);
70   virtual void fill_rectangle(int x, int y, int w, int h);
71   virtual void fill_polygon(int nb, int *x, int *y);
72   virtual void show();
73   virtual void fill();
74
75   virtual int file_descriptor();
76   virtual SimpleEvent event();
77
78 #ifdef CAIRO_SUPPORT
79   virtual cairo_t *get_cairo_context_resource();
80 #endif
81 };
82
83 #endif