MCPcopy Create free account
hub / github.com/TDesktop-x64/tdesktop / rowPaintIcon

Method rowPaintIcon

Telegram/SourceFiles/ui/controls/location_picker.cpp:267–341  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

265}
266
267void VenuesController::rowPaintIcon(
268 QPainter &p,
269 int x,
270 int y,
271 int size,
272 const QString &icon) {
273 auto i = _icons.find(icon);
274 if (i == end(_icons)) {
275 i = _icons.emplace(icon, VenueIcon{
276 .document = _session->data().venueIconDocument(icon),
277 }).first;
278 i->second.media = i->second.document->createMediaView();
279 i->second.document->forceToCache(true);
280 i->second.document->save({}, QString(), LoadFromCloudOrLocal, true);
281 }
282 auto &data = i->second;
283 const auto version = uint32(style::PaletteVersion());
284 const auto loaded = (!data.media || data.media->loaded()) ? 1 : 0;
285 const auto prepare = data.image.isNull()
286 || (data.iconLoaded != loaded)
287 || (data.paletteVersion != version);
288 if (prepare) {
289 const auto skip = st::pickLocationIconSkip;
290 const auto inner = size - skip * 2;
291 const auto ratio = style::DevicePixelRatio();
292
293 if (loaded && data.media) {
294 const auto bytes = base::take(data.media)->bytes();
295 data.icon = Images::Read({ .content = bytes }).image;
296 if (!data.icon.isNull()) {
297 data.icon = data.icon.scaled(
298 QSize(inner, inner) * ratio,
299 Qt::IgnoreAspectRatio,
300 Qt::SmoothTransformation);
301 if (!data.icon.isNull()) {
302 data.icon = data.icon.convertToFormat(
303 QImage::Format_ARGB32_Premultiplied);
304 }
305 }
306 }
307
308 const auto full = QSize(size, size) * ratio;
309 auto image = (data.image.size() == full)
310 ? base::take(data.image)
311 : QImage(full, QImage::Format_ARGB32_Premultiplied);
312 image.fill(Qt::transparent);
313 image.setDevicePixelRatio(ratio);
314
315 const auto bg = EmptyUserpic::UserpicColor(
316 EmptyUserpic::ColorIndex(UniqueRowIdFromString(icon)));
317 auto p = QPainter(&image);
318 auto hq = PainterHighQualityEnabler(p);
319 {
320 auto gradient = QLinearGradient(0, 0, 0, size);
321 gradient.setStops({
322 { 0., bg.color1->c },
323 { 1., bg.color2->c }
324 });

Callers 1

Calls 15

UniqueRowIdFromStringFunction · 0.85
emplaceMethod · 0.80
venueIconDocumentMethod · 0.80
forceToCacheMethod · 0.80
bytesMethod · 0.80
scaledMethod · 0.80
setStopsMethod · 0.80
QStringClass · 0.50
QImageClass · 0.50
QPainterClass · 0.50
findMethod · 0.45
dataMethod · 0.45

Tested by

no test coverage detected