void HistoryGame::refreshParentId(not_null<HistoryItem*> realParent) { if (_openl) { _openl->setMessageId(realParent->fullId()); } if (_attach) { _attach->refreshParentId(realParent); } }
HistoryPhoto::HistoryPhoto( not_null<Element*> parent, not_null<HistoryItem*> realParent, not_null<PhotoData*> photo) : HistoryFileMedia(parent, realParent) , _data(photo) , _caption(st::minPhotoSize - st::msgPadding.left() - st::msgPadding.right()) { _caption = createCaption(realParent); create(realParent->fullId()); }
HistoryVideo::HistoryVideo( not_null<Element*> parent, not_null<HistoryItem*> realParent, not_null<DocumentData*> document) : HistoryFileMedia(parent, realParent) , _data(document) , _thumbw(1) , _caption(st::minPhotoSize - st::msgPadding.left() - st::msgPadding.right()) { _caption = createCaption(realParent); setDocumentLinks(_data, realParent); setStatusSize(FileStatusSizeReady); _data->thumb->load(realParent->fullId()); }
EditCaptionBox::EditCaptionBox( QWidget*, not_null<HistoryItem*> item) : _msgId(item->fullId()) { Expects(item->media() != nullptr); Expects(item->media()->allowsEditCaption()); QSize dimensions; ImagePtr image; DocumentData *doc = nullptr; const auto media = item->media(); if (const auto photo = media->photo()) { _photo = true; dimensions = QSize(photo->full->width(), photo->full->height()); image = photo->full; } else if (const auto document = media->document()) { dimensions = document->dimensions; image = document->thumb; if (document->isAnimation()) { _animated = true; } else if (document->isVideoFile()) { _animated = true; } else { _doc = true; } doc = document; } auto caption = item->originalText().text; if (!_animated && (dimensions.isEmpty() || doc || image->isNull())) { if (image->isNull()) { _thumbw = 0; } else { int32 tw = image->width(), th = image->height(); if (tw > th) { _thumbw = (tw * st::msgFileThumbSize) / th; } else { _thumbw = st::msgFileThumbSize; } auto options = Images::Option::Smooth | Images::Option::RoundedSmall | Images::Option::RoundedTopLeft | Images::Option::RoundedTopRight | Images::Option::RoundedBottomLeft | Images::Option::RoundedBottomRight; _thumb = Images::pixmap(image->pix().toImage(), _thumbw * cIntRetinaFactor(), 0, options, st::msgFileThumbSize, st::msgFileThumbSize); } if (doc) { auto nameString = doc->isVoiceMessage() ? lang(lng_media_audio) : doc->composeNameString(); _name.setText( st::semiboldTextStyle, nameString, Ui::NameTextOptions()); _status = formatSizeText(doc->size); _statusw = qMax( _name.maxWidth(), st::normalFont->width(_status)); _isImage = doc->isImage(); _isAudio = (doc->isVoiceMessage() || doc->isAudioFile()); } } else { int32 maxW = 0, maxH = 0; if (_animated) { int32 limitW = st::sendMediaPreviewSize; int32 limitH = st::confirmMaxHeight; maxW = qMax(dimensions.width(), 1); maxH = qMax(dimensions.height(), 1); if (maxW * limitH > maxH * limitW) { if (maxW < limitW) { maxH = maxH * limitW / maxW; maxW = limitW; } } else { if (maxH < limitH) { maxW = maxW * limitH / maxH; maxH = limitH; } } _thumb = image->pixNoCache(maxW * cIntRetinaFactor(), maxH * cIntRetinaFactor(), Images::Option::Smooth | Images::Option::Blurred, maxW, maxH); prepareGifPreview(doc); } else { maxW = dimensions.width(); maxH = dimensions.height(); _thumb = image->pixNoCache(maxW * cIntRetinaFactor(), maxH * cIntRetinaFactor(), Images::Option::Smooth, maxW, maxH); } int32 tw = _thumb.width(), th = _thumb.height(); if (!tw || !th) { tw = th = 1; } _thumbw = st::sendMediaPreviewSize; if (_thumb.width() < _thumbw) { _thumbw = (_thumb.width() > 20) ? _thumb.width() : 20; } int32 maxthumbh = qMin(qRound(1.5 * _thumbw), int(st::confirmMaxHeight)); _thumbh = qRound(th * float64(_thumbw) / tw); if (_thumbh > maxthumbh) { _thumbw = qRound(_thumbw * float64(maxthumbh) / _thumbh); _thumbh = maxthumbh; if (_thumbw < 10) { _thumbw = 10; } } _thumbx = (st::boxWideWidth - _thumbw) / 2; _thumb = App::pixmapFromImageInPlace(_thumb.toImage().scaled(_thumbw * cIntRetinaFactor(), _thumbh * cIntRetinaFactor(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); _thumb.setDevicePixelRatio(cRetinaFactor()); } Assert(_animated || _photo || _doc); _field.create(this, st::confirmCaptionArea, langFactory(lng_photo_caption), caption); _field->setMaxLength(MaxPhotoCaption); _field->setCtrlEnterSubmit(Ui::CtrlEnterSubmit::Both); }