hyprbars: update for hyprland@#3739

This commit is contained in:
Vaxry 2023-11-04 13:15:30 +00:00
parent 874deb2980
commit 69287a4dec
2 changed files with 23 additions and 21 deletions

View file

@ -31,10 +31,6 @@ CHyprBar::~CHyprBar() {
std::erase(g_pGlobalState->bars, this); std::erase(g_pGlobalState->bars, this);
} }
bool CHyprBar::allowsInput() {
return true;
}
SWindowDecorationExtents CHyprBar::getWindowDecorationExtents() { SWindowDecorationExtents CHyprBar::getWindowDecorationExtents() {
return m_seExtents; return m_seExtents;
} }
@ -303,7 +299,7 @@ void CHyprBar::renderBarButtons(const Vector2D& bufferSize, const float scale) {
cairo_surface_destroy(CAIROSURFACE); cairo_surface_destroy(CAIROSURFACE);
} }
void CHyprBar::renderBarButtonsText(wlr_box* barBox, const float scale) { void CHyprBar::renderBarButtonsText(wlr_box* barBox, const float scale, const float a) {
const auto scaledButtonsPad = BUTTONS_PAD * scale; const auto scaledButtonsPad = BUTTONS_PAD * scale;
int offset = scaledButtonsPad; int offset = scaledButtonsPad;
@ -324,7 +320,7 @@ void CHyprBar::renderBarButtonsText(wlr_box* barBox, const float scale) {
wlr_box pos = {barBox->x + barBox->width - offset - scaledButtonSize * 1.5, barBox->y + (barBox->height - scaledButtonSize) / 2.0, scaledButtonSize, scaledButtonSize}; wlr_box pos = {barBox->x + barBox->width - offset - scaledButtonSize * 1.5, barBox->y + (barBox->height - scaledButtonSize) / 2.0, scaledButtonSize, scaledButtonSize};
g_pHyprOpenGL->renderTexture(button.iconTex, &pos, 1); g_pHyprOpenGL->renderTexture(button.iconTex, &pos, a);
offset += scaledButtonsPad + scaledButtonSize; offset += scaledButtonsPad + scaledButtonSize;
}; };
@ -341,9 +337,8 @@ void CHyprBar::draw(CMonitor* pMonitor, float a, const Vector2D& offset) {
if (!m_pWindow->m_sSpecialRenderData.decorate) if (!m_pWindow->m_sSpecialRenderData.decorate)
return; return;
static auto* const PROUNDING = &HyprlandAPI::getConfigValue(PHANDLE, "decoration:rounding")->intValue; static auto* const PCOLOR = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_color")->intValue;
static auto* const PCOLOR = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_color")->intValue; static auto* const PHEIGHT = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_height")->intValue;
static auto* const PHEIGHT = &HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_height")->intValue;
if (*PHEIGHT < 1) { if (*PHEIGHT < 1) {
m_iLastHeight = *PHEIGHT; m_iLastHeight = *PHEIGHT;
@ -351,23 +346,20 @@ void CHyprBar::draw(CMonitor* pMonitor, float a, const Vector2D& offset) {
} }
const auto BORDERSIZE = m_pWindow->getRealBorderSize(); const auto BORDERSIZE = m_pWindow->getRealBorderSize();
const auto ROUNDING = m_pWindow->rounding() + m_pWindow->getRealBorderSize();
const auto scaledRounding = *PROUNDING * pMonitor->scale; const auto scaledRounding = ROUNDING * pMonitor->scale;
const auto scaledBorderSize = BORDERSIZE * pMonitor->scale; const auto scaledBorderSize = BORDERSIZE * pMonitor->scale;
CColor color = *PCOLOR; CColor color = *PCOLOR;
color.a *= a; color.a *= a;
const auto ROUNDING = !m_pWindow->m_sSpecialRenderData.rounding ? m_seExtents = {{0, *PHEIGHT}, {}};
0 :
(m_pWindow->m_sAdditionalConfigData.rounding.toUnderlying() == -1 ? *PROUNDING : m_pWindow->m_sAdditionalConfigData.rounding.toUnderlying());
m_seExtents = {{0, *PHEIGHT + 1}, {}};
const auto BARBUF = Vector2D{(int)m_vLastWindowSize.x + 2 * BORDERSIZE, *PHEIGHT} * pMonitor->scale; const auto BARBUF = Vector2D{(int)m_vLastWindowSize.x + 2 * BORDERSIZE, *PHEIGHT} * pMonitor->scale;
wlr_box titleBarBox = {(int)m_vLastWindowPos.x - BORDERSIZE - pMonitor->vecPosition.x, (int)m_vLastWindowPos.y - BORDERSIZE - *PHEIGHT - pMonitor->vecPosition.y, wlr_box titleBarBox = {(int)m_vLastWindowPos.x - BORDERSIZE - pMonitor->vecPosition.x, (int)m_vLastWindowPos.y - BORDERSIZE - *PHEIGHT - pMonitor->vecPosition.y,
(int)m_vLastWindowSize.x + 2 * BORDERSIZE, *PHEIGHT + *PROUNDING * 3 /* to fill the bottom cuz we can't disable rounding there */}; (int)m_vLastWindowSize.x + 2 * BORDERSIZE, *PHEIGHT + ROUNDING * 3 /* to fill the bottom cuz we can't disable rounding there */};
titleBarBox.x += offset.x; titleBarBox.x += offset.x;
titleBarBox.y += offset.y; titleBarBox.y += offset.y;
@ -376,7 +368,7 @@ void CHyprBar::draw(CMonitor* pMonitor, float a, const Vector2D& offset) {
g_pHyprOpenGL->scissor(&titleBarBox); g_pHyprOpenGL->scissor(&titleBarBox);
if (*PROUNDING) { if (ROUNDING) {
glClearStencil(0); glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT); glClear(GL_STENCIL_BUFFER_BIT);
@ -404,7 +396,7 @@ void CHyprBar::draw(CMonitor* pMonitor, float a, const Vector2D& offset) {
renderBarTitle(BARBUF, pMonitor->scale); renderBarTitle(BARBUF, pMonitor->scale);
} }
if (*PROUNDING) { if (ROUNDING) {
// cleanup stencil // cleanup stencil
glClearStencil(0); glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT); glClear(GL_STENCIL_BUFFER_BIT);
@ -425,7 +417,7 @@ void CHyprBar::draw(CMonitor* pMonitor, float a, const Vector2D& offset) {
g_pHyprOpenGL->scissor((wlr_box*)nullptr); g_pHyprOpenGL->scissor((wlr_box*)nullptr);
renderBarButtonsText(&textBox, pMonitor->scale); renderBarButtonsText(&textBox, pMonitor->scale, a);
m_bWindowSizeChanged = false; m_bWindowSizeChanged = false;
@ -470,3 +462,11 @@ Vector2D CHyprBar::cursorRelativeToBar() {
static auto* const PBORDER = &HyprlandAPI::getConfigValue(PHANDLE, "general:border_size")->intValue; static auto* const PBORDER = &HyprlandAPI::getConfigValue(PHANDLE, "general:border_size")->intValue;
return g_pInputManager->getMouseCoordsInternal() - m_pWindow->m_vRealPosition.vec() + Vector2D{*PBORDER, *PHEIGHT + *PBORDER}; return g_pInputManager->getMouseCoordsInternal() - m_pWindow->m_vRealPosition.vec() + Vector2D{*PBORDER, *PHEIGHT + *PBORDER};
} }
eDecorationLayer CHyprBar::getDecorationLayer() {
return DECORATION_LAYER_UNDER;
}
uint64_t CHyprBar::getDecorationFlags() {
return DECORATION_ALLOWS_MOUSE_INPUT | DECORATION_PART_OF_MAIN_WINDOW;
}

View file

@ -23,7 +23,9 @@ class CHyprBar : public IHyprWindowDecoration {
virtual SWindowDecorationExtents getWindowDecorationReservedArea(); virtual SWindowDecorationExtents getWindowDecorationReservedArea();
virtual bool allowsInput(); virtual eDecorationLayer getDecorationLayer();
virtual uint64_t getDecorationFlags();
bool m_bButtonsDirty = true; bool m_bButtonsDirty = true;
@ -45,7 +47,7 @@ class CHyprBar : public IHyprWindowDecoration {
void renderBarTitle(const Vector2D& bufferSize, const float scale); void renderBarTitle(const Vector2D& bufferSize, const float scale);
void renderText(CTexture& out, const std::string& text, const CColor& color, const Vector2D& bufferSize, const float scale, const int fontSize); void renderText(CTexture& out, const std::string& text, const CColor& color, const Vector2D& bufferSize, const float scale, const int fontSize);
void renderBarButtons(const Vector2D& bufferSize, const float scale); void renderBarButtons(const Vector2D& bufferSize, const float scale);
void renderBarButtonsText(wlr_box* barBox, const float scale); void renderBarButtonsText(wlr_box* barBox, const float scale, const float a);
void onMouseDown(SCallbackInfo& info, wlr_pointer_button_event* e); void onMouseDown(SCallbackInfo& info, wlr_pointer_button_event* e);
void onMouseMove(Vector2D coords); void onMouseMove(Vector2D coords);