diff --git a/.gitignore b/.gitignore index 47283ca42..23f3bc4ef 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,5 @@ tns-core-modules.es6.d.ts tests/platforms/ tests/lib/ *.log + +.DS_Store \ No newline at end of file diff --git a/tests/app/ui/image/700x50.png b/tests/app/ui/image/700x50.png new file mode 100644 index 000000000..50d636205 Binary files /dev/null and b/tests/app/ui/image/700x50.png differ diff --git a/tests/app/ui/image/image-tests.ts b/tests/app/ui/image/image-tests.ts index e638b441f..f21d5bf18 100644 --- a/tests/app/ui/image/image-tests.ts +++ b/tests/app/ui/image/image-tests.ts @@ -3,6 +3,7 @@ import {StackLayout} from "ui/layouts/stack-layout"; import {GridLayout} from "ui/layouts/grid-layout"; import {isIOS} from "platform"; import {PropertyChangeData} from "data/observable"; +import utils = require("utils/utils"); // import {target} from "../../TKUnit"; @@ -334,3 +335,23 @@ export var test_SettingImageSourceWhenSizedToContentShouldInvalidate = ios(() => TKUnit.assertTrue(called, "image.requestLayout should be called."); }); +export var test_DimensionsAreRoundedAfterScale = function() { + let host = new StackLayout(); + let image = new Image(); + image.src = "~/ui/image/700x50.png"; + + let density = utils.layout.getDisplayDensity(); + let limit = 414; + host.width = limit / density; + host.height = limit / density; + host.addChild(image); + let mainPage = helper.getCurrentPage(); + mainPage.content = host; + TKUnit.waitUntilReady(() => host.isLoaded); + TKUnit.waitUntilReady(() => image.isLayoutValid); + + let scale = limit / 700; + let expectedHeight = Math.round(50 * scale); + TKUnit.assertEqual(image.getMeasuredWidth(), limit, "Actual width is different from expected width."); + TKUnit.assertEqual(image.getMeasuredHeight(), expectedHeight, "Actual height is different from expected height."); +}; \ No newline at end of file diff --git a/tns-core-modules/ui/image/image.ios.ts b/tns-core-modules/ui/image/image.ios.ts index bd05df790..cf82e25aa 100644 --- a/tns-core-modules/ui/image/image.ios.ts +++ b/tns-core-modules/ui/image/image.ios.ts @@ -83,8 +83,8 @@ export class Image extends imageCommon.Image { 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); + var resultW = Math.round(nativeWidth * scale.width); + var resultH = Math.round(nativeHeight * scale.height); measureWidth = finiteWidth ? Math.min(resultW, width) : resultW; measureHeight = finiteHeight ? Math.min(resultH, height) : resultH;