summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorFelix Morgner <felix.morgner@gmail.com>2024-07-11 13:17:03 +0200
committerFelix Morgner <felix.morgner@gmail.com>2024-07-11 16:03:04 +0200
commitf597be870eec6d04de6bed0effa7dd23bcb72bf8 (patch)
tree569ceeeef1bbf143b0d3a32ccf9a2fc716ff13e1 /app
downloadturns-f597be870eec6d04de6bed0effa7dd23bcb72bf8.tar.xz
turns-f597be870eec6d04de6bed0effa7dd23bcb72bf8.zip
initial commit
Diffstat (limited to 'app')
-rw-r--r--app/CMakeLists.txt54
-rw-r--r--app/desktop.in7
-rw-r--r--app/include/turns/app/application.hpp30
-rw-r--r--app/src/application.cpp49
-rw-r--r--app/src/main.cpp23
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