renderer: add more uniforms to the screen shader (#11986)

These are: pointer_shape from the cursor-shape-v1 protocol prepared for v2, along with left_ptr...bottom_right_corner and killing (Hyprland specific)
           pointer_shape_previous with
           pointer_switch_time to blend between shapes
           pointer_size scaled size as used by the normal cursor
           pointer_pressed_positions[32] with
           pointer_pressed_times[32] and
           pointer_pressed_killed(32 bits) for click/touch animations and if they killed something
           pointer_inactive_timeout with
           pointer_last_active to smoothly fade the pointer out
           pointer_hidden to hide it when the cursor is hidden (excluding by cursor:invisible as this config value can be used to turn off the normal cursor, which is useful when drawing it with the screen shader)
This commit is contained in:
Mozzarella32 2025-10-20 13:22:50 +02:00 committed by GitHub
parent 474cd004df
commit 46dab01bcc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 215 additions and 25 deletions

View file

@ -342,3 +342,7 @@ bool CCursorManager::changeTheme(const std::string& name, const int size) {
void CCursorManager::syncGsettings() {
m_xcursor->syncGsettings();
}
float CCursorManager::getScaledSize() const {
return m_size * m_cursorScale;
}

View file

@ -55,6 +55,8 @@ class CCursorManager {
void tickAnimatedCursor();
float getScaledSize() const;
private:
bool m_ourBufferConnected = false;
std::vector<SP<CCursorBuffer>> m_cursorBuffers;

View file

@ -4,6 +4,7 @@
#include <cstdint>
#include <hyprutils/math/Vector2D.hpp>
#include <ranges>
#include <algorithm>
#include "../../config/ConfigValue.hpp"
#include "../../config/ConfigManager.hpp"
#include "../../desktop/Window.hpp"
@ -716,7 +717,7 @@ void CInputManager::setClickMode(eClickBehaviorMode mode) {
case CLICKMODE_DEFAULT:
Debug::log(LOG, "SetClickMode: DEFAULT");
m_clickBehavior = CLICKMODE_DEFAULT;
g_pHyprRenderer->setCursorFromName("left_ptr");
g_pHyprRenderer->setCursorFromName("left_ptr", true);
break;
case CLICKMODE_KILL:
@ -728,7 +729,7 @@ void CInputManager::setClickMode(eClickBehaviorMode mode) {
refocus();
// set cursor
g_pHyprRenderer->setCursorFromName("crosshair");
g_pHyprRenderer->setCursorFromName("crosshair", true);
break;
default: break;
}

View file

@ -124,6 +124,8 @@ void CInputManager::onTouchUp(ITouch::SUpEvent e) {
void CInputManager::onTouchMove(ITouch::SMotionEvent e) {
m_lastInputTouch = true;
m_lastCursorMovement.reset();
EMIT_HOOK_EVENT_CANCELLABLE("touchMove", e);
if (g_pUnifiedWorkspaceSwipe->isGestureInProgress()) {
// Do nothing if this is using a different finger.