display_window.h Source File - ClanLib SDK
Description: display_window.h Source File

display_window.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Magnus Norddahl
27** Harry Storbacka
28** Kenneth Gangstoe
29*/
30
31#pragma once
32
33#include "../../Core/Signals/signal.h"
34#include "../display_target.h"
35#include <memory>
36
37#if !defined(WIN32) && !defined(__ANDROID__) && !defined(__APPLE__)
38// We prefer not to include Xlib.h in clanlib (to prevent namespace issues when "using namespace clan")
39struct _XDisplay;
40typedef struct _XDisplay Display;
41typedef unsigned long Window;
42#endif
43
44#if defined(__ANDROID__)
45struct ANativeWindow;
46#endif
47
48namespace clan
49{
52
53 class Sizef;
54 class Rectf;
55 class Display;
56 class GraphicContext;
57 class DisplayWindowMode;
58 class DisplayWindowDescription;
59 struct DisplayWindowHandle;
60 class InputDevice;
61 class Pointf;
62 class Cursor;
63 class DisplayWindowProvider;
64 class DisplayWindow_Impl;
65 class PixelBuffer;
66
68 enum class StandardCursor
69 {
70 arrow,
71 appstarting,
72 cross,
73 hand,
74 ibeam,
75 no,
76 size_all,
77 size_nesw,
78 size_ns,
79 size_nwse,
80 size_we,
81 uparrow,
82 wait
83 };
84
85 struct DisplayWindowHandle
86 {
87#ifdef WIN32
88 HWND hwnd = 0;
89#elif defined(__ANDROID__)
90 ANativeWindow *window = 0;
91#elif defined(__APPLE__)
92#else
93 ::Display *display = 0;
94 ::Window window = 0;
95 int screen = -1;
96#endif
97 };
98
100 class DisplayWindow
101 {
102 public:
104 DisplayWindow();
105
115 DisplayWindow(
116 const std::string &title,
117 float width,
118 float height,
119 bool start_fullscreen = false,
120 bool allow_resize = false,
121 int flipping_buffers = 2);
122
127 DisplayWindow(
128 const DisplayWindowDescription &description);
129
133 DisplayWindow(std::unique_ptr<DisplayWindowProvider> provider);
134
135 ~DisplayWindow();
136
138 Rectf get_geometry() const;
139
141 Rectf get_viewport() const;
142
144 bool is_fullscreen() const;
145
147 bool has_focus() const;
148
150 GraphicContext& get_gc() const;
151
153 InputDevice &get_keyboard();
154
156 InputDevice &get_mouse();
157
159 std::vector<InputDevice> &get_game_controllers();
160
162 InputDevice &get_input_device(const std::string &device_name);
163
165 Signal<void()> &sig_lost_focus();
166
168 Signal<void()> &sig_got_focus();
169
171 Signal<void(float, float)> &sig_resize();
172
174 Signal<void()> &sig_paint();
175
177 Signal<void()> &sig_window_close();
178
180 Signal<void()> &sig_window_destroy();
181
183 Signal<void()> &sig_window_minimized();
184
186 Signal<void()> &sig_window_maximized();
187
189 Signal<void()> &sig_window_restored();
190
192 Signal<void()> &sig_window_moved();
193
195 Signal<void()> &sig_window_flip();
196
198 std::function<void(Rectf &)> &func_window_resize();
199
201 std::function<bool()> &func_minimize_clicked();
202
203#ifdef WIN32
205 std::function<bool(HWND, UINT, WPARAM, LPARAM)> &func_window_message();
206
208 Signal<void(HWND, UINT, WPARAM, LPARAM)> &sig_window_message();
209#endif
210
212 bool is_null() const { return !impl; }
213 explicit operator bool() const { return bool(impl); }
214
216 void throw_if_null() const;
217
219 bool is_visible() const;
220
222 bool is_minimized() const;
223
225 bool is_maximized() const;
226
228 DisplayWindowProvider *get_provider() const;
229
231 bool is_clipboard_text_available() const;
232
234 bool is_clipboard_image_available() const;
235
237 std::string get_clipboard_text() const;
238
241 PixelBuffer get_clipboard_image() const;
242
244 Sizef get_minimum_size(bool client_area = false);
245
247 Sizef get_maximum_size(bool client_area = false);
248
250 std::string get_title() const;
251
254 DisplayWindowHandle get_handle() const;
255
257 Pointf client_to_screen(const Pointf &client);
258
260 Pointf screen_to_client(const Pointf &screen);
261
263 void capture_mouse(bool capture);
264
266 void request_repaint();
267
269 void set_title(const std::string &title);
270
275 void set_position(const Rectf &pos, bool client_area);
276
281 void set_position(float x, float y);
282
286 void set_enabled(bool enable);
287
292 void set_visible(bool visible, bool activate);
293
299 void set_size(float width, float height, bool client_area);
300
302 void set_minimum_size(float width, float height, bool client_area);
303
305 void set_maximum_size(float width, float height, bool client_area);
306
308 void minimize();
309
311 void restore();
312
314 void maximize();
315
317 void toggle_fullscreen();
318
320 void show(bool activate = true);
321
323 void hide();
324
326 void bring_to_front();
327
339 void flip(int interval = -1);
340
342 void show_cursor();
343
345 void set_cursor(const Cursor &cursor);
346
350 void set_cursor(StandardCursor type);
351
352#ifdef WIN32
354 void set_cursor_handle(HCURSOR cursor);
355#endif
356
358 void hide_cursor();
359
361 void set_clipboard_text(const std::string &text);
362
364 void set_clipboard_image(const PixelBuffer &buf);
365
367 void set_large_icon(const PixelBuffer &image);
368
370 void set_small_icon(const PixelBuffer &image);
371
376 void enable_alpha_channel(const Rectf &blur_rect);
377
381 void extend_frame_into_client_area(float left, float top, float right, float bottom);
382
383 private:
384 std::shared_ptr<DisplayWindow_Impl> impl;
385 };
386
388}
clan::Cursor
Mouse cursor class.
Definition cursor.h:47
clan::DisplayWindowDescription
Display window description class.
Definition display_window_description.h:50
clan::DisplayWindowProvider
Interface for implementing a DisplayWindow target.
Definition display_window_provider.h:99
clan::DisplayWindow::minimize
void minimize()
Minimizes the window.
clan::DisplayWindow::set_clipboard_text
void set_clipboard_text(const std::string &text)
Stores text in the clipboard.
clan::DisplayWindow::hide
void hide()
Hides the window.
clan::DisplayWindow::set_position
void set_position(const Rectf &pos, bool client_area)
Set window position and size.
clan::DisplayWindow::DisplayWindow
DisplayWindow(const DisplayWindowDescription &description)
Constructs a window.
clan::DisplayWindow::get_clipboard_text
std::string get_clipboard_text() const
Returns the text stored in the clipboard.
clan::DisplayWindow::has_focus
bool has_focus() const
Returns true if window has focus.
clan::DisplayWindow::hide_cursor
void hide_cursor()
Hides the mouse cursor.
clan::DisplayWindow::set_title
void set_title(const std::string &title)
Change window title.
clan::DisplayWindow::sig_window_close
Signal< void()> & sig_window_close()
Signal emitted when window is closed.
clan::DisplayWindow::set_visible
void set_visible(bool visible, bool activate)
Set visible.
clan::DisplayWindow::sig_window_flip
Signal< void()> & sig_window_flip()
Signal emitted when window flip() was called.
clan::DisplayWindow::restore
void restore()
Restores the window.
clan::DisplayWindow::sig_window_moved
Signal< void()> & sig_window_moved()
Signal emitted after a window has been moved.
clan::DisplayWindow::set_cursor
void set_cursor(StandardCursor type)
Set cursor.
clan::DisplayWindow::set_clipboard_image
void set_clipboard_image(const PixelBuffer &buf)
Stores an image in the clipboard.
clan::DisplayWindow::set_maximum_size
void set_maximum_size(float width, float height, bool client_area)
Maximum size a window can be resized to by the application user.
clan::DisplayWindow::set_size
void set_size(float width, float height, bool client_area)
Resize window.
clan::DisplayWindow::is_maximized
bool is_maximized() const
Returns true if the window is maximized.
clan::DisplayWindow::get_geometry
Rectf get_geometry() const
Returns the position and size of the window frame.
clan::DisplayWindow::is_fullscreen
bool is_fullscreen() const
Returns true if window is currently running fullscreen.
clan::DisplayWindow::~DisplayWindow
~DisplayWindow()
clan::DisplayWindow::is_null
bool is_null() const
Returns true if this object is invalid.
Definition display_window.h:212
clan::DisplayWindow::show
void show(bool activate=true)
Displays the window in its current size and position.
clan::DisplayWindow::capture_mouse
void capture_mouse(bool capture)
Capture/Release the mouse.
clan::DisplayWindow::get_mouse
InputDevice & get_mouse()
Returns the mouse input device.
clan::DisplayWindow::get_game_controllers
std::vector< InputDevice > & get_game_controllers()
Returns the game controller input device.
clan::DisplayWindow::get_gc
GraphicContext & get_gc() const
Return the graphic context for the window.
clan::DisplayWindow::set_large_icon
void set_large_icon(const PixelBuffer &image)
Sets the large icon used for this window.
clan::DisplayWindow::get_clipboard_image
PixelBuffer get_clipboard_image() const
Returns an image stored in the clipboard.
clan::DisplayWindow::bring_to_front
void bring_to_front()
Raises the window on top of other windows.
clan::DisplayWindow::is_clipboard_text_available
bool is_clipboard_text_available() const
Returns true if text is available in the clipboard.
clan::DisplayWindow::get_input_device
InputDevice & get_input_device(const std::string &device_name)
Returns the input device with the given device name.
clan::DisplayWindow::sig_resize
Signal< void(float, float)> & sig_resize()
Signal emitted when window is resized.
clan::DisplayWindow::sig_window_maximized
Signal< void()> & sig_window_maximized()
Signal emitted when window is maximized.
clan::DisplayWindow::set_minimum_size
void set_minimum_size(float width, float height, bool client_area)
Minimum size a window can be resized to by the application user.
clan::DisplayWindow::request_repaint
void request_repaint()
Invalidates the screen, causing a repaint.
clan::DisplayWindow::DisplayWindow
DisplayWindow(std::unique_ptr< DisplayWindowProvider > provider)
Constructs a window.
clan::DisplayWindow::get_minimum_size
Sizef get_minimum_size(bool client_area=false)
Returns the minimum size the window can be resized to by the application user.
clan::DisplayWindow::extend_frame_into_client_area
void extend_frame_into_client_area(float left, float top, float right, float bottom)
Exend the window frame into the client area.
clan::DisplayWindow::enable_alpha_channel
void enable_alpha_channel(const Rectf &blur_rect)
Enable alpha channel for this window.
clan::DisplayWindow::get_handle
DisplayWindowHandle get_handle() const
clan::DisplayWindow::sig_paint
Signal< void()> & sig_paint()
Signal emitted when the window is invalidated.
clan::DisplayWindow::func_minimize_clicked
std::function< bool()> & func_minimize_clicked()
Callback called when a window is asked to minimize itself.
clan::DisplayWindow::sig_window_minimized
Signal< void()> & sig_window_minimized()
Signal emitted when window is minimized.
clan::DisplayWindow::sig_got_focus
Signal< void()> & sig_got_focus()
Signal emitted when window gain focus.
clan::DisplayWindow::is_visible
bool is_visible() const
returns true if this display window is visible
clan::DisplayWindow::flip
void flip(int interval=-1)
Flip back buffer to front, making changes visible on screen.
clan::DisplayWindow::func_window_resize
std::function< void(Rectf &)> & func_window_resize()
Callback called when a window is being resized.
clan::DisplayWindow::get_keyboard
InputDevice & get_keyboard()
Returns the keyboard input device.
clan::DisplayWindow::set_small_icon
void set_small_icon(const PixelBuffer &image)
Sets the small icon used for this window.
clan::DisplayWindow::is_minimized
bool is_minimized() const
Returns true if the window is minimized.
clan::DisplayWindow::get_maximum_size
Sizef get_maximum_size(bool client_area=false)
Returns the maximum size the window can be resized to by the application user.
clan::DisplayWindow::DisplayWindow
DisplayWindow()
Constructs a null instance.
clan::DisplayWindow::sig_window_destroy
Signal< void()> & sig_window_destroy()
Signal emitted when window is destroyed.
clan::DisplayWindow::sig_window_restored
Signal< void()> & sig_window_restored()
Signal emitted when window is restored.
clan::DisplayWindow::get_provider
DisplayWindowProvider * get_provider() const
Returns the display window provider.
clan::DisplayWindow::get_viewport
Rectf get_viewport() const
Returns the drawable area of the window (excluding window frame).
clan::DisplayWindow::set_cursor
void set_cursor(const Cursor &cursor)
Sets the current cursor icon.
clan::DisplayWindow::toggle_fullscreen
void toggle_fullscreen()
Toggle fullscreen.
clan::DisplayWindow::maximize
void maximize()
Maximizes the window.
clan::DisplayWindow::screen_to_client
Pointf screen_to_client(const Pointf &screen)
Convert from screen coordinates to client coordinates.
clan::DisplayWindow::get_title
std::string get_title() const
Returns the window title.
clan::DisplayWindow::is_clipboard_image_available
bool is_clipboard_image_available() const
Returns true if an image is available in the clipboard.
clan::DisplayWindow::client_to_screen
Pointf client_to_screen(const Pointf &client)
Convert from window client coordinates to screen coordinates.
clan::DisplayWindow::sig_lost_focus
Signal< void()> & sig_lost_focus()
Signal emitted when window lost focus.
clan::DisplayWindow::DisplayWindow
DisplayWindow(const std::string &title, float width, float height, bool start_fullscreen=false, bool allow_resize=false, int flipping_buffers=2)
Constructs a window.
clan::DisplayWindow::set_enabled
void set_enabled(bool enable)
Set enabled.
clan::DisplayWindow::set_position
void set_position(float x, float y)
Set window position.
clan::DisplayWindow::throw_if_null
void throw_if_null() const
Throw an exception if this object is invalid.
clan::DisplayWindow::show_cursor
void show_cursor()
Shows the mouse cursor.
clan::GraphicContext
Interface to drawing graphics.
Definition graphic_context.h:257
clan::InputDevice
InputDevice.
Definition input_device.h:47
clan::PixelBuffer
Pixel data container.
Definition pixel_buffer.h:68
clan::Pointf
2D (x,y) point structure - Float
Definition point.h:72
clan::Rectf
2D (left,top,right,bottom) rectangle structure - Float
Definition rect.h:460
clan::Signal
Definition signal.h:105
clan::Sizef
2D (width,height) size structure - Float
Definition size.h:189
clan::Handedness::right
@ right
Definition mat4.h:47
clan::Handedness::left
@ left
Definition mat4.h:46
clan::StandardCursor
StandardCursor
Standard Cursor.
Definition display_window.h:69
clan::StandardCursor::size_nesw
@ size_nesw
Definition display_window.h:77
clan::StandardCursor::appstarting
@ appstarting
Definition display_window.h:71
clan::StandardCursor::cross
@ cross
Definition display_window.h:72
clan::StandardCursor::size_nwse
@ size_nwse
Definition display_window.h:79
clan::StandardCursor::wait
@ wait
Definition display_window.h:82
clan::StandardCursor::hand
@ hand
Definition display_window.h:73
clan::StandardCursor::size_we
@ size_we
Definition display_window.h:80
clan::StandardCursor::ibeam
@ ibeam
Definition display_window.h:74
clan::StandardCursor::size_all
@ size_all
Definition display_window.h:76
clan::StandardCursor::no
@ no
Definition display_window.h:75
clan::StandardCursor::arrow
@ arrow
Definition display_window.h:70
clan::StandardCursor::size_ns
@ size_ns
Definition display_window.h:78
clan::StandardCursor::uparrow
@ uparrow
Definition display_window.h:81
clan
Definition clanapp.h:36
clan::BrushType::image
@ image
Definition brush.h:54
clan::Key::y
@ y
Definition keys.h:105
clan::Key::x
@ x
Definition keys.h:104
clan::DisplayWindowHandle
Definition display_window.h:86
clan::DisplayWindowHandle::display
::Display * display
Definition display_window.h:93
clan::DisplayWindowHandle::window
::Window window
Definition display_window.h:94
clan::DisplayWindowHandle::screen
int screen
Definition display_window.h:95