#pragma once #include #include #include #include #include #include "AModule.hpp" namespace waybar { enum class GraphType { LINE, BAR, GAUGE }; class AGraph : public AModule { public: AGraph(const Json::Value &, const std::string &, const std::string &, uint16_t interval = 0, bool enable_click = false, bool enable_scroll = false); virtual ~AGraph() = default; auto update() -> void override; protected: Gtk::DrawingArea graph_; std::deque values_; uint16_t datapoints_ = 20; GraphType graph_type_ = GraphType::LINE; void addValue(const int n); const std::chrono::seconds interval_; bool onDraw(const Cairo::RefPtr &cr); std::map submenus_; std::map menuActionsMap_; static void handleGtkMenuEvent(GtkMenuItem *menuitem, gpointer data); private: void drawFilledArea(const Cairo::RefPtr &cr, const std::vector> &points, double height, const Gdk::RGBA &bg_color); void drawLine(const Cairo::RefPtr &cr, const std::vector> &points, const Gdk::RGBA &fg_color); void drawPath(const Cairo::RefPtr &cr, const std::vector> &points); void drawBars(const Cairo::RefPtr &cr, double width, double height, int current_value, const Gdk::RGBA &fg_color); void drawGauge(const Cairo::RefPtr &cr, double width, double height, int current_value, const Gdk::RGBA &fg_color); }; } // namespace waybar