decouple ParabolicArea from TaskItem

work/spdx
Michail Vourlakos 4 years ago
parent ae44d152de
commit 331e87aba6

@ -20,9 +20,9 @@
import QtQuick 2.7 import QtQuick 2.7
import QtGraphicalEffects 1.0 import QtGraphicalEffects 1.0
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.plasmoid 2.0
import org.kde.latte.core 0.2 as LatteCore import org.kde.latte.core 0.2 as LatteCore
@ -85,15 +85,20 @@ Item{
property bool isHiddenSpacerAnimated: true property bool isHiddenSpacerAnimated: true
property bool isHiddenSpacerVisible: false property bool isHiddenSpacerVisible: false
property bool isParabolicEventBlocked: false
property bool isHidden: false
property bool isSeparator: false property bool isSeparator: false
property bool isSeparatorInRealLength: false property bool isSeparatorInRealLength: false
property bool containsMouse: false property bool containsMouse: false
property string thinTooltipText: ""
property Item abilities: null property Item abilities: null
property Item contentItem: null property Item contentItem: null
readonly property bool isHorizontal: plasmoid.formFactor === PlasmaCore.Types.Horizontal
readonly property bool isVertical: plasmoid.formFactor === PlasmaCore.Types.Vertical
readonly property bool parabolicAreaContainsMouse: parabolicEventsAreaLoader.active && parabolicEventsAreaLoader.item.containsMouse readonly property bool parabolicAreaContainsMouse: parabolicEventsAreaLoader.active && parabolicEventsAreaLoader.item.containsMouse
readonly property int animationTime: (abilityItem.abilities.animations.active ? abilityItem.abilities.animations.speedFactor.current : 2) * (1.2 * abilityItem.abilities.animations.duration.small) readonly property int animationTime: (abilityItem.abilities.animations.active ? abilityItem.abilities.animations.speedFactor.current : 2) * (1.2 * abilityItem.abilities.animations.duration.small)
@ -289,12 +294,15 @@ Item{
Loader { Loader {
id: parabolicEventsAreaLoader id: parabolicEventsAreaLoader
active: abilityItem.abilities.parabolic.isEnabled active: isParabolicEnabled || isThinTooltipEnabled
width: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? abilityItem.width : abilityItem.abilities.metrics.mask.thickness.zoomedForItems width: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? abilityItem.width : abilityItem.abilities.metrics.mask.thickness.zoomedForItems
height: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? abilityItem.abilities.metrics.mask.thickness.zoomedForItems : abilityItem.height height: plasmoid.formFactor === PlasmaCore.Types.Horizontal ? abilityItem.abilities.metrics.mask.thickness.zoomedForItems : abilityItem.height
z:10000 z:10000
sourceComponent: ParabolicEventsArea{} sourceComponent: ParabolicEventsArea{}
readonly property bool isParabolicEnabled: abilityItem.abilities.parabolic.isEnabled
readonly property bool isThinTooltipEnabled: abilityItem.abilities.thinTooltip.isEnabled && abilityItem.thinTooltipText !== ""
states:[ states:[
State{ State{
name: "top" name: "top"

@ -28,23 +28,28 @@ Item {
property int lastMouseX: 0 property int lastMouseX: 0
property int lastMouseY: 0 property int lastMouseY: 0
property int lastParabolicPos: 0
readonly property bool containsMouse: (taskItem.abilities.parabolic.currentParabolicItem === _parabolicArea) || parabolicMouseArea.containsMouse readonly property bool containsMouse: (abilityItem.abilities.parabolic.currentParabolicItem === _parabolicArea) || parabolicMouseArea.containsMouse
readonly property real center: taskItem.parabolicItem.center readonly property bool isParabolicEnabled: parabolicEventsAreaLoader.isParabolicEnabled
readonly property bool isThinTooltipEnabled: parabolicEventsAreaLoader.isThinTooltipEnabled
readonly property real center: abilityItem.parabolicItem.center
MouseArea { MouseArea {
id: parabolicMouseArea id: parabolicMouseArea
anchors.fill: parent anchors.fill: parent
enabled: visible enabled: visible
hoverEnabled: true hoverEnabled: true
visible: taskItem.abilities.parabolic.currentParabolicItem !== _parabolicArea visible: abilityItem.abilities.parabolic.currentParabolicItem !== _parabolicArea
onEntered: { onEntered: {
taskItem.abilities.parabolic.setCurrentParabolicItem(_parabolicArea); abilityItem.abilities.parabolic.setCurrentParabolicItem(_parabolicArea);
var vIndex = taskItem.abilities.shortcuts.shortcutIndex(taskItem.itemIndex); if (isParabolicEnabled) {
taskItem.abilities.parabolic.setCurrentParabolicItemIndex(vIndex); var vIndex = abilityItem.abilities.shortcuts.shortcutIndex(abilityItem.itemIndex);
abilityItem.abilities.parabolic.setCurrentParabolicItemIndex(vIndex);
}
// mouseX/Y can not be trusted at this point // mouseX/Y can not be trusted at this point
//_parabolicArea.parabolicEntered(mouseX, mouseY); //_parabolicArea.parabolicEntered(mouseX, mouseY);
@ -52,14 +57,14 @@ Item {
} }
Connections{ Connections{
target: taskItem.abilities.myView target: abilityItem.abilities.myView
//! During dock sliding-in because the parabolic effect isnt trigerred //! During dock sliding-in because the parabolic effect isnt trigerred
//! immediately but we wait first the dock to go to its final normal //! immediately but we wait first the dock to go to its final normal
//! place we might miss the activation of the parabolic effect. //! place we might miss the activation of the parabolic effect.
//! By catching that signal we are trying to solve this. //! By catching that signal we are trying to solve this.
onIsShownFullyChanged: { onIsShownFullyChanged: {
if (taskItem.abilities.myView.isShownFully && _parabolicArea.containsMouse) { if (abilityItem.abilities.myView.isShownFully && _parabolicArea.containsMouse) {
_parabolicArea.parabolicMove(lastMouseX, lastMouseY); _parabolicArea.parabolicMove(lastMouseX, lastMouseY);
} }
} }
@ -71,115 +76,115 @@ Item {
restoreAnimation.stop(); restoreAnimation.stop();
//! mouseX/Y can NOW be trusted because ParabolicEnterd event is triggered from View::Parabolic class if (isParabolicEnabled) {
var current = root.isHorizontal ? mouseX : mouseY; //! mouseX/Y can NOW be trusted because ParabolicEnterd event is triggered from View::Parabolic class
icList.currentSpot = current; var current = abilityItem.isHorizontal ? mouseX : mouseY;
calculateParabolicScales(current); lastParabolicPos = current;
calculateParabolicScales(current);
}
} }
onParabolicMove: { onParabolicMove: {
lastMouseX = mouseX; lastMouseX = mouseX;
lastMouseY = mouseY; lastMouseY = mouseY;
var mousePos = root.isHorizontal ? mouseX : mouseY; if (isParabolicEnabled) {
if (mousePos<0 || (inBlockingAnimation && !(inAttentionAnimation||inFastRestoreAnimation||inMimicParabolicAnimation))) var mousePos = abilityItem.isHorizontal ? mouseX : mouseY;
return;
if (taskItem.abilities.myView.isReady && !taskItem.abilities.myView.isShownFully) { if (mousePos<0 || abilityItem.isParabolicEventBlocked) {
return; return;
} }
if((inAnimation == false)&&(!root.taskInAnimation)&&(!root.disableRestoreZoom) && taskItem.hoverEnabled){ if (abilityItem.abilities.myView.isReady && !abilityItem.abilities.myView.isShownFully) {
if( ((taskItem.parabolicItem.zoom === 1 || taskItem.parabolicItem.zoom === taskItem.abilities.parabolic.factor.zoom) && !taskItem.abilities.parabolic.directRenderingEnabled) return;
|| taskItem.abilities.parabolic.directRenderingEnabled || !taskItem.scalesUpdatedOnce) { }
if(root.dragSource == null){
var step = Math.abs(icList.currentSpot-mousePos); if( ((abilityItem.parabolicItem.zoom === 1 || abilityItem.parabolicItem.zoom === abilityItem.abilities.parabolic.factor.zoom)
if (step >= taskItem.abilities.animations.hoverPixelSensitivity){ && !abilityItem.abilities.parabolic.directRenderingEnabled)
icList.currentSpot = mousePos; || abilityItem.abilities.parabolic.directRenderingEnabled) {
calculateParabolicScales(mousePos); var step = Math.abs(lastParabolicPos-mousePos);
} if (step >= abilityItem.abilities.animations.hoverPixelSensitivity){
lastParabolicPos = mousePos;
calculateParabolicScales(mousePos);
} }
} }
} }
} }
onParabolicExited: { onParabolicExited: {
taskItem.scalesUpdatedOnce = false; lastParabolicPos = 0;
} }
function calculateParabolicScales( currentMousePosition ){ function calculateParabolicScales( currentMousePosition ){
if (taskItem.abilities.parabolic.factor.zoom===1 || taskItem.abilities.parabolic.restoreZoomIsBlocked) { if (abilityItem.abilities.parabolic.factor.zoom===1 || abilityItem.abilities.parabolic.restoreZoomIsBlocked || isParabolicEventBlocked) {
return; return;
} }
if (root.dragSource === null) { //use the new parabolic ability in order to handle all parabolic effect messages
//use the new parabolic ability in order to handle all parabolic effect messages var scales = abilityItem.abilities.parabolic.applyParabolicEffect(index, currentMousePosition, center);
var scales = taskItem.abilities.parabolic.applyParabolicEffect(index, currentMousePosition, center);
//Left hiddenSpacer for first task //Left hiddenSpacer for first task
if(((index === taskItem.abilities.indexer.firstVisibleItemIndex)&&(root.tasksCount>0)) && taskItem.abilities.containment.isFirstAppletInContainment if((index === abilityItem.abilities.indexer.firstVisibleItemIndex) && abilityItem.abilities.containment.isFirstAppletInContainment) {
&& !inMimicParabolicAnimation && !inFastRestoreAnimation && !inAttentionAnimation){ hiddenSpacerLeft.nScale = scales.leftScale - 1;
hiddenSpacerLeft.nScale = scales.leftScale - 1; }
}
//Right hiddenSpacer for last task //Right hiddenSpacer for last task
if(((index === taskItem.abilities.indexer.lastVisibleItemIndex )&&(root.tasksCount>0)) && taskItem.abilities.containment.isLastAppletInContainment if((index === abilityItem.abilities.indexer.lastVisibleItemIndex) && abilityItem.abilities.containment.isLastAppletInContainment) {
&& !inMimicParabolicAnimation && !inFastRestoreAnimation && !inAttentionAnimation){ hiddenSpacerRight.nScale = scales.rightScale - 1;
hiddenSpacerRight.nScale = scales.rightScale - 1; }
}
if (!taskItem.inAttentionAnimation) { abilityItem.parabolicItem.zoom = abilityItem.abilities.parabolic.factor.zoom;
taskItem.parabolicItem.zoom = taskItem.abilities.parabolic.factor.zoom;
} else {
var subSpacerScale = (taskItem.abilities.parabolic.factor.zoom-1)/2;
hiddenSpacerLeft.nScale = subSpacerScale; /*if (!taskItem.inAttentionAnimation) {
hiddenSpacerRight.nScale = subSpacerScale;
}
taskItem.scalesUpdatedOnce = false; } else {
} var subSpacerScale = (taskItem.abilities.parabolic.factor.zoom-1)/2;
} //nScale
hiddenSpacerLeft.nScale = subSpacerScale;
hiddenSpacerRight.nScale = subSpacerScale;
}*/
} //zoom
function updateScale(nIndex, nScale, step){ function updateScale(nIndex, nScale, step){
if (!_parabolicArea.containsMouse && (index === nIndex) if (!_parabolicArea.containsMouse && (index === nIndex) && !isParabolicEventBlocked){
&& (taskItem.hoverEnabled || inMimicParabolicAnimation)&&(tasksExtendedManager.waitingLaunchersLength()===0)){ /*if (taskItem.inAttentionAnimation) {
if (taskItem.inAttentionAnimation) {
var subSpacerScale = (nScale-1)/2; var subSpacerScale = (nScale-1)/2;
hiddenSpacerLeft.nScale = subSpacerScale; hiddenSpacerLeft.nScale = subSpacerScale;
hiddenSpacerRight.nScale = subSpacerScale; hiddenSpacerRight.nScale = subSpacerScale;
} else if (!inBlockingAnimation || taskItem.inMimicParabolicAnimation) { } else if (!inBlockingAnimation || taskItem.inMimicParabolicAnimation) {
var newScale = 1;
if(nScale >= 0) { }*/
newScale = nScale + step;
} else {
newScale = taskItem.parabolicItem.zoom + step;
}
if (inMimicParabolicAnimation && mimicParabolicScale === -1) { var newScale = 1;
mimicParabolicScale = newScale;
}
taskItem.parabolicItem.zoom = newScale; if(nScale >= 0) {
newScale = nScale + step;
} else {
newScale = abilityItem.parabolicItem.zoom + step;
} }
/*if (inMimicParabolicAnimation && mimicParabolicScale === -1) {
mimicParabolicScale = newScale;
}*/
abilityItem.parabolicItem.zoom = newScale;
} }
} }
function sltUpdateLowerItemScale(delegateIndex, newScale, step) { function sltUpdateLowerItemScale(delegateIndex, newScale, step) {
if (delegateIndex === index) { if (delegateIndex === index) {
if (!taskItem.isSeparator && !taskItem.isHidden) { if (!abilityItem.isSeparator && !abilityItem.isHidden) {
//! when accepted //! when accepted
updateScale(delegateIndex, newScale, step); updateScale(delegateIndex, newScale, step);
if (newScale > 1) { // clear lower items if (newScale > 1) { // clear lower items
taskItem.abilities.parabolic.sglUpdateLowerItemScale(delegateIndex-1, 1, 0); abilityItem.abilities.parabolic.sglUpdateLowerItemScale(delegateIndex-1, 1, 0);
} }
} else { } else {
taskItem.abilities.parabolic.sglUpdateLowerItemScale(delegateIndex-1, newScale, step); abilityItem.abilities.parabolic.sglUpdateLowerItemScale(delegateIndex-1, newScale, step);
} }
} else if ((newScale === 1) && (index < delegateIndex)) { } else if ((newScale === 1) && (index < delegateIndex)) {
updateScale(index, 1, 0); updateScale(index, 1, 0);
@ -188,15 +193,15 @@ Item {
function sltUpdateHigherItemScale(delegateIndex, newScale, step) { function sltUpdateHigherItemScale(delegateIndex, newScale, step) {
if (delegateIndex === index) { if (delegateIndex === index) {
if (!taskItem.isSeparator && !taskItem.isHidden) { if (!abilityItem.isSeparator && !abilityItem.isHidden) {
//! when accepted //! when accepted
updateScale(delegateIndex, newScale, step); updateScale(delegateIndex, newScale, step);
if (newScale > 1) { // clear lower items if (newScale > 1) { // clear lower items
taskItem.abilities.parabolic.sglUpdateHigherItemScale(delegateIndex+1, 1, 0); // clear higher items abilityItem.abilities.parabolic.sglUpdateHigherItemScale(delegateIndex+1, 1, 0); // clear higher items
} }
} else { } else {
taskItem.abilities.parabolic.sglUpdateHigherItemScale(delegateIndex+1, newScale, step); abilityItem.abilities.parabolic.sglUpdateHigherItemScale(delegateIndex+1, newScale, step);
} }
} else if ((newScale === 1) && (index > delegateIndex)) { } else if ((newScale === 1) && (index > delegateIndex)) {
updateScale(index, 1, 0); updateScale(index, 1, 0);
@ -204,12 +209,12 @@ Item {
} }
Component.onCompleted: { Component.onCompleted: {
taskItem.abilities.parabolic.sglUpdateLowerItemScale.connect(sltUpdateLowerItemScale); abilityItem.abilities.parabolic.sglUpdateLowerItemScale.connect(sltUpdateLowerItemScale);
taskItem.abilities.parabolic.sglUpdateHigherItemScale.connect(sltUpdateHigherItemScale); abilityItem.abilities.parabolic.sglUpdateHigherItemScale.connect(sltUpdateHigherItemScale);
} }
Component.onDestruction: { Component.onDestruction: {
taskItem.abilities.parabolic.sglUpdateLowerItemScale.disconnect(sltUpdateLowerItemScale); abilityItem.abilities.parabolic.sglUpdateLowerItemScale.disconnect(sltUpdateLowerItemScale);
taskItem.abilities.parabolic.sglUpdateHigherItemScale.disconnect(sltUpdateHigherItemScale); abilityItem.abilities.parabolic.sglUpdateHigherItemScale.disconnect(sltUpdateHigherItemScale);
} }
} }

@ -40,6 +40,7 @@ AbilityBasicItem {
visible: false visible: false
objectName: "TaskItem" objectName: "TaskItem"
isHidden: !visible || isForcedHidden
isHiddenSpacerVisible: taskItem.inAttentionAnimation isHiddenSpacerVisible: taskItem.inAttentionAnimation
|| taskItem.inFastRestoreAnimation || taskItem.inFastRestoreAnimation
|| taskItem.inMimicParabolicAnimation || taskItem.inMimicParabolicAnimation
@ -49,6 +50,12 @@ AbilityBasicItem {
|| root.inActivityChange || root.inActivityChange
|| taskItem.inRemoveStage || taskItem.inRemoveStage
|| (taskItem.containsMouse && inAttentionAnimation && taskItem.parabolicItem.zoom!==taskItem.abilities.parabolic.factor.zoom) || (taskItem.containsMouse && inAttentionAnimation && taskItem.parabolicItem.zoom!==taskItem.abilities.parabolic.factor.zoom)
isParabolicEventBlocked: root.dragSource
|| !hoverEnabled
|| inAnimation
|| !hoverEnabled
|| (inBlockingAnimation && !(inAttentionAnimation||inFastRestoreAnimation||inMimicParabolicAnimation))
isSeparatorInRealLength: isSeparator && root.dragSource isSeparatorInRealLength: isSeparator && root.dragSource
containsMouse: taskMouseArea.containsMouse || parabolicAreaContainsMouse containsMouse: taskMouseArea.containsMouse || parabolicAreaContainsMouse
@ -57,7 +64,6 @@ AbilityBasicItem {
property alias pressed: taskMouseArea.pressed property alias pressed: taskMouseArea.pressed
property bool delayingRemove: ListView.delayRemove property bool delayingRemove: ListView.delayRemove
property bool scalesUpdatedOnce: false
//states that exist in windows in a Group of windows //states that exist in windows in a Group of windows
property bool hasActive: isActive property bool hasActive: isActive
property bool hasMinimized: (IsGroupParent === true) ? subWindows.hasMinimized : isMinimized property bool hasMinimized: (IsGroupParent === true) ? subWindows.hasMinimized : isMinimized
@ -85,7 +91,6 @@ AbilityBasicItem {
property bool isDragged: false property bool isDragged: false
property bool isGroupable: (IsGroupable === true) ? true : false property bool isGroupable: (IsGroupable === true) ? true : false
property bool isGroupParent: (IsGroupParent === true) ? true : false property bool isGroupParent: (IsGroupParent === true) ? true : false
readonly property bool isHidden: !visible || isForcedHidden
property bool isForcedHidden: false property bool isForcedHidden: false
property bool isLauncher: (IsLauncher === true) ? true : false property bool isLauncher: (IsLauncher === true) ? true : false
property bool hasShownLauncher: (taskItem.abilities.launchers.inCurrentActivity(taskItem.launcherUrl) property bool hasShownLauncher: (taskItem.abilities.launchers.inCurrentActivity(taskItem.launcherUrl)

Loading…
Cancel
Save