]> git.tdb.fi Git - libs/gui.git/blob - source/graphics/window.h
Add a signal for window exposure
[libs/gui.git] / source / graphics / window.h
1 #ifndef MSP_GRAPHICS_WINDOW_H_
2 #define MSP_GRAPHICS_WINDOW_H_
3
4 #include <string>
5 #include <sigc++/signal.h>
6
7 namespace Msp {
8 namespace Graphics {
9
10 class Display;
11
12 struct WindowOptions
13 {
14         unsigned width;
15         unsigned height;
16         bool fullscreen;
17         bool resizable;
18
19         WindowOptions();
20 };
21
22 class Window
23 {
24 public:
25         struct Private;
26         struct Event;
27
28         /** Provides input events.  The event structure contents are platform-
29         specific.  Applications will want to use the enclosed Keyboard and Mouse
30         objects instead. */
31         sigc::signal<void, const Event &> signal_input_event;
32
33         sigc::signal<void, unsigned, unsigned> signal_resize;
34         sigc::signal<void, unsigned, unsigned, unsigned, unsigned, const Event &> signal_expose;
35         sigc::signal<void> signal_close;
36
37 protected:
38         Display &display;
39         WindowOptions options;
40         bool visible;
41         bool kbd_autorepeat;
42         bool touch_input;
43         bool resizing;
44         Private *priv;
45
46 public:
47         Window(Display &, unsigned w, unsigned h, bool fs = false);
48         Window(Display &, const WindowOptions &);
49 private:
50         void init();
51         void platform_init();
52         void platform_cleanup();
53 public:
54         virtual ~Window();
55
56         void set_title(const std::string &);
57         void reconfigure(const WindowOptions &);
58 private:
59         void platform_reconfigure(bool);
60 public:
61         void set_keyboard_autorepeat(bool);
62         bool get_keyboard_autorepeat() const { return kbd_autorepeat; }
63         void show_cursor(bool);
64         void warp_pointer(int, int);
65         void set_touch_input(bool);
66 private:
67         void platform_set_touch_input();
68 public:
69         bool get_touch_input() const { return touch_input; }
70
71         Display &get_display() const { return display; }
72         const WindowOptions &get_options() const { return options; }
73         virtual unsigned get_width() const { return options.width; }
74         virtual unsigned get_height() const { return options.height; }
75         const Private &get_private() const { return *priv; }
76
77         void show();
78         void hide();
79 private:
80         void platform_show();
81         void platform_hide();
82
83 public:
84         bool event(const Event &evnt);
85 };
86
87 } // namespace Graphics
88 } // namespace Msp
89
90 #endif