mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
fix(attention): crash when app item destory.
Change-Id: Idcfe75b5c12df4e0f2de8ab17cac0ff696df540a
This commit is contained in:
parent
bcc5e866cb
commit
d40239a307
Notes:
gerrit
2018-03-12 01:21:43 +00:00
Verified+1: Anonymous Coward #1000004 Code-Review+2: 石博文 <sbw@sbw.so> Submitted-by: 石博文 <sbw@sbw.so> Submitted-at: Mon, 12 Mar 2018 01:21:42 +0000 Reviewed-on: https://cr.deepin.io/32462 Project: dde/dde-dock Branch: refs/heads/master
@ -34,7 +34,6 @@
|
|||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QHBoxLayout>
|
#include <QHBoxLayout>
|
||||||
#include <QGraphicsScene>
|
#include <QGraphicsScene>
|
||||||
#include <QGraphicsItemAnimation>
|
|
||||||
#include <QTimeLine>
|
#include <QTimeLine>
|
||||||
#include <QX11Info>
|
#include <QX11Info>
|
||||||
|
|
||||||
@ -590,6 +589,14 @@ void AppItem::cancelAndHidePreview()
|
|||||||
|
|
||||||
void AppItem::playSwingEffect()
|
void AppItem::playSwingEffect()
|
||||||
{
|
{
|
||||||
|
if (m_itemAnimation.timeLine())
|
||||||
|
{
|
||||||
|
m_itemAnimation.timeLine()->stop();
|
||||||
|
m_itemAnimation.clear();
|
||||||
|
} else {
|
||||||
|
m_itemAnimation.setTimeLine(new QTimeLine);
|
||||||
|
}
|
||||||
|
|
||||||
m_itemScene->clear();
|
m_itemScene->clear();
|
||||||
|
|
||||||
const auto ratio = qApp->devicePixelRatio();
|
const auto ratio = qApp->devicePixelRatio();
|
||||||
@ -600,32 +607,28 @@ void AppItem::playSwingEffect()
|
|||||||
item->setTransformationMode(Qt::SmoothTransformation);
|
item->setTransformationMode(Qt::SmoothTransformation);
|
||||||
item->setPos(QPointF(r.center()) - QPointF(icon.rect().center()) / ratio);
|
item->setPos(QPointF(r.center()) - QPointF(icon.rect().center()) / ratio);
|
||||||
|
|
||||||
|
m_itemAnimation.setItem(item);
|
||||||
m_itemScene->setSceneRect(r);
|
m_itemScene->setSceneRect(r);
|
||||||
m_swingEffectView->setSceneRect(r);
|
m_swingEffectView->setSceneRect(r);
|
||||||
m_swingEffectView->setFixedSize(r.size());
|
m_swingEffectView->setFixedSize(r.size());
|
||||||
|
|
||||||
QTimeLine *tl = new QTimeLine;
|
QTimeLine *tl = m_itemAnimation.timeLine();
|
||||||
tl->setDuration(1200);
|
tl->setDuration(1200);
|
||||||
tl->setFrameRange(0, 60);
|
tl->setFrameRange(0, 60);
|
||||||
tl->setLoopCount(1);
|
tl->setLoopCount(1);
|
||||||
tl->setEasingCurve(QEasingCurve::Linear);
|
tl->setEasingCurve(QEasingCurve::Linear);
|
||||||
tl->setStartFrame(0);
|
tl->setStartFrame(0);
|
||||||
|
|
||||||
QGraphicsItemAnimation *ani = new QGraphicsItemAnimation(tl);
|
|
||||||
ani->setItem(item);
|
|
||||||
ani->setTimeLine(tl);
|
|
||||||
|
|
||||||
const int px = qreal(-icon.rect().center().x()) / ratio;
|
const int px = qreal(-icon.rect().center().x()) / ratio;
|
||||||
const int py = qreal(-icon.rect().center().y()) / ratio - 18.;
|
const int py = qreal(-icon.rect().center().y()) / ratio - 18.;
|
||||||
const QPoint pos = r.center() + QPoint(0, 18);
|
const QPoint pos = r.center() + QPoint(0, 18);
|
||||||
for (int i(0); i != 60; ++i)
|
for (int i(0); i != 60; ++i)
|
||||||
{
|
{
|
||||||
ani->setPosAt(i / 60.0, pos);
|
m_itemAnimation.setPosAt(i / 60.0, pos);
|
||||||
ani->setTranslationAt(i / 60.0, px, py);
|
m_itemAnimation.setTranslationAt(i / 60.0, px, py);
|
||||||
ani->setRotationAt(i / 60.0, Frames[i]);
|
m_itemAnimation.setRotationAt(i / 60.0, Frames[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(tl, &QTimeLine::finished, tl, &QTimeLine::deleteLater);
|
|
||||||
connect(tl, &QTimeLine::finished, m_swingEffectView, &QGraphicsView::hide);
|
connect(tl, &QTimeLine::finished, m_swingEffectView, &QGraphicsView::hide);
|
||||||
connect(tl, &QTimeLine::finished, this, &AppItem::checkAttentionEffect);
|
connect(tl, &QTimeLine::finished, this, &AppItem::checkAttentionEffect);
|
||||||
|
|
||||||
|
@ -28,6 +28,7 @@
|
|||||||
|
|
||||||
#include <QGraphicsView>
|
#include <QGraphicsView>
|
||||||
#include <QGraphicsItem>
|
#include <QGraphicsItem>
|
||||||
|
#include <QGraphicsItemAnimation>
|
||||||
|
|
||||||
#include <com_deepin_dde_daemon_dock_entry.h>
|
#include <com_deepin_dde_daemon_dock_entry.h>
|
||||||
|
|
||||||
@ -92,6 +93,7 @@ private:
|
|||||||
|
|
||||||
QGraphicsView *m_swingEffectView;
|
QGraphicsView *m_swingEffectView;
|
||||||
QGraphicsScene *m_itemScene;
|
QGraphicsScene *m_itemScene;
|
||||||
|
QGraphicsItemAnimation m_itemAnimation;
|
||||||
|
|
||||||
bool m_draging;
|
bool m_draging;
|
||||||
bool m_active;
|
bool m_active;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user