Request inline images in the right size and anti-alias them
- If an inline image has specified a height, add parameters to the image:// URI. - Add scaled to the parameters, the images would be cropped otherwise. - Extract the height from image:// URI and use it for requestSize. - Use scaledToHeight instead of scaled.
This commit is contained in:
parent
7742f12f30
commit
7086e23bdd
2 changed files with 39 additions and 9 deletions
|
|
@ -561,15 +561,37 @@ TimelineModel::data(const mtx::events::collections::TimelineEvents &event, int r
|
|||
}
|
||||
|
||||
// TODO(Nico): Don't parse html with a regex
|
||||
const static QRegularExpression matchImgUri("(<img [^>]*)src=\"mxc://([^\"]*)\"([^>]*>)");
|
||||
formattedBody_.replace(matchImgUri, "\\1 src=\"image://mxcImage/\\2\"\\3");
|
||||
// Same regex but for single quotes around the src
|
||||
const static QRegularExpression matchImgUri2("(<img [^>]*)src=\'mxc://([^\']*)\'([^>]*>)");
|
||||
formattedBody_.replace(matchImgUri2, "\\1 src=\"image://mxcImage/\\2\"\\3");
|
||||
const static QRegularExpression matchEmoticonHeight(
|
||||
"(<img data-mx-emoticon [^>]*)height=\"([^\"]*)\"([^>]*>)");
|
||||
formattedBody_.replace(matchEmoticonHeight, QString("\\1 height=\"%1\"\\3").arg(ascent));
|
||||
|
||||
const static QRegularExpression matchIsImg("<img [^>]+>");
|
||||
auto itIsImg = matchIsImg.globalMatch(formattedBody_);
|
||||
while (itIsImg.hasNext()) {
|
||||
const QString curImg = itIsImg.next().captured(0);
|
||||
|
||||
// Construct image parameters later used by MxcImageProvider.
|
||||
QString imgParams;
|
||||
if (curImg.contains("height")) {
|
||||
const static QRegularExpression matchImgHeight("height=[\"\']?(\\d+)[\"\']?");
|
||||
const auto height = matchImgHeight.match(curImg).captured(1).toInt();
|
||||
imgParams = QString("?scale&height=%1").arg(height);
|
||||
}
|
||||
|
||||
// Replace src in current <img>.
|
||||
auto imgReplacement = curImg;
|
||||
const static QRegularExpression matchImgUri("src=\"mxc://([^\"]*)\"");
|
||||
imgReplacement.replace(matchImgUri,
|
||||
QString("src=\"image://mxcImage/\\1%1\"").arg(imgParams));
|
||||
// Same regex but for single quotes around the src
|
||||
const static QRegularExpression matchImgUri2("src=\'mxc://([^\']*)\'");
|
||||
imgReplacement.replace(matchImgUri2,
|
||||
QString("src=\'image://mxcImage/\\1%1\'").arg(imgParams));
|
||||
|
||||
// Replace <img> in formattedBody_ with our new <img>.
|
||||
formattedBody_.replace(curImg, imgReplacement);
|
||||
}
|
||||
|
||||
return QVariant(
|
||||
utils::replaceEmoji(utils::linkifyMessage(utils::escapeBlacklistedHtml(formattedBody_))));
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue