Commit 76772608 authored by Adam Barth's avatar Adam Barth

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.
parent 7c47837c
...@@ -401,12 +401,10 @@ class RenderGrid extends RenderVirtualViewport<GridParentData> { ...@@ -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> { ...@@ -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> { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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< ...@@ -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< ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 ...@@ -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 ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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 ...@@ -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
......
// 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);
});
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment