1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-04-06 05:42:07 -04:00

cc: expand mouse areas of scroll/click targets in bar

This commit is contained in:
bbedward
2026-02-09 13:15:43 -05:00
parent 91569affd7
commit b645487e79
2 changed files with 92 additions and 85 deletions

View File

@@ -30,6 +30,70 @@ BasePill {
property real volumeAccumulator: 0
property real brightnessAccumulator: 0
readonly property real vIconSize: Theme.barIconSize(root.barThickness, -4, root.barConfig?.noBackground)
property var _hRow: null
property var _vCol: null
property var _hAudio: null
property var _hBrightness: null
property var _hMic: null
property var _vAudio: null
property var _vBrightness: null
property var _vMic: null
onWheel: function (wheelEvent) {
const delta = wheelEvent.angleDelta.y;
if (delta === 0)
return;
const rootX = wheelEvent.x - root.leftMargin;
const rootY = wheelEvent.y - root.topMargin;
if (root.isVerticalOrientation && _vCol) {
const pos = root.mapToItem(_vCol, rootX, rootY);
if (_vBrightness?.visible && pos.y >= _vBrightness.y && pos.y < _vBrightness.y + _vBrightness.height) {
root.handleBrightnessWheel(delta);
} else if (_vMic?.visible && pos.y >= _vMic.y && pos.y < _vMic.y + _vMic.height) {
root.handleMicWheel(delta);
} else {
root.handleVolumeWheel(delta);
}
} else if (_hRow) {
const pos = root.mapToItem(_hRow, rootX, rootY);
if (_hBrightness?.visible && pos.x >= _hBrightness.x && pos.x < _hBrightness.x + _hBrightness.width) {
root.handleBrightnessWheel(delta);
} else if (_hMic?.visible && pos.x >= _hMic.x && pos.x < _hMic.x + _hMic.width) {
root.handleMicWheel(delta);
} else {
root.handleVolumeWheel(delta);
}
} else {
root.handleVolumeWheel(delta);
}
wheelEvent.accepted = true;
}
onRightClicked: function (rootX, rootY) {
if (root.isVerticalOrientation && _vCol) {
const pos = root.mapToItem(_vCol, rootX, rootY);
if (_vAudio?.visible && pos.y >= _vAudio.y && pos.y < _vAudio.y + _vAudio.height) {
AudioService.toggleMute();
return;
}
if (_vMic?.visible && pos.y >= _vMic.y && pos.y < _vMic.y + _vMic.height) {
AudioService.toggleMicMute();
return;
}
} else if (_hRow) {
const pos = root.mapToItem(_hRow, rootX, rootY);
if (_hAudio?.visible && pos.x >= _hAudio.x && pos.x < _hAudio.x + _hAudio.width) {
AudioService.toggleMute();
return;
}
if (_hMic?.visible && pos.x >= _hMic.x && pos.x < _hMic.x + _hMic.width) {
AudioService.toggleMicMute();
return;
}
}
}
Loader {
active: root.showPrinterIcon
@@ -242,15 +306,26 @@ BasePill {
implicitWidth: root.isVerticalOrientation ? (root.widgetThickness - root.horizontalPadding * 2) : controlIndicators.implicitWidth
implicitHeight: root.isVerticalOrientation ? controlColumn.implicitHeight : (root.widgetThickness - root.horizontalPadding * 2)
Component.onCompleted: {
root._hRow = controlIndicators;
root._vCol = controlColumn;
root._hAudio = audioIcon.parent;
root._hBrightness = brightnessIcon.parent;
root._hMic = micIcon.parent;
root._vAudio = audioIconV.parent;
root._vBrightness = brightnessIconV.parent;
root._vMic = micIconV.parent;
}
Column {
id: controlColumn
visible: root.isVerticalOrientation
width: root.vIconSize
width: parent.width
anchors.horizontalCenter: parent.horizontalCenter
spacing: Theme.spacingXS
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize
visible: root.showScreenSharingIcon && NiriService.hasCasts
@@ -263,7 +338,7 @@ BasePill {
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize
visible: root.showNetworkIcon && NetworkService.networkAvailable
@@ -276,7 +351,7 @@ BasePill {
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize
visible: root.showVpnIcon && NetworkService.vpnAvailable && NetworkService.vpnConnected
@@ -289,7 +364,7 @@ BasePill {
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize
visible: root.showBluetoothIcon && BluetoothService.available && BluetoothService.enabled
@@ -302,7 +377,7 @@ BasePill {
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize + (root.showAudioPercent ? audioPercentV.implicitHeight + 2 : 0)
visible: root.showAudioIcon
@@ -325,22 +400,10 @@ BasePill {
anchors.top: audioIconV.bottom
anchors.topMargin: 2
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onWheel: function (wheelEvent) {
root.handleVolumeWheel(wheelEvent.angleDelta.y);
wheelEvent.accepted = true;
}
onClicked: {
AudioService.toggleMute();
}
}
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize + (root.showMicPercent ? micPercentV.implicitHeight + 2 : 0)
visible: root.showMicIcon
@@ -363,22 +426,10 @@ BasePill {
anchors.top: micIconV.bottom
anchors.topMargin: 2
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onWheel: function (wheelEvent) {
root.handleMicWheel(wheelEvent.angleDelta.y);
wheelEvent.accepted = true;
}
onClicked: {
AudioService.toggleMicMute();
}
}
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize + (root.showBrightnessPercent ? brightnessPercentV.implicitHeight + 2 : 0)
visible: root.showBrightnessIcon && DisplayService.brightnessAvailable && root.hasPinnedBrightnessDevice()
@@ -401,19 +452,10 @@ BasePill {
anchors.top: brightnessIconV.bottom
anchors.topMargin: 2
}
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.NoButton
onWheel: function (wheelEvent) {
root.handleBrightnessWheel(wheelEvent.angleDelta.y);
wheelEvent.accepted = true;
}
}
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize
visible: root.showBatteryIcon && BatteryService.batteryAvailable
@@ -426,7 +468,7 @@ BasePill {
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize
visible: root.showPrinterIcon && CupsService.cupsAvailable && root.hasPrintJobs()
@@ -439,7 +481,7 @@ BasePill {
}
Item {
width: root.vIconSize
width: parent.width
height: root.vIconSize
visible: root.hasNoVisibleIcons()
@@ -495,7 +537,7 @@ BasePill {
Rectangle {
width: audioIcon.implicitWidth + (root.showAudioPercent ? audioPercent.implicitWidth : 0) + 4
height: audioIcon.implicitHeight + 4
height: root.widgetThickness - root.horizontalPadding * 2
color: "transparent"
anchors.verticalCenter: parent.verticalCenter
visible: root.showAudioIcon
@@ -520,24 +562,11 @@ BasePill {
anchors.left: audioIcon.right
anchors.leftMargin: 2
}
MouseArea {
id: audioWheelArea
anchors.fill: parent
acceptedButtons: Qt.RightButton
onWheel: function (wheelEvent) {
root.handleVolumeWheel(wheelEvent.angleDelta.y);
wheelEvent.accepted = true;
}
onClicked: {
AudioService.toggleMute();
}
}
}
Rectangle {
width: micIcon.implicitWidth + (root.showMicPercent ? micPercent.implicitWidth : 0) + 4
height: micIcon.implicitHeight + 4
height: root.widgetThickness - root.horizontalPadding * 2
color: "transparent"
anchors.verticalCenter: parent.verticalCenter
visible: root.showMicIcon
@@ -562,24 +591,11 @@ BasePill {
anchors.left: micIcon.right
anchors.leftMargin: 2
}
MouseArea {
id: micWheelArea
anchors.fill: parent
acceptedButtons: Qt.RightButton
onWheel: function (wheelEvent) {
root.handleMicWheel(wheelEvent.angleDelta.y);
wheelEvent.accepted = true;
}
onClicked: {
AudioService.toggleMicMute();
}
}
}
Rectangle {
width: brightnessIcon.implicitWidth + (root.showBrightnessPercent ? brightnessPercent.implicitWidth : 0) + 4
height: brightnessIcon.implicitHeight + 4
height: root.widgetThickness - root.horizontalPadding * 2
color: "transparent"
anchors.verticalCenter: parent.verticalCenter
visible: root.showBrightnessIcon && DisplayService.brightnessAvailable && root.hasPinnedBrightnessDevice()
@@ -604,16 +620,6 @@ BasePill {
anchors.left: brightnessIcon.right
anchors.leftMargin: 2
}
MouseArea {
id: brightnessWheelArea
anchors.fill: parent
acceptedButtons: Qt.NoButton
onWheel: function (wheelEvent) {
root.handleBrightnessWheel(wheelEvent.angleDelta.y);
wheelEvent.accepted = true;
}
}
}
DankIcon {

View File

@@ -35,7 +35,7 @@ Item {
readonly property real bottomMargin: isVerticalOrientation ? (isBottomBarEdge && isLast ? barEdgeExtension : (isLast ? gapExtension : gapExtension / 2)) : 0
signal clicked
signal rightClicked
signal rightClicked(real rootX, real rootY)
signal wheel(var wheelEvent)
width: isVerticalOrientation ? barThickness : visualWidth
@@ -125,7 +125,8 @@ Item {
acceptedButtons: Qt.LeftButton | Qt.RightButton
onPressed: function (mouse) {
if (mouse.button === Qt.RightButton) {
root.rightClicked();
const rPos = mouseArea.mapToItem(root, mouse.x, mouse.y);
root.rightClicked(rPos.x, rPos.y);
return;
}
if (popoutTarget) {