mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Add a class based on QGraphicsSimpleTextItem that handles animations.
This commit adds a class based on QGraphicsSimpleTextItem that handls animations via animatedHide() animatedMoveTo() and a few other QPropertyes. This is to be used in conjunction with the DiveLineItem added in the past commit on the Coordinate Axis. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
d47456b4e8
commit
408b7dd5e5
3 changed files with 80 additions and 2 deletions
54
qt-ui/profile/divetextitem.cpp
Normal file
54
qt-ui/profile/divetextitem.cpp
Normal file
|
@ -0,0 +1,54 @@
|
|||
#include "divetextitem.h"
|
||||
#include <QPropertyAnimation>
|
||||
|
||||
DiveTextItem::DiveTextItem(QGraphicsItem* parent): QGraphicsSimpleTextItem(parent)
|
||||
{
|
||||
setFlag(ItemIgnoresTransformations);
|
||||
}
|
||||
|
||||
void DiveTextItem::setAlignment(int alignFlags)
|
||||
{
|
||||
internalAlignFlags = alignFlags;
|
||||
update();
|
||||
}
|
||||
|
||||
void DiveTextItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
|
||||
{
|
||||
/* This block of code corrects paints the Text on the
|
||||
* alignment choosed, but it created artifacts on the screen,
|
||||
* so I'm leaving this disabled for the time being.
|
||||
*/
|
||||
// QRectF rect = boundingRect();
|
||||
// if (internalAlignFlags & Qt::AlignTop)
|
||||
// painter->translate(0, -rect.height());
|
||||
// // else if (internalAlignFlags & Qt::AlignBottom)
|
||||
// // painter->translate(0, rect.height()); this is the default, uneeded.
|
||||
// else if (internalAlignFlags & Qt::AlignVCenter)
|
||||
// painter->translate(0, -rect.height() / 2);
|
||||
//
|
||||
// // if (internalAlignFlags & Qt::AlignLeft )
|
||||
// // painter->translate(); // This is the default, uneeded.
|
||||
// if(internalAlignFlags & Qt::AlignHCenter)
|
||||
// painter->translate(-rect.width()/2, 0);
|
||||
// else if(internalAlignFlags & Qt::AlignRight)
|
||||
// painter->translate(-rect.width(), 0);
|
||||
|
||||
QGraphicsSimpleTextItem::paint(painter, option, widget);
|
||||
}
|
||||
|
||||
void DiveTextItem::animatedHide()
|
||||
{
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(this, "opacity");
|
||||
connect(animation, SIGNAL(finished()), SLOT(deleteLater()));
|
||||
animation->setStartValue(1);
|
||||
animation->setEndValue(0);
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
||||
|
||||
void DiveTextItem::animateMoveTo(qreal x, qreal y)
|
||||
{
|
||||
QPropertyAnimation *animation = new QPropertyAnimation(this, "pos");
|
||||
animation->setStartValue(property("pos").toPointF());
|
||||
animation->setEndValue(QPointF(x, y));
|
||||
animation->start(QAbstractAnimation::DeleteWhenStopped);
|
||||
}
|
22
qt-ui/profile/divetextitem.h
Normal file
22
qt-ui/profile/divetextitem.h
Normal file
|
@ -0,0 +1,22 @@
|
|||
#ifndef DIVETEXTITEM_H
|
||||
#define DIVETEXTITEM_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QGraphicsSimpleTextItem>
|
||||
|
||||
/* A Line Item that has animated-properties. */
|
||||
class DiveTextItem :public QObject, public QGraphicsSimpleTextItem{
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(QPointF pos READ pos WRITE setPos)
|
||||
Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity)
|
||||
public:
|
||||
DiveTextItem(QGraphicsItem* parent = 0);
|
||||
virtual void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
|
||||
void setAlignment(int alignFlags);
|
||||
void animatedHide();
|
||||
void animateMoveTo(qreal x, qreal y);
|
||||
private:
|
||||
int internalAlignFlags;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -66,7 +66,8 @@ HEADERS = \
|
|||
qt-ui/profile/profilewidget2.h \
|
||||
qt-ui/profile/diverectitem.h \
|
||||
qt-ui/profile/divepixmapitem.h \
|
||||
qt-ui/profile/divelineitem.h
|
||||
qt-ui/profile/divelineitem.h \
|
||||
qt-ui/profile/divetextitem.h
|
||||
|
||||
SOURCES = \
|
||||
deco.c \
|
||||
|
@ -120,7 +121,8 @@ SOURCES = \
|
|||
qt-ui/profile/profilewidget2.cpp \
|
||||
qt-ui/profile/diverectitem.cpp \
|
||||
qt-ui/profile/divepixmapitem.cpp \
|
||||
qt-ui/profile/divelineitem.cpp
|
||||
qt-ui/profile/divelineitem.cpp \
|
||||
qt-ui/profile/divetextitem.cpp
|
||||
|
||||
linux*: SOURCES += linux.c
|
||||
mac: SOURCES += macos.c
|
||||
|
|
Loading…
Reference in a new issue