matrix-react-sdk
Version:
SDK for matrix.org using React
50 lines (46 loc) • 5.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.thumbHeight = thumbHeight;
/*
Copyright 2024 New Vector Ltd.
Copyright 2015, 2016 , 2020 Copyright 2020 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
/**
* Returns the actual height that an image of dimensions (fullWidth, fullHeight)
* will occupy if resized to fit inside a thumbnail bounding box of size
* (thumbWidth, thumbHeight).
*
* If the aspect ratio of the source image is taller than the aspect ratio of
* the thumbnail bounding box, then we return the thumbHeight parameter unchanged.
* Otherwise we return the thumbHeight parameter scaled down appropriately to
* reflect the actual height the scaled thumbnail occupies.
*
* This is very useful for calculating how much height a thumbnail will actually
* consume in the timeline, when performing scroll offset calculations
* (e.g. scroll locking)
*/
function thumbHeight(fullWidth, fullHeight, thumbWidth, thumbHeight) {
if (!fullWidth || !fullHeight) {
// Cannot calculate thumbnail height for image: missing w/h in metadata. We can't even
// log this because it's spammy
return null;
}
if (fullWidth < thumbWidth && fullHeight < thumbHeight) {
// no scaling needs to be applied
return fullHeight;
}
const widthMulti = thumbWidth / fullWidth;
const heightMulti = thumbHeight / fullHeight;
if (widthMulti < heightMulti) {
// width is the dominant dimension so scaling will be fixed on that
return Math.floor(widthMulti * fullHeight);
} else {
// height is the dominant dimension so scaling will be fixed on that
return Math.floor(heightMulti * fullHeight);
}
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0aHVtYkhlaWdodCIsImZ1bGxXaWR0aCIsImZ1bGxIZWlnaHQiLCJ0aHVtYldpZHRoIiwid2lkdGhNdWx0aSIsImhlaWdodE11bHRpIiwiTWF0aCIsImZsb29yIl0sInNvdXJjZXMiOlsiLi4vc3JjL0ltYWdlVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTUsIDIwMTYgLCAyMDIwIENvcHlyaWdodCAyMDIwIFRoZSBNYXRyaXgub3JnIEZvdW5kYXRpb24gQy5JLkMuXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgYWN0dWFsIGhlaWdodCB0aGF0IGFuIGltYWdlIG9mIGRpbWVuc2lvbnMgKGZ1bGxXaWR0aCwgZnVsbEhlaWdodClcbiAqIHdpbGwgb2NjdXB5IGlmIHJlc2l6ZWQgdG8gZml0IGluc2lkZSBhIHRodW1ibmFpbCBib3VuZGluZyBib3ggb2Ygc2l6ZVxuICogKHRodW1iV2lkdGgsIHRodW1iSGVpZ2h0KS5cbiAqXG4gKiBJZiB0aGUgYXNwZWN0IHJhdGlvIG9mIHRoZSBzb3VyY2UgaW1hZ2UgaXMgdGFsbGVyIHRoYW4gdGhlIGFzcGVjdCByYXRpbyBvZlxuICogdGhlIHRodW1ibmFpbCBib3VuZGluZyBib3gsIHRoZW4gd2UgcmV0dXJuIHRoZSB0aHVtYkhlaWdodCBwYXJhbWV0ZXIgdW5jaGFuZ2VkLlxuICogT3RoZXJ3aXNlIHdlIHJldHVybiB0aGUgdGh1bWJIZWlnaHQgcGFyYW1ldGVyIHNjYWxlZCBkb3duIGFwcHJvcHJpYXRlbHkgdG9cbiAqIHJlZmxlY3QgdGhlIGFjdHVhbCBoZWlnaHQgdGhlIHNjYWxlZCB0aHVtYm5haWwgb2NjdXBpZXMuXG4gKlxuICogVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgY2FsY3VsYXRpbmcgaG93IG11Y2ggaGVpZ2h0IGEgdGh1bWJuYWlsIHdpbGwgYWN0dWFsbHlcbiAqIGNvbnN1bWUgaW4gdGhlIHRpbWVsaW5lLCB3aGVuIHBlcmZvcm1pbmcgc2Nyb2xsIG9mZnNldCBjYWxjdWxhdGlvbnNcbiAqIChlLmcuIHNjcm9sbCBsb2NraW5nKVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGh1bWJIZWlnaHQoZnVsbFdpZHRoOiBudW1iZXIsIGZ1bGxIZWlnaHQ6IG51bWJlciwgdGh1bWJXaWR0aDogbnVtYmVyLCB0aHVtYkhlaWdodDogbnVtYmVyKTogbnVtYmVyO1xuZXhwb3J0IGZ1bmN0aW9uIHRodW1iSGVpZ2h0KFxuICAgIGZ1bGxXaWR0aDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIGZ1bGxIZWlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICB0aHVtYldpZHRoOiBudW1iZXIsXG4gICAgdGh1bWJIZWlnaHQ6IG51bWJlcixcbik6IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gdGh1bWJIZWlnaHQoXG4gICAgZnVsbFdpZHRoOiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgZnVsbEhlaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIHRodW1iV2lkdGg6IG51bWJlcixcbiAgICB0aHVtYkhlaWdodDogbnVtYmVyLFxuKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKCFmdWxsV2lkdGggfHwgIWZ1bGxIZWlnaHQpIHtcbiAgICAgICAgLy8gQ2Fubm90IGNhbGN1bGF0ZSB0aHVtYm5haWwgaGVpZ2h0IGZvciBpbWFnZTogbWlzc2luZyB3L2ggaW4gbWV0YWRhdGEuIFdlIGNhbid0IGV2ZW5cbiAgICAgICAgLy8gbG9nIHRoaXMgYmVjYXVzZSBpdCdzIHNwYW1teVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKGZ1bGxXaWR0aCA8IHRodW1iV2lkdGggJiYgZnVsbEhlaWdodCA8IHRodW1iSGVpZ2h0KSB7XG4gICAgICAgIC8vIG5vIHNjYWxpbmcgbmVlZHMgdG8gYmUgYXBwbGllZFxuICAgICAgICByZXR1cm4gZnVsbEhlaWdodDtcbiAgICB9XG4gICAgY29uc3Qgd2lkdGhNdWx0aSA9IHRodW1iV2lkdGggLyBmdWxsV2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0TXVsdGkgPSB0aHVtYkhlaWdodCAvIGZ1bGxIZWlnaHQ7XG4gICAgaWYgKHdpZHRoTXVsdGkgPCBoZWlnaHRNdWx0aSkge1xuICAgICAgICAvLyB3aWR0aCBpcyB0aGUgZG9taW5hbnQgZGltZW5zaW9uIHNvIHNjYWxpbmcgd2lsbCBiZSBmaXhlZCBvbiB0aGF0XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHdpZHRoTXVsdGkgKiBmdWxsSGVpZ2h0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICAvLyBoZWlnaHQgaXMgdGhlIGRvbWluYW50IGRpbWVuc2lvbiBzbyBzY2FsaW5nIHdpbGwgYmUgZml4ZWQgb24gdGhhdFxuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihoZWlnaHRNdWx0aSAqIGZ1bGxIZWlnaHQpO1xuICAgIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFRTyxTQUFTQSxXQUFXQSxDQUN2QkMsU0FBNkIsRUFDN0JDLFVBQThCLEVBQzlCQyxVQUFrQixFQUNsQkgsV0FBbUIsRUFDTjtFQUNiLElBQUksQ0FBQ0MsU0FBUyxJQUFJLENBQUNDLFVBQVUsRUFBRTtJQUMzQjtJQUNBO0lBQ0EsT0FBTyxJQUFJO0VBQ2Y7RUFDQSxJQUFJRCxTQUFTLEdBQUdFLFVBQVUsSUFBSUQsVUFBVSxHQUFHRixXQUFXLEVBQUU7SUFDcEQ7SUFDQSxPQUFPRSxVQUFVO0VBQ3JCO0VBQ0EsTUFBTUUsVUFBVSxHQUFHRCxVQUFVLEdBQUdGLFNBQVM7RUFDekMsTUFBTUksV0FBVyxHQUFHTCxXQUFXLEdBQUdFLFVBQVU7RUFDNUMsSUFBSUUsVUFBVSxHQUFHQyxXQUFXLEVBQUU7SUFDMUI7SUFDQSxPQUFPQyxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsVUFBVSxHQUFHRixVQUFVLENBQUM7RUFDOUMsQ0FBQyxNQUFNO0lBQ0g7SUFDQSxPQUFPSSxJQUFJLENBQUNDLEtBQUssQ0FBQ0YsV0FBVyxHQUFHSCxVQUFVLENBQUM7RUFDL0M7QUFDSiIsImlnbm9yZUxpc3QiOltdfQ==