trying to implement real panels sliding in/ou

pull/11/head
Michail Vourlakos 5 years ago
parent d2170f13c0
commit 103de33c92

@ -336,7 +336,7 @@ void Positioner::screenChanged(QScreen *scr)
void Positioner::syncGeometry() void Positioner::syncGeometry()
{ {
if (!(m_view->screen() && m_view->containment()) || m_inDelete) { if (!(m_view->screen() && m_view->containment()) || m_inDelete || m_slideOffset!=0) {
return; return;
} }
@ -418,7 +418,7 @@ void Positioner::syncGeometry()
void Positioner::validateDockGeometry() void Positioner::validateDockGeometry()
{ {
if (m_view->geometry() != m_validGeometry) { if (m_slideOffset==0 && m_view->geometry() != m_validGeometry) {
m_validateGeometryTimer.start(); m_validateGeometryTimer.start();
} }
} }
@ -536,6 +536,49 @@ void Positioner::updatePosition(QRect availableScreenRect)
} }
} }
int Positioner::slideOffset() const
{
return m_slideOffset;
}
void Positioner::setSlideOffset(int offset)
{
if (m_slideOffset == offset) {
return;
}
m_slideOffset = offset;
QPoint slidedTopLeft;
if (m_view->location() == Plasma::Types::TopEdge) {
int boundedY = qMax(m_view->screenGeometry().top() - (m_validGeometry.height() - 1), m_validGeometry.y() - qAbs(m_slideOffset));
slidedTopLeft = {m_validGeometry.x(), boundedY};
} else if (m_view->location() == Plasma::Types::BottomEdge) {
int boundedY = qMin(m_view->screenGeometry().bottom() - 1, m_validGeometry.y() + qAbs(m_slideOffset));
slidedTopLeft = {m_validGeometry.x(), boundedY};
} else if (m_view->location() == Plasma::Types::RightEdge) {
int boundedX = qMax(m_view->screenGeometry().right() - 1, m_validGeometry.x() + qAbs(m_slideOffset));
slidedTopLeft = {boundedX, m_validGeometry.y()};
} else if (m_view->location() == Plasma::Types::LeftEdge) {
int boundedX = qMax(m_view->screenGeometry().left() - (m_validGeometry.width() - 1), m_validGeometry.x() - qAbs(m_slideOffset));
slidedTopLeft = {boundedX, m_validGeometry.y()};
}
m_view->setPosition(slidedTopLeft);
if (m_view->surface()) {
m_view->surface()->setPosition(slidedTopLeft);
}
emit slideOffsetChanged();
}
void Positioner::resizeWindow(QRect availableScreenRect) void Positioner::resizeWindow(QRect availableScreenRect)
{ {
QSize screenSize = m_view->screen()->size(); QSize screenSize = m_view->screen()->size();

@ -49,6 +49,8 @@ class Positioner: public QObject
Q_OBJECT Q_OBJECT
Q_PROPERTY(int currentScreenId READ currentScreenId NOTIFY currentScreenChanged) Q_PROPERTY(int currentScreenId READ currentScreenId NOTIFY currentScreenChanged)
//! animating window slide
Q_PROPERTY(int slideOffset READ slideOffset WRITE setSlideOffset NOTIFY slideOffsetChanged)
Q_PROPERTY(QString currentScreenName READ currentScreenName NOTIFY currentScreenChanged) Q_PROPERTY(QString currentScreenName READ currentScreenName NOTIFY currentScreenChanged)
public: public:
@ -58,6 +60,9 @@ public:
int currentScreenId() const; int currentScreenId() const;
QString currentScreenName() const; QString currentScreenName() const;
int slideOffset() const;
void setSlideOffset(int offset);
bool inLocationChangeAnimation(); bool inLocationChangeAnimation();
void setScreenToFollow(QScreen *scr, bool updateScreenId = true); void setScreenToFollow(QScreen *scr, bool updateScreenId = true);
@ -77,6 +82,7 @@ signals:
void currentScreenChanged(); void currentScreenChanged();
void edgeChanged(); void edgeChanged();
void screenGeometryChanged(); void screenGeometryChanged();
void slideOffsetChanged();
void windowSizeChanged(); void windowSizeChanged();
//! these two signals are used from config ui and containment ui //! these two signals are used from config ui and containment ui
@ -110,6 +116,8 @@ private:
private: private:
bool m_inDelete{false}; bool m_inDelete{false};
int m_slideOffset{0};
//! it is used in order to enforce X11 to never miss window geometry //! it is used in order to enforce X11 to never miss window geometry
QRect m_validGeometry; QRect m_validGeometry;

@ -374,9 +374,7 @@ void VisibilityManager::setIsBelowLayer(bool below)
m_isBelowLayer = below; m_isBelowLayer = below;
if (m_mode == Latte::Types::WindowsCanCover) {
updateGhostWindowState(); updateGhostWindowState();
}
emit isBelowLayerChanged(); emit isBelowLayerChanged();
} }
@ -398,7 +396,9 @@ void VisibilityManager::setIsHidden(bool isHidden)
m_isHidden = isHidden; m_isHidden = isHidden;
if (!m_latteView->behaveAsPlasmaPanel()) {
updateGhostWindowState(); updateGhostWindowState();
}
emit isHiddenChanged(); emit isHiddenChanged();
} }

