forked from blue/squawk
avatar painting is returned to delegate; sender names now are not painted in every message
This commit is contained in:
parent
7130e674c4
commit
9ac0ca10f3
4 changed files with 93 additions and 73 deletions
|
@ -338,20 +338,6 @@ void FeedView::paintEvent(QPaintEvent* event)
|
|||
drawDateDevider(option.rect.bottom(), lastDate, painter);
|
||||
}
|
||||
lastDate = currentDate;
|
||||
|
||||
|
||||
if ((option.rect.y() < 1) || (index.row() == m->rowCount() - 1)) {
|
||||
drawAvatar(index, option, painter);
|
||||
} else {
|
||||
QString mySender = index.data(Models::MessageFeed::Sender).toString();
|
||||
QModelIndex prevIndex = m->index(index.row() + 1, 0, rootIndex());
|
||||
if (
|
||||
(prevIndex.data(Models::MessageFeed::Sender).toString() != mySender) ||
|
||||
(prevIndex.data(Models::MessageFeed::Date).toDateTime().daysTo(currentDate) != 0)
|
||||
) {
|
||||
drawAvatar(index, option, painter);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!lastDate.isNull() && inZone) { //if after drawing all messages there is still space
|
||||
drawDateDevider(option.rect.bottom(), lastDate, painter);
|
||||
|
@ -374,40 +360,6 @@ void FeedView::drawDateDevider(int top, const QDateTime& date, QPainter& painter
|
|||
painter.restore();
|
||||
}
|
||||
|
||||
void FeedView::drawAvatar(const QModelIndex& index, const QStyleOptionViewItem& option, QPainter& painter)
|
||||
{
|
||||
int currentRow = index.row();
|
||||
int y = option.rect.y();
|
||||
bool firstAttempt = true;
|
||||
QString mySender = index.data(Models::MessageFeed::Sender).toString();
|
||||
QDateTime currentDate = index.data(Models::MessageFeed::Date).toDateTime();
|
||||
QIcon icon(index.data(Models::MessageFeed::Avatar).toString());
|
||||
while (y < 0 && currentRow > 0) {
|
||||
QRect rect;
|
||||
if (firstAttempt) {
|
||||
firstAttempt = false;
|
||||
rect = option.rect;
|
||||
} else {
|
||||
QModelIndex ci = model()->index(currentRow, 0, rootIndex());
|
||||
if (
|
||||
(ci.data(Models::MessageFeed::Sender).toString() != mySender) ||
|
||||
(ci.data(Models::MessageFeed::Date).toDateTime().daysTo(currentDate) != 0)
|
||||
) {
|
||||
break;
|
||||
}
|
||||
rect = visualRect(ci);
|
||||
}
|
||||
y = std::min(0, rect.bottom() - margin - avatarHeight);
|
||||
--currentRow;
|
||||
}
|
||||
if (index.data(Models::MessageFeed::SentByMe).toBool()) {
|
||||
painter.drawPixmap(option.rect.width() - avatarHeight - margin, y + halfMargin, icon.pixmap(avatarHeight, avatarHeight));
|
||||
} else {
|
||||
painter.drawPixmap(margin, y + halfMargin, icon.pixmap(avatarHeight, avatarHeight));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void FeedView::verticalScrollbarValueChanged(int value)
|
||||
{
|
||||
vo = verticalScrollBar()->maximum() - value;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue