Remove OverlayPainter mechanism (#4264)
We used to use this mechanism to paint scrollbars, but it's awkward. The new approach to scrollbars is much cleaner. This mechanism has no other clients, so we should remove it.
This commit is contained in:
parent
7c47837c27
commit
76772608e2
@ -401,12 +401,10 @@ class RenderGrid extends RenderVirtualViewport<GridParentData> {
|
|||||||
int virtualChildBase: 0,
|
int virtualChildBase: 0,
|
||||||
int virtualChildCount,
|
int virtualChildCount,
|
||||||
Offset paintOffset: Offset.zero,
|
Offset paintOffset: Offset.zero,
|
||||||
RenderObjectPainter overlayPainter,
|
|
||||||
LayoutCallback callback
|
LayoutCallback callback
|
||||||
}) : _delegate = delegate, _virtualChildBase = virtualChildBase, super(
|
}) : _delegate = delegate, _virtualChildBase = virtualChildBase, super(
|
||||||
virtualChildCount: virtualChildCount,
|
virtualChildCount: virtualChildCount,
|
||||||
paintOffset: paintOffset,
|
paintOffset: paintOffset,
|
||||||
overlayPainter: overlayPainter,
|
|
||||||
callback: callback
|
callback: callback
|
||||||
) {
|
) {
|
||||||
assert(delegate != null);
|
assert(delegate != null);
|
||||||
|
@ -33,7 +33,6 @@ class RenderList extends RenderVirtualViewport<ListParentData> {
|
|||||||
Offset paintOffset: Offset.zero,
|
Offset paintOffset: Offset.zero,
|
||||||
Axis mainAxis: Axis.vertical,
|
Axis mainAxis: Axis.vertical,
|
||||||
ViewportAnchor anchor: ViewportAnchor.start,
|
ViewportAnchor anchor: ViewportAnchor.start,
|
||||||
RenderObjectPainter overlayPainter,
|
|
||||||
LayoutCallback callback
|
LayoutCallback callback
|
||||||
}) : _itemExtent = itemExtent,
|
}) : _itemExtent = itemExtent,
|
||||||
_padding = padding,
|
_padding = padding,
|
||||||
@ -42,7 +41,6 @@ class RenderList extends RenderVirtualViewport<ListParentData> {
|
|||||||
paintOffset: paintOffset,
|
paintOffset: paintOffset,
|
||||||
mainAxis: mainAxis,
|
mainAxis: mainAxis,
|
||||||
anchor: anchor,
|
anchor: anchor,
|
||||||
overlayPainter: overlayPainter,
|
|
||||||
callback: callback
|
callback: callback
|
||||||
) {
|
) {
|
||||||
addAll(children);
|
addAll(children);
|
||||||
|
@ -397,28 +397,6 @@ class PaintingContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An encapsulation of a renderer and a paint() method.
|
|
||||||
///
|
|
||||||
/// A renderer may allow its paint() method to be augmented or redefined by
|
|
||||||
/// providing a Painter. See for example overlayPainter in BlockViewport.
|
|
||||||
abstract class RenderObjectPainter {
|
|
||||||
RenderObject get renderObject => _renderObject;
|
|
||||||
RenderObject _renderObject;
|
|
||||||
|
|
||||||
void attach(RenderObject renderObject) {
|
|
||||||
assert(_renderObject == null);
|
|
||||||
assert(renderObject != null);
|
|
||||||
_renderObject = renderObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
void detach() {
|
|
||||||
assert(_renderObject != null);
|
|
||||||
_renderObject = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
void paint(PaintingContext context, Offset offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// An abstract set of layout constraints.
|
/// An abstract set of layout constraints.
|
||||||
///
|
///
|
||||||
/// Concrete layout models (such as box) will create concrete subclasses to
|
/// Concrete layout models (such as box) will create concrete subclasses to
|
||||||
|
@ -85,12 +85,10 @@ class RenderViewportBase extends RenderBox {
|
|||||||
RenderViewportBase(
|
RenderViewportBase(
|
||||||
Offset paintOffset,
|
Offset paintOffset,
|
||||||
Axis mainAxis,
|
Axis mainAxis,
|
||||||
ViewportAnchor anchor,
|
ViewportAnchor anchor
|
||||||
RenderObjectPainter overlayPainter
|
|
||||||
) : _paintOffset = paintOffset,
|
) : _paintOffset = paintOffset,
|
||||||
_mainAxis = mainAxis,
|
_mainAxis = mainAxis,
|
||||||
_anchor = anchor,
|
_anchor = anchor {
|
||||||
_overlayPainter = overlayPainter {
|
|
||||||
assert(paintOffset != null);
|
assert(paintOffset != null);
|
||||||
assert(mainAxis != null);
|
assert(mainAxis != null);
|
||||||
assert(_offsetIsSane(_paintOffset, mainAxis));
|
assert(_offsetIsSane(_paintOffset, mainAxis));
|
||||||
@ -150,31 +148,6 @@ class RenderViewportBase extends RenderBox {
|
|||||||
markNeedsSemanticsUpdate();
|
markNeedsSemanticsUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderObjectPainter get overlayPainter => _overlayPainter;
|
|
||||||
RenderObjectPainter _overlayPainter;
|
|
||||||
set overlayPainter(RenderObjectPainter value) {
|
|
||||||
if (_overlayPainter == value)
|
|
||||||
return;
|
|
||||||
if (attached)
|
|
||||||
_overlayPainter?.detach();
|
|
||||||
_overlayPainter = value;
|
|
||||||
if (attached)
|
|
||||||
_overlayPainter?.attach(this);
|
|
||||||
markNeedsPaint();
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void attach(PipelineOwner owner) {
|
|
||||||
super.attach(owner);
|
|
||||||
_overlayPainter?.attach(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
|
||||||
void detach() {
|
|
||||||
super.detach();
|
|
||||||
_overlayPainter?.detach();
|
|
||||||
}
|
|
||||||
|
|
||||||
ViewportDimensions get dimensions => _dimensions;
|
ViewportDimensions get dimensions => _dimensions;
|
||||||
ViewportDimensions _dimensions = ViewportDimensions.zero;
|
ViewportDimensions _dimensions = ViewportDimensions.zero;
|
||||||
set dimensions(ViewportDimensions value) {
|
set dimensions(ViewportDimensions value) {
|
||||||
@ -204,8 +177,6 @@ class RenderViewportBase extends RenderBox {
|
|||||||
description.add('paintOffset: $paintOffset');
|
description.add('paintOffset: $paintOffset');
|
||||||
description.add('mainAxis: $mainAxis');
|
description.add('mainAxis: $mainAxis');
|
||||||
description.add('anchor: $anchor');
|
description.add('anchor: $anchor');
|
||||||
if (overlayPainter != null)
|
|
||||||
description.add('overlay painter: $overlayPainter');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,9 +195,8 @@ class RenderViewport extends RenderViewportBase with RenderObjectWithChildMixin<
|
|||||||
Offset paintOffset: Offset.zero,
|
Offset paintOffset: Offset.zero,
|
||||||
Axis mainAxis: Axis.vertical,
|
Axis mainAxis: Axis.vertical,
|
||||||
ViewportAnchor anchor: ViewportAnchor.start,
|
ViewportAnchor anchor: ViewportAnchor.start,
|
||||||
RenderObjectPainter overlayPainter,
|
|
||||||
this.onPaintOffsetUpdateNeeded
|
this.onPaintOffsetUpdateNeeded
|
||||||
}) : super(paintOffset, mainAxis, anchor, overlayPainter) {
|
}) : super(paintOffset, mainAxis, anchor) {
|
||||||
this.child = child;
|
this.child = child;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +284,6 @@ class RenderViewport extends RenderViewportBase with RenderObjectWithChildMixin<
|
|||||||
|
|
||||||
void paintContents(PaintingContext context, Offset offset) {
|
void paintContents(PaintingContext context, Offset offset) {
|
||||||
context.paintChild(child, offset + effectivePaintOffset);
|
context.paintChild(child, offset + effectivePaintOffset);
|
||||||
_overlayPainter?.paint(context, offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_shouldClipAtPaintOffset(effectivePaintOffset)) {
|
if (_shouldClipAtPaintOffset(effectivePaintOffset)) {
|
||||||
@ -357,11 +326,10 @@ abstract class RenderVirtualViewport<T extends ContainerBoxParentDataMixin<Rende
|
|||||||
LayoutCallback callback,
|
LayoutCallback callback,
|
||||||
Offset paintOffset: Offset.zero,
|
Offset paintOffset: Offset.zero,
|
||||||
Axis mainAxis: Axis.vertical,
|
Axis mainAxis: Axis.vertical,
|
||||||
ViewportAnchor anchor: ViewportAnchor.start,
|
ViewportAnchor anchor: ViewportAnchor.start
|
||||||
RenderObjectPainter overlayPainter
|
|
||||||
}) : _virtualChildCount = virtualChildCount,
|
}) : _virtualChildCount = virtualChildCount,
|
||||||
_callback = callback,
|
_callback = callback,
|
||||||
super(paintOffset, mainAxis, anchor, overlayPainter);
|
super(paintOffset, mainAxis, anchor);
|
||||||
|
|
||||||
int get virtualChildCount => _virtualChildCount;
|
int get virtualChildCount => _virtualChildCount;
|
||||||
int _virtualChildCount;
|
int _virtualChildCount;
|
||||||
@ -392,7 +360,6 @@ abstract class RenderVirtualViewport<T extends ContainerBoxParentDataMixin<Rende
|
|||||||
|
|
||||||
void _paintContents(PaintingContext context, Offset offset) {
|
void _paintContents(PaintingContext context, Offset offset) {
|
||||||
defaultPaint(context, offset + _effectivePaintOffset);
|
defaultPaint(context, offset + _effectivePaintOffset);
|
||||||
_overlayPainter?.paint(context, offset);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -42,7 +42,6 @@ export 'package:flutter/rendering.dart' show
|
|||||||
PointerUpEvent,
|
PointerUpEvent,
|
||||||
PointerUpEventListener,
|
PointerUpEventListener,
|
||||||
RelativeRect,
|
RelativeRect,
|
||||||
RenderObjectPainter,
|
|
||||||
ShaderCallback,
|
ShaderCallback,
|
||||||
SingleChildLayoutDelegate,
|
SingleChildLayoutDelegate,
|
||||||
TextOverflow,
|
TextOverflow,
|
||||||
@ -1147,7 +1146,6 @@ class Viewport extends SingleChildRenderObjectWidget {
|
|||||||
this.paintOffset: Offset.zero,
|
this.paintOffset: Offset.zero,
|
||||||
this.mainAxis: Axis.vertical,
|
this.mainAxis: Axis.vertical,
|
||||||
this.anchor: ViewportAnchor.start,
|
this.anchor: ViewportAnchor.start,
|
||||||
this.overlayPainter,
|
|
||||||
this.onPaintOffsetUpdateNeeded,
|
this.onPaintOffsetUpdateNeeded,
|
||||||
Widget child
|
Widget child
|
||||||
}) : super(key: key, child: child) {
|
}) : super(key: key, child: child) {
|
||||||
@ -1169,11 +1167,6 @@ class Viewport extends SingleChildRenderObjectWidget {
|
|||||||
|
|
||||||
final ViewportAnchor anchor;
|
final ViewportAnchor anchor;
|
||||||
|
|
||||||
/// Paints an overlay over the viewport.
|
|
||||||
///
|
|
||||||
/// Often used to paint scroll bars.
|
|
||||||
final RenderObjectPainter overlayPainter;
|
|
||||||
|
|
||||||
/// Called when the interior or exterior dimensions of the viewport change.
|
/// Called when the interior or exterior dimensions of the viewport change.
|
||||||
final ViewportDimensionsChangeCallback onPaintOffsetUpdateNeeded;
|
final ViewportDimensionsChangeCallback onPaintOffsetUpdateNeeded;
|
||||||
|
|
||||||
@ -1183,8 +1176,7 @@ class Viewport extends SingleChildRenderObjectWidget {
|
|||||||
paintOffset: paintOffset,
|
paintOffset: paintOffset,
|
||||||
mainAxis: mainAxis,
|
mainAxis: mainAxis,
|
||||||
anchor: anchor,
|
anchor: anchor,
|
||||||
onPaintOffsetUpdateNeeded: onPaintOffsetUpdateNeeded,
|
onPaintOffsetUpdateNeeded: onPaintOffsetUpdateNeeded
|
||||||
overlayPainter: overlayPainter
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1195,8 +1187,7 @@ class Viewport extends SingleChildRenderObjectWidget {
|
|||||||
..mainAxis = mainAxis
|
..mainAxis = mainAxis
|
||||||
..anchor = anchor
|
..anchor = anchor
|
||||||
..paintOffset = paintOffset
|
..paintOffset = paintOffset
|
||||||
..onPaintOffsetUpdateNeeded = onPaintOffsetUpdateNeeded
|
..onPaintOffsetUpdateNeeded = onPaintOffsetUpdateNeeded;
|
||||||
..overlayPainter = overlayPainter;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -318,8 +318,7 @@ class _VirtualPageViewport extends VirtualViewport {
|
|||||||
this.startOffset,
|
this.startOffset,
|
||||||
this.mainAxis,
|
this.mainAxis,
|
||||||
this.anchor,
|
this.anchor,
|
||||||
this.itemsWrap,
|
this.itemsWrap
|
||||||
this.overlayPainter
|
|
||||||
) {
|
) {
|
||||||
assert(mainAxis != null);
|
assert(mainAxis != null);
|
||||||
}
|
}
|
||||||
@ -330,7 +329,6 @@ class _VirtualPageViewport extends VirtualViewport {
|
|||||||
final Axis mainAxis;
|
final Axis mainAxis;
|
||||||
final ViewportAnchor anchor;
|
final ViewportAnchor anchor;
|
||||||
final bool itemsWrap;
|
final bool itemsWrap;
|
||||||
final RenderObjectPainter overlayPainter;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
RenderList createRenderObject(BuildContext context) => new RenderList();
|
RenderList createRenderObject(BuildContext context) => new RenderList();
|
||||||
@ -374,8 +372,7 @@ class _VirtualPageViewportElement extends VirtualViewportElement {
|
|||||||
@override
|
@override
|
||||||
void updateRenderObject(_VirtualPageViewport oldWidget) {
|
void updateRenderObject(_VirtualPageViewport oldWidget) {
|
||||||
renderObject
|
renderObject
|
||||||
..mainAxis = widget.mainAxis
|
..mainAxis = widget.mainAxis;
|
||||||
..overlayPainter = widget.overlayPainter;
|
|
||||||
super.updateRenderObject(oldWidget);
|
super.updateRenderObject(oldWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,14 +439,12 @@ class PageViewport extends _VirtualPageViewport with VirtualViewportFromIterable
|
|||||||
Axis mainAxis: Axis.vertical,
|
Axis mainAxis: Axis.vertical,
|
||||||
ViewportAnchor anchor: ViewportAnchor.start,
|
ViewportAnchor anchor: ViewportAnchor.start,
|
||||||
bool itemsWrap: false,
|
bool itemsWrap: false,
|
||||||
RenderObjectPainter overlayPainter,
|
|
||||||
this.children
|
this.children
|
||||||
}) : super(
|
}) : super(
|
||||||
startOffset,
|
startOffset,
|
||||||
mainAxis,
|
mainAxis,
|
||||||
anchor,
|
anchor,
|
||||||
itemsWrap,
|
itemsWrap
|
||||||
overlayPainter
|
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -461,15 +456,13 @@ class LazyPageViewport extends _VirtualPageViewport with VirtualViewportFromBuil
|
|||||||
double startOffset: 0.0,
|
double startOffset: 0.0,
|
||||||
Axis mainAxis: Axis.vertical,
|
Axis mainAxis: Axis.vertical,
|
||||||
ViewportAnchor anchor: ViewportAnchor.start,
|
ViewportAnchor anchor: ViewportAnchor.start,
|
||||||
RenderObjectPainter overlayPainter,
|
|
||||||
this.itemCount,
|
this.itemCount,
|
||||||
this.itemBuilder
|
this.itemBuilder
|
||||||
}) : super(
|
}) : super(
|
||||||
startOffset,
|
startOffset,
|
||||||
mainAxis,
|
mainAxis,
|
||||||
anchor,
|
anchor,
|
||||||
false, // Don't support wrapping yet.
|
false // Don't support wrapping yet.
|
||||||
overlayPainter
|
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -155,8 +155,7 @@ class _VirtualListViewport extends VirtualViewport {
|
|||||||
this.anchor,
|
this.anchor,
|
||||||
this.itemExtent,
|
this.itemExtent,
|
||||||
this.itemsWrap,
|
this.itemsWrap,
|
||||||
this.padding,
|
this.padding
|
||||||
this.overlayPainter
|
|
||||||
) {
|
) {
|
||||||
assert(mainAxis != null);
|
assert(mainAxis != null);
|
||||||
assert(itemExtent != null);
|
assert(itemExtent != null);
|
||||||
@ -169,7 +168,6 @@ class _VirtualListViewport extends VirtualViewport {
|
|||||||
final double itemExtent;
|
final double itemExtent;
|
||||||
final bool itemsWrap;
|
final bool itemsWrap;
|
||||||
final EdgeInsets padding;
|
final EdgeInsets padding;
|
||||||
final RenderObjectPainter overlayPainter;
|
|
||||||
|
|
||||||
double get _leadingPadding {
|
double get _leadingPadding {
|
||||||
switch (mainAxis) {
|
switch (mainAxis) {
|
||||||
@ -237,8 +235,7 @@ class _VirtualListViewportElement extends VirtualViewportElement {
|
|||||||
..mainAxis = widget.mainAxis
|
..mainAxis = widget.mainAxis
|
||||||
..anchor = widget.anchor
|
..anchor = widget.anchor
|
||||||
..itemExtent = widget.itemExtent
|
..itemExtent = widget.itemExtent
|
||||||
..padding = widget.padding
|
..padding = widget.padding;
|
||||||
..overlayPainter = widget.overlayPainter;
|
|
||||||
super.updateRenderObject(oldWidget);
|
super.updateRenderObject(oldWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,7 +317,6 @@ class ListViewport extends _VirtualListViewport with VirtualViewportFromIterable
|
|||||||
double itemExtent,
|
double itemExtent,
|
||||||
bool itemsWrap: false,
|
bool itemsWrap: false,
|
||||||
EdgeInsets padding,
|
EdgeInsets padding,
|
||||||
RenderObjectPainter overlayPainter,
|
|
||||||
this.children
|
this.children
|
||||||
}) : super(
|
}) : super(
|
||||||
onExtentsChanged,
|
onExtentsChanged,
|
||||||
@ -329,8 +325,7 @@ class ListViewport extends _VirtualListViewport with VirtualViewportFromIterable
|
|||||||
anchor,
|
anchor,
|
||||||
itemExtent,
|
itemExtent,
|
||||||
itemsWrap,
|
itemsWrap,
|
||||||
padding,
|
padding
|
||||||
overlayPainter
|
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -486,7 +481,6 @@ class LazyListViewport extends _VirtualListViewport with VirtualViewportFromBuil
|
|||||||
ViewportAnchor anchor: ViewportAnchor.start,
|
ViewportAnchor anchor: ViewportAnchor.start,
|
||||||
double itemExtent,
|
double itemExtent,
|
||||||
EdgeInsets padding,
|
EdgeInsets padding,
|
||||||
RenderObjectPainter overlayPainter,
|
|
||||||
this.itemCount,
|
this.itemCount,
|
||||||
this.itemBuilder
|
this.itemBuilder
|
||||||
}) : super(
|
}) : super(
|
||||||
@ -496,8 +490,7 @@ class LazyListViewport extends _VirtualListViewport with VirtualViewportFromBuil
|
|||||||
anchor,
|
anchor,
|
||||||
itemExtent,
|
itemExtent,
|
||||||
false, // Don't support wrapping yet.
|
false, // Don't support wrapping yet.
|
||||||
padding,
|
padding
|
||||||
overlayPainter
|
|
||||||
);
|
);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -1,40 +0,0 @@
|
|||||||
// Copyright 2015 The Chromium Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style license that can be
|
|
||||||
// found in the LICENSE file.
|
|
||||||
|
|
||||||
import 'package:flutter/rendering.dart';
|
|
||||||
import 'package:test/test.dart';
|
|
||||||
|
|
||||||
import 'rendering_tester.dart';
|
|
||||||
|
|
||||||
class TestBlockPainter extends RenderObjectPainter {
|
|
||||||
@override
|
|
||||||
void paint(PaintingContext context, Offset offset) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
test('overlay painters can attach and detach', () {
|
|
||||||
TestBlockPainter first = new TestBlockPainter();
|
|
||||||
TestBlockPainter second = new TestBlockPainter();
|
|
||||||
RenderList list = new RenderList(overlayPainter: first);
|
|
||||||
|
|
||||||
// The first painter isn't attached because we haven't attached block.
|
|
||||||
expect(first.renderObject, isNull);
|
|
||||||
expect(second.renderObject, isNull);
|
|
||||||
|
|
||||||
list.overlayPainter = second;
|
|
||||||
|
|
||||||
expect(first.renderObject, isNull);
|
|
||||||
expect(second.renderObject, isNull);
|
|
||||||
|
|
||||||
layout(list);
|
|
||||||
|
|
||||||
expect(first.renderObject, isNull);
|
|
||||||
expect(second.renderObject, equals(list));
|
|
||||||
|
|
||||||
list.overlayPainter = first;
|
|
||||||
|
|
||||||
expect(first.renderObject, equals(list));
|
|
||||||
expect(second.renderObject, isNull);
|
|
||||||
});
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user