| 1503 | } |
| 1504 | |
| 1505 | void StickersBox::Inner::paintRowThumbnail( |
| 1506 | Painter &p, |
| 1507 | not_null<Row*> row, |
| 1508 | int left) { |
| 1509 | const auto origin = Data::FileOriginStickerSet( |
| 1510 | row->set->id, |
| 1511 | row->set->accessHash); |
| 1512 | if (row->set->hasThumbnail()) { |
| 1513 | if (!row->thumbnailMedia) { |
| 1514 | row->thumbnailMedia = row->set->createThumbnailView(); |
| 1515 | row->set->loadThumbnail(); |
| 1516 | } |
| 1517 | } else if (row->sticker) { |
| 1518 | if (!row->stickerMedia) { |
| 1519 | row->stickerMedia = row->sticker->createMediaView(); |
| 1520 | row->stickerMedia->thumbnailWanted(origin); |
| 1521 | } |
| 1522 | } |
| 1523 | validateAnimation(row); |
| 1524 | const auto thumb = row->thumbnailMedia |
| 1525 | ? row->thumbnailMedia->image() |
| 1526 | : row->stickerMedia |
| 1527 | ? row->stickerMedia->thumbnail() |
| 1528 | : nullptr; |
| 1529 | const auto paused = _show->paused(ChatHelpers::PauseReason::Layer); |
| 1530 | const auto x = left + (_st.photoSize - row->pixw) / 2; |
| 1531 | const auto y = _st.photoPosition.y() + (_st.photoSize - row->pixh) / 2; |
| 1532 | if (row->lottie && row->lottie->ready()) { |
| 1533 | const auto frame = row->lottie->frame(); |
| 1534 | const auto size = frame.size() / style::DevicePixelRatio(); |
| 1535 | p.drawImage( |
| 1536 | QRect( |
| 1537 | left + (_st.photoSize - size.width()) / 2, |
| 1538 | _st.photoPosition.y() + (_st.photoSize - size.height()) / 2, |
| 1539 | size.width(), |
| 1540 | size.height()), |
| 1541 | frame); |
| 1542 | if (!paused) { |
| 1543 | row->lottie->markFrameShown(); |
| 1544 | } |
| 1545 | } else if (row->webm && row->webm->started()) { |
| 1546 | p.drawImage( |
| 1547 | x, |
| 1548 | y, |
| 1549 | row->webm->current( |
| 1550 | { .frame = { row->pixw, row->pixh }, .keepAlpha = true }, |
| 1551 | paused ? 0 : crl::now())); |
| 1552 | } else if (thumb) { |
| 1553 | p.drawPixmapLeft( |
| 1554 | x, |
| 1555 | y, |
| 1556 | width(), |
| 1557 | thumb->pix(row->pixw, row->pixh)); |
| 1558 | } |
| 1559 | } |
| 1560 | |
| 1561 | void StickersBox::Inner::validateLottieAnimation(not_null<Row*> row) { |
| 1562 | if (row->lottie |
nothing calls this directly
no test coverage detected