summaryrefslogtreecommitdiffstats
path: root/profile-widget
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2018-03-04 01:01:52 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-05-13 13:52:35 -0700
commit630862971fc314439dfa6d274474eb18e8f96711 (patch)
tree67eb3d7cbed81b4152a017a39f81d260f9cb02a9 /profile-widget
parente811c7306d210af17a6571e61f23496ce91fa4bc (diff)
downloadsubsurface-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.cpp2
-rw-r--r--profile-widget/diveeventitem.h2
-rw-r--r--profile-widget/divepixmapitem.cpp42
-rw-r--r--profile-widget/divepixmapitem.h44
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