[network/ruqola/2.8] src/widgets: Fix icon position when scale != 100
Laurent Montel <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit d13a410bb1a46ac1f91f691105e3c6c9b687c6a5 by Laurent Montel.
Committed on 31/07/2026 at 11:43.
Pushed by mlaurent into branch '2.8'.
Fix icon position when scale != 100
(cherry picked from commit 0db0d28f289ef30f1585b5b65eb174b99c51b191)
M +10 -8 src/widgets/common/teamroomcompletiondelegate.cpp
M +12 -11 src/widgets/common/userandchannelcompletiondelegate.cpp
M +12 -11 src/widgets/common/usercompletiondelegate.cpp
M +12 -11 src/widgets/common/usersforroommodeldelegate.cpp
M +10 -8 src/widgets/dialogs/showbannedusersdelegate.cpp
M +10 -8 src/widgets/teams/teamchannelsdelegate.cpp
https://invent.kde.org/network/ruqola/-/commit/d13a410bb1a46ac1f91f691105e3c6c9b687c6a5
diff --git a/src/widgets/common/teamroomcompletiondelegate.cpp b/src/widgets/common/teamroomcompletiondelegate.cpp
index 18e43385a0..5c37cc5d8e 100644
--- a/src/widgets/common/teamroomcompletiondelegate.cpp
+++ b/src/widgets/common/teamroomcompletiondelegate.cpp
@@ -35,17 +35,19 @@ void TeamRoomCompletionDelegate::paint(QPainter *painter, const QStyleOptionView
boldFont.setBold(true);
painter->setFont(boldFont);
- int xPos = -1;
- QFontMetrics fontMetrics(boldFont);
- const int defaultCharHeight = option.rect.y() + fontMetrics.ascent();
+ const QFontMetrics fontMetrics(boldFont);
+ const int iconSize = option.rect.height() - 4;
+ const int iconY = option.rect.y() + 2;
+ const int defaultCharHeight = option.rect.y() + (option.rect.height() - fontMetrics.height()) / 2 + fontMetrics.ascent();
+
+ int xPos = 0;
const Utils::AvatarInfo info = index.data(TeamRoomCompleterModel::AvatarInfo).value<Utils::AvatarInfo>();
if (info.isValid()) {
- const QRect displayRect(margin, option.rect.y(), option.rect.height(), option.rect.height());
- const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, option.rect.height());
+ const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, iconSize);
if (!pix.isNull()) {
- drawDecoration(painter, option, displayRect, pix);
+ painter->drawPixmap(margin, iconY, iconSize, iconSize, pix);
}
- xPos = margin + option.rect.height();
+ xPos = margin + iconSize;
}
const QString name = index.data(TeamRoomCompleterModel::TeamName).toString();
@@ -61,7 +63,7 @@ void TeamRoomCompletionDelegate::setRocketChatAccount(RocketChatAccount *newRock
QSize TeamRoomCompletionDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
const QSize size = QItemDelegate::sizeHint(option, index);
- return size + QSize(0, 4 * option.widget->devicePixelRatioF());
+ return size + QSize(0, 4);
}
#include "moc_teamroomcompletiondelegate.cpp"
diff --git a/src/widgets/common/userandchannelcompletiondelegate.cpp b/src/widgets/common/userandchannelcompletiondelegate.cpp
index 08ed825422..9a6f58a7ba 100644
--- a/src/widgets/common/userandchannelcompletiondelegate.cpp
+++ b/src/widgets/common/userandchannelcompletiondelegate.cpp
@@ -39,29 +39,30 @@ void UserAndChannelCompletionDelegate::paint(QPainter *painter, const QStyleOpti
boldFont.setBold(true);
painter->setFont(boldFont);
- int xPos = -1;
+ QFontMetrics fontMetrics(boldFont);
+ const int iconSize = option.rect.height() - 4;
+ const int iconY = option.rect.y() + 2;
+
+ int xPos = 0;
const Utils::AvatarInfo info = index.data(InputCompleterModel::AvatarInfo).value<Utils::AvatarInfo>();
if (info.isValid()) {
- const QRect displayRect(margin, option.rect.y(), option.rect.height(), option.rect.height());
- const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, option.rect.height());
+ const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, iconSize);
if (!pix.isNull()) {
- drawDecoration(painter, option, displayRect, pix);
+ painter->drawPixmap(margin, iconY, iconSize, iconSize, pix);
}
- xPos = margin + option.rect.height();
+ xPos = margin + iconSize;
}
const QIcon iconStatus = index.data(InputCompleterModel::IconStatus).value<QIcon>();
if (!iconStatus.isNull()) {
- const QRect displayRect(margin + xPos, option.rect.y(), option.rect.height(), option.rect.height());
- drawDecoration(painter, option, displayRect, iconStatus.pixmap(option.rect.height(), option.rect.height()));
- xPos += margin + option.rect.height();
+ painter->drawPixmap(margin + xPos, iconY, iconSize, iconSize, iconStatus.pixmap(iconSize, iconSize));
+ xPos += margin + iconSize;
}
- QFontMetrics fontMetrics(boldFont);
const QString name = index.data(InputCompleterModel::DisplayName).toString();
const QString userName = index.data(InputCompleterModel::UserName).toString();
int nameWidth = -1;
- const int defaultCharHeight = option.rect.y() + fontMetrics.ascent();
+ const int defaultCharHeight = option.rect.y() + (option.rect.height() - fontMetrics.height()) / 2 + fontMetrics.ascent();
if (name.isEmpty()) {
nameWidth = fontMetrics.horizontalAdvance(userName);
painter->drawText(xPos + margin, defaultCharHeight, userName);
@@ -107,7 +108,7 @@ void UserAndChannelCompletionDelegate::setRocketChatAccount(RocketChatAccount *n
QSize UserAndChannelCompletionDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
const QSize size = QItemDelegate::sizeHint(option, index);
- return size + QSize(0, 4 * option.widget->devicePixelRatioF());
+ return size + QSize(0, 4);
}
#include "moc_userandchannelcompletiondelegate.cpp"
diff --git a/src/widgets/common/usercompletiondelegate.cpp b/src/widgets/common/usercompletiondelegate.cpp
index 9c1c74e1d1..3c0d140326 100644
--- a/src/widgets/common/usercompletiondelegate.cpp
+++ b/src/widgets/common/usercompletiondelegate.cpp
@@ -37,28 +37,29 @@ void UserCompletionDelegate::paint(QPainter *painter, const QStyleOptionViewItem
boldFont.setBold(true);
painter->setFont(boldFont);
- int xPos = -1;
+ QFontMetrics fontMetrics(boldFont);
+ const int iconSize = option.rect.height() - 4;
+ const int iconY = option.rect.y() + 2;
+
+ int xPos = 0;
const Utils::AvatarInfo info = index.data(UserCompleterModel::AvatarInfo).value<Utils::AvatarInfo>();
if (info.isValid()) {
- const QRect displayRect(margin, option.rect.y(), option.rect.height(), option.rect.height());
- const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, option.rect.height());
+ const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, iconSize);
if (!pix.isNull()) {
- drawDecoration(painter, option, displayRect, pix);
+ painter->drawPixmap(margin, iconY, iconSize, iconSize, pix);
}
- xPos = margin + option.rect.height();
+ xPos = margin + iconSize;
}
const QIcon iconStatus = index.data(UserCompleterModel::UserIconStatus).value<QIcon>();
if (!iconStatus.isNull()) {
- const QRect displayRect(margin + xPos, option.rect.y(), option.rect.height(), option.rect.height());
- drawDecoration(painter, option, displayRect, iconStatus.pixmap(option.rect.height(), option.rect.height()));
- xPos += margin + option.rect.height();
+ painter->drawPixmap(margin + xPos, iconY, iconSize, iconSize, iconStatus.pixmap(iconSize, iconSize));
+ xPos += margin + iconSize;
}
- QFontMetrics fontMetrics(boldFont);
const QString name = index.data(UserCompleterModel::DisplayName).toString();
const QString userName = index.data(UserCompleterModel::UserName).toString();
- const int defaultCharHeight = option.rect.y() + fontMetrics.ascent();
+ const int defaultCharHeight = option.rect.y() + (option.rect.height() - fontMetrics.height()) / 2 + fontMetrics.ascent();
if (name.isEmpty()) {
painter->drawText(xPos + margin, defaultCharHeight, userName);
} else {
@@ -81,7 +82,7 @@ void UserCompletionDelegate::setRocketChatAccount(RocketChatAccount *newRocketCh
QSize UserCompletionDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
const QSize size = QItemDelegate::sizeHint(option, index);
- return size + QSize(0, 4 * option.widget->devicePixelRatioF());
+ return size + QSize(0, 4);
}
#include "moc_usercompletiondelegate.cpp"
diff --git a/src/widgets/common/usersforroommodeldelegate.cpp b/src/widgets/common/usersforroommodeldelegate.cpp
index dbde655f85..4acd4b267d 100644
--- a/src/widgets/common/usersforroommodeldelegate.cpp
+++ b/src/widgets/common/usersforroommodeldelegate.cpp
@@ -40,30 +40,31 @@ void UsersForRoomModelDelegate::paint(QPainter *painter, const QStyleOptionViewI
boldFont.setBold(true);
painter->setFont(boldFont);
- int xPos = -1;
+ const QFontMetrics fontMetrics(boldFont);
+ const int iconSize = option.rect.height() - 4;
+ const int iconY = option.rect.y() + 2;
+
+ int xPos = 0;
const Utils::AvatarInfo info = index.data(UsersForRoomModel::AvatarInfo).value<Utils::AvatarInfo>();
if (info.isValid()) {
- const QRect displayRect(margin, option.rect.y(), option.rect.height(), option.rect.height());
- const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, option.rect.height());
+ const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, iconSize);
if (!pix.isNull()) {
- drawDecoration(painter, option, displayRect, pix);
+ painter->drawPixmap(margin, iconY, iconSize, iconSize, pix);
}
// Add extra size even if we don't have avatar pix
- xPos = margin + option.rect.height();
+ xPos = margin + iconSize;
}
const QString iconStatusStr = index.data(UsersForRoomModel::IconStatus).toString();
if (!iconStatusStr.isEmpty()) {
const QIcon iconStatus = QIcon::fromTheme(iconStatusStr);
- const QRect displayRect(margin + xPos, option.rect.y(), option.rect.height(), option.rect.height());
- drawDecoration(painter, option, displayRect, iconStatus.pixmap(option.rect.height(), option.rect.height()));
- xPos += margin + option.rect.height();
+ painter->drawPixmap(margin + xPos, iconY, iconSize, iconSize, iconStatus.pixmap(iconSize, iconSize));
+ xPos += margin + iconSize;
}
- const QFontMetrics fontMetrics(boldFont);
const QString name = index.data(UsersForRoomModel::Name).toString();
const QString userName = index.data(UsersForRoomModel::UserName).toString();
- const int defaultCharHeight = option.rect.y() + fontMetrics.ascent();
+ const int defaultCharHeight = option.rect.y() + (option.rect.height() - fontMetrics.height()) / 2 + fontMetrics.ascent();
if (name.isEmpty()) {
painter->drawText(xPos + margin, defaultCharHeight, userName);
} else {
@@ -86,7 +87,7 @@ void UsersForRoomModelDelegate::setRocketChatAccount(RocketChatAccount *newRocke
QSize UsersForRoomModelDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
const QSize size = QItemDelegate::sizeHint(option, index);
- return size + QSize(0, 4 * option.widget->devicePixelRatioF());
+ return size + QSize(0, 4);
}
bool UsersForRoomModelDelegate::helpEvent(QHelpEvent *helpEvent, QAbstractItemView *view, const QStyleOptionViewItem &, const QModelIndex &index)
diff --git a/src/widgets/dialogs/showbannedusersdelegate.cpp b/src/widgets/dialogs/showbannedusersdelegate.cpp
index 8977e6a8e3..1e03d91456 100644
--- a/src/widgets/dialogs/showbannedusersdelegate.cpp
+++ b/src/widgets/dialogs/showbannedusersdelegate.cpp
@@ -35,22 +35,24 @@ void ShowBannedUsersDelegate::paint(QPainter *painter, const QStyleOptionViewIte
boldFont.setBold(true);
painter->setFont(boldFont);
- int xPos = -1;
+ const QFontMetrics fontMetrics(boldFont);
+ const int iconSize = option.rect.height() - 4;
+ const int iconY = option.rect.y() + 2;
+
+ int xPos = 0;
const Utils::AvatarInfo info = index.data(BannedUsersModel::AvatarInfo).value<Utils::AvatarInfo>();
if (info.isValid()) {
- const QRect displayRect(margin, option.rect.y(), option.rect.height(), option.rect.height());
- const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, option.rect.height());
+ const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, iconSize);
if (!pix.isNull()) {
- drawDecoration(painter, option, displayRect, pix);
+ painter->drawPixmap(margin, iconY, iconSize, iconSize, pix);
}
// Add extra size even if we don't have avatar pix
- xPos = margin + option.rect.height();
+ xPos = margin + iconSize;
}
- const QFontMetrics fontMetrics(boldFont);
const QString name = index.data(BannedUsersModel::Name).toString();
const QString userName = index.data(BannedUsersModel::UserName).toString();
- const int defaultCharHeight = option.rect.y() + fontMetrics.ascent();
+ const int defaultCharHeight = option.rect.y() + (option.rect.height() - fontMetrics.height()) / 2 + fontMetrics.ascent();
if (name.isEmpty()) {
painter->drawText(xPos + margin, defaultCharHeight, userName);
} else {
@@ -73,7 +75,7 @@ void ShowBannedUsersDelegate::setRocketChatAccount(RocketChatAccount *newRocketC
QSize ShowBannedUsersDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
const QSize size = QItemDelegate::sizeHint(option, index);
- return size + QSize(0, 4 * option.widget->devicePixelRatioF());
+ return size + QSize(0, 4);
}
#include "moc_showbannedusersdelegate.cpp"
diff --git a/src/widgets/teams/teamchannelsdelegate.cpp b/src/widgets/teams/teamchannelsdelegate.cpp
index 4292a4fe0e..dba45d5bda 100644
--- a/src/widgets/teams/teamchannelsdelegate.cpp
+++ b/src/widgets/teams/teamchannelsdelegate.cpp
@@ -39,21 +39,23 @@ void TeamChannelsDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
boldFont.setBold(true);
painter->setFont(boldFont);
- int xPos = -1;
+ const QFontMetrics fontMetrics(boldFont);
+ const int iconSize = option.rect.height() - 4;
+ const int iconY = option.rect.y() + 2;
+
+ int xPos = 0;
const Utils::AvatarInfo info = index.data(TeamRoomsModel::AvatarInfo).value<Utils::AvatarInfo>();
if (info.isValid()) {
- const QRect displayRect(margin, option.rect.y(), option.rect.height(), option.rect.height());
- const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, option.rect.height());
+ const QPixmap pix = mAvatarCacheManager->makeRoundedAvatarPixmap(option.widget, info, iconSize);
if (!pix.isNull()) {
- drawDecoration(painter, option, displayRect, pix);
+ painter->drawPixmap(margin, iconY, iconSize, iconSize, pix);
}
// Add extra size even if we don't have avatar pix
- xPos = margin + option.rect.height();
+ xPos = margin + iconSize;
}
- const QFontMetrics fontMetrics(boldFont);
const QString name = index.data(TeamRoomsModel::Name).toString();
- const int defaultCharHeight = option.rect.y() + fontMetrics.ascent();
+ const int defaultCharHeight = option.rect.y() + (option.rect.height() - fontMetrics.height()) / 2 + fontMetrics.ascent();
painter->drawText(xPos + margin, defaultCharHeight, name);
painter->setFont(oldFont);
}
@@ -61,7 +63,7 @@ void TeamChannelsDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
QSize TeamChannelsDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
const QSize size = QItemDelegate::sizeHint(option, index);
- return size + QSize(0, 4 * option.widget->devicePixelRatioF());
+ return size + QSize(0, 4);
}
#include "moc_teamchannelsdelegate.cpp"