diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2018-03-04 01:01:52 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2018-05-13 13:52:35 -0700 |
commit | 630862971fc314439dfa6d274474eb18e8f96711 (patch) | |
tree | 67eb3d7cbed81b4152a017a39f81d260f9cb02a9 /profile-widget | |
parent | e811c7306d210af17a6571e61f23496ce91fa4bc (diff) | |
download | subsurface-630862971fc314439dfa6d274474eb18e8f96711.tar.gz |
Dive pictures: remove close-button optimization
One close-button object was used for all dive pictures. This seems
like a brittle premature optimization and the pixmap is shared
anyway. Make the button a subobject of the dive picture object.
Change the object-hierarchy to be based on QGraphicsItem instead
of QObject. The QObject here is only used as a kludge to support
signals and properties (the latter are necessary for animations).
Remove a comment, which does not seem to be relevant after this
change.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'profile-widget')
-rw-r--r-- | profile-widget/diveeventitem.cpp | 2 | ||||
-rw-r--r-- | profile-widget/diveeventitem.h | 2 | ||||
-rw-r--r-- | profile-widget/divepixmapitem.cpp | 42 | ||||
-rw-r--r-- | profile-widget/divepixmapitem.h | 44 |
4 files changed, 37 insertions, 53 deletions
diff --git a/profile-widget/diveeventitem.cpp b/profile-widget/diveeventitem.cpp index 22c451e93..87e941387 100644 --- a/profile-widget/diveeventitem.cpp +++ b/profile-widget/diveeventitem.cpp @@ -12,7 +12,7 @@ extern struct ev_select *ev_namelist; extern int evn_used; -DiveEventItem::DiveEventItem(QObject *parent) : DivePixmapItem(parent), +DiveEventItem::DiveEventItem(QGraphicsItem *parent) : DivePixmapItem(parent), vAxis(NULL), hAxis(NULL), dataModel(NULL), diff --git a/profile-widget/diveeventitem.h b/profile-widget/diveeventitem.h index f56a92898..867b89f31 100644 --- a/profile-widget/diveeventitem.h +++ b/profile-widget/diveeventitem.h @@ -11,7 +11,7 @@ struct event; class DiveEventItem : public DivePixmapItem { Q_OBJECT public: - DiveEventItem(QObject *parent = 0); + DiveEventItem(QGraphicsItem *parent = 0); virtual ~DiveEventItem(); void setEvent(struct event *ev, struct gasmix *lastgasmix); struct event *getEvent(); diff --git a/profile-widget/divepixmapitem.cpp b/profile-widget/divepixmapitem.cpp index 4456d3e53..08525fe34 100644 --- a/profile-widget/divepixmapitem.cpp +++ b/profile-widget/divepixmapitem.cpp @@ -12,11 +12,11 @@ #include <QUrl> #include <QGraphicsSceneMouseEvent> -DivePixmapItem::DivePixmapItem(QObject *parent) : QObject(parent), QGraphicsPixmapItem() +DivePixmapItem::DivePixmapItem(QGraphicsItem *parent) : QGraphicsPixmapItem(parent) { } -DiveButtonItem::DiveButtonItem(QObject *parent): DivePixmapItem(parent) +DiveButtonItem::DiveButtonItem(QGraphicsItem *parent): DivePixmapItem(parent) { } @@ -26,9 +26,7 @@ void DiveButtonItem::mousePressEvent(QGraphicsSceneMouseEvent *event) emit clicked(); } -// If we have many many pictures on screen, maybe a shared-pixmap would be better to -// paint on screen, but for now, this. -CloseButtonItem::CloseButtonItem(QObject *parent): DiveButtonItem(parent) +CloseButtonItem::CloseButtonItem(QGraphicsItem *parent): DiveButtonItem(parent) { static QPixmap p = QPixmap(":list-remove-icon"); setPixmap(p); @@ -45,9 +43,10 @@ void CloseButtonItem::show() DiveButtonItem::show(); } -DivePictureItem::DivePictureItem(QObject *parent): DivePixmapItem(parent), +DivePictureItem::DivePictureItem(QGraphicsItem *parent): DivePixmapItem(parent), canvas(new QGraphicsRectItem(this)), - shadow(new QGraphicsRectItem(this)) + shadow(new QGraphicsRectItem(this)), + button(new CloseButtonItem(this)) { setFlag(ItemIgnoresTransformations); setAcceptHoverEvents(true); @@ -67,6 +66,10 @@ DivePictureItem::DivePictureItem(QObject *parent): DivePixmapItem(parent), shadow->setBrush(QColor(Qt::lightGray)); shadow->setFlag(ItemStacksBehindParent); shadow->setZValue(-2); + + button->setScale(0.2); + button->setZValue(7); + button->hide(); } void DivePictureItem::settingsChanged() @@ -80,28 +83,19 @@ void DivePictureItem::setPixmap(const QPixmap &pix) QRectF r = boundingRect(); canvas->setRect(0 - 10, 0 -10, r.width() + 20, r.height() + 20); shadow->setRect(canvas->rect()); + button->setPos(boundingRect().width() - button->boundingRect().width() * 0.2, + boundingRect().height() - button->boundingRect().height() * 0.2); } -CloseButtonItem *button = NULL; void DivePictureItem::hoverEnterEvent(QGraphicsSceneHoverEvent *event) { Q_UNUSED(event); Animations::scaleTo(this, 1.0); setZValue(5); - if(!button) { - button = new CloseButtonItem(); - button->setScale(0.2); - button->setZValue(7); - scene()->addItem(button); - } - button->setParentItem(this); - button->setPos(boundingRect().width() - button->boundingRect().width() * 0.2, - boundingRect().height() - button->boundingRect().height() * 0.2); button->setOpacity(0); button->show(); Animations::show(button); - button->disconnect(); connect(button, SIGNAL(clicked()), this, SLOT(removePicture())); } @@ -115,17 +109,7 @@ void DivePictureItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) Q_UNUSED(event); Animations::scaleTo(this, 0.2); setZValue(0); - if(button){ - button->setParentItem(NULL); - Animations::hide(button); - } -} - -DivePictureItem::~DivePictureItem(){ - if(button){ - button->setParentItem(NULL); - Animations::hide(button); - } + Animations::hide(button); } void DivePictureItem::mousePressEvent(QGraphicsSceneMouseEvent *event) diff --git a/profile-widget/divepixmapitem.h b/profile-widget/divepixmapitem.h index b3fe3417a..16dbdf8fa 100644 --- a/profile-widget/divepixmapitem.h +++ b/profile-widget/divepixmapitem.h @@ -12,15 +12,33 @@ class DivePixmapItem : public QObject, public QGraphicsPixmapItem { Q_PROPERTY(qreal x WRITE setX READ x) Q_PROPERTY(qreal y WRITE setY READ y) public: - DivePixmapItem(QObject *parent = 0); + DivePixmapItem(QGraphicsItem *parent = 0); +}; + +class DiveButtonItem : public DivePixmapItem { + Q_OBJECT +public: + DiveButtonItem(QGraphicsItem *parent = 0); +protected: + virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); +signals: + void clicked(); +}; + +class CloseButtonItem : public DiveButtonItem { + Q_OBJECT +public: + CloseButtonItem(QGraphicsItem *parent = 0); +public slots: + void hide(); + void show(); }; class DivePictureItem : public DivePixmapItem { Q_OBJECT Q_PROPERTY(qreal scale WRITE setScale READ scale) public: - DivePictureItem(QObject *parent = 0); - virtual ~DivePictureItem(); + DivePictureItem(QGraphicsItem *parent = 0); void setPixmap(const QPixmap& pix); public slots: void settingsChanged(); @@ -36,25 +54,7 @@ private: QString fileUrl; QGraphicsRectItem *canvas; QGraphicsRectItem *shadow; -}; - -class DiveButtonItem : public DivePixmapItem { - Q_OBJECT -public: - DiveButtonItem(QObject *parent = 0); -protected: - virtual void mousePressEvent(QGraphicsSceneMouseEvent *event); -signals: - void clicked(); -}; - -class CloseButtonItem : public DiveButtonItem { - Q_OBJECT -public: - CloseButtonItem(QObject *parent = 0); -public slots: - void hide(); - void show(); + DiveButtonItem *button; }; #endif // DIVEPIXMAPITEM_H |