Optimize Folder::paintUserpic.

This commit is contained in:
John Preston 2019-06-17 15:26:08 +02:00
parent 734ecc070b
commit 034bee8fc3
2 changed files with 40 additions and 15 deletions

View File

@ -220,13 +220,7 @@ void Folder::paintUserpic(
int x,
int y,
int size) const {
paintUserpic(
p,
x,
y,
size,
st::historyPeerArchiveUserpicBg,
st::historyPeerUserpicFg);
paintUserpic(p, x, y, size, nullptr, nullptr);
}
void Folder::paintUserpic(
@ -236,24 +230,47 @@ void Folder::paintUserpic(
int size,
const style::color &bg,
const style::color &fg) const {
paintUserpic(p, x, y, size, &bg, &fg);
}
void Folder::paintUserpic(
Painter &p,
int x,
int y,
int size,
const style::color *overrideBg,
const style::color *overrideFg) const {
p.setPen(Qt::NoPen);
p.setBrush(bg);
p.setBrush(overrideBg ? *overrideBg : st::historyPeerArchiveUserpicBg);
{
PainterHighQualityEnabler hq(p);
p.drawEllipse(x, y, size, size);
}
if (size == st::dialogsPhotoSize) {
st::dialogsArchiveUserpic.paintInCenter(p, { x, y, size, size }, fg->c);
const auto rect = QRect{ x, y, size, size };
if (overrideFg) {
st::dialogsArchiveUserpic.paintInCenter(
p,
rect,
(*overrideFg)->c);
} else {
st::dialogsArchiveUserpic.paintInCenter(p, rect);
}
} else {
p.save();
const auto ratio = size / float64(st::dialogsPhotoSize);
p.translate(x + size / 2., y + size / 2.);
p.scale(ratio, ratio);
const auto skip = st::dialogsPhotoSize;
st::dialogsArchiveUserpic.paintInCenter(
p,
{ -skip, -skip, 2 * skip, 2 * skip },
fg->c);
const auto rect = QRect{ -skip, -skip, 2 * skip, 2 * skip };
if (overrideFg) {
st::dialogsArchiveUserpic.paintInCenter(
p,
rect,
(*overrideFg)->c);
} else {
st::dialogsArchiveUserpic.paintInCenter(p, rect);
}
p.restore();
}
//const auto small = (size - st::lineWidth) / 2; // #feed

View File

@ -80,8 +80,8 @@ public:
int x,
int y,
int size,
const style::color &bg,
const style::color &fg) const;
const style::color &overrideBg,
const style::color &overrideFg) const;
bool chatsListLoaded() const;
void setChatsListLoaded(bool loaded = true);
@ -99,6 +99,14 @@ private:
void reorderLastHistories();
void finalizeCloudUnread();
void paintUserpic(
Painter &p,
int x,
int y,
int size,
const style::color *overrideBg,
const style::color *overrideFg) const;
FolderId _id = 0;
Dialogs::MainList _chatsList;