mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-03 22:48:25 +08:00
Summary: Remove deprecated java code and make use of CSSEdge instead of the now removed Spacing class. Reviewed By: AaaChiuuu Differential Revision: D4233198
149 lines
4.2 KiB
Java
149 lines
4.2 KiB
Java
/**
|
|
* Copyright (c) 2015-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.
|
|
*/
|
|
|
|
package com.facebook.react.flat;
|
|
|
|
import javax.annotation.Nullable;
|
|
|
|
import com.facebook.drawee.drawable.ScalingUtils.ScaleType;
|
|
import com.facebook.react.bridge.ReadableArray;
|
|
import com.facebook.react.uimanager.PixelUtil;
|
|
import com.facebook.react.uimanager.Spacing;
|
|
import com.facebook.react.uimanager.ViewProps;
|
|
import com.facebook.react.uimanager.annotations.ReactProp;
|
|
import com.facebook.react.views.image.ImageResizeMode;
|
|
|
|
/**
|
|
* RCTImageView is a top-level node for Image. It can display either a remote image
|
|
* (source must start wtih http:// or https://) or a local resource (a BitmapDrawable).
|
|
*/
|
|
/* package */ class RCTImageView<T extends AbstractDrawCommand & DrawImage> extends FlatShadowNode {
|
|
|
|
static Object sCallerContext = RCTImageView.class;
|
|
|
|
/**
|
|
* Assignes a CallerContext to execute network requests with.
|
|
*/
|
|
/* package */ static void setCallerContext(Object callerContext) {
|
|
sCallerContext = callerContext;
|
|
}
|
|
|
|
/* package */ static Object getCallerContext() {
|
|
return sCallerContext;
|
|
}
|
|
|
|
private T mDrawImage;
|
|
|
|
/* package */ RCTImageView(T drawImage) {
|
|
mDrawImage = drawImage;
|
|
}
|
|
|
|
@Override
|
|
protected void collectState(
|
|
StateBuilder stateBuilder,
|
|
float left,
|
|
float top,
|
|
float right,
|
|
float bottom,
|
|
float clipLeft,
|
|
float clipTop,
|
|
float clipRight,
|
|
float clipBottom) {
|
|
super.collectState(
|
|
stateBuilder,
|
|
left,
|
|
top,
|
|
right,
|
|
bottom,
|
|
clipLeft,
|
|
clipTop,
|
|
clipRight,
|
|
clipBottom);
|
|
|
|
if (mDrawImage.hasImageRequest()) {
|
|
mDrawImage = (T) mDrawImage.updateBoundsAndFreeze(
|
|
left,
|
|
top,
|
|
right,
|
|
bottom,
|
|
clipLeft,
|
|
clipTop,
|
|
clipRight,
|
|
clipBottom);
|
|
stateBuilder.addDrawCommand(mDrawImage);
|
|
stateBuilder.addAttachDetachListener(mDrawImage);
|
|
}
|
|
}
|
|
|
|
@ReactProp(name = "shouldNotifyLoadEvents")
|
|
public void setShouldNotifyLoadEvents(boolean shouldNotifyLoadEvents) {
|
|
getMutableDrawImage().setReactTag(shouldNotifyLoadEvents ? getReactTag() : 0);
|
|
}
|
|
|
|
@ReactProp(name = "src")
|
|
public void setSource(@Nullable ReadableArray sources) {
|
|
getMutableDrawImage().setSource(getThemedContext(), sources);
|
|
}
|
|
|
|
@ReactProp(name = "tintColor")
|
|
public void setTintColor(int tintColor) {
|
|
getMutableDrawImage().setTintColor(tintColor);
|
|
}
|
|
|
|
@ReactProp(name = ViewProps.RESIZE_MODE)
|
|
public void setResizeMode(@Nullable String resizeMode) {
|
|
ScaleType scaleType = ImageResizeMode.toScaleType(resizeMode);
|
|
if (mDrawImage.getScaleType() != scaleType) {
|
|
getMutableDrawImage().setScaleType(scaleType);
|
|
}
|
|
}
|
|
|
|
@ReactProp(name = "borderColor", customType = "Color")
|
|
public void setBorderColor(int borderColor) {
|
|
if (mDrawImage.getBorderColor() != borderColor) {
|
|
getMutableDrawImage().setBorderColor(borderColor);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setBorder(int spacingType, float borderWidth) {
|
|
super.setBorder(spacingType, borderWidth);
|
|
|
|
if (spacingType == Spacing.ALL && mDrawImage.getBorderWidth() != borderWidth) {
|
|
getMutableDrawImage().setBorderWidth(borderWidth);
|
|
}
|
|
}
|
|
|
|
@ReactProp(name = "borderRadius")
|
|
public void setBorderRadius(float borderRadius) {
|
|
if (mDrawImage.getBorderRadius() != borderRadius) {
|
|
getMutableDrawImage().setBorderRadius(PixelUtil.toPixelFromDIP(borderRadius));
|
|
}
|
|
}
|
|
|
|
@ReactProp(name = "fadeDuration")
|
|
public void setFadeDuration(int durationMs) {
|
|
getMutableDrawImage().setFadeDuration(durationMs);
|
|
}
|
|
|
|
@ReactProp(name = "progressiveRenderingEnabled")
|
|
public void setProgressiveRenderingEnabled(boolean enabled) {
|
|
getMutableDrawImage().setProgressiveRenderingEnabled(enabled);
|
|
}
|
|
|
|
private T getMutableDrawImage() {
|
|
if (mDrawImage.isFrozen()) {
|
|
mDrawImage = (T) mDrawImage.mutableCopy();
|
|
invalidate();
|
|
}
|
|
|
|
return mDrawImage;
|
|
}
|
|
}
|