Max OS 0.3
Loading...
Searching...
No Matches
window.cpp
Go to the documentation of this file.
1
9#include <gui/window.h>
10#include <gui/widgets/text.h>
11
12using namespace MaxOS;
13using namespace MaxOS::gui;
14using namespace MaxOS::common;
15using namespace MaxOS::drivers;
16using namespace MaxOS::drivers::peripherals;
17
27Window::Window(int32_t left, int32_t top, uint32_t width, uint32_t height, const string& title_text)
28: CompositeWidget(left, top, width, height),
29 m_title(0, -(10 + 5) + 2, width - 2 * 5, 10 + 5 - 3, title_text),
30 m_mover(this),
31 m_resizer_top(this),
32 m_resizer_bottom(this),
33 m_resizer_left(this),
34 m_resizer_right(this),
35 m_resizer_top_left(this),
36 m_resizer_top_right(this),
37 m_resizer_bottom_left(this),
38 m_resizer_bottom_right(this)
39{
40
41 // Set the sizing
44
45 // Set the colours
46 area_colour = Colour(0xff, 0xff, 0xff); // White
47 frame_border_colour = Colour(0x00, 0x00, 0x00); // Black
48 frame_colour = Colour(0x57, 0x57, 0x57); // Davy's Grey
49 m_title.foreground_colour = Colour(0xff, 0xff, 0xff); // White
51
52 // Add the title to the window
53 Window::add_child(&m_title);
54
55}
56
64: CompositeWidget(0, 0, contained_widget->position().width + 2 * 5 + 2, contained_widget->position().height + 2 * 5 + 10 + 2),
65 m_title(0, -(10 + 5) + 2, contained_widget->position().width, 10 + 5 - 3, title_text),
66 m_mover(this),
67 m_resizer_top(this),
68 m_resizer_bottom(this),
69 m_resizer_left(this),
70 m_resizer_right(this),
71 m_resizer_top_left(this),
72 m_resizer_top_right(this),
73 m_resizer_bottom_left(this),
74 m_resizer_bottom_right(this)
75{
76
77 // Set the sizing
80
81 // Set the colours
82 area_colour = Colour(0xff, 0xff, 0xff); // White
83 frame_border_colour = Colour(0x00, 0x00, 0x00); // Black
84 frame_colour = Colour(0x57, 0x57, 0x57); // Davy's Grey
85 m_title.foreground_colour = Colour(0xff, 0xff, 0xff); // White
87
88 // Add the title to the window
89 Window::add_child(&m_title);
91}
92
93Window::~Window() = default;
94
104
105 // Pass the mouse event to the children
108
109 // Bring the window to the front
111
112 // Convert the mouse coordinates to an int32_t
113 auto x = (int32_t) mouse_x;
114 auto y = (int32_t) mouse_y;
115
116 if (x <= frame_thickness) {
117 if (y <= frame_thickness)
118 return &m_resizer_top_left;
119
121 return &m_resizer_left;
122
123 else
124 return &m_resizer_bottom_left;
125 } else if (x < window_position.width - frame_thickness) {
126 if (y <= frame_thickness)
127 return &m_resizer_top;
128
129 else if (y < frame_thickness + title_bar_height)
130 return &m_mover;
131
132 else if (y >= window_position.height - frame_thickness)
133 return &m_resizer_bottom;
134 } else {
135 if (y <= frame_thickness)
136 return &m_resizer_top_right;
137
139 return &m_resizer_right;
140
141 else
142 return &m_resizer_bottom_right;
143 }
144
145 return child_result;
146}
147
155
156 // Get the positioning of the window
161
162 // Create an area for the window contents
166
167 // Draw the window contents if they are in the area to draw
173 }
174
175 // Draw the frame if it is in the area to draw
183 }
184
185 // Draw the bottom of the window frame
193 }
194
195 // Draw the left of the window frame
202 }
203
204 // Draw the right of the window frame
212 }
213}
214
221
222 // If there is a child to add
223 if (child != nullptr) {
224
225 // Change the position of the child to be inside the window contents
229
230 }
231
232 // Add the child to the window
234}
Stores the red, green, blue and alpha values of a colour. Can be parsed from a hex string,...
Definition colour.h:91
Draws pixels to the screen, and handles drawing lines, rectangles and circles.
A pair of two objects.
Definition pair.h:22
Stores the left, top, width and height of a rectangle.
Definition rectangle.h:22
Type height
The height of the rectangle.
Definition rectangle.h:27
Type top
The top coordinate of the rectangle.
Definition rectangle.h:25
bool intersects(const Rectangle< Type > &)
Definition rectangle.h:88
Rectangle< Type > intersection(const Rectangle< Type > &)
Definition rectangle.h:116
Type left
The left coordinate of the rectangle.
Definition rectangle.h:24
Type width
The width of the rectangle.
Definition rectangle.h:26
Handles events that are triggered by the mouse driver.
Definition mouse.h:72
A widget that can contain other widgets.
Definition widget.h:88
void add_child(Widget *child) override
Adds a child to the widget.
Definition widget.cpp:403
drivers::peripherals::MouseEventHandler * on_mouse_button_pressed(uint32_t x, uint32_t y, uint8_t button) override
Passes the event to the child that the mouse is over.
Definition widget.cpp:520
A graphical object that can be drawn on the screen.
Definition widget.h:29
uint32_t m_min_width
The smallest m_width the widget can be resized to.
Definition widget.h:40
common::Rectangle< int32_t > position()
Get the position of the widget.
Definition widget.cpp:127
uint32_t m_min_height
The smallest m_height the widget can be resized to.
Definition widget.h:41
void bring_to_front()
Brings this widget to the front of the screen.
Definition widget.cpp:230
virtual common::Coordinates absolute_coordinates(common::Coordinates coordinates)
Get the absolute coordinates of the widget (relative to the screen)
Definition widget.cpp:98
uint8_t title_bar_height
How large the bar at the top of the window is.
Definition window.h:44
uint8_t frame_thickness
How thick the bar around the window is.
Definition window.h:43
drivers::peripherals::MouseEventHandler * on_mouse_button_pressed(uint32_t x, uint32_t y, uint8_t button) override
Handles the mouse button being pressed.
Definition window.cpp:103
common::Colour area_colour
The background colour of the window inner area.
Definition window.h:46
common::Colour frame_colour
The colour of the bar around the window.
Definition window.h:47
Window(int32_t left, int32_t top, uint32_t width, uint32_t height, const string &title_text)
Construct a new Window object at a specific position and size (relative to the screen) with a title.
Definition window.cpp:27
void draw_self(common::GraphicsContext *gc, common::Rectangle< int32_t > &area) override
Draws the window and its children.
Definition window.cpp:154
void add_child(Widget *child) override
Adds a child to the window.
Definition window.cpp:220
common::Colour frame_border_colour
The colour of the border around the bar around the window.
Definition window.h:48
common::Colour foreground_colour
The colour of the text characters.
Definition text.h:33
common::Colour background_colour
The colour to draw behind the text characters.
Definition text.h:34
Defines a Text widget for displaying text in the GUI.
Defines a Window class for creating movable and resizable GUI windows.