mirror of
https://github.com/linuxdeepin/dde-dock.git
synced 2025-06-04 17:33:05 +00:00
add launching effects
Change-Id: I9795513cbe1545b3a1628c30aa20f8c4c51a343c
This commit is contained in:
parent
82b26d9109
commit
f96dca936a
Notes:
Deepin Code Review
2016-09-08 08:09:31 +00:00
Verified+1: Anonymous Coward #1000004 Code-Review+2: 石博文 <sbw@sbw.so> Submitted-by: 石博文 <sbw@sbw.so> Submitted-at: Thu, 08 Sep 2016 08:09:31 +0000 Reviewed-on: https://cr.deepin.io/15966 Project: dde/dde-dock Branch: refs/heads/master
@ -4,6 +4,8 @@
|
|||||||
#include "util/imagefactory.h"
|
#include "util/imagefactory.h"
|
||||||
#include "xcb/xcb_misc.h"
|
#include "xcb/xcb_misc.h"
|
||||||
|
|
||||||
|
#include <dapplication.h>
|
||||||
|
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
#include <QDrag>
|
#include <QDrag>
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
@ -18,11 +20,13 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
|
|||||||
m_appNameTips(new QLabel(this)),
|
m_appNameTips(new QLabel(this)),
|
||||||
m_itemEntry(new DBusDockEntry(entry.path(), this)),
|
m_itemEntry(new DBusDockEntry(entry.path(), this)),
|
||||||
m_draging(false),
|
m_draging(false),
|
||||||
|
m_launchingEffects(0.0),
|
||||||
m_horizontalIndicator(QPixmap(":/indicator/resources/indicator.png")),
|
m_horizontalIndicator(QPixmap(":/indicator/resources/indicator.png")),
|
||||||
m_verticalIndicator(QPixmap(":/indicator/resources/indicator_ver.png")),
|
m_verticalIndicator(QPixmap(":/indicator/resources/indicator_ver.png")),
|
||||||
m_activeHorizontalIndicator(QPixmap(":/indicator/resources/indicator_active.png")),
|
m_activeHorizontalIndicator(QPixmap(":/indicator/resources/indicator_active.png")),
|
||||||
m_activeVerticalIndicator(QPixmap(":/indicator/resources/indicator_active_ver.png")),
|
m_activeVerticalIndicator(QPixmap(":/indicator/resources/indicator_active_ver.png")),
|
||||||
m_updateIconGeometryTimer(new QTimer(this))
|
m_updateIconGeometryTimer(new QTimer(this)),
|
||||||
|
m_launchingEffectsTimer(new QTimer(this))
|
||||||
{
|
{
|
||||||
setAccessibleName(m_itemEntry->name());
|
setAccessibleName(m_itemEntry->name());
|
||||||
setAcceptDrops(true);
|
setAcceptDrops(true);
|
||||||
@ -38,6 +42,9 @@ AppItem::AppItem(const QDBusObjectPath &entry, QWidget *parent)
|
|||||||
m_updateIconGeometryTimer->setInterval(500);
|
m_updateIconGeometryTimer->setInterval(500);
|
||||||
m_updateIconGeometryTimer->setSingleShot(true);
|
m_updateIconGeometryTimer->setSingleShot(true);
|
||||||
|
|
||||||
|
m_launchingEffectsTimer->setInterval(3000);
|
||||||
|
m_launchingEffectsTimer->setSingleShot(true);
|
||||||
|
|
||||||
connect(m_itemEntry, &DBusDockEntry::ActiveChanged, this, &AppItem::activeChanged);
|
connect(m_itemEntry, &DBusDockEntry::ActiveChanged, this, &AppItem::activeChanged);
|
||||||
connect(m_itemEntry, &DBusDockEntry::TitlesChanged, this, &AppItem::updateTitle);
|
connect(m_itemEntry, &DBusDockEntry::TitlesChanged, this, &AppItem::updateTitle);
|
||||||
connect(m_itemEntry, &DBusDockEntry::ActiveChanged, this, static_cast<void (AppItem::*)()>(&AppItem::update));
|
connect(m_itemEntry, &DBusDockEntry::ActiveChanged, this, static_cast<void (AppItem::*)()>(&AppItem::update));
|
||||||
@ -112,6 +119,8 @@ void AppItem::paintEvent(QPaintEvent *e)
|
|||||||
QPainter painter(this);
|
QPainter painter(this);
|
||||||
if (!painter.isActive())
|
if (!painter.isActive())
|
||||||
return;
|
return;
|
||||||
|
painter.setRenderHint(QPainter::Antialiasing, true);
|
||||||
|
painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
|
||||||
|
|
||||||
const QRect itemRect = rect();
|
const QRect itemRect = rect();
|
||||||
|
|
||||||
@ -199,14 +208,39 @@ void AppItem::paintEvent(QPaintEvent *e)
|
|||||||
|
|
||||||
// icon
|
// icon
|
||||||
const QPixmap pixmap = DockDisplayMode == Efficient ? m_smallIcon : m_largeIcon;
|
const QPixmap pixmap = DockDisplayMode == Efficient ? m_smallIcon : m_largeIcon;
|
||||||
// draw ligher/normal icon
|
// icon pos
|
||||||
if (m_hover)
|
QPointF iconPos = itemRect.center() - pixmap.rect().center();
|
||||||
painter.drawPixmap(itemRect.center() - pixmap.rect().center(), ImageFactory::lighterEffect(pixmap));
|
const bool launching = m_launchingEffectsTimer->isActive();
|
||||||
else
|
|
||||||
painter.drawPixmap(itemRect.center() - pixmap.rect().center(), pixmap);
|
|
||||||
|
|
||||||
// Update the window icon geometry when the icon is changed.
|
// add launching effects
|
||||||
m_updateIconGeometryTimer->start();
|
if (launching)
|
||||||
|
{
|
||||||
|
const double power = 3.0;
|
||||||
|
const double multiple = 1.05;
|
||||||
|
const double offset = std::pow(std::sin(m_launchingEffects) * multiple, power);
|
||||||
|
m_launchingEffects += 0.0006;
|
||||||
|
|
||||||
|
switch (DockPosition)
|
||||||
|
{
|
||||||
|
case Left:
|
||||||
|
case Right: iconPos.setX(iconPos.x() + offset); break;
|
||||||
|
case Top:
|
||||||
|
case Bottom: iconPos.setY(iconPos.y() + offset); break;
|
||||||
|
default:;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// draw ligher/normal icon
|
||||||
|
if (launching || !m_hover)
|
||||||
|
painter.drawPixmap(iconPos, pixmap);
|
||||||
|
else
|
||||||
|
painter.drawPixmap(iconPos, ImageFactory::lighterEffect(pixmap));
|
||||||
|
|
||||||
|
if (launching)
|
||||||
|
update();
|
||||||
|
else
|
||||||
|
// Update the window icon geometry when the icon is changed.
|
||||||
|
m_updateIconGeometryTimer->start();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppItem::mouseReleaseEvent(QMouseEvent *e)
|
void AppItem::mouseReleaseEvent(QMouseEvent *e)
|
||||||
@ -215,8 +249,18 @@ void AppItem::mouseReleaseEvent(QMouseEvent *e)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
const QPoint distance = MousePressPos - e->pos();
|
const QPoint distance = MousePressPos - e->pos();
|
||||||
if (distance.manhattanLength() < APP_DRAG_THRESHOLD)
|
if (distance.manhattanLength() > APP_DRAG_THRESHOLD)
|
||||||
m_itemEntry->Activate();
|
return;
|
||||||
|
|
||||||
|
m_itemEntry->Activate();
|
||||||
|
|
||||||
|
if (!m_titles.isEmpty())
|
||||||
|
return;
|
||||||
|
|
||||||
|
// start launching effects
|
||||||
|
m_launchingEffects = 0.0;
|
||||||
|
m_launchingEffectsTimer->start();
|
||||||
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppItem::mousePressEvent(QMouseEvent *e)
|
void AppItem::mousePressEvent(QMouseEvent *e)
|
||||||
|
@ -50,6 +50,7 @@ private:
|
|||||||
DBusDockEntry *m_itemEntry;
|
DBusDockEntry *m_itemEntry;
|
||||||
|
|
||||||
bool m_draging;
|
bool m_draging;
|
||||||
|
double m_launchingEffects;
|
||||||
|
|
||||||
bool m_active;
|
bool m_active;
|
||||||
WindowDict m_titles;
|
WindowDict m_titles;
|
||||||
@ -62,7 +63,8 @@ private:
|
|||||||
QPixmap m_activeVerticalIndicator;
|
QPixmap m_activeVerticalIndicator;
|
||||||
|
|
||||||
QRect m_lastGlobalGeometry;
|
QRect m_lastGlobalGeometry;
|
||||||
QTimer * m_updateIconGeometryTimer;
|
QTimer *m_updateIconGeometryTimer;
|
||||||
|
QTimer *m_launchingEffectsTimer;
|
||||||
|
|
||||||
static int IconBaseSize;
|
static int IconBaseSize;
|
||||||
static QPoint MousePressPos;
|
static QPoint MousePressPos;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user