1
0
mirror of https://github.com/KDE/latte-dock.git synced 2024-12-23 13:33:50 +03:00

specify input mask when parabolic effect applied

--trying to handle this way all jumpiness from parabolic
effect when dock is at the bottom edge and the user moves its
mouse at the top edge of the parabolized item. When the mouse
slightly exits the item ParabolicMouseArea and gets a mouseEntered
signal even though, it should not and immediately gets also
a mouseExited signal to correct things. This happens exactly
after the Paraboli.sglClearZoom() signal has been triggered.
This commit is contained in:
Michail Vourlakos 2022-01-30 20:20:05 +02:00
parent 8a2e2581ef
commit 11f42978fa
2 changed files with 38 additions and 23 deletions

View File

@ -317,18 +317,15 @@ Item{
//! Input Mask
if (updateIsEnabled) {
var animated = (animations.needBothAxis.count>0);
if (animated) {
//! clear input mask
latteView.effects.inputMask = Qt.rect(0, 0, -1, -1);
} else {
updateInputGeometry();
}
updateInputGeometry();
}
}
function updateInputGeometry() {
// VisibilityManager.qml tries to workaround faulty onEntered() signals from ParabolicMouseArea
// by specifying inputThickness when ParabolicEffect is applied. (inputThickness->animated scenario)
var animated = (animations.needBothAxis.count>0);
if (!LatteCore.WindowSystem.compositingActive || latteView.behaveAsPlasmaPanel) {
//! clear input mask
latteView.effects.inputMask = Qt.rect(0, 0, -1, -1);
@ -339,9 +336,9 @@ Item{
if (latteView.visibility.isHidden) {
inputThickness = metrics.mask.thickness.hidden;
} else if (root.hasFloatingGapInputEventsDisabled) {
inputThickness = metrics.totals.thickness;
inputThickness = animated ? metrics.mask.thickness.zoomedForItems - metrics.margins.screenEdge : metrics.totals.thickness;
} else {
inputThickness = metrics.mask.screenEdge + metrics.totals.thickness;
inputThickness = animated ? metrics.mask.thickness.zoomedForItems : metrics.mask.screenEdge + metrics.totals.thickness;
}
var subtractedScreenEdge = root.hasFloatingGapInputEventsDisabled && !latteView.visibility.isHidden ? metrics.mask.screenEdge : 0;
@ -350,29 +347,37 @@ Item{
//!use view.localGeometry for length properties
if (plasmoid.location === PlasmaCore.Types.TopEdge) {
inputGeometry.x = latteView.localGeometry.x;
if (!animated) {
inputGeometry.x = latteView.localGeometry.x;
inputGeometry.width = latteView.localGeometry.width;
}
inputGeometry.y = subtractedScreenEdge;
inputGeometry.width = latteView.localGeometry.width;
inputGeometry.height = inputThickness ;
inputGeometry.height = inputThickness;
} else if (plasmoid.location === PlasmaCore.Types.BottomEdge) {
inputGeometry.x = latteView.localGeometry.x;
inputGeometry.y = root.height - inputThickness - subtractedScreenEdge;
if (!animated) {
inputGeometry.x = latteView.localGeometry.x;
inputGeometry.width = latteView.localGeometry.width;
}
inputGeometry.width = latteView.localGeometry.width;
inputGeometry.y = root.height - inputThickness - subtractedScreenEdge;
inputGeometry.height = inputThickness;
} else if (plasmoid.location === PlasmaCore.Types.LeftEdge) {
if (!animated) {
inputGeometry.y = latteView.localGeometry.y;
inputGeometry.height = latteView.localGeometry.height;
}
inputGeometry.x = subtractedScreenEdge;
inputGeometry.y = latteView.localGeometry.y;
inputGeometry.width = inputThickness;
inputGeometry.height = latteView.localGeometry.height;
} else if (plasmoid.location === PlasmaCore.Types.RightEdge) {
inputGeometry.x = root.width - inputThickness - subtractedScreenEdge;
inputGeometry.y = latteView.localGeometry.y;
if (!animated) {
inputGeometry.y = latteView.localGeometry.y;
inputGeometry.height = latteView.localGeometry.height;
}
inputGeometry.x = root.width - inputThickness - subtractedScreenEdge;
inputGeometry.width = inputThickness;
inputGeometry.height = latteView.localGeometry.height;
}
//set the boundaries for latteView local geometry

View File

@ -29,6 +29,16 @@ Item {
&& !communicator.indexerIsSupported
&& appletItem.parabolic.currentParabolicItem !== _parabolicArea
// VisibilityManager.qml tries to workaround faulty onEntered() signals from this MouseArea
// by specifying inputThickness when ParabolicEffect is applied. (inputThickness->animated scenario)
//
// Such is a case is when dock is at the bottom and user moves its
// mouse at top edge of parabolized item. When mouse exits
// slightly ParabolicMouseArea this mousearea here gets a mouseEntered
// signal even though it should not and immediately gets also
// a mouseExited signal to correct things. This happens exactly
// after Paraboli.sglClearZoom() signal has been triggered.
onEntered: {
appletItem.parabolic.setCurrentParabolicItem(_parabolicArea);