Add gtk83

This commit is contained in:
daleclack 2021-05-30 11:25:16 +08:00
parent 77448bd07d
commit f6b3816901
9 changed files with 588 additions and 0 deletions

View File

@ -0,0 +1,193 @@
{
"configurations": [
{
"name": "Linux",
"includePath": [
//For linux amd64 and linux on arm64,some include path may different
//Commet and uncomment these lines to compile on a specificed archtiecture
//Arm64 linux libs
/*
"/usr/lib/aarch64-linux-gnu/dbus-1.0/include/**",
"/usr/lib/aarch64-linux-gnu/glib-2.0/include/**",
"/usr/lib/aarch64-linux-gnu/gtkmm-3.0/include/**",
"/usr/lib/aarch64-linux-gnu/gdkmm-3.0/include/**",
"/usr/lib/aarch64-linux-gnu/giomm-2.4/include/**",
"/usr/lib/aarch64-linux-gnu/pangomm-1.4/include/**",
"/usr/lib/aarch64-linux-gnu/glibmm-2.4/include/**",
"/usr/lib/aarch64-linux-gnu/cairomm-1.0/include/**",
"/usr/lib/aarch64-linux-gnu/sigc++-2.0/include/**",
*/
//amd64 linux libs(For ubuntu)
/*
"/usr/lib/x86_64-linux-gnu/dbus-1.0/include/**",
"/usr/lib/x86_64-linux-gnu/glib-2.0/include/**",
"/usr/lib/x86_64-linux-gnu/gtkmm-3.0/include/**",
"/usr/lib/x86_64-linux-gnu/gdkmm-3.0/include/**",
"/usr/lib/x86_64-linux-gnu/giomm-2.4/include/**",
"/usr/lib/x86_64-linux-gnu/pangomm-1.4/include/**",
"/usr/lib/x86_64-linux-gnu/glibmm-2.4/include/**",
"/usr/lib/x86_64-linux-gnu/cairomm-1.0/include/**",
"/usr/lib/x86_64-linux-gnu/sigc++-2.0/include/**",
*/
//For debian and ubuntu,kali
/*
"/usr/include/gtk-3.0/gtk/**",
"/usr/include/uuid/**",
*/
//For manjaro(Arch linux)
"/usr/lib/dbus-1.0/include/**",
"/usr/lib/glib-2.0/include/**",
"/usr/include/lzo/**",
"/usr/include/cloudproviders/**",
"${workspaceFolder}/**",
"${workspaceFolder}/../**",
"/usr/include/gtk-3.0/**",
"/usr/include/at-spi2-atk/2.0/**",
"/usr/include/at-spi-2.0/**",
"/usr/include/dbus-1.0/**",
"/usr/include/gio-unix-2.0/**",
"/usr/include/cairo/**",
"/usr/include/pango-1.0/**",
"/usr/include/fribidi/**",
"/usr/include/harfbuzz/**",
"/usr/include/atk-1.0/**",
"/usr/include/pixman-1/**",
"/usr/include/freetype2/**",
"/usr/include/libpng16/**",
"/usr/include/gdk-pixbuf-2.0/**",
"/usr/include/libmount/**",
"/usr/include/blkid/**",
"/usr/include/glib-2.0/**",
//Gtkmm libs
"/usr/include/gtkmm-3.0/**",
"/usr/lib/gtkmm-3.0/include/**",
"/usr/include/giomm-2.4/**",
"/usr/lib/giomm-2.4/include/**",
"/usr/include/glibmm-2.4/**",
"/usr/lib/glibmm-2.4/include/**",
"/usr/include/sigc++-2.0/**",
"/usr/lib/sigc++-2.0/include/**",
"/usr/include/cairomm-1.0/**",
"/usr/lib/cairomm-1.0/include/**",
"/usr/include/pangomm-1.4/**",
"/usr/lib/pangomm-1.4/include/**",
"/usr/include/atkmm-1.6/**",
"/usr/lib/atkmm-1.6/include/**",
"/usr/include/gtk-3.0/unix-print/**",
"/usr/include/gdkmm-3.0/**",
"/usr/lib/gdkmm-3.0/include/**"
],
"defines": [],
"compilerPath": "/usr/bin/gcc",
"cStandard": "gnu17",
"cppStandard": "gnu++17",
"intelliSenseMode": "gcc-x64",
"compilerArgs": [
"`pkg-config --cflags --libs gtkmm-3.0`"
],
"configurationProvider": "ms-vscode.cmake-tools"
},
{
"name": "win32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/src/**",
//I assume the msys2 installed in D:/msys64
"D:/msys64/mingw64/include/gtkmm-3.0/**",
"D:/msys64/mingw64/lib/gtkmm-3.0/include/**",
"D:/msys64/mingw64/include/giomm-2.4/**",
"D:/msys64/mingw64/lib/giomm-2.4/include/**",
"D:/msys64/mingw64/include/**",
"D:/msys64/mingw64/include/glib-2.0/**",
"D:/msys64/mingw64/lib/glib-2.0/include/**",
"D:/msys64/mingw64/include/glibmm-2.4/**",
"D:/msys64/mingw64/lib/glibmm-2.4/include/**",
"D:/msys64/mingw64/include/sigc++-2.0/**",
"D:/msys64/mingw64/lib/sigc++-2.0/include/**",
"D:/msys64/mingw64/include/gtk-3.0/**",
"D:/msys64/mingw64/include/pango-1.0/**",
"D:/msys64/mingw64/include/harfbuzz/**",
"D:/msys64/mingw64/include/freetype2/**",
"D:/msys64/mingw64/include/libpng16/**",
"D:/msys64/mingw64/include/fribidi/**",
"D:/msys64/mingw64/include/cairo/**",
"D:/msys64/mingw64/include/lzo/**",
"D:/msys64/mingw64/include/pixman-1/**",
"D:/msys64/mingw64/include/gdk-pixbuf-2.0",
"D:/msys64/mingw64/include/atk-1.0",
"D:/msys64/mingw64/include/cairomm-1.0/**",
"D:/msys64/mingw64/lib/cairomm-1.0/include/**",
"D:/msys64/mingw64/include/pangomm-1.4/**",
"D:/msys64/mingw64/lib/pangomm-1.4/include/**"
],
"defines": [],
"compilerPath": "D:/msys64/MinGW64/bin/gcc.exe",
"cStandard": "c17",
"cppStandard": "c++17",
"intelliSenseMode": "windows-gcc-x64"
},
{
"name": "Mac",
"includePath": [
"${workspaceFolder}/**",
"/usr/local/Cellar/libffi/3.3_3/include/**",
"/usr/local/Cellar/gtkmm3/3.24.4/include/gtkmm-3.0/**",
"/usr/local/Cellar/gtkmm3/3.24.4/lib/gtkmm-3.0/include",
"/usr/local/Cellar/atkmm@2.28/2.28.1_1/include/atkmm-1.6/**",
"/usr/local/Cellar/atkmm@2.28/2.28.1_1/lib/atkmm-1.6/include/**",
"/usr/local/Cellar/gtk+3/3.24.29/include/gtk-3.0/unix-print/**",
"/usr/local/Cellar/gtkmm3/3.24.4/include/gdkmm-3.0/**",
"/usr/local/Cellar/gtkmm3/3.24.4/lib/gdkmm-3.0/include/**",
"/usr/local/Cellar/glibmm@2.66/2.66.0/include/giomm-2.4/**",
"/usr/local/Cellar/glibmm@2.66/2.66.0/lib/giomm-2.4/include/**",
"/usr/local/Cellar/pangomm@2.46/2.46.0/include/pangomm-1.4/**",
"/usr/local/Cellar/pangomm@2.46/2.46.0/lib/pangomm-1.4/include/**",
"/usr/local/Cellar/glibmm@2.66/2.66.0/include/glibmm-2.4/**",
"/usr/local/Cellar/glibmm@2.66/2.66.0/lib/glibmm-2.4/include/**",
"/usr/local/Cellar/cairomm@1.14/1.14.2/include/cairomm-1.0/**",
"/usr/local/Cellar/cairomm@1.14/1.14.2/lib/cairomm-1.0/include/**",
"/usr/local/Cellar/libsigc++@2/2.10.6/include/sigc++-2.0/**",
"/usr/local/Cellar/libsigc++@2/2.10.6/lib/sigc++-2.0/include/**",
"/usr/local/Cellar/gtk+3/3.24.29/include/gtk-3.0/**",
"/usr/local/Cellar/glib/2.68.2/include/gio-unix-2.0/**",
"/usr/local/Cellar/cairo/1.16.0_5/include/cairo/**",
"/usr/local/Cellar/libepoxy/1.5.7/include/**",
"/usr/local/Cellar/pango/1.48.4/include/pango-1.0",
"/usr/local/Cellar/harfbuzz/2.8.1/include/harfbuzz",
"/usr/local/Cellar/pango/1.48.4/include/pango-1.0/**",
"/usr/local/Cellar/fribidi/1.0.10/include/fribidi/**",
"/usr/local/Cellar/harfbuzz/2.8.1/include/harfbuzz/**",
"/usr/local/Cellar/graphite2/1.3.14/include/**",
"/usr/local/Cellar/atk/2.36.0/include/atk-1.0/**",
"/usr/local/Cellar/cairo/1.16.0_5/include/cairo/**",
"/usr/local/Cellar/pixman/0.40.0/include/pixman-1/**",
"/usr/local/Cellar/fontconfig/2.13.1/include/**",
"/usr/local/opt/freetype/include/freetype2/**",
"/usr/local/Cellar/libpng/1.6.37/include/libpng16/**",
"/usr/local/Cellar/libxcb/1.14_1/include/**",
"/usr/local/Cellar/libxrender/0.9.10/include/**",
"/usr/local/Cellar/libxext/1.3.4/include/**",
"/usr/local/Cellar/libx11/1.7.0/include/**",
"/usr/local/Cellar/libxcb/1.14_1/include/**",
"/usr/local/Cellar/libxau/1.0.9/include/**",
"/usr/local/Cellar/libxdmcp/1.1.3/include/**",
"/usr/local/Cellar/gdk-pixbuf/2.42.6/include/gdk-pixbuf-2.0/**",
"/usr/local/Cellar/libpng/1.6.37/include/libpng16/**",
"/usr/local/Cellar/libtiff/4.3.0/include/**",
"/usr/local/Cellar/glib/2.68.2/include/**",
"/usr/local/Cellar/glib/2.68.2/include/glib-2.0/**",
"/usr/local/Cellar/glib/2.68.2/lib/glib-2.0/include/**",
"/usr/local/opt/gettext/include/**",
"/usr/local/Cellar/pcre/8.44/include/**",
"/usr/local/Cellar/xorgproto/2021.4/include/**"
],
"defines": [],
"macFrameworkPath": [],
"compilerPath": "/usr/local/bin/gcc-11",
"cStandard": "gnu17",
"cppStandard": "gnu++17",
"intelliSenseMode": "macos-gcc-x64"
}
],
"version": 4
}

