internal: fix scrolling for high res devices

Implements first part of #202
This commit is contained in:
2 * r + 2 * t 2025-07-09 23:53:01 +10:00
parent 17812d0322
commit 2c9feb7544
5 changed files with 33 additions and 10 deletions

View file

@ -96,12 +96,12 @@ Item {
implicitWidth: workspacesInner.implicitWidth + Appearance.padding.small * 2
implicitHeight: workspacesInner.implicitHeight + Appearance.padding.small * 2
MouseArea {
CustomMouseArea {
anchors.fill: parent
anchors.leftMargin: -Config.border.thickness
anchors.rightMargin: -Config.border.thickness
onWheel: event => {
function onWheel(event: WheelEvent): void {
const activeWs = Hyprland.activeToplevel?.workspace?.name;
if (activeWs?.startsWith("special:"))
Hyprland.dispatch(`togglespecialworkspace ${activeWs.slice(8)}`);

View file

@ -16,13 +16,13 @@ Item {
implicitWidth: child.implicitWidth
implicitHeight: child.implicitHeight
MouseArea {
CustomMouseArea {
anchors.top: parent.top
anchors.bottom: child.top
anchors.left: parent.left
anchors.right: parent.right
onWheel: event => {
function onWheel(event: WheelEvent): void {
if (event.angleDelta.y > 0)
Audio.setVolume(Audio.volume + 0.1);
else if (event.angleDelta.y < 0)
@ -30,13 +30,13 @@ Item {
}
}
MouseArea {
CustomMouseArea {
anchors.top: child.bottom
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.right: parent.right
onWheel: event => {
function onWheel(event: WheelEvent): void {
const monitor = root.monitor;
if (event.angleDelta.y > 0)
monitor.setBrightness(monitor.brightness + 0.1);

View file

@ -103,7 +103,7 @@ Item {
background: null
contentItem: MouseArea {
contentItem: CustomMouseArea {
id: mouse
implicitWidth: Math.max(icon.width, label.width)
@ -123,7 +123,8 @@ Item {
rippleAnim.restart();
}
onWheel: event => {
function onWheel(event: WheelEvent): void {
if (event.angleDelta.y < 0)
root.state.currentTab = Math.min(root.state.currentTab + 1, bar.count - 1);
else if (event.angleDelta.y > 0)

View file

@ -0,0 +1,21 @@
import QtQuick
MouseArea {
property int scrollAccumulatedY: 0
function onWheel(event: WheelEvent): void {
}
onWheel: event => {
// Update accumulated scroll
if (Math.sign(event.angleDelta.y) !== Math.sign(scrollAccumulatedY))
scrollAccumulatedY = 0;
scrollAccumulatedY += event.angleDelta.y;
// Trigger handler and reset if above threshold
if (Math.abs(scrollAccumulatedY) >= 120) {
onWheel(event);
scrollAccumulatedY = 0;
}
}
}

View file

@ -21,10 +21,11 @@ ScrollBar {
}
}
MouseArea {
CustomMouseArea {
z: -1
anchors.fill: parent
onWheel: event => {
function onWheel(event: WheelEvent): void {
if (event.angleDelta.y > 0)
root.decrease();
else if (event.angleDelta.y < 0)