mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
Finished Dock show and hide animation
This commit is contained in:
parent
dc3acf5c55
commit
3bcfcdd471
@ -47,6 +47,9 @@ Panel::Panel(QWidget *parent)
|
||||
}
|
||||
|
||||
initAppManager();
|
||||
|
||||
initHSManager();
|
||||
initState();
|
||||
}
|
||||
|
||||
void Panel::showScreenMask()
|
||||
@ -175,6 +178,70 @@ void Panel::initAppManager()
|
||||
m_appManager->updateEntries();
|
||||
}
|
||||
|
||||
void Panel::hasShown()
|
||||
{
|
||||
m_HSManager->SetState(1);
|
||||
emit panelHasShown();
|
||||
}
|
||||
|
||||
void Panel::hasHidden()
|
||||
{
|
||||
m_HSManager->SetState(3);
|
||||
emit panelHasHidden();
|
||||
}
|
||||
|
||||
void Panel::hideStateChanged(int value)
|
||||
{
|
||||
if (value == 0)
|
||||
{
|
||||
emit startShow();
|
||||
}
|
||||
else if (value == 1)
|
||||
{
|
||||
emit startHide();
|
||||
}
|
||||
}
|
||||
|
||||
void Panel::initHSManager()
|
||||
{
|
||||
m_HSManager = new DBusHideStateManager(this);
|
||||
connect(m_HSManager,&DBusHideStateManager::ChangeState,this,&Panel::hideStateChanged);
|
||||
}
|
||||
|
||||
void Panel::initState()
|
||||
{
|
||||
QStateMachine * machine = new QStateMachine(this);
|
||||
QState * showState = new QState(machine);
|
||||
showState->assignProperty(this,"pos",QPoint(0,0));
|
||||
QState * hideState = new QState(machine);
|
||||
hideState->assignProperty(this,"pos",QPoint(0,height()));
|
||||
|
||||
machine->setInitialState(showState);
|
||||
|
||||
QPropertyAnimation *sa = new QPropertyAnimation(this, "pos");
|
||||
sa->setDuration(200);
|
||||
sa->setEasingCurve(QEasingCurve::InSine);
|
||||
connect(sa,&QPropertyAnimation::finished,this,&Panel::hasShown);
|
||||
|
||||
QPropertyAnimation *ha = new QPropertyAnimation(this, "pos");
|
||||
ha->setDuration(200);
|
||||
ha->setEasingCurve(QEasingCurve::InSine);
|
||||
connect(ha,&QPropertyAnimation::finished,this,&Panel::hasHidden);
|
||||
|
||||
QSignalTransition *ts1 = showState->addTransition(this,SIGNAL(startHide()), hideState);
|
||||
ts1->addAnimation(ha);
|
||||
connect(ts1,&QSignalTransition::triggered,[=](int value = 2){
|
||||
m_HSManager->SetState(value);
|
||||
});
|
||||
QSignalTransition *ts2 = hideState->addTransition(this,SIGNAL(startShow()),showState);
|
||||
ts2->addAnimation(sa);
|
||||
connect(ts2,&QSignalTransition::triggered,[=](int value = 0){
|
||||
m_HSManager->SetState(value);
|
||||
});
|
||||
|
||||
machine->start();
|
||||
}
|
||||
|
||||
Panel::~Panel()
|
||||
{
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include <QLabel>
|
||||
#include <QPushButton>
|
||||
#include <QDebug>
|
||||
#include "DBus/dbushidestatemanager.h"
|
||||
#include "Controller/dockmodedata.h"
|
||||
#include "Controller/appmanager.h"
|
||||
#include "Widgets/appitem.h"
|
||||
@ -15,6 +16,8 @@
|
||||
class Panel : public QLabel
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QPoint pos READ pos WRITE move)
|
||||
|
||||
public:
|
||||
explicit Panel(QWidget *parent = 0);
|
||||
~Panel();
|
||||
@ -27,6 +30,11 @@ public slots:
|
||||
void slotItemDropped();
|
||||
void slotEnteredMask();
|
||||
void slotExitedMask();
|
||||
signals:
|
||||
void startShow();
|
||||
void startHide();
|
||||
void panelHasShown();
|
||||
void panelHasHidden();
|
||||
|
||||
private slots:
|
||||
void slotDockModeChanged(Dock::DockMode newMode,Dock::DockMode oldMode);
|
||||
@ -45,7 +53,14 @@ private:
|
||||
void showMenu();
|
||||
|
||||
void initAppManager();
|
||||
|
||||
void hasShown();
|
||||
void hasHidden();
|
||||
void hideStateChanged(int value);
|
||||
void initHSManager();
|
||||
void initState();
|
||||
private:
|
||||
DBusHideStateManager * m_HSManager = NULL;
|
||||
DockLayout * leftLayout = NULL;
|
||||
DockLayout *rightLayout = NULL;
|
||||
AppManager *m_appManager = NULL;
|
||||
|
@ -8,6 +8,8 @@ MainWidget::MainWidget(QWidget *parent)
|
||||
mainPanel = new Panel(this);
|
||||
mainPanel->resize(this->width(),this->height());
|
||||
mainPanel->move(0,0);
|
||||
connect(mainPanel,&Panel::startShow,this,&MainWidget::showDock);
|
||||
connect(mainPanel,&Panel::panelHasHidden,this,&MainWidget::hideDock);
|
||||
|
||||
this->setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);
|
||||
this->setAttribute(Qt::WA_TranslucentBackground);
|
||||
@ -15,13 +17,13 @@ MainWidget::MainWidget(QWidget *parent)
|
||||
|
||||
connect(DockModeData::instance(), SIGNAL(dockModeChanged(Dock::DockMode,Dock::DockMode)),
|
||||
this, SLOT(slotDockModeChanged(Dock::DockMode,Dock::DockMode)));
|
||||
|
||||
initHSManager();
|
||||
initState();
|
||||
}
|
||||
|
||||
void MainWidget::slotDockModeChanged(Dock::DockMode newMode, Dock::DockMode oldMode)
|
||||
{
|
||||
if (hasHidden)
|
||||
return;
|
||||
|
||||
QRect rec = QApplication::desktop()->screenGeometry();
|
||||
this->resize(rec.width(),DockModeData::instance()->getDockHeight());
|
||||
|
||||
@ -29,69 +31,19 @@ void MainWidget::slotDockModeChanged(Dock::DockMode newMode, Dock::DockMode oldM
|
||||
// mainPanel->move(0,0);
|
||||
}
|
||||
|
||||
void MainWidget::hasShown()
|
||||
{
|
||||
m_HSManager->SetState(1);
|
||||
}
|
||||
|
||||
void MainWidget::hasHidden()
|
||||
{
|
||||
m_HSManager->SetState(3);
|
||||
}
|
||||
|
||||
void MainWidget::hideStateChanged(int value)
|
||||
{
|
||||
if (value == 0)
|
||||
{
|
||||
emit startShow();
|
||||
}
|
||||
else if (value == 1)
|
||||
{
|
||||
emit startHide();
|
||||
}
|
||||
}
|
||||
|
||||
void MainWidget::initHSManager()
|
||||
{
|
||||
m_HSManager = new DBusHideStateManager(this);
|
||||
connect(m_HSManager,&DBusHideStateManager::ChangeState,this,&MainWidget::hideStateChanged);
|
||||
}
|
||||
|
||||
void MainWidget::initState()
|
||||
void MainWidget::showDock()
|
||||
{
|
||||
hasHidden = false;
|
||||
QRect rec = QApplication::desktop()->screenGeometry();
|
||||
this->resize(rec.width(),DockModeData::instance()->getDockHeight());
|
||||
}
|
||||
|
||||
//TODO no need "- 100"
|
||||
QStateMachine * machine = new QStateMachine(this);
|
||||
QState * showState = new QState(machine);
|
||||
showState->assignProperty(this,"pos",QPoint(rec.x(),rec.height() - DockModeData::instance()->getDockHeight() - 100));
|
||||
QState * hideState = new QState(machine);
|
||||
hideState->assignProperty(this,"pos",QPoint(rec.x(),rec.height() - 100));
|
||||
|
||||
machine->setInitialState(showState);
|
||||
|
||||
QPropertyAnimation *sa = new QPropertyAnimation(this, "pos");
|
||||
sa->setDuration(200);
|
||||
sa->setEasingCurve(QEasingCurve::InSine);
|
||||
connect(sa,&QPropertyAnimation::finished,this,&MainWidget::hasShown);
|
||||
|
||||
QPropertyAnimation *ha = new QPropertyAnimation(this, "pos");
|
||||
ha->setDuration(200);
|
||||
ha->setEasingCurve(QEasingCurve::InSine);
|
||||
connect(ha,&QPropertyAnimation::finished,this,&MainWidget::hasHidden);
|
||||
|
||||
QSignalTransition *ts1 = showState->addTransition(this,SIGNAL(startHide()), hideState);
|
||||
ts1->addAnimation(ha);
|
||||
connect(ts1,&QSignalTransition::triggered,[=](int value = 2){
|
||||
m_HSManager->SetState(value);
|
||||
});
|
||||
QSignalTransition *ts2 = hideState->addTransition(this,SIGNAL(startShow()),showState);
|
||||
ts2->addAnimation(sa);
|
||||
connect(ts2,&QSignalTransition::triggered,[=](int value = 0){
|
||||
m_HSManager->SetState(value);
|
||||
});
|
||||
|
||||
machine->start();
|
||||
void MainWidget::hideDock()
|
||||
{
|
||||
hasHidden = true;
|
||||
QRect rec = QApplication::desktop()->screenGeometry();
|
||||
//set height with 0 mean window is hidden,Windows manager will handle it's showing animation
|
||||
this->resize(rec.width(),1);
|
||||
}
|
||||
|
||||
MainWidget::~MainWidget()
|
||||
|
@ -9,16 +9,12 @@
|
||||
#include <QState>
|
||||
#include <QPropertyAnimation>
|
||||
#include <QDebug>
|
||||
#include "DBus/dbushidestatemanager.h"
|
||||
#include "Controller/dockmodedata.h"
|
||||
#include "Panel/panel.h"
|
||||
|
||||
class MainWidget : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QSize size READ size WRITE resize)
|
||||
Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
|
||||
Q_PROPERTY(QPoint pos READ pos WRITE move)
|
||||
|
||||
public:
|
||||
MainWidget(QWidget *parent = 0);
|
||||
@ -27,20 +23,13 @@ public:
|
||||
public slots:
|
||||
void slotDockModeChanged(Dock::DockMode newMode,Dock::DockMode oldMode);
|
||||
|
||||
signals:
|
||||
void startShow();
|
||||
void startHide();
|
||||
|
||||
private:
|
||||
void hasShown();
|
||||
void hasHidden();
|
||||
void hideStateChanged(int value);
|
||||
void initHSManager();
|
||||
void initState();
|
||||
void showDock();
|
||||
void hideDock();
|
||||
|
||||
private:
|
||||
Panel *mainPanel = NULL;
|
||||
DBusHideStateManager * m_HSManager = NULL;
|
||||
bool hasHidden = false;
|
||||
};
|
||||
|
||||
#endif // MAINWIDGET_H
|
||||
|
Loading…
x
Reference in New Issue
Block a user