View File

@ -0,0 +1,5 @@
{
"C_Cpp.errorSquiggles": "Disabled",
"cmake.configureOnOpen": false,
"C_Cpp.dimInactiveRegions": false
}

View File

@ -0,0 +1,19 @@
set(CMAKE_CXX_STANDARD 17)
cmake_minimum_required(VERSION 3.0.0)
project(gtk83 VERSION 0.1.0)
include(CTest)
enable_testing()
set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)
find_package (PkgConfig REQUIRED)
pkg_check_modules (GTKMM3 REQUIRED gtkmm-3.0)
include_directories (${GTKMM3_INCLUDE_DIRS})
link_directories (${GTKMM3_LIBRARY_DIRS})
add_executable(gtk83 src/main.cc src/MyApp.cc)
add_definitions (${GTKMM3_CFLAGS_OTHER})
target_link_libraries (${PROJECT_NAME} ${GTKMM3_LIBRARIES})

View File

@ -0,0 +1,3 @@
cd build_mingw
mingw32-make
gtk83

View File

@ -0,0 +1,141 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="main_window">
<property name="can-focus">False</property>
<property name="icon-name">org.gtk.daleclack</property>
<child>
<object class="GtkBox" id="main_vbox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="time_box">
<property name="width-request">150</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">4</property>
<child>
<object class="GtkLabel" id="time_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-bottom">12</property>
<property name="label">Time gone:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkImage" id="clock_image">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">32</property>
<property name="icon-name">preferences-system-time-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="clock_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-bottom">12</property>
<property name="label">0:00</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="buttons_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkButton" id="btn_exit">
<property name="label" translatable="yes">Exit</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.quit</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_empty">
<property name="label" translatable="yes">Empty Time</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.empty</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="Pause">
<property name="label" translatable="yes">Pause</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.pause</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_start">
<property name="label" translatable="yes">Start</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.start</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@ -0,0 +1,140 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<interface>
<requires lib="gtk+" version="3.24"/>
<object class="GtkWindow" id="main_window">
<property name="can-focus">False</property>
<child>
<object class="GtkBox" id="main_vbox">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkBox" id="time_box">
<property name="width-request">150</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">4</property>
<child>
<object class="GtkLabel" id="time_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-bottom">12</property>
<property name="label">Time gone:</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkImage" id="clock_image">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="pixel-size">32</property>
<property name="icon-name">preferences-system-time-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="clock_label">
<property name="visible">True</property>
<property name="can-focus">False</property>
<property name="margin-bottom">12</property>
<property name="label">0:00</property>
<property name="yalign">0</property>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">3</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkBox" id="buttons_box">
<property name="visible">True</property>
<property name="can-focus">False</property>
<child>
<object class="GtkButton" id="btn_exit">
<property name="label" translatable="yes">Exit</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.quit</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_empty">
<property name="label" translatable="yes">Empty Time</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.empty</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkButton" id="Pause">
<property name="label" translatable="yes">Pause</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.pause</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">3</property>
</packing>
</child>
<child>
<object class="GtkButton" id="btn_start">
<property name="label" translatable="yes">Start</property>
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="receives-default">True</property>
<property name="action-name">app.start</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
<property name="position">4</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
</interface>

