decouple ParabolicArea from TaskItem

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

@ -20,9 +20,9 @@
import QtQuick 2.7
import QtGraphicalEffects 1.0
import org.kde.plasma.plasmoid 2.0
import org.kde.plasma.core 2.0 as PlasmaCore
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
@ -85,15 +85,20 @@ Item{
property bool isHiddenSpacerAnimated: true
property bool isHiddenSpacerVisible: false
property bool isParabolicEventBlocked: false
property bool isHidden: false
property bool isSeparator: false
property bool isSeparatorInRealLength: false
property bool containsMouse: false
property string thinTooltipText: ""
property Item abilities: 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 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 {
id: parabolicEventsAreaLoader
active: abilityItem.abilities.parabolic.isEnabled
active: isParabolicEnabled || isThinTooltipEnabled
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
z:10000
sourceComponent: ParabolicEventsArea{}
readonly property bool isParabolicEnabled: abilityItem.abilities.parabolic.isEnabled
readonly property bool isThinTooltipEnabled: abilityItem.abilities.thinTooltip.isEnabled && abilityItem.thinTooltipText !== ""
states:[
State{
name: "top"

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

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

Loading…
Cancel
Save