소스 검색

MenuApplets: Add Clock applet, move code from WindowServer to the applet.

Hüseyin ASLITÜRK 5 년 전
부모
커밋
3d4dddd111
3개의 변경된 파일86개의 추가작업 그리고 0개의 파일을 삭제
  1. 1 0
      Kernel/build-root-filesystem.sh
  2. 7 0
      MenuApplets/Clock/Makefile
  3. 78 0
      MenuApplets/Clock/main.cpp

+ 1 - 0
Kernel/build-root-filesystem.sh

@@ -125,6 +125,7 @@ cp ../Servers/ProtocolServer/ProtocolServer mnt/bin/ProtocolServer
 cp ../Shell/Shell mnt/bin/Shell
 cp ../Shell/Shell mnt/bin/Shell
 cp ../MenuApplets/Audio/Audio.MenuApplet mnt/bin/
 cp ../MenuApplets/Audio/Audio.MenuApplet mnt/bin/
 cp ../MenuApplets/CPUGraph/CPUGraph.MenuApplet mnt/bin/
 cp ../MenuApplets/CPUGraph/CPUGraph.MenuApplet mnt/bin/
+cp ../MenuApplets/Clock/Clock.MenuApplet mnt/bin/
 echo "done"
 echo "done"
 
 
 printf "installing shortcuts... "
 printf "installing shortcuts... "

+ 7 - 0
MenuApplets/Clock/Makefile

@@ -0,0 +1,7 @@
+OBJS = main.o 
+
+PROGRAM = Clock.MenuApplet
+
+LIB_DEPS = GUI IPC Draw Core
+
+include ../../Makefile.common

+ 78 - 0
MenuApplets/Clock/main.cpp

@@ -0,0 +1,78 @@
+#include <LibCore/CTimer.h>
+#include <LibDraw/Palette.h>
+#include <LibGUI/GApplication.h>
+#include <LibGUI/GPainter.h>
+#include <LibGUI/GWidget.h>
+#include <LibGUI/GWindow.h>
+#include <time.h>
+
+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<CTimer> 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();
+}