]> git.tdb.fi Git - libs/gui.git/blob - source/graphics/window.h
70b40443d3d84575f93f4fefc51ffa99119da2c1
[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> signal_close;
35
36 protected:
37         Display &display;
38         WindowOptions options;
39         bool visible;
40         bool kbd_autorepeat;
41         bool touch_input;
42         bool resizing;
43         Private *priv;
44
45 public:
46         Window(Display &, unsigned w, unsigned h, bool fs = false);
47         Window(Display &, const WindowOptions &);
48 private:
49         void init();
50         void platform_init();
51         void platform_cleanup();
52 public:
53         virtual ~Window();
54
55         void set_title(const std::string &);
56         void reconfigure(const WindowOptions &);
57 private:
58         void platform_reconfigure(bool);
59 public:
60         void set_keyboard_autorepeat(bool);
61         bool get_keyboard_autorepeat() const { return kbd_autorepeat; }
62         void show_cursor(bool);
63         void warp_pointer(int, int);
64         void set_touch_input(bool);
65 private:
66         void platform_set_touch_input();
67 public:
68         bool get_touch_input() const { return touch_input; }
69
70         Display &get_display() const { return display; }
71         const WindowOptions &get_options() const { return options; }
72         virtual unsigned get_width() const { return options.width; }
73         virtual unsigned get_height() const { return options.height; }
74         const Private &get_private() const { return *priv; }
75
76         void show();
77         void hide();
78 private:
79         void platform_show();
80         void platform_hide();
81
82 public:
83         bool event(const Event &evnt);
84 };
85
86 } // namespace Graphics
87 } // namespace Msp
88
89 #endif