mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-03 00:15:21 +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 <QHBoxLayout>
|
||||
#include <QGraphicsScene>
|
||||
#include <QGraphicsItemAnimation>
|
||||
#include <QTimeLine>
|
||||
#include <QX11Info>
|
||||
|
||||
@ -590,6 +589,14 @@ void AppItem::cancelAndHidePreview()
|
||||
|
||||
void AppItem::playSwingEffect()
|
||||
{
|
||||
if (m_itemAnimation.timeLine())
|
||||
{
|
||||
m_itemAnimation.timeLine()->stop();
|
||||
m_itemAnimation.clear();
|
||||
} else {
|
||||
m_itemAnimation.setTimeLine(new QTimeLine);
|
||||
}
|
||||
|
||||
m_itemScene->clear();
|
||||
|
||||
const auto ratio = qApp->devicePixelRatio();
|
||||
@ -600,32 +607,28 @@ void AppItem::playSwingEffect()
|
||||
item->setTransformationMode(Qt::SmoothTransformation);
|
||||
item->setPos(QPointF(r.center()) - QPointF(icon.rect().center()) / ratio);
|
||||
|
||||
m_itemAnimation.setItem(item);
|
||||
m_itemScene->setSceneRect(r);
|
||||
m_swingEffectView->setSceneRect(r);
|
||||
m_swingEffectView->setFixedSize(r.size());
|
||||
|
||||
QTimeLine *tl = new QTimeLine;
|
||||
QTimeLine *tl = m_itemAnimation.timeLine();
|
||||
tl->setDuration(1200);
|
||||
tl->setFrameRange(0, 60);
|
||||
tl->setLoopCount(1);
|
||||
tl->setEasingCurve(QEasingCurve::Linear);
|
||||
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 py = qreal(-icon.rect().center().y()) / ratio - 18.;
|
||||
const QPoint pos = r.center() + QPoint(0, 18);
|
||||
for (int i(0); i != 60; ++i)
|
||||
{
|
||||
ani->setPosAt(i / 60.0, pos);
|
||||
ani->setTranslationAt(i / 60.0, px, py);
|
||||
ani->setRotationAt(i / 60.0, Frames[i]);
|
||||
m_itemAnimation.setPosAt(i / 60.0, pos);
|
||||
m_itemAnimation.setTranslationAt(i / 60.0, px, py);
|
||||
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, this, &AppItem::checkAttentionEffect);
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
#include <QGraphicsView>
|
||||
#include <QGraphicsItem>
|
||||
#include <QGraphicsItemAnimation>
|
||||
|
||||
#include <com_deepin_dde_daemon_dock_entry.h>
|
||||
|
||||
@ -92,6 +93,7 @@ private:
|
||||
|
||||
QGraphicsView *m_swingEffectView;
|
||||
QGraphicsScene *m_itemScene;
|
||||
QGraphicsItemAnimation m_itemAnimation;
|
||||
|
||||
bool m_draging;
|
||||
bool m_active;
|
||||
|
Loading…
x
Reference in New Issue
Block a user