forked from Bananymous/banan-os
LibGUI: Window Creation takes attributes as an argument
This reduces windows showing/moving once they are opened and setting their attributes.
This commit is contained in:
parent
04eee2ea75
commit
a859558840
|
@ -62,7 +62,7 @@ namespace LibGUI
|
||||||
cleanup();
|
cleanup();
|
||||||
}
|
}
|
||||||
|
|
||||||
BAN::ErrorOr<BAN::UniqPtr<Window>> Window::create(uint32_t width, uint32_t height, BAN::StringView title)
|
BAN::ErrorOr<BAN::UniqPtr<Window>> Window::create(uint32_t width, uint32_t height, BAN::StringView title, Attributes attributes)
|
||||||
{
|
{
|
||||||
int server_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
int server_fd = socket(AF_UNIX, SOCK_STREAM, 0);
|
||||||
if (server_fd == -1)
|
if (server_fd == -1)
|
||||||
|
@ -101,7 +101,7 @@ namespace LibGUI
|
||||||
TRY(create_packet.title.append(title));
|
TRY(create_packet.title.append(title));
|
||||||
TRY(create_packet.send_serialized(server_fd));
|
TRY(create_packet.send_serialized(server_fd));
|
||||||
|
|
||||||
auto window = TRY(BAN::UniqPtr<Window>::create(server_fd));
|
auto window = TRY(BAN::UniqPtr<Window>::create(server_fd, attributes));
|
||||||
|
|
||||||
bool resized = false;
|
bool resized = false;
|
||||||
window->set_resize_window_event_callback([&]() { resized = true; });
|
window->set_resize_window_event_callback([&]() { resized = true; });
|
||||||
|
|
|
@ -178,10 +178,20 @@ namespace LibGUI
|
||||||
namespace WindowPacket
|
namespace WindowPacket
|
||||||
{
|
{
|
||||||
|
|
||||||
|
struct Attributes
|
||||||
|
{
|
||||||
|
bool title_bar;
|
||||||
|
bool movable;
|
||||||
|
bool focusable;
|
||||||
|
bool rounded_corners;
|
||||||
|
bool alpha_channel;
|
||||||
|
};
|
||||||
|
|
||||||
DEFINE_PACKET(
|
DEFINE_PACKET(
|
||||||
WindowCreate,
|
WindowCreate,
|
||||||
uint32_t, width,
|
uint32_t, width,
|
||||||
uint32_t, height,
|
uint32_t, height,
|
||||||
|
Attributes, attributes,
|
||||||
BAN::String, title
|
BAN::String, title
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -199,15 +209,8 @@ namespace LibGUI
|
||||||
int32_t, y
|
int32_t, y
|
||||||
);
|
);
|
||||||
|
|
||||||
DEFINE_PACKET_EXTRA(
|
DEFINE_PACKET(
|
||||||
WindowSetAttributes,
|
WindowSetAttributes,
|
||||||
struct Attributes {
|
|
||||||
bool title_bar;
|
|
||||||
bool movable;
|
|
||||||
bool focusable;
|
|
||||||
bool rounded_corners;
|
|
||||||
bool alpha_channel;
|
|
||||||
},
|
|
||||||
Attributes, attributes
|
Attributes, attributes
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,7 @@ namespace LibGUI
|
||||||
class Window
|
class Window
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
using Attributes = WindowPacket::WindowSetAttributes::Attributes;
|
using Attributes = WindowPacket::Attributes;
|
||||||
|
|
||||||
static constexpr Attributes default_attributes = {
|
static constexpr Attributes default_attributes = {
|
||||||
.title_bar = true,
|
.title_bar = true,
|
||||||
|
@ -27,7 +27,7 @@ namespace LibGUI
|
||||||
public:
|
public:
|
||||||
~Window();
|
~Window();
|
||||||
|
|
||||||
static BAN::ErrorOr<BAN::UniqPtr<Window>> create(uint32_t width, uint32_t height, BAN::StringView title);
|
static BAN::ErrorOr<BAN::UniqPtr<Window>> create(uint32_t width, uint32_t height, BAN::StringView title, Attributes attributes = default_attributes);
|
||||||
|
|
||||||
void set_pixel(uint32_t x, uint32_t y, uint32_t color)
|
void set_pixel(uint32_t x, uint32_t y, uint32_t color)
|
||||||
{
|
{
|
||||||
|
@ -87,8 +87,9 @@ namespace LibGUI
|
||||||
int server_fd() const { return m_server_fd; }
|
int server_fd() const { return m_server_fd; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Window(int server_fd)
|
Window(int server_fd, Attributes attributes)
|
||||||
: m_server_fd(server_fd)
|
: m_server_fd(server_fd)
|
||||||
|
, m_attributes(attributes)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
bool clamp_to_framebuffer(int32_t& x, int32_t& y, uint32_t& width, uint32_t& height) const;
|
bool clamp_to_framebuffer(int32_t& x, int32_t& y, uint32_t& width, uint32_t& height) const;
|
||||||
|
|
|
@ -22,15 +22,14 @@ int main()
|
||||||
|
|
||||||
auto font = MUST(LibFont::Font::load("/usr/share/fonts/lat0-16.psfu"_sv));
|
auto font = MUST(LibFont::Font::load("/usr/share/fonts/lat0-16.psfu"_sv));
|
||||||
|
|
||||||
auto window = MUST(LibGUI::Window::create(0, font.height() + 2 * padding, "TaskBar"));
|
|
||||||
|
|
||||||
auto attributes = LibGUI::Window::default_attributes;
|
auto attributes = LibGUI::Window::default_attributes;
|
||||||
attributes.title_bar = false;
|
attributes.title_bar = false;
|
||||||
attributes.movable = false;
|
attributes.movable = false;
|
||||||
attributes.focusable = false;
|
attributes.focusable = false;
|
||||||
attributes.alpha_channel = false;
|
attributes.alpha_channel = false;
|
||||||
attributes.rounded_corners = false;
|
attributes.rounded_corners = false;
|
||||||
window->set_attributes(attributes);
|
|
||||||
|
auto window = MUST(LibGUI::Window::create(0, font.height() + 2 * padding, "TaskBar", attributes));
|
||||||
|
|
||||||
window->set_close_window_event_callback([]() {});
|
window->set_close_window_event_callback([]() {});
|
||||||
|
|
||||||
|
|
|
@ -110,12 +110,10 @@ void Terminal::run()
|
||||||
m_bg_color = s_colors_dark[0];
|
m_bg_color = s_colors_dark[0];
|
||||||
m_fg_color = s_colors_bright[7];
|
m_fg_color = s_colors_bright[7];
|
||||||
|
|
||||||
m_window = MUST(LibGUI::Window::create(600, 400, "Terminal"_sv));
|
|
||||||
|
|
||||||
auto attributes = LibGUI::Window::default_attributes;
|
auto attributes = LibGUI::Window::default_attributes;
|
||||||
attributes.alpha_channel = true;
|
attributes.alpha_channel = true;
|
||||||
m_window->set_attributes(attributes);
|
|
||||||
|
|
||||||
|
m_window = MUST(LibGUI::Window::create(600, 400, "Terminal"_sv, attributes));
|
||||||
m_window->fill(m_bg_color);
|
m_window->fill(m_bg_color);
|
||||||
m_window->invalidate();
|
m_window->invalidate();
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,7 @@ void WindowServer::on_window_create(int fd, const LibGUI::WindowPacket::WindowCr
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
window->set_attributes(packet.attributes);
|
||||||
window->set_position({
|
window->set_position({
|
||||||
static_cast<int32_t>((m_framebuffer.width - window->client_width()) / 2),
|
static_cast<int32_t>((m_framebuffer.width - window->client_width()) / 2),
|
||||||
static_cast<int32_t>((m_framebuffer.height - window->client_height()) / 2),
|
static_cast<int32_t>((m_framebuffer.height - window->client_height()) / 2),
|
||||||
|
|
Loading…
Reference in New Issue