@nativescript-community/ui-image
Version:
Advanced and efficient image display plugin which uses Fresco (Android) and SDWebImage (iOS) to implement caching, placeholders, image effects, and much more.
176 lines • 9.38 kB
JavaScript
import { Length, Property, Trace, View, booleanConverter } from '@nativescript/core';
import { isAndroid } from '@nativescript/core/platform';
function isNonNegativeFiniteNumber(value) {
return isFinite(value) && !isNaN(value) && value >= 0;
}
export var CLogTypes;
(function (CLogTypes) {
CLogTypes[CLogTypes["log"] = Trace.messageType.log] = "log";
CLogTypes[CLogTypes["info"] = Trace.messageType.info] = "info";
CLogTypes[CLogTypes["warning"] = Trace.messageType.warn] = "warning";
CLogTypes[CLogTypes["error"] = Trace.messageType.error] = "error";
})(CLogTypes || (CLogTypes = {}));
export const ImageViewTraceCategory = 'NativescriptImage';
export const CLog = (type, ...args) => {
Trace.write(args.map(a => (a && typeof a === 'object' ? JSON.stringify(a) : a)).join(' '), ImageViewTraceCategory, type);
};
export var ScaleType;
(function (ScaleType) {
ScaleType["None"] = "none";
ScaleType["Fill"] = "fill";
ScaleType["AspectFill"] = "aspectFill";
ScaleType["AspectFit"] = "aspectFit";
ScaleType["Center"] = "center";
ScaleType["CenterCrop"] = "centerCrop";
ScaleType["CenterInside"] = "centerInside";
ScaleType["FitCenter"] = "fitCenter";
ScaleType["FitEnd"] = "fitEnd";
ScaleType["FitStart"] = "fitStart";
ScaleType["FitXY"] = "fitXY";
ScaleType["FocusCrop"] = "focusCrop";
})(ScaleType || (ScaleType = {}));
export class EventData {
get eventName() {
return this._eventName;
}
set eventName(value) {
this._eventName = value;
}
get object() {
return this._object;
}
set object(value) {
this._object = value;
}
}
export class ImageBase extends View {
handleImageProgress(value, totalSize) { }
static needsSizeAdjustment(scaleType) {
if (scaleType === undefined) {
return true;
}
switch (scaleType) {
case ScaleType.FocusCrop:
case ScaleType.Center:
case ScaleType.CenterCrop:
case ScaleType.CenterInside:
case ScaleType.FitCenter:
case ScaleType.AspectFit:
case ScaleType.FitXY:
return true;
default:
return false;
}
}
computeScaleFactor(measureWidth, measureHeight, widthIsFinite, heightIsFinite, nativeWidth, nativeHeight, aspectRatio) {
let scaleW = 1;
let scaleH = 1;
if (ImageBase.needsSizeAdjustment(this.stretch) || widthIsFinite || heightIsFinite) {
const nativeScale = nativeWidth > 0 && nativeHeight > 0 ? nativeWidth / nativeHeight : 1;
const measureScale = measureWidth > 0 && measureHeight > 0 ? measureWidth / measureHeight : 1;
scaleW = nativeWidth > 0 ? measureWidth / nativeWidth : 1;
scaleH = nativeHeight > 0 ? measureHeight / nativeHeight : 1;
if (Trace.isEnabled()) {
CLog(CLogTypes.info, 'computeScaleFactor', measureWidth, measureHeight, nativeWidth, nativeHeight, widthIsFinite, heightIsFinite, aspectRatio, nativeScale, measureScale);
}
if (aspectRatio > 0) {
if (!widthIsFinite) {
scaleH = 1;
scaleW = aspectRatio;
}
else if (!heightIsFinite) {
scaleW = 1;
scaleH = 1 / aspectRatio;
}
}
else {
if (!widthIsFinite) {
scaleH = 1;
scaleW = nativeScale * scaleH;
}
else if (!heightIsFinite) {
scaleW = 1;
scaleH = measureScale / nativeScale;
}
else {
switch (this.stretch) {
case ScaleType.FitXY:
case ScaleType.FocusCrop:
case ScaleType.Fill:
break;
default:
if (measureScale > nativeScale) {
scaleH = 1;
scaleW = nativeScale * scaleH;
}
else {
scaleW = 1;
scaleH = measureScale / nativeScale;
}
}
}
}
}
return { width: scaleW, height: scaleH };
}
}
ImageBase.finalImageSetEvent = 'finalImageSet';
ImageBase.failureEvent = 'failure';
ImageBase.intermediateImageFailedEvent = 'intermediateImageFailed';
ImageBase.intermediateImageSetEvent = 'intermediateImageSet';
ImageBase.releaseEvent = 'release';
ImageBase.submitEvent = 'submit';
ImageBase.srcProperty = new Property({ name: 'src' });
ImageBase.lowerResSrcProperty = new Property({ name: 'lowerResSrc' });
ImageBase.placeholderImageUriProperty = new Property({ name: 'placeholderImageUri' });
ImageBase.failureImageUriProperty = new Property({ name: 'failureImageUri' });
ImageBase.stretchProperty = new Property({ name: 'stretch', defaultValue: 'aspectFit' });
ImageBase.backgroundUriProperty = new Property({ name: 'backgroundUri' });
ImageBase.progressiveRenderingEnabledProperty = new Property({ name: 'progressiveRenderingEnabled', valueConverter: booleanConverter });
ImageBase.localThumbnailPreviewsEnabledProperty = new Property({ name: 'localThumbnailPreviewsEnabled', valueConverter: booleanConverter });
ImageBase.showProgressBarProperty = new Property({ name: 'showProgressBar', valueConverter: booleanConverter });
ImageBase.progressBarColorProperty = new Property({ name: 'progressBarColor', defaultValue: undefined });
ImageBase.roundAsCircleProperty = new Property({ name: 'roundAsCircle', valueConverter: booleanConverter, affectsLayout: isAndroid });
ImageBase.blurRadiusProperty = new Property({ name: 'blurRadius', valueConverter: (v) => parseFloat(v) });
ImageBase.blurDownSamplingProperty = new Property({ name: 'blurDownSampling', valueConverter: (v) => parseFloat(v) });
ImageBase.autoPlayAnimationsProperty = new Property({ name: 'autoPlayAnimations', valueConverter: booleanConverter });
ImageBase.tapToRetryEnabledProperty = new Property({ name: 'tapToRetryEnabled', valueConverter: booleanConverter });
ImageBase.aspectRatioProperty = new Property({ name: 'aspectRatio', affectsLayout: true, valueConverter: (v) => parseFloat(v) });
ImageBase.decodeWidthProperty = new Property({ name: 'decodeWidth', valueConverter: (v) => parseFloat(v) });
ImageBase.decodeHeightProperty = new Property({ name: 'decodeHeight', valueConverter: (v) => parseFloat(v) });
ImageBase.tintColorProperty = new Property({ name: 'tintColor' });
ImageBase.alwaysFadeProperty = new Property({ name: 'alwaysFade', valueConverter: booleanConverter, defaultValue: false });
ImageBase.fadeDurationProperty = new Property({ name: 'fadeDuration', valueConverter: (v) => parseFloat(v) });
ImageBase.noCacheProperty = new Property({ name: 'noCache', defaultValue: false, valueConverter: booleanConverter });
ImageBase.roundTopLeftRadiusProperty = new Property({ name: 'roundTopLeftRadius', defaultValue: 0, valueConverter: (v) => Length.toDevicePixels(Length.parse(v)) });
ImageBase.roundTopRightRadiusProperty = new Property({ name: 'roundTopRightRadius', defaultValue: 0, valueConverter: (v) => Length.toDevicePixels(Length.parse(v)) });
ImageBase.roundBottomLeftRadiusProperty = new Property({ name: 'roundBottomLeftRadius', defaultValue: 0, valueConverter: (v) => Length.toDevicePixels(Length.parse(v)) });
ImageBase.roundBottomRightRadiusProperty = new Property({ name: 'roundBottomRightRadius', defaultValue: 0, valueConverter: (v) => Length.toDevicePixels(Length.parse(v)) });
ImageBase.clipToBoundsProperty = new Property({ name: 'clipToBounds', defaultValue: true, valueConverter: booleanConverter });
ImageBase.srcProperty.register(ImageBase);
ImageBase.lowerResSrcProperty.register(ImageBase);
ImageBase.placeholderImageUriProperty.register(ImageBase);
ImageBase.failureImageUriProperty.register(ImageBase);
ImageBase.stretchProperty.register(ImageBase);
ImageBase.fadeDurationProperty.register(ImageBase);
ImageBase.backgroundUriProperty.register(ImageBase);
ImageBase.progressiveRenderingEnabledProperty.register(ImageBase);
ImageBase.localThumbnailPreviewsEnabledProperty.register(ImageBase);
ImageBase.showProgressBarProperty.register(ImageBase);
ImageBase.progressBarColorProperty.register(ImageBase);
ImageBase.roundAsCircleProperty.register(ImageBase);
ImageBase.roundTopLeftRadiusProperty.register(ImageBase);
ImageBase.roundTopRightRadiusProperty.register(ImageBase);
ImageBase.roundBottomLeftRadiusProperty.register(ImageBase);
ImageBase.roundBottomRightRadiusProperty.register(ImageBase);
ImageBase.blurRadiusProperty.register(ImageBase);
ImageBase.blurDownSamplingProperty.register(ImageBase);
ImageBase.autoPlayAnimationsProperty.register(ImageBase);
ImageBase.tapToRetryEnabledProperty.register(ImageBase);
ImageBase.aspectRatioProperty.register(ImageBase);
ImageBase.decodeWidthProperty.register(ImageBase);
ImageBase.decodeHeightProperty.register(ImageBase);
ImageBase.alwaysFadeProperty.register(ImageBase);
ImageBase.noCacheProperty.register(ImageBase);
ImageBase.clipToBoundsProperty.register(ImageBase);
//# sourceMappingURL=image-common.js.map