@@ -147,6 +147,192 @@ inline static void updateEventProp(
147
147
}
148
148
}
149
149
150
+ static void updateBorderWidthPropValue (
151
+ folly::dynamic& result,
152
+ const std::string& propName,
153
+ const std::optional<float >& newValue,
154
+ const std::optional<float >& oldValue) {
155
+ if (newValue != oldValue) {
156
+ if (newValue.has_value ()) {
157
+ result[propName] = newValue.value ();
158
+ } else {
159
+ result[propName] = NULL ;
160
+ }
161
+ }
162
+ }
163
+
164
+ static void updateBorderWidthProps (
165
+ folly::dynamic& result,
166
+ const CascadedBorderWidths& newBorderWidths,
167
+ const CascadedBorderWidths& oldBorderWidths) {
168
+ updateBorderWidthPropValue (
169
+ result, " borderWidth" , newBorderWidths.all , oldBorderWidths.all );
170
+ updateBorderWidthPropValue (
171
+ result, " borderTopWidth" , newBorderWidths.top , oldBorderWidths.top );
172
+ updateBorderWidthPropValue (
173
+ result, " borderLeftWidth" , newBorderWidths.left , oldBorderWidths.left );
174
+ updateBorderWidthPropValue (
175
+ result, " borderStartWidth" , newBorderWidths.start , oldBorderWidths.start );
176
+ updateBorderWidthPropValue (
177
+ result, " borderEndWidth" , newBorderWidths.end , oldBorderWidths.end );
178
+ updateBorderWidthPropValue (
179
+ result, " borderRightWidth" , newBorderWidths.right , oldBorderWidths.right );
180
+ updateBorderWidthPropValue (
181
+ result,
182
+ " borderBottomWidth" ,
183
+ newBorderWidths.bottom ,
184
+ oldBorderWidths.bottom );
185
+ }
186
+
187
+ static void updateBorderRadiusPropValue (
188
+ folly::dynamic& result,
189
+ const std::string& propName,
190
+ const std::optional<ValueUnit>& newValue,
191
+ const std::optional<ValueUnit>& oldValue) {
192
+ if (newValue != oldValue) {
193
+ if (newValue.has_value ()) {
194
+ if (newValue.value ().unit == UnitType::Percent) {
195
+ result[propName] = std::to_string (newValue.value ().value ) + " %" ;
196
+ } else {
197
+ result[propName] = newValue.value ().value ;
198
+ }
199
+ } else {
200
+ result[propName] = -1 ;
201
+ }
202
+ }
203
+ }
204
+
205
+ static void updateBorderRadiusProps (
206
+ folly::dynamic& result,
207
+ const CascadedBorderRadii& newBorderRadii,
208
+ const CascadedBorderRadii& oldBorderRadii) {
209
+ updateBorderRadiusPropValue (
210
+ result, " borderRadius" , newBorderRadii.all , oldBorderRadii.all );
211
+ updateBorderRadiusPropValue (
212
+ result,
213
+ " borderTopLeftRadius" ,
214
+ newBorderRadii.topLeft ,
215
+ oldBorderRadii.topLeft );
216
+ updateBorderRadiusPropValue (
217
+ result,
218
+ " borderTopRightRadius" ,
219
+ newBorderRadii.topRight ,
220
+ oldBorderRadii.topRight );
221
+ updateBorderRadiusPropValue (
222
+ result,
223
+ " borderBottomRightRadius" ,
224
+ newBorderRadii.bottomRight ,
225
+ oldBorderRadii.bottomRight );
226
+ updateBorderRadiusPropValue (
227
+ result,
228
+ " borderBottomLeftRadius" ,
229
+ newBorderRadii.bottomLeft ,
230
+ oldBorderRadii.bottomLeft );
231
+ updateBorderRadiusPropValue (
232
+ result,
233
+ " borderTopStartRadius" ,
234
+ newBorderRadii.topStart ,
235
+ oldBorderRadii.topStart );
236
+ updateBorderRadiusPropValue (
237
+ result,
238
+ " borderTopEndRadius" ,
239
+ newBorderRadii.topEnd ,
240
+ oldBorderRadii.topEnd );
241
+ updateBorderRadiusPropValue (
242
+ result,
243
+ " borderBottomStartRadius" ,
244
+ newBorderRadii.bottomStart ,
245
+ oldBorderRadii.bottomStart );
246
+ updateBorderRadiusPropValue (
247
+ result,
248
+ " borderBottomEndRadius" ,
249
+ newBorderRadii.bottomEnd ,
250
+ oldBorderRadii.bottomEnd );
251
+ updateBorderRadiusPropValue (
252
+ result,
253
+ " borderEndEndRadius" ,
254
+ newBorderRadii.endEnd ,
255
+ oldBorderRadii.endEnd );
256
+ updateBorderRadiusPropValue (
257
+ result, " borderEndStartRadius" , newBorderRadii.all , oldBorderRadii.all );
258
+ updateBorderRadiusPropValue (
259
+ result,
260
+ " borderStartEndRadius" ,
261
+ newBorderRadii.startEnd ,
262
+ oldBorderRadii.startEnd );
263
+ updateBorderRadiusPropValue (
264
+ result,
265
+ " borderStartStartRadius" ,
266
+ newBorderRadii.startStart ,
267
+ oldBorderRadii.startStart );
268
+ }
269
+
270
+ static void updateBorderStyleProps (
271
+ folly::dynamic& result,
272
+ const CascadedBorderStyles& newBorderStyle,
273
+ const CascadedBorderStyles& oldBorderStyle) {
274
+ if (newBorderStyle.all != oldBorderStyle.all ) {
275
+ if (newBorderStyle.all .has_value ()) {
276
+ switch (newBorderStyle.all .value ()) {
277
+ case BorderStyle::Solid:
278
+ result[" borderStyle" ] = " solid" ;
279
+ break ;
280
+ case BorderStyle::Dotted:
281
+ result[" borderStyle" ] = " dotted" ;
282
+ break ;
283
+ case BorderStyle::Dashed:
284
+ result[" borderStyle" ] = " dashed" ;
285
+ break ;
286
+ }
287
+ } else {
288
+ result[" borderStyle" ] = NULL ;
289
+ }
290
+ }
291
+ }
292
+
293
+ static void updateBorderColorPropValue (
294
+ folly::dynamic& result,
295
+ const std::string& propName,
296
+ const std::optional<SharedColor>& newColor,
297
+ const std::optional<SharedColor>& oldColor) {
298
+ if (newColor != oldColor) {
299
+ result[propName] = newColor.has_value () ? *newColor.value () : NULL ;
300
+ }
301
+ }
302
+
303
+ static void updateBorderColorsProps (
304
+ folly::dynamic& result,
305
+ const CascadedBorderColors& newBorderColor,
306
+ const CascadedBorderColors& oldBorderColor) {
307
+ updateBorderColorPropValue (
308
+ result, " borderColor" , newBorderColor.all , oldBorderColor.all );
309
+ updateBorderColorPropValue (
310
+ result, " borderLeftColor" , newBorderColor.left , oldBorderColor.left );
311
+ updateBorderColorPropValue (
312
+ result, " borderRightColor" , newBorderColor.right , oldBorderColor.right );
313
+ updateBorderColorPropValue (
314
+ result, " borderTopColor" , newBorderColor.top , oldBorderColor.top );
315
+ updateBorderColorPropValue (
316
+ result,
317
+ " borderBottomColor" ,
318
+ newBorderColor.bottom ,
319
+ oldBorderColor.bottom );
320
+ updateBorderColorPropValue (
321
+ result, " borderStartColor" , newBorderColor.start , oldBorderColor.start );
322
+ updateBorderColorPropValue (
323
+ result, " borderBlockColor" , newBorderColor.block , oldBorderColor.block );
324
+ updateBorderColorPropValue (
325
+ result,
326
+ " borderBlockEndColor" ,
327
+ newBorderColor.blockEnd ,
328
+ oldBorderColor.blockEnd );
329
+ updateBorderColorPropValue (
330
+ result,
331
+ " borderBlockStartColor" ,
332
+ newBorderColor.blockStart ,
333
+ oldBorderColor.blockStart );
334
+ }
335
+
150
336
folly::dynamic HostPlatformViewProps::getDiffProps (
151
337
const Props* prevProps) const {
152
338
folly::dynamic result = folly::dynamic::object ();
@@ -268,6 +454,7 @@ folly::dynamic HostPlatformViewProps::getDiffProps(
268
454
}
269
455
270
456
// TODO T212662692: pass events as std::bitset<64> to java
457
+ // Events
271
458
if (events != oldProps->events ) {
272
459
updateEventProp (
273
460
result,
@@ -423,6 +610,25 @@ folly::dynamic HostPlatformViewProps::getDiffProps(
423
610
" onTouchCancel" );
424
611
}
425
612
613
+ // Borders
614
+ auto borderWidths = getBorderWidths ();
615
+ auto oldBorderWidths = oldProps->getBorderWidths ();
616
+ if (borderWidths != oldBorderWidths) {
617
+ updateBorderWidthProps (result, borderWidths, oldBorderWidths);
618
+ }
619
+
620
+ if (borderStyles != oldProps->borderStyles ) {
621
+ updateBorderStyleProps (result, borderStyles, oldProps->borderStyles );
622
+ }
623
+
624
+ if (borderColors != oldProps->borderColors ) {
625
+ updateBorderColorsProps (result, borderColors, oldProps->borderColors );
626
+ }
627
+
628
+ if (borderRadii != oldProps->borderRadii ) {
629
+ updateBorderRadiusProps (result, borderRadii, oldProps->borderRadii );
630
+ }
631
+
426
632
return result;
427
633
}
428
634
0 commit comments