47
47
font.setBold(true);
48
48
const QFontMetrics fontMetrics = QFontMetrics(font);
49
49
const int height = categoryHeight(index, option);
50
const bool leftToRight = painter->layoutDirection() == Qt::LeftToRight;
51
52
//BEGIN: decoration gradient
53
54
QPainterPath path(optRect.bottomLeft());
54
56
path.lineTo(QPoint(optRect.topLeft().x(), optRect.topLeft().y() - 3));
55
57
const QPointF topLeft(optRect.topLeft());
56
58
QRectF arc(topLeft, QSizeF(4, 4));
65
67
window.setAlphaF(0.4);
67
QLinearGradient decoGradient1(optRect.topLeft(), optRect.bottomLeft());
69
QLinearGradient decoGradient1;
71
decoGradient1.setStart(optRect.topLeft());
72
decoGradient1.setFinalStop(optRect.bottomLeft());
74
decoGradient1.setStart(optRect.topRight());
75
decoGradient1.setFinalStop(optRect.bottomRight());
68
77
decoGradient1.setColorAt(0, window);
69
78
decoGradient1.setColorAt(1, Qt::transparent);
71
QLinearGradient decoGradient2(optRect.topLeft(), optRect.topRight());
80
QLinearGradient decoGradient2;
82
decoGradient2.setStart(optRect.topLeft());
83
decoGradient2.setFinalStop(optRect.topRight());
85
decoGradient2.setStart(optRect.topRight());
86
decoGradient2.setFinalStop(optRect.topLeft());
72
88
decoGradient2.setColorAt(0, Qt::transparent);
73
89
decoGradient2.setColorAt(1, base);
81
97
QRect newOptRect(optRect);
82
newOptRect.setLeft(newOptRect.left() + 1);
83
newOptRect.setTop(newOptRect.top() + 1);
100
newOptRect.translate(1, 1);
102
newOptRect.translate(-1, 1);
85
105
//BEGIN: inner top left corner
88
108
painter->setPen(option.palette.base().color());
89
const QPointF topLeft(newOptRect.topLeft());
90
QRectF arc(topLeft, QSizeF(4, 4));
91
arc.translate(0.5, 0.5);
92
painter->drawArc(arc, 1440, 1440);
111
const QPointF topLeft(newOptRect.topLeft());
112
arc = QRectF(topLeft, QSizeF(4, 4));
113
arc.translate(0.5, 0.5);
114
painter->drawArc(arc, 1440, 1440);
116
QPointF topRight(newOptRect.topRight());
118
arc = QRectF(topRight, QSizeF(4, 4));
119
arc.translate(-0.5, 0.5);
120
painter->drawArc(arc, 0, 1440);
93
122
painter->restore();
95
124
//END: inner top left corner
97
126
//BEGIN: inner left vertical line
99
QPoint start(newOptRect.topLeft());
129
QPoint verticalGradBottom;
131
start = newOptRect.topLeft();
132
verticalGradBottom = newOptRect.topLeft();
134
start = newOptRect.topRight();
135
verticalGradBottom = newOptRect.topRight();
101
QPoint verticalGradBottom(newOptRect.topLeft());
102
138
verticalGradBottom.ry() += newOptRect.height() - 3;
103
139
QLinearGradient gradient(start, verticalGradBottom);
104
140
gradient.setColorAt(0, option.palette.base().color());
110
146
//BEGIN: inner horizontal line
112
QPoint start(newOptRect.topLeft());
114
QPoint horizontalGradTop(newOptRect.topLeft());
115
horizontalGradTop.rx() += newOptRect.width() - 3;
149
QPoint horizontalGradTop;
151
start = newOptRect.topLeft();
152
horizontalGradTop = newOptRect.topLeft();
154
horizontalGradTop.rx() += newOptRect.width() - 3;
156
start = newOptRect.topRight();
157
horizontalGradTop = newOptRect.topRight();
159
horizontalGradTop.rx() -= newOptRect.width() - 3;
116
161
QLinearGradient gradient(start, horizontalGradTop);
117
162
gradient.setColorAt(0, option.palette.base().color());
118
163
gradient.setColorAt(1, Qt::transparent);
119
painter->fillRect(QRect(start, QSize(newOptRect.width() - 3, 1)), gradient);
166
rectSize = QSize(newOptRect.width() - 3, 1);
168
rectSize = QSize(-newOptRect.width() + 3, 1);
170
painter->fillRect(QRect(start, rectSize), gradient);
121
172
//END: inner horizontal line
130
181
painter->setPen(outlineColor);
131
const QPointF topLeft(optRect.topLeft());
132
QRectF arc(topLeft, QSizeF(4, 4));
133
arc.translate(0.5, 0.5);
134
painter->drawArc(arc, 1440, 1440);
184
const QPointF topLeft(optRect.topLeft());
185
arc = QRectF(topLeft, QSizeF(4, 4));
186
arc.translate(0.5, 0.5);
187
painter->drawArc(arc, 1440, 1440);
189
QPointF topRight(optRect.topRight());
191
arc = QRectF(topRight, QSizeF(4, 4));
192
arc.translate(-0.5, 0.5);
193
painter->drawArc(arc, 0, 1440);
135
195
painter->restore();
137
197
//END: top left corner
139
199
//BEGIN: left vertical line
141
QPoint start(optRect.topLeft());
202
QPoint verticalGradBottom;
204
start = optRect.topLeft();
205
verticalGradBottom = optRect.topLeft();
207
start = optRect.topRight();
208
verticalGradBottom = optRect.topRight();
143
QPoint verticalGradBottom(optRect.topLeft());
144
211
verticalGradBottom.ry() += optRect.height() - 3;
145
212
QLinearGradient gradient(start, verticalGradBottom);
146
213
gradient.setColorAt(0, outlineColor);
152
219
//BEGIN: horizontal line
154
QPoint start(optRect.topLeft());
156
QPoint horizontalGradTop(optRect.topLeft());
157
horizontalGradTop.rx() += optRect.width() - 3;
222
QPoint horizontalGradTop;
224
start = optRect.topLeft();
225
horizontalGradTop = optRect.topLeft();
227
horizontalGradTop.rx() += optRect.width() - 3;
229
start = optRect.topRight();
230
horizontalGradTop = optRect.topRight();
232
horizontalGradTop.rx() -= optRect.width() - 3;
158
234
QLinearGradient gradient(start, horizontalGradTop);
159
235
gradient.setColorAt(0, outlineColor);
160
236
gradient.setColorAt(1, option.palette.base().color());
161
painter->fillRect(QRect(start, QSize(optRect.width() - 3, 1)), gradient);
239
rectSize = QSize(optRect.width() - 3, 1);
241
rectSize = QSize(-optRect.width() + 3, 1);
243
painter->fillRect(QRect(start, rectSize), gradient);
163
245
//END: horizontal line
165
247
//BEGIN: draw text
167
249
const QString category = index.model()->data(index, KCategorizedSortFilterProxyModel::CategoryDisplayRole).toString();
168
QRect textRect = QRect(option.rect.topLeft(), QSize(option.rect.width(), height));
250
QRect textRect = QRect(option.rect.topLeft(), QSize(option.rect.width() - 2 - 3 - 3, height));
169
251
textRect.setTop(textRect.top() + 2 + 3 /* corner */);
170
252
textRect.setLeft(textRect.left() + 2 + 3 /* corner */ + 3 /* a bit of margin */);