From fb8340d2899067bcd3d4c50b92690f19eb62c305 Mon Sep 17 00:00:00 2001 From: Alon Schwarz Date: Sat, 19 Mar 2016 11:24:06 -0700 Subject: [PATCH] Add center ImageResizeMode option Summary:Adds a `center` option to `Image`'s `resizeMode` prop, which doesn't enlarge images. This is how it looks in UIExplorer: {F60386921} Reviewed By: dmmiller Differential Revision: D3064284 fb-gh-sync-id: 79cd2da8f44c5b3da2e42d3bebf3131335f53c28 shipit-source-id: 79cd2da8f44c5b3da2e42d3bebf3131335f53c28 --- Examples/UIExplorer/ImageExample.js | 83 ++++++++++++------- Libraries/Image/ImageResizeMode.js | 6 ++ .../uimanager/UIManagerModuleConstants.java | 4 +- .../react/views/image/ImageResizeMode.java | 3 + .../views/image/ImageResizeModeTest.java | 3 + 5 files changed, 68 insertions(+), 31 deletions(-) diff --git a/Examples/UIExplorer/ImageExample.js b/Examples/UIExplorer/ImageExample.js index a15aa38dd..e0542cc2a 100644 --- a/Examples/UIExplorer/ImageExample.js +++ b/Examples/UIExplorer/ImageExample.js @@ -1,4 +1,11 @@ /** + * Copyright (c) 2013-present, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * * The examples provided by Facebook are for non-commercial testing and * evaluation purposes only. * @@ -383,38 +390,54 @@ exports.examples = [ return ( {[smallImage, fullImage].map((image, index) => { - return - - - Contain - - + return ( + + + + + Contain + + + + + + Cover + + + - - - Cover - - + + + + Stretch + + + + + + Center + + + - - - Stretch - - - ; + ); })} ); @@ -459,7 +482,7 @@ exports.examples = [ { title: 'Image Size', render: function() { - return ; + return ; }, platform: 'ios', }, diff --git a/Libraries/Image/ImageResizeMode.js b/Libraries/Image/ImageResizeMode.js index 531212d86..caf200d5e 100644 --- a/Libraries/Image/ImageResizeMode.js +++ b/Libraries/Image/ImageResizeMode.js @@ -34,6 +34,12 @@ var ImageResizeMode = keyMirror({ * distorting it. */ stretch: null, + /** + * center - The image will be scaled down such that it is completely visible, + * if bigger than the area of the view. + * The image will not be scaled up. + */ + center: null, }); module.exports = ImageResizeMode; diff --git a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstants.java b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstants.java index 18626ba32..d3bdab1be 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstants.java +++ b/ReactAndroid/src/main/java/com/facebook/react/uimanager/UIManagerModuleConstants.java @@ -89,7 +89,9 @@ import com.facebook.react.uimanager.events.TouchEventType; "ScaleAspectFit", ImageView.ScaleType.FIT_CENTER.ordinal(), "ScaleAspectFill", - ImageView.ScaleType.CENTER_CROP.ordinal()))); + ImageView.ScaleType.CENTER_CROP.ordinal(), + "ScaleAspectCenter", + ImageView.ScaleType.CENTER_INSIDE.ordinal()))); DisplayMetrics displayMetrics = DisplayMetricsHolder.getWindowDisplayMetrics(); DisplayMetrics screenDisplayMetrics = DisplayMetricsHolder.getScreenDisplayMetrics(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMode.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMode.java index 30648f183..96f22e326 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMode.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageResizeMode.java @@ -33,6 +33,9 @@ public class ImageResizeMode { if ("stretch".equals(resizeModeValue)) { return ScalingUtils.ScaleType.FIT_XY; } + if ("center".equals(resizeModeValue)) { + return ScalingUtils.ScaleType.CENTER_INSIDE; + } if (resizeModeValue == null) { // Use the default. Never use null. return defaultValue(); diff --git a/ReactAndroid/src/test/java/com/facebook/react/views/image/ImageResizeModeTest.java b/ReactAndroid/src/test/java/com/facebook/react/views/image/ImageResizeModeTest.java index a247f1847..55ace7944 100644 --- a/ReactAndroid/src/test/java/com/facebook/react/views/image/ImageResizeModeTest.java +++ b/ReactAndroid/src/test/java/com/facebook/react/views/image/ImageResizeModeTest.java @@ -42,6 +42,9 @@ public class ImageResizeModeTest { assertThat(ImageResizeMode.toScaleType("stretch")) .isEqualTo(ScalingUtils.ScaleType.FIT_XY); + assertThat(ImageResizeMode.toScaleType("center")) + .isEqualTo(ScalingUtils.ScaleType.CENTER_INSIDE); + // No resizeMode set assertThat(ImageResizeMode.defaultValue()) .isEqualTo(ScalingUtils.ScaleType.CENTER_CROP);