1// LAF OS Library
2// Copyright (C) 2019-2021 Igara Studio S.A.
3//
4// This file is released under the terms of the MIT license.
5// Read LICENSE.txt for more information.
6
7#ifndef OS_WINDOW_SPEC_H_INCLUDED
8#define OS_WINDOW_SPEC_H_INCLUDED
9#pragma once
10
11#include "gfx/rect.h"
12#include "gfx/size.h"
13#include "os/screen.h"
14
15namespace os {
16
17 class Window;
18
19 class WindowSpec {
20 public:
21 // Position of the window by default
22 enum class Position {
23 Default, // Default position selected by the OS (e.g. on Windows it is CW_USEDEFAULT)
24 Frame, // Position the window in the exact frame() coordinates
25 ContentRect, // Position the window leaving the client area origin in the exact contentRect() coordinates
26 Center,
27 };
28
29 WindowSpec() {
30 }
31
32 WindowSpec(int width, int height, int scale = 1)
33 : m_contentRect(0, 0, width, height)
34 , m_scale(scale) {
35 }
36
37 Position position() const { return m_position; }
38 bool titled() const { return m_titled; }
39 bool borderless() const { return m_borderless; }
40 bool closable() const { return m_closable; }
41 bool maximizable() const { return m_maximizable; }
42 bool minimizable() const { return m_minimizable; }
43 bool resizable() const { return m_resizable; }
44 bool floating() const { return m_floating; }
45 bool transparent() const { return m_transparent; }
46
47 // Parent window used for floating windows
48 Window* parent() const { return m_parent; }
49
50 void position(const Position p) { m_position = p; }
51 void titled(const bool s) { m_titled = s; }
52 void borderless(const bool s) { m_borderless = s; }
53 void closable(const bool s) { m_closable = s; }
54 void maximizable(const bool s) { m_maximizable = s; }
55 void minimizable(const bool s) { m_minimizable = s; }
56 void resizable(const bool s) { m_resizable = s; }
57 void floating(const bool s) { m_floating = s; }
58 void transparent(const bool s) { m_transparent = s; }
59 void parent(Window* p) { m_parent = p; }
60
61 const gfx::Rect& frame() const { return m_frame; }
62 const gfx::Rect& contentRect() const { return m_contentRect; }
63 int scale() const { return m_scale; }
64 const ScreenRef& screen() const { return m_screen; }
65
66 void frame(const gfx::Rect& frame) { m_frame = frame; }
67 void contentRect(const gfx::Rect& contentRect) { m_contentRect = contentRect; }
68 void scale(const int scale) { m_scale = scale; }
69 void screen(const ScreenRef& screen) { m_screen = screen; }
70
71 private:
72 Position m_position = Position::Default;
73 bool m_titled = true;
74 bool m_borderless = false;
75 bool m_closable = true;
76 bool m_maximizable = true;
77 bool m_minimizable = true;
78 bool m_resizable = true;
79 bool m_floating = false;
80 bool m_transparent = false;
81 gfx::Rect m_frame;
82 gfx::Rect m_contentRect;
83 int m_scale = 1;
84 ScreenRef m_screen;
85 Window* m_parent = nullptr;
86 };
87
88} // namespace os
89
90#endif
91