From 72fb6b55cb2448d76b2efffb63401422eac7ce51 Mon Sep 17 00:00:00 2001 From: caffeine01 Date: Tue, 10 Dec 2024 23:54:48 +0000 Subject: [PATCH] reduce code repetition, try to add tablet(pen) support but realise there is no proper interface (?) in hyprland api --- hyprbars/barDeco.cpp | 30 ++++++++++++++++-------------- hyprbars/barDeco.hpp | 4 ++++ 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/hyprbars/barDeco.cpp b/hyprbars/barDeco.cpp index 27f5aaf..97634a8 100644 --- a/hyprbars/barDeco.cpp +++ b/hyprbars/barDeco.cpp @@ -18,6 +18,9 @@ CHyprBar::CHyprBar(PHLWINDOW pWindow) : IHyprWindowDecoration(pWindow) { m_pTouchDownCallback = HyprlandAPI::registerCallbackDynamic(PHANDLE, "touchDown", [&](void* self, SCallbackInfo& info, std::any param) { onTouchDown(info); }); + m_pTipDownCallback = HyprlandAPI::registerCallbackDynamic(PHANDLE, "tabletTip", + [&](void* self, SCallbackInfo& info, std::any param) { onTipDown(info, std::any_cast(param)); }); + m_pMouseMoveCallback = HyprlandAPI::registerCallbackDynamic(PHANDLE, "mouseMove", [&](void* self, SCallbackInfo& info, std::any param) { onMouseMove(std::any_cast(param)); }); @@ -29,6 +32,7 @@ CHyprBar::~CHyprBar() { damageEntire(); HyprlandAPI::unregisterCallback(PHANDLE, m_pMouseButtonCallback); HyprlandAPI::unregisterCallback(PHANDLE, m_pTouchDownCallback); + HyprlandAPI::unregisterCallback(PHANDLE, m_pTipDownCallback); HyprlandAPI::unregisterCallback(PHANDLE, m_pMouseMoveCallback); std::erase(g_pGlobalState->bars, this); } @@ -111,25 +115,23 @@ void CHyprBar::onMouseDown(SCallbackInfo& info, IPointer::SButtonEvent e) { // check if on a button - float offset = **PBARPADDING; - - for (auto& b : g_pGlobalState->buttons) { - const auto BARBUF = Vector2D{(int)assignedBoxGlobal().w, **PHEIGHT}; - Vector2D currentPos = Vector2D{(BUTTONSRIGHT ? BARBUF.x - **PBARBUTTONPADDING - b.size - offset : offset), (BARBUF.y - b.size) / 2.0}.floor(); - - if (VECINRECT(COORDS, currentPos.x, currentPos.y, currentPos.x + b.size + **PBARBUTTONPADDING, currentPos.y + b.size)) { - // hit on close - g_pKeybindManager->m_mDispatchers["exec"](b.cmd); - return; - } - - offset += **PBARBUTTONPADDING + b.size; - } + CHyprBar::doButtonPress(); m_bDragPending = true; } void CHyprBar::onTouchDown(SCallbackInfo& info) { + CHyprBar::doButtonPress(); +} + +void CHyprBar::onTipDown(SCallbackInfo& info, CTablet::STipEvent e) { + HyprlandAPI::addNotification(PHANDLE, "[hyprbars] TIP DOWN", CHyprColor{0.2, 1.0, 0.2, 1.0}, 5000); + if (!e.in) + return; + CHyprBar::doButtonPress(); +} + +void CHyprBar::doButtonPress() { const auto COORDS = cursorRelativeToBar(); static auto* const PHEIGHT = (Hyprlang::INT* const*)HyprlandAPI::getConfigValue(PHANDLE, "plugin:hyprbars:bar_height")->getDataStaticPtr(); diff --git a/hyprbars/barDeco.hpp b/hyprbars/barDeco.hpp index 292401e..76a28ba 100644 --- a/hyprbars/barDeco.hpp +++ b/hyprbars/barDeco.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include "globals.hpp" class CHyprBar : public IHyprWindowDecoration { @@ -61,12 +62,15 @@ class CHyprBar : public IHyprWindowDecoration { void renderBarButtons(const Vector2D& bufferSize, const float scale); void renderBarButtonsText(CBox* barBox, const float scale, const float a); void onMouseDown(SCallbackInfo& info, IPointer::SButtonEvent e); + void onTipDown(SCallbackInfo& info, CTablet::STipEvent e); void onTouchDown(SCallbackInfo& info); + void doButtonPress(); void onMouseMove(Vector2D coords); CBox assignedBoxGlobal(); SP m_pMouseButtonCallback; SP m_pTouchDownCallback; + SP m_pTipDownCallback; SP m_pMouseMoveCallback; std::string m_szLastTitle;