#include "components/workspaceIndicator.hpp" #include "gtkmm/gestureclick.h" #include "gtkmm/label.h" #include "gtkmm/overlay.h" WorkspaceIndicator::WorkspaceIndicator(int id, std::string label, sigc::slot onClick) : Gtk::Box(Gtk::Orientation::HORIZONTAL) { overlay = std::make_shared(); auto numLabel = Gtk::make_managed(label); auto pillContainer = Gtk::make_managed(Gtk::Orientation::HORIZONTAL); auto gesture = Gtk::GestureClick::create(); gesture->set_button(GDK_BUTTON_PRIMARY); gesture->signal_released().connect([id, onClick](int, double, double) { onClick( id); }); overlay->add_controller(gesture); overlay->add_css_class("workspace-pill"); int sixSevenCheck = std::stoi(label); if (sixSevenCheck == 6 || sixSevenCheck == 7) { auto indicator = Gtk::make_managed(sixSevenCheck == 6 ? "🫱🏻" : "🫲🏻"); indicator->add_css_class(sixSevenCheck == 6 ? "workspace-pill-six" : "workspace-pill-seven"); indicator->set_valign(Gtk::Align::END); overlay->set_child(*indicator); overlay->add_overlay(*numLabel); pillContainer->append(*overlay); } else { overlay->set_child(*numLabel); pillContainer->append(*overlay); } append(*pillContainer); } void WorkspaceIndicator::setIndicatorState(InidicatorState state) { this->clearCssClass(); this->currentState = state; auto cssClass = this->stateToCssClass[state]; this->overlay->add_css_class(cssClass); } void WorkspaceIndicator::clearCssClass() { for (const auto &[_, cssClass] : stateToCssClass) { this->overlay->remove_css_class(cssClass); } }