Skip to content

Commit e8e2a6e

Browse files
Add tint color to inline icons
Reviewed By: achen1 Differential Revision: D7625378 fbshipit-source-id: a60cf79f32f2d4091dbddebd65af4880ebb8c2c7
1 parent af661e4 commit e8e2a6e

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageShadowNode.java

+9-1
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public class FrescoBasedReactTextInlineImageShadowNode extends ReactTextInlineIm
4141
private final @Nullable Object mCallerContext;
4242
private float mWidth = YogaConstants.UNDEFINED;
4343
private float mHeight = YogaConstants.UNDEFINED;
44+
private int mTintColor = 0;
4445

4546
public FrescoBasedReactTextInlineImageShadowNode(
4647
AbstractDraweeControllerBuilder draweeControllerBuilder,
@@ -54,6 +55,7 @@ private FrescoBasedReactTextInlineImageShadowNode(FrescoBasedReactTextInlineImag
5455
mHeaders = node.mHeaders; // mHeaders is immutable
5556
mWidth = node.mWidth;
5657
mHeight = node.mHeight;
58+
mTintColor = node.mTintColor;
5759
mDraweeControllerBuilder = node.mDraweeControllerBuilder;
5860
mCallerContext = node.mCallerContext;
5961
mUri = node.mUri;
@@ -94,6 +96,11 @@ public void setHeaders(ReadableMap headers) {
9496
mHeaders = headers;
9597
}
9698

99+
@ReactProp(name = "tintColor")
100+
public void setTintColor(int tintColor) {
101+
mTintColor = tintColor;
102+
}
103+
97104
/**
98105
* Besides width/height, all other layout props on inline images are ignored
99106
*/
@@ -116,7 +123,7 @@ public void setHeight(Dynamic height) {
116123
"Inline images must not have percentage based height");
117124
}
118125
}
119-
126+
120127
public @Nullable Uri getUri() {
121128
return mUri;
122129
}
@@ -155,6 +162,7 @@ public TextInlineImageSpan buildInlineImageSpan() {
155162
resources,
156163
height,
157164
width,
165+
mTintColor,
158166
getUri(),
159167
getHeaders(),
160168
getDraweeControllerBuilder(),

ReactAndroid/src/main/java/com/facebook/react/views/text/frescosupport/FrescoBasedReactTextInlineImageSpan.java

+9
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
package com.facebook.react.views.text.frescosupport;
99

10+
import android.graphics.Color;
11+
import android.graphics.PorterDuff;
1012
import javax.annotation.Nullable;
1113

1214
import android.content.res.Resources;
@@ -46,6 +48,7 @@ public class FrescoBasedReactTextInlineImageSpan extends TextInlineImageSpan {
4648
private final @Nullable Object mCallerContext;
4749

4850
private int mHeight;
51+
private int mTintColor;
4952
private Uri mUri;
5053
private int mWidth;
5154
private ReadableMap mHeaders;
@@ -56,6 +59,7 @@ public FrescoBasedReactTextInlineImageSpan(
5659
Resources resources,
5760
int height,
5861
int width,
62+
int tintColor,
5963
@Nullable Uri uri,
6064
ReadableMap headers,
6165
AbstractDraweeControllerBuilder draweeControllerBuilder,
@@ -68,6 +72,7 @@ public FrescoBasedReactTextInlineImageSpan(
6872
mCallerContext = callerContext;
6973

7074
mHeight = height;
75+
mTintColor = tintColor;
7176
mWidth = width;
7277
mUri = (uri != null) ? uri : Uri.EMPTY;
7378
mHeaders = headers;
@@ -143,7 +148,11 @@ public void draw(
143148

144149
mDrawable = mDraweeHolder.getTopLevelDrawable();
145150
mDrawable.setBounds(0, 0, mWidth, mHeight);
151+
if(mTintColor != 0) {
152+
mDrawable.setColorFilter(mTintColor, PorterDuff.Mode.SRC_IN);
153+
}
146154
mDrawable.setCallback(mTextView);
155+
147156
}
148157

149158
// NOTE: This drawing code is copied from DynamicDrawableSpan

0 commit comments

Comments
 (0)