expo-image 1.10.1 → 1.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md
CHANGED
|
@@ -10,6 +10,18 @@
|
|
|
10
10
|
|
|
11
11
|
### 💡 Others
|
|
12
12
|
|
|
13
|
+
## 1.10.2 — 2024-01-10
|
|
14
|
+
|
|
15
|
+
### 🐛 Bug fixes
|
|
16
|
+
|
|
17
|
+
- [Android] Fixed the issue with the application of tint color when an element does not have a style assigned to it. ([#26251](https://github.com/expo/expo/pull/26251) by [@lukmccall](https://github.com/lukmccall))
|
|
18
|
+
- [Android] Fixed the tint color was applied to the mask element. ([#26323](https://github.com/expo/expo/pull/26323) by [@lukmccall](https://github.com/lukmccall))
|
|
19
|
+
- [Android] Fixed the tint color wasn't applied to the root element. ([#26339](https://github.com/expo/expo/pull/26339) by [@lukmccall](https://github.com/lukmccall))
|
|
20
|
+
|
|
21
|
+
### 💡 Others
|
|
22
|
+
|
|
23
|
+
- Replace deprecated `com.facebook.react:react-native:+` Android dependency with `com.facebook.react:react-android`. ([#26237](https://github.com/expo/expo/pull/26237) by [@kudo](https://github.com/kudo))
|
|
24
|
+
|
|
13
25
|
## 1.10.1 — 2023-12-19
|
|
14
26
|
|
|
15
27
|
_This version does not introduce any user-facing changes._
|
package/android/build.gradle
CHANGED
|
@@ -67,7 +67,7 @@ android {
|
|
|
67
67
|
namespace "expo.modules.image"
|
|
68
68
|
defaultConfig {
|
|
69
69
|
versionCode 1
|
|
70
|
-
versionName "1.10.
|
|
70
|
+
versionName "1.10.2"
|
|
71
71
|
consumerProguardFiles("proguard-rules.pro")
|
|
72
72
|
|
|
73
73
|
buildConfigField("boolean", "ALLOW_GLIDE_LOGS", project.properties.get("EXPO_ALLOW_GLIDE_LOGS", "false"))
|
|
@@ -108,8 +108,7 @@ dependencies {
|
|
|
108
108
|
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:${getKotlinVersion()}"
|
|
109
109
|
}
|
|
110
110
|
|
|
111
|
-
|
|
112
|
-
implementation 'com.facebook.react:react-native:+' // From node_modules
|
|
111
|
+
implementation 'com.facebook.react:react-android'
|
|
113
112
|
|
|
114
113
|
api "com.github.bumptech.glide:glide:${GLIDE_VERSION}"
|
|
115
114
|
kapt "com.github.bumptech.glide:compiler:${GLIDE_VERSION}"
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
package com.caverock.androidsvg
|
|
2
2
|
|
|
3
|
+
import com.caverock.androidsvg.SVG.SPECIFIED_COLOR
|
|
4
|
+
import com.caverock.androidsvg.SVG.SPECIFIED_FILL
|
|
5
|
+
import com.caverock.androidsvg.SVG.SvgElementBase
|
|
6
|
+
|
|
3
7
|
internal fun replaceColor(paint: SVG.SvgPaint?, newColor: Int) {
|
|
4
8
|
if (paint is SVG.Colour && paint !== SVG.Colour.TRANSPARENT) {
|
|
5
9
|
paint.colour = newColor
|
|
@@ -19,15 +23,88 @@ internal fun replaceStyles(style: SVG.Style?, newColor: Int) {
|
|
|
19
23
|
replaceColor(style.viewportFill, newColor)
|
|
20
24
|
}
|
|
21
25
|
|
|
22
|
-
internal fun
|
|
23
|
-
if (element
|
|
26
|
+
internal fun hasStyle(element: SvgElementBase): Boolean {
|
|
27
|
+
if (element.style == null && element.baseStyle == null) {
|
|
28
|
+
return false
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
val style = element.style
|
|
32
|
+
val hasColorInStyle = style != null &&
|
|
33
|
+
(
|
|
34
|
+
style.color != null || style.fill != null || style.stroke != null ||
|
|
35
|
+
style.stroke != null || style.stopColor != null || style.solidColor != null
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
if (hasColorInStyle) {
|
|
39
|
+
return true
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
val baseStyle = element.baseStyle ?: return false
|
|
43
|
+
return baseStyle.color != null || baseStyle.fill != null || baseStyle.stroke != null ||
|
|
44
|
+
baseStyle.viewportFill != null || baseStyle.stopColor != null || baseStyle.solidColor != null
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
internal fun defineStyles(element: SvgElementBase, newColor: Int, hasStyle: Boolean) {
|
|
48
|
+
if (hasStyle) {
|
|
49
|
+
return
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
val style = if (element.style != null) {
|
|
53
|
+
element.style
|
|
54
|
+
} else {
|
|
55
|
+
SVG.Style().also {
|
|
56
|
+
element.style = it
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
val color = SVG.Colour(newColor)
|
|
61
|
+
when (element) {
|
|
62
|
+
is SVG.Path,
|
|
63
|
+
is SVG.Circle,
|
|
64
|
+
is SVG.Ellipse,
|
|
65
|
+
is SVG.Rect,
|
|
66
|
+
is SVG.SolidColor,
|
|
67
|
+
is SVG.Line,
|
|
68
|
+
is SVG.Polygon,
|
|
69
|
+
is SVG.PolyLine -> {
|
|
70
|
+
style.apply {
|
|
71
|
+
fill = color
|
|
72
|
+
|
|
73
|
+
specifiedFlags = SPECIFIED_FILL
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
is SVG.TextPath -> {
|
|
78
|
+
style.apply {
|
|
79
|
+
this.color = color
|
|
80
|
+
|
|
81
|
+
specifiedFlags = SPECIFIED_COLOR
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
internal fun applyTintColor(element: SVG.SvgObject, newColor: Int, parentDefinesStyle: Boolean) {
|
|
88
|
+
// We want to keep the colors in the mask as they control the visibility of the element to which the mask is applied.
|
|
89
|
+
if (element is SVG.Mask) {
|
|
90
|
+
return
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
val definesStyle = if (element is SvgElementBase) {
|
|
94
|
+
val hasStyle = parentDefinesStyle || hasStyle(element)
|
|
95
|
+
|
|
24
96
|
replaceStyles(element.baseStyle, newColor)
|
|
25
97
|
replaceStyles(element.style, newColor)
|
|
98
|
+
defineStyles(element, newColor, hasStyle)
|
|
99
|
+
|
|
100
|
+
hasStyle
|
|
101
|
+
} else {
|
|
102
|
+
parentDefinesStyle
|
|
26
103
|
}
|
|
27
104
|
|
|
28
105
|
if (element is SVG.SvgContainer) {
|
|
29
106
|
for (child in element.children) {
|
|
30
|
-
applyTintColor(child, newColor)
|
|
107
|
+
applyTintColor(child, newColor, definesStyle)
|
|
31
108
|
}
|
|
32
109
|
}
|
|
33
110
|
}
|
|
@@ -35,9 +112,14 @@ internal fun applyTintColor(element: SVG.SvgObject, newColor: Int) {
|
|
|
35
112
|
fun applyTintColor(svg: SVG, newColor: Int) {
|
|
36
113
|
val root = svg.rootElement
|
|
37
114
|
|
|
115
|
+
svg.cssRules?.forEach { rule ->
|
|
116
|
+
replaceStyles(rule.style, newColor)
|
|
117
|
+
}
|
|
118
|
+
replaceStyles(root.baseStyle, newColor)
|
|
38
119
|
replaceStyles(root.style, newColor)
|
|
120
|
+
val hasStyle = hasStyle(root)
|
|
39
121
|
|
|
40
122
|
for (child in root.children) {
|
|
41
|
-
applyTintColor(child, newColor)
|
|
123
|
+
applyTintColor(child, newColor, hasStyle)
|
|
42
124
|
}
|
|
43
125
|
}
|
package/expo-module.config.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "expo-image",
|
|
3
3
|
"title": "Expo Image",
|
|
4
|
-
"version": "1.10.
|
|
4
|
+
"version": "1.10.2",
|
|
5
5
|
"description": "A cross-platform, performant image component for React Native and Expo with Web support",
|
|
6
6
|
"main": "build/index.js",
|
|
7
7
|
"types": "build/index.d.ts",
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"expo": "*"
|
|
37
37
|
},
|
|
38
|
-
"gitHead": "
|
|
38
|
+
"gitHead": "ca014bf2516c7644ef303f4c21fdd68de4d99f76"
|
|
39
39
|
}
|