From f597be870eec6d04de6bed0effa7dd23bcb72bf8 Mon Sep 17 00:00:00 2001 From: Felix Morgner Date: Thu, 11 Jul 2024 13:17:03 +0200 Subject: initial commit --- app/CMakeLists.txt | 54 +++++++++++++++++++++++++++++++++++ app/desktop.in | 7 +++++ app/include/turns/app/application.hpp | 30 +++++++++++++++++++ app/src/application.cpp | 49 +++++++++++++++++++++++++++++++ app/src/main.cpp | 23 +++++++++++++++ 5 files changed, 163 insertions(+) create mode 100644 app/CMakeLists.txt create mode 100644 app/desktop.in create mode 100644 app/include/turns/app/application.hpp create mode 100644 app/src/application.cpp create mode 100644 app/src/main.cpp (limited to 'app') diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt new file mode 100644 index 0000000..88dea68 --- /dev/null +++ b/app/CMakeLists.txt @@ -0,0 +1,54 @@ +# Library + +add_library("app" + "src/application.cpp" +) + +add_library("turns::app" ALIAS "app") + +target_compile_options("app" PUBLIC + "$<$:-Wall>" + "$<$:-Wextra>" + "$<$:-Werror>" + "$<$:-pedantic-errors>" +) + +target_include_directories("app" PUBLIC + "include" +) + +target_link_libraries("app" PUBLIC + "PkgConfig::adwaita" + "PkgConfig::gtkmm" + + "$<$:-Wl,--whole-archive>" + "turns::res" + "$<$:-Wl,--no-whole-archive>" +) + +# Application + +add_executable("exe" + "src/main.cpp" +) + +target_link_libraries("exe" PRIVATE + "turns::app" +) + +set_target_properties("exe" PROPERTIES + OUTPUT_NAME "turns" +) + +install(TARGETS "exe" + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" +) + +configure_file("desktop.in" + "turns.desktop" +) + +install(FILES + "${CMAKE_CURRENT_BINARY_DIR}/turns.desktop" + DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications" +) \ No newline at end of file diff --git a/app/desktop.in b/app/desktop.in new file mode 100644 index 0000000..fac4b09 --- /dev/null +++ b/app/desktop.in @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=Turns +Icon=ch.arknet.Turns +StartupNotify=true +Exec=@CMAKE_INSTALL_FULL_BINDIR@/turns +Categories=Games;Utility \ No newline at end of file diff --git a/app/include/turns/app/application.hpp b/app/include/turns/app/application.hpp new file mode 100644 index 0000000..d01eff2 --- /dev/null +++ b/app/include/turns/app/application.hpp @@ -0,0 +1,30 @@ +#ifndef TURNS_APP_APPLICATION_HPP +#define TURNS_APP_APPLICATION_HPP + +#include + +#include +#include +#include + +namespace turns::app +{ + + struct application : Gtk::Application + { + auto static create() -> Glib::RefPtr; + + private: + application(); + + auto handle_action_quit() -> void; + + auto on_activate() -> void override; + auto on_shutdown() -> void override; + + AdwApplicationWindow * m_main_window; + }; + +} // namespace turns::app + +#endif \ No newline at end of file diff --git a/app/src/application.cpp b/app/src/application.cpp new file mode 100644 index 0000000..014171e --- /dev/null +++ b/app/src/application.cpp @@ -0,0 +1,49 @@ +#include "turns/app/application.hpp" + +#include +#include +#include + +#include + +namespace turns::app +{ + + auto application::create() -> Glib::RefPtr + { + return Glib::make_refptr_for_instance(new application{}); + } + + application::application() + : Gtk::Application{"ch.arknet.Turns"} + { + auto builder = Gtk::Builder::create_from_resource("/turns/windows/main_window.ui"); + auto main_window = builder->get_widget("main_window"); + + m_main_window = ADW_APPLICATION_WINDOW(main_window->gobj()); + + add_action("quit", sigc::mem_fun(*this, &application::handle_action_quit)); + set_accel_for_action("app.quit", "q"); + } + + auto application::handle_action_quit() -> void + { + gtk_window_close(GTK_WINDOW(m_main_window)); + } + + auto application::on_activate() -> void + { + Gtk::Application::on_activate(); + gtk_application_add_window(GTK_APPLICATION(gobj()), GTK_WINDOW(m_main_window)); + gtk_window_present(GTK_WINDOW(m_main_window)); + } + + auto application::on_shutdown() -> void + { + Gtk::Application::on_shutdown(); + + gtk_window_close(GTK_WINDOW(m_main_window)); + delete Glib::wrap(GTK_WINDOW(m_main_window)); + } + +} // namespace turns::app \ No newline at end of file diff --git a/app/src/main.cpp b/app/src/main.cpp new file mode 100644 index 0000000..b9bf468 --- /dev/null +++ b/app/src/main.cpp @@ -0,0 +1,23 @@ +#include "turns/app/application.hpp" + +#include + +class MyWindow : public Gtk::Window +{ +public: + MyWindow(); +}; + +MyWindow::MyWindow() +{ + set_title("Basic application"); + set_default_size(200, 200); +} + +auto main(int argc, char * argv[]) -> int +{ + adw_init(); + + auto app = turns::app::application::create(); + return app->run(argc, argv); +} \ No newline at end of file -- cgit v1.2.3