String bestFitSourceForImageAttributes(float deviceScaleFactor, const String& srcAttribute, const String& srcsetAttribute) { ImageCandidates imageCandidates; parseImagesWithScaleFromSrcsetAttribute(srcsetAttribute, imageCandidates); if (!srcAttribute.isEmpty()) { ImageWithScale image; image.imageURL = srcAttribute; image.scaleFactor = 1.0; imageCandidates.append(image); } if (imageCandidates.isEmpty()) return String(); std::stable_sort(imageCandidates.begin(), imageCandidates.end(), compareByScaleFactor); for (size_t i = 0; i < imageCandidates.size() - 1; ++i) { if (imageCandidates[i].scaleFactor >= deviceScaleFactor) return String(imageCandidates[i].imageURL); } return String(imageCandidates.last().imageURL); }
String bestFitSourceForImageAttributes(float deviceScaleFactor, const String& srcAttribute, const String& srcsetAttribute) { ImageCandidates imageCandidates; parseImagesWithScaleFromSrcsetAttribute(srcsetAttribute, imageCandidates); if (!srcAttribute.isEmpty()) { ImageWithScale srcPlaceholderImage; imageCandidates.append(srcPlaceholderImage); } if (imageCandidates.isEmpty()) return String(); std::stable_sort(imageCandidates.begin(), imageCandidates.end(), compareByScaleFactor); for (size_t i = 0; i < imageCandidates.size() - 1; ++i) { if (imageCandidates[i].scaleFactor >= deviceScaleFactor) return imageCandidates[i].hasImageURL() ? srcsetAttribute.substringSharingImpl(imageCandidates[i].imageURLStart, imageCandidates[i].imageURLLength) : srcAttribute; } const ImageWithScale& lastCandidate = imageCandidates.last(); return lastCandidate.hasImageURL() ? srcsetAttribute.substringSharingImpl(lastCandidate.imageURLStart, lastCandidate.imageURLLength) : srcAttribute; }