add clock to bar
This commit is contained in:
58
.gitignore
vendored
Normal file
58
.gitignore
vendored
Normal file
@@ -0,0 +1,58 @@
|
|||||||
|
# Compiled Object files
|
||||||
|
**/.DS_Store
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Fortran module files
|
||||||
|
*.mod
|
||||||
|
*.smod
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.lai
|
||||||
|
*.la
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
|
||||||
|
**/cmake-build-debug
|
||||||
|
**/CMakeCache.txt
|
||||||
|
**/cmake_install.cmake
|
||||||
|
**/install_manifest.txt
|
||||||
|
**/CMakeFiles/
|
||||||
|
**/CTestTestfile.cmake
|
||||||
|
**/Makefile
|
||||||
|
**/*.cbp
|
||||||
|
**/CMakeScripts
|
||||||
|
**/compile_commands.json
|
||||||
|
|
||||||
|
## Local
|
||||||
|
|
||||||
|
.idea/*.xml
|
||||||
|
|
||||||
|
build/**/*
|
||||||
|
.cache/**/*
|
||||||
|
|
||||||
|
bin/*
|
||||||
|
test/test_runner
|
||||||
|
|
||||||
|
.vscode/*
|
||||||
|
.vscode/**/*
|
||||||
|
|
||||||
|
cmake-build-debug/**/*
|
||||||
|
.idea
|
||||||
|
|
||||||
30
CMakeLists.txt
Normal file
30
CMakeLists.txt
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
cmake_minimum_required(VERSION 4.2.0)
|
||||||
|
project(bar)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 26)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
|
||||||
|
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
|
||||||
|
pkg_check_modules(GTKMM REQUIRED gtkmm-4.0)
|
||||||
|
pkg_check_modules(LAYERSHELL REQUIRED gtk4-layer-shell-0)
|
||||||
|
|
||||||
|
include_directories(${GTKMM_INCLUDE_DIRS} ${LAYERSHELL_INCLUDE_DIRS})
|
||||||
|
link_directories(${GTKMM_LIBRARY_DIRS} ${LAYERSHELL_LIBRARY_DIRS})
|
||||||
|
|
||||||
|
add_library(bar_lib)
|
||||||
|
target_sources(bar_lib
|
||||||
|
PUBLIC
|
||||||
|
src/bar.cpp
|
||||||
|
src/widgets/clock.cpp
|
||||||
|
)
|
||||||
|
include_directories(bar_lib PRIVATE
|
||||||
|
include
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(bar main.cpp)
|
||||||
|
|
||||||
|
target_link_libraries(bar bar_lib ${GTKMM_LIBRARIES} ${LAYERSHELL_LIBRARIES})
|
||||||
19
include/bar.hpp
Normal file
19
include/bar.hpp
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gtkmm.h>
|
||||||
|
#include <gtk4-layer-shell/gtk4-layer-shell.h>
|
||||||
|
|
||||||
|
#include "widgets/clock.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
class Bar : public Gtk::Window {
|
||||||
|
public:
|
||||||
|
Bar();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Clock clock;
|
||||||
|
Gtk::CenterBox main_box{};
|
||||||
|
|
||||||
|
void setup_ui();
|
||||||
|
void load_css();
|
||||||
|
};
|
||||||
5
include/interface/updateable.ipp
Normal file
5
include/interface/updateable.ipp
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
class IUpdatable {
|
||||||
|
public:
|
||||||
|
virtual ~IUpdatable() = default;
|
||||||
|
virtual bool onUpdate() = 0;
|
||||||
|
};
|
||||||
12
include/widgets/clock.hpp
Normal file
12
include/widgets/clock.hpp
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <gtkmm/label.h>
|
||||||
|
#include <gtkmm.h>
|
||||||
|
#include <gtk4-layer-shell/gtk4-layer-shell.h>
|
||||||
|
|
||||||
|
#include "interface/updateable.ipp"
|
||||||
|
|
||||||
|
class Clock : public Gtk::Label, public IUpdatable {
|
||||||
|
public:
|
||||||
|
bool onUpdate();
|
||||||
|
};
|
||||||
7
main.cpp
Normal file
7
main.cpp
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
#include "bar.hpp"
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
auto app = Gtk::Application::create("org.example.mybar");
|
||||||
|
|
||||||
|
return app->make_window_and_run<Bar>(argc, argv);
|
||||||
|
}
|
||||||
68
src/bar.cpp
Normal file
68
src/bar.cpp
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
#include <ctime>
|
||||||
|
|
||||||
|
#include <gtkmm/enums.h>
|
||||||
|
#include <gtkmm/label.h>
|
||||||
|
|
||||||
|
#include "bar.hpp"
|
||||||
|
#include "glibmm/main.h"
|
||||||
|
#include "sigc++/functors/mem_fun.h"
|
||||||
|
#include "widgets/clock.hpp"
|
||||||
|
|
||||||
|
Bar::Bar() {
|
||||||
|
gtk_layer_init_for_window(this->gobj());
|
||||||
|
|
||||||
|
gtk_layer_set_anchor(this->gobj(), GTK_LAYER_SHELL_EDGE_TOP, true);
|
||||||
|
gtk_layer_set_anchor(this->gobj(), GTK_LAYER_SHELL_EDGE_LEFT, true);
|
||||||
|
gtk_layer_set_anchor(this->gobj(), GTK_LAYER_SHELL_EDGE_RIGHT, true);
|
||||||
|
|
||||||
|
gtk_layer_auto_exclusive_zone_enable(this->gobj());
|
||||||
|
|
||||||
|
set_child(main_box);
|
||||||
|
|
||||||
|
load_css();
|
||||||
|
setup_ui();
|
||||||
|
|
||||||
|
this->clock.onUpdate();
|
||||||
|
|
||||||
|
Glib::signal_timeout().connect(
|
||||||
|
sigc::mem_fun(
|
||||||
|
this->clock,
|
||||||
|
&Clock::onUpdate
|
||||||
|
),
|
||||||
|
1000
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bar::setup_ui() {
|
||||||
|
Gtk::Box left_box{Gtk::Orientation::HORIZONTAL};
|
||||||
|
Gtk::Box center_box{Gtk::Orientation::HORIZONTAL};
|
||||||
|
Gtk::Box right_box{Gtk::Orientation::HORIZONTAL};
|
||||||
|
|
||||||
|
main_box.set_start_widget(left_box);
|
||||||
|
main_box.set_center_widget(center_box);
|
||||||
|
main_box.set_end_widget(right_box);
|
||||||
|
|
||||||
|
Gtk::Label labelLeft("labelLeft");
|
||||||
|
Gtk::Label labelRight("labelRight");
|
||||||
|
|
||||||
|
|
||||||
|
left_box.append(labelLeft);
|
||||||
|
center_box.append(clock);
|
||||||
|
right_box.append(labelRight);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Bar::load_css() {
|
||||||
|
auto css_provider = Gtk::CssProvider::create();
|
||||||
|
|
||||||
|
css_provider->load_from_data(R"(
|
||||||
|
window { background-color: #222; color: #fff; }
|
||||||
|
#clock-label { font-weight: bold; font-family: monospace; }
|
||||||
|
)");
|
||||||
|
|
||||||
|
Gtk::StyleContext::add_provider_for_display(
|
||||||
|
Gdk::Display::get_default(),
|
||||||
|
css_provider,
|
||||||
|
GTK_STYLE_PROVIDER_PRIORITY_APPLICATION
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
15
src/widgets/clock.cpp
Normal file
15
src/widgets/clock.cpp
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#include "widgets/clock.hpp"
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
|
bool Clock::onUpdate() {
|
||||||
|
auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
|
||||||
|
|
||||||
|
std::stringstream ss;
|
||||||
|
ss << std::put_time(std::localtime(&now), "%H:%M:%S");
|
||||||
|
|
||||||
|
set_text(ss.str());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user