UNPKG

tns-core-modules

Version:

Telerik NativeScript Core Modules

109 lines (108 loc) 5.06 kB
var imageCommon = require("./image-common"); var enums = require("ui/enums"); global.moduleMerge(imageCommon, exports); function onStretchPropertyChanged(data) { var image = data.object; switch (data.newValue) { case enums.Stretch.aspectFit: image.ios.contentMode = UIViewContentMode.UIViewContentModeScaleAspectFit; break; case enums.Stretch.aspectFill: image.ios.contentMode = UIViewContentMode.UIViewContentModeScaleAspectFill; break; case enums.Stretch.fill: image.ios.contentMode = UIViewContentMode.UIViewContentModeScaleToFill; break; case enums.Stretch.none: default: image.ios.contentMode = UIViewContentMode.UIViewContentModeTopLeft; break; } } function onImageSourcePropertyChanged(data) { var image = data.object; image._setNativeImage(data.newValue ? data.newValue.ios : null); } imageCommon.Image.imageSourceProperty.metadata.onSetNativeValue = onImageSourcePropertyChanged; imageCommon.Image.stretchProperty.metadata.onSetNativeValue = onStretchPropertyChanged; var Image = (function (_super) { __extends(Image, _super); function Image(options) { _super.call(this, options); this._ios = new UIImageView(); this._ios.contentMode = UIViewContentMode.UIViewContentModeScaleAspectFit; this._ios.clipsToBounds = true; this._ios.userInteractionEnabled = true; } Object.defineProperty(Image.prototype, "ios", { get: function () { return this._ios; }, enumerable: true, configurable: true }); Image.prototype._setNativeImage = function (nativeImage) { this.ios.image = nativeImage; if (isNaN(this.width) || isNaN(this.height)) { this.requestLayout(); } }; Image.prototype.onMeasure = function (widthMeasureSpec, heightMeasureSpec) { var utils = require("utils/utils"); var width = utils.layout.getMeasureSpecSize(widthMeasureSpec); var widthMode = utils.layout.getMeasureSpecMode(widthMeasureSpec); var height = utils.layout.getMeasureSpecSize(heightMeasureSpec); var heightMode = utils.layout.getMeasureSpecMode(heightMeasureSpec); var nativeWidth = this.imageSource ? this.imageSource.width : 0; var nativeHeight = this.imageSource ? this.imageSource.height : 0; var measureWidth = Math.max(nativeWidth, this.minWidth); var measureHeight = Math.max(nativeHeight, this.minHeight); var finiteWidth = widthMode !== utils.layout.UNSPECIFIED; var finiteHeight = heightMode !== utils.layout.UNSPECIFIED; if (nativeWidth !== 0 && nativeHeight !== 0 && (finiteWidth || finiteHeight)) { var scale = Image.computeScaleFactor(width, height, finiteWidth, finiteHeight, nativeWidth, nativeHeight, this.stretch); var resultW = Math.floor(nativeWidth * scale.width); var resultH = Math.floor(nativeHeight * scale.height); measureWidth = finiteWidth ? Math.min(resultW, width) : resultW; measureHeight = finiteHeight ? Math.min(resultH, height) : resultH; var trace = require("trace"); trace.write("Image stretch: " + this.stretch + ", nativeWidth: " + nativeWidth + ", nativeHeight: " + nativeHeight, trace.categories.Layout); } var view = require("ui/core/view"); var widthAndState = view.View.resolveSizeAndState(measureWidth, width, widthMode, 0); var heightAndState = view.View.resolveSizeAndState(measureHeight, height, heightMode, 0); this.setMeasuredDimension(widthAndState, heightAndState); }; Image.computeScaleFactor = function (measureWidth, measureHeight, widthIsFinite, heightIsFinite, nativeWidth, nativeHeight, imageStretch) { var scaleW = 1; var scaleH = 1; if ((imageStretch === enums.Stretch.aspectFill || imageStretch === enums.Stretch.aspectFit || imageStretch === enums.Stretch.fill) && (widthIsFinite || heightIsFinite)) { scaleW = (nativeWidth > 0) ? measureWidth / nativeWidth : 0; scaleH = (nativeHeight > 0) ? measureHeight / nativeHeight : 0; if (!widthIsFinite) { scaleW = scaleH; } else if (!heightIsFinite) { scaleH = scaleW; } else { switch (imageStretch) { case enums.Stretch.aspectFit: scaleH = scaleW < scaleH ? scaleW : scaleH; scaleW = scaleH; break; case enums.Stretch.aspectFill: scaleH = scaleW > scaleH ? scaleW : scaleH; scaleW = scaleH; break; } } } return { width: scaleW, height: scaleH }; }; return Image; }(imageCommon.Image)); exports.Image = Image;