@ -695,9 +695,13 @@ Item{
} }
PropertyAnimation { PropertyAnimation {
target: layoutsContainer target: !root.behaveAsPlasmaPanel ? layoutsContainer : latteView.positioner
property: root.isVertical ? "x" : "y" property: !root.behaveAsPlasmaPanel ? (root.isVertical ? "x" : "y") : "slideOffset"
to: { to: {
if (root.behaveAsPlasmaPanel) {
return slidingOutToPos;
}
if (Latte.WindowSystem.compositingActive) { if (Latte.WindowSystem.compositingActive) {
return slidingOutToPos; return slidingOutToPos;
} else { } else {
@ -752,8 +756,8 @@ Item{
} }
PropertyAnimation { PropertyAnimation {
target: layoutsContainer target: !root.behaveAsPlasmaPanel ? layoutsContainer : latteView.positioner
property: root.isVertical ? "x" : "y" property: !root.behaveAsPlasmaPanel ? (root.isVertical ? "x" : "y") : "slideOffset"
to: 0 to: 0
duration: manager.animationSpeed duration: manager.animationSpeed
easing.type: Easing.OutQuad easing.type: Easing.OutQuad

@ -50,6 +50,10 @@ Item{
target: layoutsContainer target: layoutsContainer
property: "x" property: "x"
value: { value: {
if (root.behaveAsPlasmaPanel) {
return 0;
}
if ( latteView && root.isHorizontal && useMaxLength ){ if ( latteView && root.isHorizontal && useMaxLength ){
return ((latteView.width/2) - (root.maxLength/2) + root.offset); return ((latteView.width/2) - (root.maxLength/2) + root.offset);
} else { } else {
@ -78,6 +82,10 @@ Item{
target: layoutsContainer target: layoutsContainer
property: "y" property: "y"
value: { value: {
if (root.behaveAsPlasmaPanel) {
return 0;
}
if ( latteView && root.isVertical && useMaxLength ) { if ( latteView && root.isVertical && useMaxLength ) {
return ((latteView.height/2) - (root.maxLength/2) + root.offset); return ((latteView.height/2) - (root.maxLength/2) + root.offset);
} else { } else {

@ -85,7 +85,7 @@ Item {
} }
return (visibilityManager.panelIsBiggerFromIconSize && (maxZoomFactor === 1.0) return (visibilityManager.panelIsBiggerFromIconSize && (maxZoomFactor === 1.0)
&& (latteView.visibility.mode === Latte.Types.AlwaysVisible || latteView.visibility.mode === Latte.Types.WindowsGoBelow) //&& (latteView.visibility.mode === Latte.Types.AlwaysVisible || latteView.visibility.mode === Latte.Types.WindowsGoBelow)
&& (plasmoid.configuration.panelPosition === Latte.Types.Justify) && (plasmoid.configuration.panelPosition === Latte.Types.Justify)
&& !root.editMode); && !root.editMode);
} }

Loading…
Cancel
Save