Skip to content
Snippets Groups Projects
Commit d4d73da8 authored by Sébastien Blin's avatar Sébastien Blin
Browse files

utils: improve conversationAvatar for swarm

Change-Id: I59383870785900a8413bc15377d6de427f48384b
parent 7139eecc
No related branches found
No related tags found
No related merge requests found
......@@ -396,10 +396,23 @@ Utils::conversationAvatar(LRCInstance* instance,
auto& accInfo = instance->accountModel().getAccountInfo(
accountId.isEmpty() ? instance->get_currentAccountId() : accountId);
auto* convModel = accInfo.conversationModel.get();
Q_FOREACH (const auto peerUri, convModel->peersForConversation(convId)) {
auto peerAvatar = Utils::contactPhoto(instance, peerUri, size);
auto members = convModel->peersForConversation(convId);
if (members.size() < 1)
return avatar;
if (members.size() == 1) {
// Only member in the swarm or 1:1, draw only peer's avatar
auto peerAvatar = Utils::contactPhoto(instance, members[0], size);
painter.drawImage(avatar.rect(), peerAvatar);
return avatar;
}
// Else, combine avatars
auto idx = 0;
auto peerAAvatar = Utils::contactPhoto(instance, members[0], size);
auto peerBAvatar = Utils::contactPhoto(instance, members[1], size);
peerAAvatar = Utils::halfCrop(peerAAvatar, true);
peerBAvatar = Utils::halfCrop(peerBAvatar, false);
painter.drawImage(avatar.rect(), peerAAvatar);
painter.drawImage(avatar.rect(), peerBAvatar);
} catch (const std::exception& e) {
qDebug() << Q_FUNC_INFO << e.what();
}
......@@ -453,6 +466,23 @@ Utils::getCirclePhoto(const QImage original, int sizePhoto)
return target;
}
QImage
Utils::halfCrop(const QImage original, bool leftSide)
{
auto width = original.size().width();
auto height = original.size().height();
QImage target(width, height, QImage::Format_ARGB32_Premultiplied);
target.fill(Qt::transparent);
QPainter painter(&target);
painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
painter.setBrush(QBrush(Qt::white));
painter.drawRect(leftSide ? 0 : width / 2 + 2, 0, width / 2 - (leftSide ? 2 : 0), height);
painter.setCompositionMode(QPainter::CompositionMode_SourceIn);
painter.drawImage(0, 0, original, 0, 0);
return target;
}
QSize
Utils::getRealSize(QScreen* screen)
{
......
......@@ -95,6 +95,7 @@ QImage conversationAvatar(LRCInstance* instance,
const QSize& size = defaultAvatarSize,
const QString& accountId = {});
QImage getCirclePhoto(const QImage original, int sizePhoto);
QImage halfCrop(const QImage original, bool leftSide);
QColor getAvatarColor(const QString& canonicalUri);
QImage fallbackAvatar(const QString& canonicalUriStr,
const QString& letterStr = {},
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment