diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/CMakeLists.txt | 54 | ||||
| -rw-r--r-- | app/desktop.in | 7 | ||||
| -rw-r--r-- | app/include/turns/app/application.hpp | 30 | ||||
| -rw-r--r-- | app/src/application.cpp | 49 | ||||
| -rw-r--r-- | app/src/main.cpp | 23 |
5 files changed, 163 insertions, 0 deletions
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 + "$<$<CXX_COMPILER_ID:GNU,Clang>:-Wall>" + "$<$<CXX_COMPILER_ID:GNU,Clang>:-Wextra>" + "$<$<CXX_COMPILER_ID:GNU,Clang>:-Werror>" + "$<$<CXX_COMPILER_ID:GNU,Clang>:-pedantic-errors>" +) + +target_include_directories("app" PUBLIC + "include" +) + +target_link_libraries("app" PUBLIC + "PkgConfig::adwaita" + "PkgConfig::gtkmm" + + "$<$<CXX_COMPILER_ID:GNU,Clang>:-Wl,--whole-archive>" + "turns::res" + "$<$<CXX_COMPILER_ID:GNU,Clang>:-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 <adwaita.h> + +#include <glibmm/refptr.h> +#include <gtkmm/application.h> +#include <gtkmm/applicationwindow.h> + +namespace turns::app +{ + + struct application : Gtk::Application + { + auto static create() -> Glib::RefPtr<application>; + + 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 <glibmm.h> +#include <gtkmm/builder.h> +#include <gtkmm/window.h> + +#include <sigc++/functors/functors.h> + +namespace turns::app +{ + + auto application::create() -> Glib::RefPtr<application> + { + 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<Gtk::ApplicationWindow>("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", "<ctrl>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 <adwaita.h> + +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 |
