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
monitor=0
enabled=1
mod_pad_in=8
font.main=Noto Sans
font.secondary=Noto Sans
col.bg=0xff111111
col.high=0xffff3333
module=left,0xff8000ff,0xffffffff,1,workspaces
module=right,0xffffffff,0xff00ff33,1000,$date +%a,\ %b\ %Y\ \ %I:%M\ %p$
module=left,X,0xff8000ff,0xffffffff,1,workspaces
module=right,X,0xffffffff,0xff00ff33,1000,$date +%a,\ %b\ %Y\ \ %I:%M\ %p$
}
# colors

View file

@ -210,8 +210,8 @@ void CStatusBar::destroy() {
m_pCairo = nullptr;
}
int CStatusBar::getTextWidth(std::string text) {
cairo_select_font_face(m_pCairo, "Noto Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
int CStatusBar::getTextWidth(std::string text, std::string font) {
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_text_extents_t textextents;
@ -220,8 +220,8 @@ int CStatusBar::getTextWidth(std::string text) {
return textextents.width + 1 /* pad */;
}
void CStatusBar::drawText(Vector2D pos, std::string text, uint32_t color) {
cairo_select_font_face(m_pCairo, "Noto Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL);
void CStatusBar::drawText(Vector2D pos, std::string text, uint32_t color, std::string font) {
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_source_rgba(m_pCairo, RED(color), GREEN(color), BLUE(color), ALPHA(color));
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"));
drawText(Vector2D(off + m_vecSize.y * drawnWorkspaces + m_vecSize.y / 2.f - getTextWidth(workspaceName) / 2.f, getTextHalfY()),
workspaceName, WORKSPACE == MOUSEWORKSPACEID ? 0xFF111111 : 0xFFFFFFFF);
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, ConfigManager::getString("bar:font.main"));
drawnWorkspaces++;
}
@ -325,7 +325,7 @@ int CStatusBar::drawModule(SBarModule* mod, int off) {
if (mod->isPad)
return mod->pad;
const int PAD = 4;
const int PAD = ConfigManager::getInt("bar:mod_pad_in");
// check if we need to update
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!
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 == "")
return 0; // empty module
@ -348,16 +349,17 @@ int CStatusBar::drawModule(SBarModule* mod, int off) {
position = Vector2D(off, 0);
break;
case RIGHT:
position = Vector2D(m_vecSize.x - off - MODULEWIDTH, 0);
position = Vector2D(m_vecSize.x - off - MODULEWIDTH - ICONWIDTH, 0);
break;
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;
}
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 {
ModuleAlignment alignment;
std::string value;
std::string icon;
std::string valueCalculated = "";
uint64_t color;
uint64_t bgcolor;
@ -67,9 +68,9 @@ private:
cairo_surface_t* m_pCairoSurface = 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);
int getTextWidth(std::string);
int getTextWidth(std::string, std::string);
int drawModule(SBarModule*, int);
int drawWorkspacesModule(SBarModule*, int);
int getTextHalfY();

View file

@ -22,15 +22,16 @@ void ConfigManager::init() {
configValues["bar:height"].intValue = 15;
configValues["bar:col.bg"].intValue = 0xFF111111;
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
configValues["col.active_border"].intValue = 0x77FF3333;
configValues["col.inactive_border"].intValue = 0x77222222;
// animations
configValues["anim.speed"].floatValue = 1;
configValues["anim.enabled"].intValue = 1;
@ -163,6 +164,9 @@ void parseModule(const std::string& COMMANDC, const std::string& VALUE) {
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(","));
valueCopy = valueCopy.substr(valueCopy.find_first_of(",") + 1);
@ -193,6 +197,8 @@ void parseModule(const std::string& COMMANDC, const std::string& VALUE) {
return;
}
module.icon = ICON;
module.value = COMMAND;
g_pWindowManager->statusBar->modules.push_back(module);
@ -292,7 +298,7 @@ void ConfigManager::loadConfigLoadVars() {
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;
ifs.open(CONFIGPATH.c_str());
@ -364,7 +370,7 @@ void ConfigManager::applyKeybindsToX() {
void ConfigManager::tick() {
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;
int err = stat(CONFIGPATH.c_str(), &fileStat);