1 #include "sakmessageitem.h"
3 SakMessageItem::SakMessageItem(const QString
& message
, const QPixmap
& p
) : QGraphicsItem(0) {
4 m_rect
= QRectF(QPointF(0, 0), QSizeF(800, 200));
6 setAcceptsHoverEvents(true);
7 m_p
=new QGraphicsPixmapItem(p
.scaled(200, 600, Qt::KeepAspectRatio
, Qt::SmoothTransformation
),this);
10 m_t
= new QTextDocument
;
11 m_t
->setHtml(message
);
12 m_t
->setTextWidth(500);
15 //setFlag(ItemIsMovable, true);
16 //setFlag(ItemIsSelectable, true);
19 SakMessageItem::~SakMessageItem()
25 void SakMessageItem::setGeometry(const QRect
& r
) {
26 prepareGeometryChange();
27 double xratio
= r
.width() / 800.0;
28 double yratio
= r
.height() / 200.0;
29 double ratio
= qMin(xratio
, yratio
);
31 t
.scale(ratio
, ratio
);
34 m_cachedPixmap
= QPixmap();
37 void SakMessageItem::paint(QPainter
* painter
, const QStyleOptionGraphicsItem
* option
, QWidget
* )
39 if (m_cachedPixmap
.isNull()) {
40 m_cachedPixmap
= QPixmap(QSize((int)m_rect
.width(), (int)m_rect
.height()));
41 m_cachedPixmap
.fill(QColor(255,255,255,0));
42 QPainter
p(&m_cachedPixmap
);
47 pen
.setColor(QColor(Qt::white
).darker(150));
49 p
.setBrush(Qt::white
);
53 qreal w
= 300 + qMin(600.0, m_t
->documentLayout()->documentSize().width());
54 qreal h
= qMax(80.0+m_border
+curve
, qMin(200.0, m_t
->documentLayout()->documentSize().height() + 20));
55 path
.moveTo(200 + m_border
, 75);
57 path
.lineTo(200+m_border
, 40);
58 path
.lineTo(200+m_border
, m_border
+ curve
);
59 path
.cubicTo(QPointF(200+m_border
, m_border
), QPointF(200+m_border
, m_border
), QPointF(200+m_border
+curve
, m_border
));
60 path
.lineTo(w
-m_border
-curve
, m_border
);
61 path
.cubicTo(QPointF(w
-m_border
, m_border
), QPointF(w
-m_border
, m_border
), QPointF(w
-m_border
, m_border
+curve
));
62 path
.lineTo(w
-m_border
, h
-m_border
-curve
);
63 path
.cubicTo(QPointF(w
-m_border
,h
-m_border
), QPointF(w
-m_border
,h
-m_border
), QPointF(w
-m_border
-curve
,h
-m_border
));
64 path
.lineTo(200+m_border
+curve
,h
-m_border
);
65 path
.cubicTo(QPointF(200+m_border
,h
-m_border
),QPointF(200+m_border
,h
-m_border
),QPointF(200+m_border
,h
-m_border
-curve
));
70 m_t
->drawContents(&p
);
74 QRectF exposed
= option
->exposedRect
.adjusted(-1,-1,1,1);
75 exposed
&= QRectF(0,0, m_cachedPixmap
.width(), m_cachedPixmap
.height());
76 painter
->drawPixmap(exposed
, m_cachedPixmap
, exposed
);