View File

@ -0,0 +1,50 @@
#include "MyApp.hh"
MyApp::MyApp()
:Gtk::Application("org.gtk.daleclack"),
timer_value(1000)
{
Glib::set_application_name("Gtk83");
}
Glib::RefPtr<MyApp> MyApp::create(){
return Glib::RefPtr<MyApp>(new MyApp());
}
void MyApp::on_activate()
{
//Get builder and main window
ref_builder=Gtk::Builder::create_from_file("../res/window.ui");
ref_builder->get_widget("main_window",main_window);
main_window->set_icon_name("org.gtk.daleclack");
//Get widgets
ref_builder->get_widget("clock_label",time_label);
//Add actions
add_action("start",sigc::mem_fun(*this,&MyApp::start_timer));
add_action("pause",sigc::mem_fun(*this,&MyApp::disconnect_timer));
add_action("empty",sigc::mem_fun(*this,&MyApp::empty_time));
add_action("quit",sigc::mem_fun(*this,&MyApp::quit));
//Show everything
add_window(*main_window);
main_window->show_all();
}
void MyApp::start_timer(){
mytimer=Glib::signal_timeout().connect(sigc::mem_fun(*this,&MyApp::on_timeout),timer_value);
}
void MyApp::disconnect_timer(){
mytimer.disconnect();
}
void MyApp::empty_time(){
time_sum=0;
time_label->set_label("0:00");
}
bool MyApp::on_timeout(){
time_sum++;
sprintf(time_string,"%d:%02d",time_sum/60,time_sum%60);
time_label->set_label(time_string);
return true;
}

View File

@ -0,0 +1,31 @@
#pragma once
#include <gtkmm.h>
class MyApp : public Gtk::Application{
protected:
MyApp();
public:
static Glib::RefPtr<MyApp> create();
protected:
void on_activate() override;
private:
//Main Builder
Glib::RefPtr<Gtk::Builder> ref_builder;
Gtk::Window *main_window;
//The Timer
sigc::connection mytimer;
const int timer_value;
bool on_timeout();
int time_sum=0;
char time_string[20];
//Child Widgets
Gtk::Label *time_label;
//Signal Handlers
void start_timer();
void disconnect_timer();
void empty_time();
};

View File

@ -0,0 +1,6 @@
#include "MyApp.hh"
int main(int argc,char **argv){
auto app=MyApp::create();
return app->run(argc,argv);
}