From 3679c59d32a65f93ad404698bdaa9a16bdd0c28a Mon Sep 17 00:00:00 2001 From: Tobias Markmann Date: Mon, 25 Apr 2016 20:39:44 +0200 Subject: Crop avatars to squares so they look better inside the chat view Test-Information: Tested by clearing the avatar cache and joining MUC some larger MUC rooms. All but our current default avatar look much better. Change-Id: I515adbded1114632f41d6ee4eba6602b77dad975 diff --git a/Swift/QtUI/QtScaledAvatarCache.cpp b/Swift/QtUI/QtScaledAvatarCache.cpp index 6d683bd..a0baa62 100644 --- a/Swift/QtUI/QtScaledAvatarCache.cpp +++ b/Swift/QtUI/QtScaledAvatarCache.cpp @@ -23,6 +23,26 @@ namespace Swift { QtScaledAvatarCache::QtScaledAvatarCache(int size) : size(size) { } +static QPixmap cropToBiggestCenteredSquare(const QPixmap& input) { + QPixmap squareCropped; + if (input.width() != input.height()) { + QRect centeredSquare; + if (input.width() > input.height()) { + int x = (input.width() - input.height()) / 2; + centeredSquare = QRect(x, 0, input.height(), input.height()); + } + else { + int y = (input.height() - input.width()) / 2; + centeredSquare = QRect(0, y, input.width(), input.width()); + } + squareCropped = input.copy(centeredSquare); + } + else { + squareCropped = input; + } + return squareCropped; +} + QString QtScaledAvatarCache::getScaledAvatarPath(const QString& path) { QFileInfo avatarFile(path); if (avatarFile.exists()) { @@ -36,15 +56,15 @@ QString QtScaledAvatarCache::getScaledAvatarPath(const QString& path) { if (!QFileInfo(targetFile).exists()) { QPixmap avatarPixmap; if (avatarPixmap.load(path)) { - QPixmap maskedAvatar(avatarPixmap.size()); + QPixmap squaredAvatarPixmap = cropToBiggestCenteredSquare(avatarPixmap); + QPixmap maskedAvatar(squaredAvatarPixmap.size()); maskedAvatar.fill(QColor(0, 0, 0, 0)); QPainter maskPainter(&maskedAvatar); maskPainter.setBrush(Qt::black); maskPainter.drawRoundedRect(maskedAvatar.rect(), 25.0, 25.0, Qt::RelativeSize); maskPainter.setCompositionMode(QPainter::CompositionMode_SourceIn); - maskPainter.drawPixmap(0, 0, avatarPixmap); + maskPainter.drawPixmap(0, 0, squaredAvatarPixmap); maskPainter.end(); - if (!maskedAvatar.scaled(size, size, Qt::KeepAspectRatio, Qt::SmoothTransformation).save(targetFile, "PNG")) { return path; } -- cgit v0.10.2-6-g49f6