@@ -2430,7 +2430,7 @@ class RenderTransform extends RenderProxyBox {
24302430 return ;
24312431 }
24322432 _origin = value;
2433- markNeedsCompositedLayerUpdate ();
2433+ markNeedsPaint ();
24342434 markNeedsSemanticsUpdate ();
24352435 }
24362436
@@ -2452,7 +2452,7 @@ class RenderTransform extends RenderProxyBox {
24522452 return ;
24532453 }
24542454 _alignment = value;
2455- markNeedsCompositedLayerUpdate ();
2455+ markNeedsPaint ();
24562456 markNeedsSemanticsUpdate ();
24572457 }
24582458
@@ -2467,13 +2467,10 @@ class RenderTransform extends RenderProxyBox {
24672467 return ;
24682468 }
24692469 _textDirection = value;
2470- markNeedsCompositedLayerUpdate ();
2470+ markNeedsPaint ();
24712471 markNeedsSemanticsUpdate ();
24722472 }
24732473
2474- @override
2475- bool get isRepaintBoundary => alwaysNeedsCompositing;
2476-
24772474 @override
24782475 bool get alwaysNeedsCompositing => child != null && _filterQuality != null ;
24792476
@@ -2498,7 +2495,7 @@ class RenderTransform extends RenderProxyBox {
24982495 return ;
24992496 }
25002497 _transform = Matrix4 .copy (value);
2501- markNeedsCompositedLayerUpdate ();
2498+ markNeedsPaint ();
25022499 markNeedsSemanticsUpdate ();
25032500 }
25042501
@@ -2516,48 +2513,48 @@ class RenderTransform extends RenderProxyBox {
25162513 if (didNeedCompositing != alwaysNeedsCompositing) {
25172514 markNeedsCompositingBitsUpdate ();
25182515 }
2519- markNeedsCompositedLayerUpdate ();
2516+ markNeedsPaint ();
25202517 }
25212518
25222519 /// Sets the transform to the identity matrix.
25232520 void setIdentity () {
25242521 _transform! .setIdentity ();
2525- markNeedsCompositedLayerUpdate ();
2522+ markNeedsPaint ();
25262523 markNeedsSemanticsUpdate ();
25272524 }
25282525
25292526 /// Concatenates a rotation about the x axis into the transform.
25302527 void rotateX (double radians) {
25312528 _transform! .rotateX (radians);
2532- markNeedsCompositedLayerUpdate ();
2529+ markNeedsPaint ();
25332530 markNeedsSemanticsUpdate ();
25342531 }
25352532
25362533 /// Concatenates a rotation about the y axis into the transform.
25372534 void rotateY (double radians) {
25382535 _transform! .rotateY (radians);
2539- markNeedsCompositedLayerUpdate ();
2536+ markNeedsPaint ();
25402537 markNeedsSemanticsUpdate ();
25412538 }
25422539
25432540 /// Concatenates a rotation about the z axis into the transform.
25442541 void rotateZ (double radians) {
25452542 _transform! .rotateZ (radians);
2546- markNeedsCompositedLayerUpdate ();
2543+ markNeedsPaint ();
25472544 markNeedsSemanticsUpdate ();
25482545 }
25492546
25502547 /// Concatenates a translation by (x, y, z) into the transform.
25512548 void translate (double x, [ double y = 0.0 , double z = 0.0 ]) {
25522549 _transform! .translate (x, y, z);
2553- markNeedsCompositedLayerUpdate ();
2550+ markNeedsPaint ();
25542551 markNeedsSemanticsUpdate ();
25552552 }
25562553
25572554 /// Concatenates a scale into the transform.
25582555 void scale (double x, [ double ? y, double ? z ]) {
25592556 _transform! .scale (x, y, z);
2560- markNeedsCompositedLayerUpdate ();
2557+ markNeedsPaint ();
25612558 markNeedsSemanticsUpdate ();
25622559 }
25632560
@@ -2606,46 +2603,51 @@ class RenderTransform extends RenderProxyBox {
26062603 );
26072604 }
26082605
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-
26192606 @override
26202607 void paint (PaintingContext context, Offset offset) {
2621- if (child == null ) {
2622- return ;
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 ;
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+ }
26412650 }
2642- layer = context.pushTransform (
2643- needsCompositing,
2644- offset,
2645- transform,
2646- super .paint,
2647- oldLayer: layer is TransformLayer ? layer as TransformLayer ? : null ,
2648- );
26492651 }
26502652
26512653 @override
0 commit comments