1 /*
2 SPDX-License-Identifier: GPL-2.0-or-later
3 SPDX-FileCopyrightText: 2012 Martin Kuettler <martin.kuettler@gmail.com>
4 */
5
6 #include "worksheetimageitem.h"
7 #include "worksheet.h"
8
9 #include <QMovie>
10 #include <QImage>
11 #include <QGraphicsSceneContextMenuEvent>
12 #include <QUrl>
13 #include <QMenu>
14 #include <QDebug>
15 #include <QPainter>
16
WorksheetImageItem(QGraphicsObject * parent)17 WorksheetImageItem::WorksheetImageItem(QGraphicsObject* parent)
18 : QGraphicsObject(parent)
19 {
20 setFlag(QGraphicsItem::ItemIsFocusable, true);
21 connect(this, SIGNAL(menuCreated(QMenu*,QPointF)), parent,
22 SLOT(populateMenu(QMenu*,QPointF)), Qt::DirectConnection);
23 }
24
~WorksheetImageItem()25 WorksheetImageItem::~WorksheetImageItem()
26 {
27 if (worksheet())
28 worksheet()->removeRequestedWidth(this);
29 }
30
type() const31 int WorksheetImageItem::type() const
32 {
33 return Type;
34 }
35
imageIsValid()36 bool WorksheetImageItem::imageIsValid()
37 {
38 return !m_pixmap.isNull();
39 }
40
setGeometry(qreal x,qreal y,qreal w,bool centered)41 qreal WorksheetImageItem::setGeometry(qreal x, qreal y, qreal w, bool centered)
42 {
43 if (width() <= w && centered) {
44 setPos(x + w/2 - width()/2, y);
45 } else {
46 setPos(x, y);
47 }
48 worksheet()->setRequestedWidth(this, scenePos().x() + width());
49
50 return height();
51 }
52
height() const53 qreal WorksheetImageItem::height() const
54 {
55 return m_size.height();
56 }
57
width() const58 qreal WorksheetImageItem::width() const
59 {
60 return m_size.width();
61 }
62
size()63 QSizeF WorksheetImageItem::size()
64 {
65 return m_size;
66 }
67
setSize(QSizeF size)68 void WorksheetImageItem::setSize(QSizeF size)
69 {
70 m_size = size;
71
72 qreal width = scenePos().x() + size.width();
73 worksheet()->setRequestedWidth(this, width);
74 }
75
imageSize()76 QSize WorksheetImageItem::imageSize()
77 {
78 return m_pixmap.size();
79 }
80
boundingRect() const81 QRectF WorksheetImageItem::boundingRect() const
82 {
83 return QRectF(QPointF(0, 0), m_size);
84 }
85
86 #include <QStyleOptionGraphicsItem>
87
paint(QPainter * painter,const QStyleOptionGraphicsItem * option,QWidget * widget)88 void WorksheetImageItem::paint(QPainter *painter,
89 const QStyleOptionGraphicsItem *option,
90 QWidget *widget)
91 {
92 Q_UNUSED(option);
93 Q_UNUSED(widget);
94 painter->drawPixmap(QRectF(QPointF(0,0), m_size), m_pixmap,
95 m_pixmap.rect());
96 if (hasFocus())
97 {
98 painter->setPen(Qt::DashLine);
99 painter->drawRect(0, 0, width(), height());
100 }
101 }
102
setEps(const QUrl & url)103 void WorksheetImageItem::setEps(const QUrl& url)
104 {
105 const QImage img = worksheet()->renderer()->renderToImage(url, Cantor::Renderer::EPS, &m_size);
106 m_pixmap = QPixmap::fromImage(img.convertToFormat(QImage::Format_ARGB32));
107 }
108
setImage(QImage img)109 void WorksheetImageItem::setImage(QImage img)
110 {
111 m_pixmap = QPixmap::fromImage(img);
112 setSize(m_pixmap.size());
113 }
114
setImage(QImage img,QSize displaySize)115 void WorksheetImageItem::setImage(QImage img, QSize displaySize)
116 {
117 m_pixmap = QPixmap::fromImage(img);
118 setSize(displaySize);
119 }
120
setPixmap(QPixmap pixmap)121 void WorksheetImageItem::setPixmap(QPixmap pixmap)
122 {
123 m_pixmap = pixmap;
124 }
125
pixmap() const126 QPixmap WorksheetImageItem::pixmap() const
127 {
128 return m_pixmap;
129 }
130
populateMenu(QMenu * menu,QPointF pos)131 void WorksheetImageItem::populateMenu(QMenu* menu, QPointF pos)
132 {
133 emit menuCreated(menu, mapToParent(pos));
134 }
135
contextMenuEvent(QGraphicsSceneContextMenuEvent * event)136 void WorksheetImageItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
137 {
138 QMenu *menu = worksheet()->createContextMenu();
139 populateMenu(menu, event->pos());
140
141 menu->popup(event->screenPos());
142 }
143
worksheet()144 Worksheet* WorksheetImageItem::worksheet()
145 {
146 return qobject_cast<Worksheet*>(scene());
147 }
148
149
150
151