This commit is contained in:
Pcornat 2024-10-24 11:02:04 +02:00
commit dfe1880c08
Signed by: Pcornat
GPG Key ID: E0326CC678A00BDD
5 changed files with 125 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.idea
cmake-*

63
CMakeLists.txt Normal file
View File

@ -0,0 +1,63 @@
cmake_minimum_required(VERSION 3.30)
project(LearnGtk4 LANGUAGES CXX)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTKMM4 REQUIRED IMPORTED_TARGET gtkmm-4.0)
find_program(CCACHE_FOUND ccache)
if (CCACHE_FOUND)
message(STATUS "ccache found !")
set_property(GLOBAL PROPERTY C_COMPILER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY C_LINKER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY CXX_COMPILER_LAUNCHER ccache)
set_property(GLOBAL PROPERTY CXX_LINKER_LAUNCHER ccache)
else ()
message(STATUS "ccache not found")
endif ()
set(COMPILE_FLAGS
-pipe
-march=znver3 # change to native or your architecture.
-mtune=znver3 # same as above
-mrdseed # be careful about this, this is linked to the x86 architecture.
-mrdrnd # same as above
-Wall
-Wextra
-Wpedantic
-pedantic
$<$<CONFIG:Release>:-ffunction-sections -fdata-sections>
-fuse-ld=gold
-funroll-loops
-fdevirtualize-at-ltrans
)
set(LINKER_OPTIONS
-Wl,--sort-common,--as-needed$<$<CONFIG:Release>:,--gc-sections,--strip-all>
-fuse-ld=gold
-fdevirtualize-at-ltrans
)
option(ENABLE_COVERAGE "Enabling coverage" OFF)
if (${ENABLE_COVERAGE})
message(STATUS "Coverage enabled")
list(APPEND COMPILE_FLAGS --coverage)
list(APPEND LINKER_OPTIONS --coverage)
list(APPEND LINKER_FLAGS gcov)
endif ()
add_executable(LearnGtk4 main.cpp
hello_world.cpp
hello_world.hpp)
set_target_properties(LearnGtk4 PROPERTIES
CXX_STANDARD 20
CXX_STANDARD_REQUIRED ON
CXX_EXTENSIONS OFF
INTERPROCEDURAL_OPTIMIZATION ON
UNITY_BUILD ON
)
target_compile_definitions(LearnGtk4 PUBLIC $<$<CONFIG:Debug>:_GLIBCXX_DEBUG>)
target_compile_options(LearnGtk4 PUBLIC ${COMPILE_OPTIONS})
target_link_options(LearnGtk4 PUBLIC ${LINKER_OPTIONS})
target_link_libraries(LearnGtk4 PkgConfig::GTKMM4)

23
hello_world.cpp Normal file
View File

@ -0,0 +1,23 @@
//
// Created by postaron on 27/09/24.
//
#include "hello_world.hpp"
#include <iostream>
namespace learn_gtkmm4 {
HelloWorld::HelloWorld() : m_button("Hello world!") {
set_title("Hello world!");
set_default_size(720, 1280);
add_action("Open");
add_action("Quit");
set_show_menubar();
m_button.set_margin(10);
m_button.signal_clicked().connect(sigc::mem_fun(*this, &HelloWorld::on_button_clicked));
set_child(m_button);
}
void HelloWorld::on_button_clicked() {
std::cout << "Hello World" << std::endl;
}
} // learn_gtkmm4

30
hello_world.hpp Normal file
View File

@ -0,0 +1,30 @@
//
// Created by postaron on 27/09/24.
//
#ifndef LEARNGTK4_HELLO_WORLD_HPP
#define LEARNGTK4_HELLO_WORLD_HPP
#include <gtkmm/button.h>
#include <gtkmm/glarea.h>
#include <gtkmm/box.h>
#include <gtkmm/applicationwindow.h>
namespace learn_gtkmm4 {
class HelloWorld : public Gtk::ApplicationWindow {
public:
HelloWorld();
~HelloWorld() override = default;
protected:
void on_button_clicked();
Gtk::Box m_VBox;
Gtk::Button m_button;
Gtk::GLArea gl_area;
};
} // learn_gtkmm4
#endif //LEARNGTK4_HELLO_WORLD_HPP

7
main.cpp Normal file
View File

@ -0,0 +1,7 @@
#include "hello_world.hpp"
#include <gtkmm/application.h>
int main(int argc, char *argv[]) {
auto app = Gtk::Application::create("org.gtkmm.example");
return app->make_window_and_run<learn_gtkmm4::HelloWorld>(argc, argv);
}