Added icons to the status bar

This commit is contained in:
vaxerski 2021-11-30 21:11:27 +01:00
parent acb177bf4d
commit 2d82458260
4 changed files with 35 additions and 22 deletions

View File

@ -19,12 +19,16 @@ Bar {
height=20 height=20
monitor=0 monitor=0
enabled=1 enabled=1
mod_pad_in=8
font.main=Noto Sans
font.secondary=Noto Sans
col.bg=0xff111111 col.bg=0xff111111
col.high=0xffff3333 col.high=0xffff3333
module=left,0xff8000ff,0xffffffff,1,workspaces module=left,X,0xff8000ff,0xffffffff,1,workspaces
module=right,0xffffffff,0xff00ff33,1000,$date +%a,\ %b\ %Y\ \ %I:%M\ %p$ module=right,X,0xffffffff,0xff00ff33,1000,$date +%a,\ %b\ %Y\ \ %I:%M\ %p$
} }
# colors # colors

View File

@ -210,8 +210,8 @@ void CStatusBar::destroy() {
m_pCairo = nullptr; m_pCairo = nullptr;
} }
int CStatusBar::getTextWidth(std::string text) { int CStatusBar::getTextWidth(std::string text, std::string font) {
cairo_select_font_face(m_pCairo, "Noto Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_select_font_face(m_pCairo, font.c_str(), CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(m_pCairo, 12); cairo_set_font_size(m_pCairo, 12);
cairo_text_extents_t textextents; cairo_text_extents_t textextents;
@ -220,8 +220,8 @@ int CStatusBar::getTextWidth(std::string text) {
return textextents.width + 1 /* pad */; return textextents.width + 1 /* pad */;
} }
void CStatusBar::drawText(Vector2D pos, std::string text, uint32_t color) { void CStatusBar::drawText(Vector2D pos, std::string text, uint32_t color, std::string font) {
cairo_select_font_face(m_pCairo, "Noto Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL); cairo_select_font_face(m_pCairo, font.c_str(), CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(m_pCairo, 12); cairo_set_font_size(m_pCairo, 12);
cairo_set_source_rgba(m_pCairo, RED(color), GREEN(color), BLUE(color), ALPHA(color)); cairo_set_source_rgba(m_pCairo, RED(color), GREEN(color), BLUE(color), ALPHA(color));
cairo_move_to(m_pCairo, pos.x, pos.y); cairo_move_to(m_pCairo, pos.x, pos.y);
@ -311,8 +311,8 @@ int CStatusBar::drawWorkspacesModule(SBarModule* mod, int off) {
drawCairoRectangle(Vector2D(off + m_vecSize.y * drawnWorkspaces, 0), Vector2D(m_vecSize.y, m_vecSize.y), WORKSPACE == MOUSEWORKSPACEID ? ConfigManager::getInt("bar:col.high") : ConfigManager::getInt("bar:col.bg")); drawCairoRectangle(Vector2D(off + m_vecSize.y * drawnWorkspaces, 0), Vector2D(m_vecSize.y, m_vecSize.y), WORKSPACE == MOUSEWORKSPACEID ? ConfigManager::getInt("bar:col.high") : ConfigManager::getInt("bar:col.bg"));
drawText(Vector2D(off + m_vecSize.y * drawnWorkspaces + m_vecSize.y / 2.f - getTextWidth(workspaceName) / 2.f, getTextHalfY()), drawText(Vector2D(off + m_vecSize.y * drawnWorkspaces + m_vecSize.y / 2.f - getTextWidth(workspaceName, ConfigManager::getString("bar:font.main")) / 2.f, getTextHalfY()),
workspaceName, WORKSPACE == MOUSEWORKSPACEID ? 0xFF111111 : 0xFFFFFFFF); workspaceName, WORKSPACE == MOUSEWORKSPACEID ? 0xFF111111 : 0xFFFFFFFF, ConfigManager::getString("bar:font.main"));
drawnWorkspaces++; drawnWorkspaces++;
} }
@ -325,7 +325,7 @@ int CStatusBar::drawModule(SBarModule* mod, int off) {
if (mod->isPad) if (mod->isPad)
return mod->pad; return mod->pad;
const int PAD = 4; const int PAD = ConfigManager::getInt("bar:mod_pad_in");
// check if we need to update // check if we need to update
if (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - mod->updateLast).count() > mod->updateEveryMs) { if (std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now() - mod->updateLast).count() > mod->updateEveryMs) {
@ -337,7 +337,8 @@ int CStatusBar::drawModule(SBarModule* mod, int off) {
// We have the value, draw the module! // We have the value, draw the module!
const auto MODULEWIDTH = getTextWidth(mod->valueCalculated) + PAD; const auto MODULEWIDTH = getTextWidth(mod->valueCalculated, ConfigManager::getString("bar:font.main")) + PAD;
const auto ICONWIDTH = getTextWidth(mod->icon, ConfigManager::getString("bar:font.secondary"));
if (!MODULEWIDTH || mod->valueCalculated == "") if (!MODULEWIDTH || mod->valueCalculated == "")
return 0; // empty module return 0; // empty module
@ -348,16 +349,17 @@ int CStatusBar::drawModule(SBarModule* mod, int off) {
position = Vector2D(off, 0); position = Vector2D(off, 0);
break; break;
case RIGHT: case RIGHT:
position = Vector2D(m_vecSize.x - off - MODULEWIDTH, 0); position = Vector2D(m_vecSize.x - off - MODULEWIDTH - ICONWIDTH, 0);
break; break;
case CENTER: case CENTER:
position = Vector2D(m_vecSize.x / 2.f - MODULEWIDTH / 2.f, 0); position = Vector2D(m_vecSize.x / 2.f - (MODULEWIDTH + ICONWIDTH) / 2.f, 0);
break; break;
} }
drawCairoRectangle(position, Vector2D(MODULEWIDTH, m_vecSize.y), mod->bgcolor); drawCairoRectangle(position, Vector2D(MODULEWIDTH + ICONWIDTH, m_vecSize.y), mod->bgcolor);
drawText(position + Vector2D(PAD / 2, getTextHalfY()), mod->valueCalculated, mod->color); drawText(position + Vector2D(PAD / 2, getTextHalfY()), mod->icon, mod->color, ConfigManager::getString("bar:font.secondary"));
drawText(position + Vector2D(PAD / 2 + ICONWIDTH, getTextHalfY()), mod->valueCalculated, mod->color, ConfigManager::getString("bar:font.main"));
return MODULEWIDTH; return MODULEWIDTH + ICONWIDTH;
} }

View File

@ -21,6 +21,7 @@ enum ModuleAlignment {
struct SBarModule { struct SBarModule {
ModuleAlignment alignment; ModuleAlignment alignment;
std::string value; std::string value;
std::string icon;
std::string valueCalculated = ""; std::string valueCalculated = "";
uint64_t color; uint64_t color;
uint64_t bgcolor; uint64_t bgcolor;
@ -67,9 +68,9 @@ private:
cairo_surface_t* m_pCairoSurface = nullptr; cairo_surface_t* m_pCairoSurface = nullptr;
cairo_t* m_pCairo = nullptr; cairo_t* m_pCairo = nullptr;
void drawText(Vector2D, std::string, uint32_t); void drawText(Vector2D, std::string, uint32_t, std::string);
void drawCairoRectangle(Vector2D, Vector2D, uint32_t); void drawCairoRectangle(Vector2D, Vector2D, uint32_t);
int getTextWidth(std::string); int getTextWidth(std::string, std::string);
int drawModule(SBarModule*, int); int drawModule(SBarModule*, int);
int drawWorkspacesModule(SBarModule*, int); int drawWorkspacesModule(SBarModule*, int);
int getTextHalfY(); int getTextHalfY();

View File

@ -22,15 +22,16 @@ void ConfigManager::init() {
configValues["bar:height"].intValue = 15; configValues["bar:height"].intValue = 15;
configValues["bar:col.bg"].intValue = 0xFF111111; configValues["bar:col.bg"].intValue = 0xFF111111;
configValues["bar:col.high"].intValue = 0xFFFF3333; configValues["bar:col.high"].intValue = 0xFFFF3333;
configValues["bar:font.main"].strValue = "Noto Sans";
configValues["bar:font.secondary"].strValue = "Noto Sans";
configValues["bar:mod_pad_in"].intValue = 4;
configValues["status_command"].strValue = "date +%I:%M\\ %p"; // Time configValues["status_command"].strValue = "date +%I:%M\\ %p"; // Time // Deprecated
// Set Colors ARGB // Set Colors ARGB
configValues["col.active_border"].intValue = 0x77FF3333; configValues["col.active_border"].intValue = 0x77FF3333;
configValues["col.inactive_border"].intValue = 0x77222222; configValues["col.inactive_border"].intValue = 0x77222222;
// animations // animations
configValues["anim.speed"].floatValue = 1; configValues["anim.speed"].floatValue = 1;
configValues["anim.enabled"].intValue = 1; configValues["anim.enabled"].intValue = 1;
@ -163,6 +164,9 @@ void parseModule(const std::string& COMMANDC, const std::string& VALUE) {
return; return;
} }
const auto ICON = valueCopy.substr(0, valueCopy.find_first_of(","));
valueCopy = valueCopy.substr(valueCopy.find_first_of(",") + 1);
const auto COL1 = valueCopy.substr(0, valueCopy.find_first_of(",")); const auto COL1 = valueCopy.substr(0, valueCopy.find_first_of(","));
valueCopy = valueCopy.substr(valueCopy.find_first_of(",") + 1); valueCopy = valueCopy.substr(valueCopy.find_first_of(",") + 1);
@ -193,6 +197,8 @@ void parseModule(const std::string& COMMANDC, const std::string& VALUE) {
return; return;
} }
module.icon = ICON;
module.value = COMMAND; module.value = COMMAND;
g_pWindowManager->statusBar->modules.push_back(module); g_pWindowManager->statusBar->modules.push_back(module);
@ -292,7 +298,7 @@ void ConfigManager::loadConfigLoadVars() {
const char* const ENVHOME = getenv("HOME"); const char* const ENVHOME = getenv("HOME");
const std::string CONFIGPATH = ENVHOME + (std::string) "/.config/hypr/hypr.conf"; const std::string CONFIGPATH = ENVHOME + (ISDEBUG ? (std::string) "/.config/hypr/hyprd.conf" : (std::string) "/.config/hypr/hypr.conf");
std::ifstream ifs; std::ifstream ifs;
ifs.open(CONFIGPATH.c_str()); ifs.open(CONFIGPATH.c_str());
@ -364,7 +370,7 @@ void ConfigManager::applyKeybindsToX() {
void ConfigManager::tick() { void ConfigManager::tick() {
const char* const ENVHOME = getenv("HOME"); const char* const ENVHOME = getenv("HOME");
const std::string CONFIGPATH = ENVHOME + (std::string)"/.config/hypr/hypr.conf"; const std::string CONFIGPATH = ENVHOME + (ISDEBUG ? (std::string) "/.config/hypr/hyprd.conf" : (std::string) "/.config/hypr/hypr.conf");
struct stat fileStat; struct stat fileStat;
int err = stat(CONFIGPATH.c_str(), &fileStat); int err = stat(CONFIGPATH.c_str(), &fileStat);