1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
diff --git a/src/contactlistviewdelegate.cpp b/src/contactlistviewdelegate.cpp
index b000b08..56bfbca 100755
--- a/src/contactlistviewdelegate.cpp
+++ b/src/contactlistviewdelegate.cpp
@@ -192,8 +192,7 @@ void ContactListViewDelegate::drawText(QPainter* painter, const QStyleOptionView
}
QString txt = text;
- const bool isElided = rect.width() < option.fontMetrics.width(text);
- if (isElided) {
+ if (rect.width() < option.fontMetrics.width(text)) {
#ifndef YAPSI
txt = option.fontMetrics.elidedText(text, option.textElideMode, rect.width());
#endif
@@ -207,12 +206,9 @@ void ContactListViewDelegate::drawText(QPainter* painter, const QStyleOptionView
// painter->restore();
painter->setFont(option.font);
- QTextOption to;
- if (option.direction == Qt::RightToLeft)
- to.setAlignment(Qt::AlignRight);
- painter->drawText(rect, txt, to);
+ painter->drawText(rect.x(), rect.y() + option.fontMetrics.ascent(), txt);
- if (isElided) {
+ if (rect.width() < option.fontMetrics.width(text)) {
painter->restore();
// FIXME
#ifdef YAPSI
diff --git a/src/psicontactlistviewdelegate.cpp b/src/psicontactlistviewdelegate.cpp
index ab13ffa..5dee4db 100644
--- a/src/psicontactlistviewdelegate.cpp
+++ b/src/psicontactlistviewdelegate.cpp
@@ -121,41 +121,19 @@ QSize PsiContactListViewDelegate::sizeHint(const QStyleOptionViewItem& /*option*
return QSize(0, 0);
}
-static QRect relativeRect(const QStyleOption& option,
- const QSize &size,
- const QRect& prevRect,
- int padding = 0)
-{
- QRect r = option.rect;
- const bool isRTL = option.direction == Qt::RightToLeft;
- if (isRTL) {
- if (prevRect.isValid())
- r.setRight(prevRect.left() - padding);
- if (size.isValid()) {
- r.setLeft(r.right() - size.width() + 1);
- r.setBottom(r.top() + size.height() - 1);
- r.translate(-1, 1);
- }
- } else {
- if (prevRect.isValid())
- r.setLeft(prevRect.right() + padding);
- if (size.isValid()) {
- r.setSize(size);
- r.translate(1, 1);
- }
- }
- return r;
-}
-
void PsiContactListViewDelegate::drawContact(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const
{
drawBackground(painter, option, index);
+ QRect r = option.rect;
+
+ QRect avatarRect(r);
const QPixmap statusPixmap = this->statusPixmap(index);
- const QSize pixmapSize = statusPixmap.size();
- const QRect avatarRect = relativeRect(option, pixmapSize, QRect());
+ avatarRect.translate(1, 1);
+ avatarRect.setSize(statusPixmap.size());
painter->drawPixmap(avatarRect.topLeft(), statusPixmap);
- QRect r = relativeRect(option, QSize(), avatarRect, 3);
+
+ r.setLeft(avatarRect.right() + 3);
QColor textColor;
if(index.data(ContactListModel::IsAnimRole).toBool()) {
@@ -262,11 +240,13 @@ void PsiContactListViewDelegate::drawGroup(QPainter* painter, const QStyleOption
IconsetFactory::iconPtr("psi/groupOpen")->pixmap() :
IconsetFactory::iconPtr("psi/groupClosed")->pixmap();
- const QSize pixmapSize = pixmap.size();
- QRect pixmapRect = relativeRect(option, pixmapSize, QRect());
- r = relativeRect(option, QSize(), pixmapRect, 3);
+ QRect pixmapRect(r);
+ pixmapRect.translate(1, 1);
+ pixmapRect.setSize(pixmap.size());
painter->drawPixmap(pixmapRect.topLeft(), pixmap);
+ r.setLeft(pixmapRect.right() + 3);
+
QString text = index.data(Qt::ToolTipRole).toString();
drawText(painter, o, r, text, index);
@@ -291,27 +271,35 @@ void PsiContactListViewDelegate::drawAccount(QPainter* painter, const QStyleOpti
drawBackground(painter, o, index);
+ QRect r = option.rect;
if (outlinedGroup_) {
painter->setPen(QPen(foreground));
- painter->drawRect(option.rect);
+ painter->drawRect(r);
}
+ QRect avatarRect(r);
const QPixmap statusPixmap = this->statusPixmap(index);
- const QSize pixmapSize = statusPixmap.size();
- const QRect avatarRect = relativeRect(o, pixmapSize, QRect());
- QString text = nameText(o, index);
- QRect r = relativeRect(o, QSize(o.fontMetrics.width(text), o.rect.height()), avatarRect, 3);
+ avatarRect.translate(1, 1);
+ avatarRect.setSize(statusPixmap.size());
painter->drawPixmap(avatarRect.topLeft(), statusPixmap);
+ r.setLeft(avatarRect.right() + 3);
+
+ QString text = nameText(o, index);
+ r.setRight(r.left() + o.fontMetrics.width(text));
drawText(painter, o, r, text, index);
QPixmap sslPixmap = index.data(ContactListModel::UsingSSLRole).toBool() ?
IconsetFactory::iconPixmap("psi/cryptoYes") :
IconsetFactory::iconPixmap("psi/cryptoNo");
- const QSize sslPixmapSize = statusPixmap.size();
- QRect sslRect = relativeRect(o, sslPixmapSize, r, 3);
+ QRect sslRect(option.rect);
+ sslRect.setLeft(r.right() + 3);
+ sslRect.translate(1, 1);
+ sslRect.setSize(sslPixmap.size());
painter->drawPixmap(sslRect.topLeft(), sslPixmap);
- r = relativeRect(option, QSize(), sslRect, 3);
+
+ r.setLeft(sslRect.right() + 3);
+ r.setRight(option.rect.right());
text = QString("(%1/%2)")
.arg(index.data(ContactListModel::OnlineContactsRole).toInt())
|