From 3d4dddd1111affc8dff03524f5b0b83d7c1c4b0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20ASLIT=C3=9CRK?= Date: Fri, 27 Dec 2019 21:17:19 +0300 Subject: [PATCH] MenuApplets: Add Clock applet, move code from WindowServer to the applet. --- Kernel/build-root-filesystem.sh | 1 + MenuApplets/Clock/Makefile | 7 +++ MenuApplets/Clock/main.cpp | 78 +++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100755 MenuApplets/Clock/Makefile create mode 100644 MenuApplets/Clock/main.cpp diff --git a/Kernel/build-root-filesystem.sh b/Kernel/build-root-filesystem.sh index bf1bc386e8..a4f561fa1e 100755 --- a/Kernel/build-root-filesystem.sh +++ b/Kernel/build-root-filesystem.sh @@ -125,6 +125,7 @@ cp ../Servers/ProtocolServer/ProtocolServer mnt/bin/ProtocolServer cp ../Shell/Shell mnt/bin/Shell cp ../MenuApplets/Audio/Audio.MenuApplet mnt/bin/ cp ../MenuApplets/CPUGraph/CPUGraph.MenuApplet mnt/bin/ +cp ../MenuApplets/Clock/Clock.MenuApplet mnt/bin/ echo "done" printf "installing shortcuts... " diff --git a/MenuApplets/Clock/Makefile b/MenuApplets/Clock/Makefile new file mode 100755 index 0000000000..f68290e9e6 --- /dev/null +++ b/MenuApplets/Clock/Makefile @@ -0,0 +1,7 @@ +OBJS = main.o + +PROGRAM = Clock.MenuApplet + +LIB_DEPS = GUI IPC Draw Core + +include ../../Makefile.common \ No newline at end of file diff --git a/MenuApplets/Clock/main.cpp b/MenuApplets/Clock/main.cpp new file mode 100644 index 0000000000..3d74554e67 --- /dev/null +++ b/MenuApplets/Clock/main.cpp @@ -0,0 +1,78 @@ +#include +#include +#include +#include +#include +#include +#include + +class ClockWidget final : public GWidget { + C_OBJECT(ClockWidget) +public: + ClockWidget() + : GWidget(nullptr) + { + m_time_width = Font::default_bold_font().width("2222-22-22 22:22:22"); + + m_timer = CTimer::construct(300, [this] { + static time_t last_update_time; + time_t now = time(nullptr); + if (now != last_update_time) { + tick_clock(); + last_update_time = now; + } + }); + } + + virtual ~ClockWidget() override {} + + int get_width() + { + return m_time_width + menubar_menu_margin(); + } + +private: + static int menubar_menu_margin() { return 2; } + + virtual void paint_event(GPaintEvent& event) override + { + time_t now = time(nullptr); + auto* tm = localtime(&now); + + auto time_text = String::format("%4u-%02u-%02u %02u:%02u:%02u", + tm->tm_year + 1900, + tm->tm_mon + 1, + tm->tm_mday, + tm->tm_hour, + tm->tm_min, + tm->tm_sec); + + GPainter painter(*this); + painter.fill_rect(event.rect(), palette().window()); + painter.draw_text(event.rect(), time_text, Font::default_font(), TextAlignment::Center, palette().window_text()); + } + + void tick_clock() + { + update(); + } + + RefPtr m_timer; + int m_time_width; +}; + +int main(int argc, char** argv) +{ + GApplication app(argc, argv); + + auto window = GWindow::construct(); + window->set_window_type(GWindowType::MenuApplet); + + auto widget = ClockWidget::construct(); + + window->resize(widget->get_width(), 16); + window->set_main_widget(widget); + window->show(); + + return app.exec(); +}