UNPKG

@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
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