@@ -2430,7 +2430,7 @@ class RenderTransform extends RenderProxyBox {
2430
2430
return ;
2431
2431
}
2432
2432
_origin = value;
2433
- markNeedsPaint ();
2433
+ markNeedsCompositedLayerUpdate ();
2434
2434
markNeedsSemanticsUpdate ();
2435
2435
}
2436
2436
@@ -2452,7 +2452,7 @@ class RenderTransform extends RenderProxyBox {
2452
2452
return ;
2453
2453
}
2454
2454
_alignment = value;
2455
- markNeedsPaint ();
2455
+ markNeedsCompositedLayerUpdate ();
2456
2456
markNeedsSemanticsUpdate ();
2457
2457
}
2458
2458
@@ -2467,10 +2467,13 @@ class RenderTransform extends RenderProxyBox {
2467
2467
return ;
2468
2468
}
2469
2469
_textDirection = value;
2470
- markNeedsPaint ();
2470
+ markNeedsCompositedLayerUpdate ();
2471
2471
markNeedsSemanticsUpdate ();
2472
2472
}
2473
2473
2474
+ @override
2475
+ bool get isRepaintBoundary => alwaysNeedsCompositing;
2476
+
2474
2477
@override
2475
2478
bool get alwaysNeedsCompositing => child != null && _filterQuality != null ;
2476
2479
@@ -2495,7 +2498,7 @@ class RenderTransform extends RenderProxyBox {
2495
2498
return ;
2496
2499
}
2497
2500
_transform = Matrix4 .copy (value);
2498
- markNeedsPaint ();
2501
+ markNeedsCompositedLayerUpdate ();
2499
2502
markNeedsSemanticsUpdate ();
2500
2503
}
2501
2504
@@ -2513,48 +2516,48 @@ class RenderTransform extends RenderProxyBox {
2513
2516
if (didNeedCompositing != alwaysNeedsCompositing) {
2514
2517
markNeedsCompositingBitsUpdate ();
2515
2518
}
2516
- markNeedsPaint ();
2519
+ markNeedsCompositedLayerUpdate ();
2517
2520
}
2518
2521
2519
2522
/// Sets the transform to the identity matrix.
2520
2523
void setIdentity () {
2521
2524
_transform! .setIdentity ();
2522
- markNeedsPaint ();
2525
+ markNeedsCompositedLayerUpdate ();
2523
2526
markNeedsSemanticsUpdate ();
2524
2527
}
2525
2528
2526
2529
/// Concatenates a rotation about the x axis into the transform.
2527
2530
void rotateX (double radians) {
2528
2531
_transform! .rotateX (radians);
2529
- markNeedsPaint ();
2532
+ markNeedsCompositedLayerUpdate ();
2530
2533
markNeedsSemanticsUpdate ();
2531
2534
}
2532
2535
2533
2536
/// Concatenates a rotation about the y axis into the transform.
2534
2537
void rotateY (double radians) {
2535
2538
_transform! .rotateY (radians);
2536
- markNeedsPaint ();
2539
+ markNeedsCompositedLayerUpdate ();
2537
2540
markNeedsSemanticsUpdate ();
2538
2541
}
2539
2542
2540
2543
/// Concatenates a rotation about the z axis into the transform.
2541
2544
void rotateZ (double radians) {
2542
2545
_transform! .rotateZ (radians);
2543
- markNeedsPaint ();
2546
+ markNeedsCompositedLayerUpdate ();
2544
2547
markNeedsSemanticsUpdate ();
2545
2548
}
2546
2549
2547
2550
/// Concatenates a translation by (x, y, z) into the transform.
2548
2551
void translate (double x, [ double y = 0.0 , double z = 0.0 ]) {
2549
2552
_transform! .translate (x, y, z);
2550
- markNeedsPaint ();
2553
+ markNeedsCompositedLayerUpdate ();
2551
2554
markNeedsSemanticsUpdate ();
2552
2555
}
2553
2556
2554
2557
/// Concatenates a scale into the transform.
2555
2558
void scale (double x, [ double ? y, double ? z ]) {
2556
2559
_transform! .scale (x, y, z);
2557
- markNeedsPaint ();
2560
+ markNeedsCompositedLayerUpdate ();
2558
2561
markNeedsSemanticsUpdate ();
2559
2562
}
2560
2563
@@ -2603,51 +2606,46 @@ class RenderTransform extends RenderProxyBox {
2603
2606
);
2604
2607
}
2605
2608
2609
+ @override
2610
+ OffsetLayer updateCompositedLayer ({required covariant ImageFilterLayer ? oldLayer}) {
2611
+ final ImageFilterLayer layer = oldLayer ?? ImageFilterLayer ();
2612
+ layer.imageFilter = ui.ImageFilter .matrix (
2613
+ _effectiveTransform! .storage,
2614
+ filterQuality: filterQuality!
2615
+ );
2616
+ return layer;
2617
+ }
2618
+
2606
2619
@override
2607
2620
void paint (PaintingContext context, Offset offset) {
2608
- if (child != null ) {
2609
- final Matrix4 transform = _effectiveTransform! ;
2610
- if (filterQuality == null ) {
2611
- final Offset ? childOffset = MatrixUtils .getAsTranslation (transform);
2612
- if (childOffset == null ) {
2613
- // if the matrix is singular the children would be compressed to a line or
2614
- // single point, instead short-circuit and paint nothing.
2615
- final double det = transform.determinant ();
2616
- if (det == 0 || ! det.isFinite) {
2617
- layer = null ;
2618
- return ;
2619
- }
2620
- layer = context.pushTransform (
2621
- needsCompositing,
2622
- offset,
2623
- transform,
2624
- super .paint,
2625
- oldLayer: layer is TransformLayer ? layer as TransformLayer ? : null ,
2626
- );
2627
- } else {
2628
- super .paint (context, offset + childOffset);
2629
- layer = null ;
2630
- }
2631
- } else {
2632
- final Matrix4 effectiveTransform = Matrix4 .translationValues (offset.dx, offset.dy, 0.0 )
2633
- ..multiply (transform)..translate (- offset.dx, - offset.dy);
2634
- final ui.ImageFilter filter = ui.ImageFilter .matrix (
2635
- effectiveTransform.storage,
2636
- filterQuality: filterQuality! ,
2637
- );
2638
- if (layer is ImageFilterLayer ) {
2639
- final ImageFilterLayer filterLayer = layer! as ImageFilterLayer ;
2640
- filterLayer.imageFilter = filter;
2641
- } else {
2642
- layer = ImageFilterLayer (imageFilter: filter);
2643
- }
2644
- context.pushLayer (layer! , super .paint, offset);
2645
- assert (() {
2646
- layer! .debugCreator = debugCreator;
2647
- return true ;
2648
- }());
2649
- }
2621
+ if (child == null ) {
2622
+ return ;
2650
2623
}
2624
+ if (isRepaintBoundary) {
2625
+ return super .paint (context, offset);
2626
+ }
2627
+
2628
+ final Matrix4 transform = _effectiveTransform! ;
2629
+ final Offset ? childOffset = MatrixUtils .getAsTranslation (transform);
2630
+ if (childOffset != null ) {
2631
+ super .paint (context, offset + childOffset);
2632
+ layer = null ;
2633
+ return ;
2634
+ }
2635
+ // if the matrix is singular the children would be compressed to a line or
2636
+ // single point, instead short-circuit and paint nothing.
2637
+ final double det = transform.determinant ();
2638
+ if (det == 0 || ! det.isFinite) {
2639
+ layer = null ;
2640
+ return ;
2641
+ }
2642
+ layer = context.pushTransform (
2643
+ needsCompositing,
2644
+ offset,
2645
+ transform,
2646
+ super .paint,
2647
+ oldLayer: layer is TransformLayer ? layer as TransformLayer ? : null ,
2648
+ );
2651
2649
}
2652
2650
2653
2651
@override
0 commit comments