}
+ChatLine *ChatItem::chatLine() const {
+ return _parent;
+}
+
+ChatScene *ChatItem::chatScene() const {
+ return chatLine()->chatScene();
+}
+
+const QAbstractItemModel *ChatItem::model() const {
+ return chatLine()->model();
+}
+
+int ChatItem::row() const {
+ return chatLine()->row();
+}
+
+QPointF ChatItem::mapToLine(const QPointF &p) const {
+ return p + pos();
+}
+
+QPointF ChatItem::mapFromLine(const QPointF &p) const {
+ return p - pos();
+}
+
+// relative to the ChatLine
+QPointF ChatItem::mapToScene(const QPointF &p) const {
+ return chatLine()->mapToScene(p /* + pos() */);
+}
+
+QPointF ChatItem::mapFromScene(const QPointF &p) const {
+ return chatLine()->mapFromScene(p) /* - pos() */;
+}
+
QVariant ChatItem::data(int role) const {
QModelIndex index = model()->index(row(), column());
if(!index.isValid()) {
// This is a deliberate trade-off. (-> selectFmt creation, data() call)
void ChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
Q_UNUSED(option); Q_UNUSED(widget);
+ painter->save();
+ painter->setClipRect(boundingRect());
paintBackground(painter);
QTextLayout layout;
// }
// 3) draw bounding rect
// painter->drawRect(_boundingRect.adjusted(0, 0, -1, -1));
+
+ painter->restore();
}
void ChatItem::overlayFormat(UiStyle::FormatList &fmtList, int start, int end, quint32 overlayFmt) const {
void SenderChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
Q_UNUSED(option); Q_UNUSED(widget);
+ painter->save();
+ painter->setClipRect(boundingRect());
paintBackground(painter);
QTextLayout layout;
} else {
layout.draw(painter, pos(), additionalFormats(), boundingRect());
}
+ painter->restore();
}
void SenderChatItem::handleClick(const QPointF &pos, ChatScene::ClickMode clickMode) {