Browse Source

LoginServer: Use new GML compiler

kleines Filmröllchen 1 year ago
parent
commit
3afbf66295

+ 2 - 5
Userland/Services/LoginServer/CMakeLists.txt

@@ -4,16 +4,13 @@ serenity_component(
     TARGETS LoginServer
 )
 
-stringify_gml(LoginWindow.gml LoginWindowGML.h login_window_gml)
+compile_gml(LoginWindow.gml LoginWindowGML.cpp)
 
 set(SOURCES
     LoginWindow.cpp
+    LoginWindowGML.cpp
     main.cpp
 )
 
-set(GENERATED_SOURCES
-    LoginWindowGML.h
-)
-
 serenity_bin(LoginServer)
 target_link_libraries(LoginServer PRIVATE LibCore LibGfx LibGUI LibMain)

+ 7 - 5
Userland/Services/LoginServer/LoginWindow.cpp

@@ -7,7 +7,9 @@
 #include <LibGUI/Icon.h>
 #include <LibGUI/Widget.h>
 #include <Services/LoginServer/LoginWindow.h>
-#include <Services/LoginServer/LoginWindowGML.h>
+#include <Services/LoginServer/Widget.h>
+
+namespace LoginServer {
 
 LoginWindow::LoginWindow(GUI::Window* parent)
     : GUI::Window(parent)
@@ -20,11 +22,9 @@ LoginWindow::LoginWindow(GUI::Window* parent)
     set_closeable(false);
     set_icon(GUI::Icon::default_icon("ladyball"sv).bitmap_for_size(16));
 
-    auto widget = set_main_widget<GUI::Widget>();
-    widget->load_from_gml(login_window_gml).release_value_but_fixme_should_propagate_errors();
+    auto widget = MUST(LoginServer::Widget::try_create());
+    set_main_widget(widget);
     m_banner = *widget->find_descendant_of_type_named<GUI::ImageWidget>("banner");
-    m_banner->load_from_file("/res/graphics/brand-banner.png"sv);
-    m_banner->set_auto_resize(true);
 
     m_username = *widget->find_descendant_of_type_named<GUI::TextBox>("username");
     m_username->set_focus(true);
@@ -46,3 +46,5 @@ LoginWindow::LoginWindow(GUI::Window* parent)
             m_fail_message->set_text({});
     };
 }
+
+}

+ 2 - 1
Userland/Services/LoginServer/LoginWindow.gml

@@ -1,9 +1,10 @@
-@GUI::Widget {
+@LoginServer::Widget {
     fill_with_background_color: true
     layout: @GUI::VerticalBoxLayout {}
 
     @GUI::ImageWidget {
         name: "banner"
+        bitmap: "/res/graphics/brand-banner.png"
         auto_resize: true
     }
 

+ 4 - 0
Userland/Services/LoginServer/LoginWindow.h

@@ -12,6 +12,8 @@
 #include <LibGUI/TextBox.h>
 #include <LibGUI/Window.h>
 
+namespace LoginServer {
+
 class LoginWindow final : public GUI::Window {
     C_OBJECT(LoginWindow);
 
@@ -37,3 +39,5 @@ private:
     RefPtr<GUI::Label> m_fail_message;
     RefPtr<GUI::Button> m_log_in_button;
 };
+
+}

+ 23 - 0
Userland/Services/LoginServer/Widget.h

@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) 2023, kleines Filmröllchen <filmroellchen@serenityos.org>
+ *
+ * SPDX-License-Identifier: BSD-2-Clause
+ */
+
+#pragma once
+
+#include <LibGUI/Widget.h>
+
+namespace LoginServer {
+
+class Widget : public GUI::Widget {
+    C_OBJECT_ABSTRACT(Widget)
+
+public:
+    static ErrorOr<NonnullRefPtr<Widget>> try_create();
+
+private:
+    Widget() = default;
+};
+
+}

+ 2 - 2
Userland/Services/LoginServer/main.cpp

@@ -43,7 +43,7 @@ static void child_process(Core::Account const& account)
     exit(127);
 }
 
-static void login(Core::Account const& account, LoginWindow& window)
+static void login(Core::Account const& account, LoginServer::LoginWindow& window)
 {
     pid_t pid = fork();
     if (pid == 0)
@@ -73,7 +73,7 @@ ErrorOr<int> serenity_main(Main::Arguments arguments)
     TRY(Core::System::unveil("/res", "r"));
     TRY(Core::System::unveil(nullptr, nullptr));
 
-    auto window = LoginWindow::construct();
+    auto window = LoginServer::LoginWindow::construct();
     window->on_submit = [&]() {
         auto username = window->username();
         auto password = Core::SecretString::take_ownership(window->password().to_byte_buffer());