Fix some scrollbar track and border painting issues (#90311)
This commit is contained in:
parent
91dd3276fd
commit
905ac63e34
@ -428,37 +428,46 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
|
||||
|
||||
final double x, y;
|
||||
final Size thumbSize, trackSize;
|
||||
final Offset trackOffset;
|
||||
final Offset trackOffset, borderStart, borderEnd;
|
||||
|
||||
_debugAssertIsValidOrientation(resolvedOrientation);
|
||||
|
||||
switch(resolvedOrientation) {
|
||||
case ScrollbarOrientation.left:
|
||||
thumbSize = Size(thickness, thumbExtent);
|
||||
trackSize = Size(thickness + 2 * crossAxisMargin, _trackExtent);
|
||||
x = crossAxisMargin + padding.left;
|
||||
y = _thumbOffset;
|
||||
trackOffset = Offset(x - crossAxisMargin, 0.0);
|
||||
trackOffset = Offset(x - crossAxisMargin, mainAxisMargin);
|
||||
borderStart = trackOffset + Offset(trackSize.width, 0.0);
|
||||
borderEnd = Offset(trackOffset.dx + trackSize.width, trackOffset.dy + _trackExtent);
|
||||
break;
|
||||
case ScrollbarOrientation.right:
|
||||
thumbSize = Size(thickness, thumbExtent);
|
||||
trackSize = Size(thickness + 2 * crossAxisMargin, _trackExtent);
|
||||
x = size.width - thickness - crossAxisMargin - padding.right;
|
||||
y = _thumbOffset;
|
||||
trackOffset = Offset(x - crossAxisMargin, 0.0);
|
||||
trackOffset = Offset(x - crossAxisMargin, mainAxisMargin);
|
||||
borderStart = trackOffset;
|
||||
borderEnd = Offset(trackOffset.dx, trackOffset.dy + _trackExtent);
|
||||
break;
|
||||
case ScrollbarOrientation.top:
|
||||
thumbSize = Size(thumbExtent, thickness);
|
||||
trackSize = Size(_trackExtent, thickness + 2 * crossAxisMargin);
|
||||
x = _thumbOffset;
|
||||
y = crossAxisMargin + padding.top;
|
||||
trackOffset = Offset(0.0, y - crossAxisMargin);
|
||||
trackOffset = Offset(mainAxisMargin, y - crossAxisMargin);
|
||||
borderStart = trackOffset + Offset(0.0, trackSize.height);
|
||||
borderEnd = Offset(trackOffset.dx + _trackExtent, trackOffset.dy + trackSize.height);
|
||||
break;
|
||||
case ScrollbarOrientation.bottom:
|
||||
thumbSize = Size(thumbExtent, thickness);
|
||||
trackSize = Size(_trackExtent, thickness + 2 * crossAxisMargin);
|
||||
x = _thumbOffset;
|
||||
y = size.height - thickness - crossAxisMargin - padding.bottom;
|
||||
trackOffset = Offset(0.0, y - crossAxisMargin);
|
||||
trackOffset = Offset(mainAxisMargin, y - crossAxisMargin);
|
||||
borderStart = trackOffset;
|
||||
borderEnd = Offset(trackOffset.dx + _trackExtent, trackOffset.dy);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -472,15 +481,10 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
|
||||
// Track
|
||||
canvas.drawRect(_trackRect!, _paintTrack());
|
||||
// Track Border
|
||||
canvas.drawLine(
|
||||
trackOffset,
|
||||
Offset(trackOffset.dx, trackOffset.dy + _trackExtent),
|
||||
_paintTrack(isBorder: true),
|
||||
);
|
||||
canvas.drawLine(borderStart, borderEnd, _paintTrack(isBorder: true));
|
||||
if (radius != null) {
|
||||
// Rounded rect thumb
|
||||
canvas.drawRRect(
|
||||
RRect.fromRectAndRadius(_thumbRect!, radius!), _paintThumb);
|
||||
canvas.drawRRect(RRect.fromRectAndRadius(_thumbRect!, radius!), _paintThumb);
|
||||
return;
|
||||
}
|
||||
if (shape == null) {
|
||||
|
@ -1112,11 +1112,11 @@ void main() {
|
||||
find.byType(CupertinoScrollbar),
|
||||
paints
|
||||
..rect(
|
||||
rect: const Rect.fromLTRB(0.0, 0.0, 9.0, 594.0),
|
||||
rect: const Rect.fromLTRB(0.0, 3.0, 9.0, 597.0),
|
||||
)
|
||||
..line(
|
||||
p1: Offset.zero,
|
||||
p2: const Offset(0.0, 594.0),
|
||||
p1: const Offset(9.0, 3.0),
|
||||
p2: const Offset(9.0, 597.0),
|
||||
strokeWidth: 1.0,
|
||||
)
|
||||
..rrect(
|
||||
|
@ -67,8 +67,8 @@ void main() {
|
||||
color: const Color(0x00000000),
|
||||
)
|
||||
..line(
|
||||
p1: Offset.zero,
|
||||
p2: const Offset(0.0, 600.0),
|
||||
p1: const Offset(4.0, 0.0),
|
||||
p2: const Offset(4.0, 600.0),
|
||||
strokeWidth: 1.0,
|
||||
color: const Color(0x00000000),
|
||||
)
|
||||
|
@ -1546,8 +1546,8 @@ void main() {
|
||||
color: Colors.transparent,
|
||||
)
|
||||
..line(
|
||||
p1: Offset.zero,
|
||||
p2: const Offset(0.0, 600.0),
|
||||
p1: const Offset(4.0, 0.0),
|
||||
p2: const Offset(4.0, 600.0),
|
||||
strokeWidth: 1.0,
|
||||
color: Colors.transparent,
|
||||
)
|
||||
|
@ -174,19 +174,19 @@ void main() {
|
||||
final TestGesture gesture = await tester.createGesture(kind: ui.PointerDeviceKind.mouse);
|
||||
await gesture.addPointer();
|
||||
addTearDown(gesture.removePointer);
|
||||
await gesture.moveTo(const Offset(794.0, 5.0));
|
||||
await gesture.moveTo(const Offset(794.0, 15.0));
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(
|
||||
find.byType(Scrollbar),
|
||||
paints
|
||||
..rect(
|
||||
rect: const Rect.fromLTRB(770.0, 0.0, 800.0, 580.0),
|
||||
rect: const Rect.fromLTRB(770.0, 10.0, 800.0, 590.0),
|
||||
color: const Color(0xff000000),
|
||||
)
|
||||
..line(
|
||||
p1: const Offset(770.0, 0.0),
|
||||
p2: const Offset(770.0, 580.0),
|
||||
p1: const Offset(770.0, 10.0),
|
||||
p2: const Offset(770.0, 590.0),
|
||||
strokeWidth: 1.0,
|
||||
color: const Color(0xffffeb3b),
|
||||
)
|
||||
|
@ -1524,7 +1524,7 @@ void main() {
|
||||
expect(
|
||||
find.byType(RawScrollbar),
|
||||
paints
|
||||
..rect(rect: const Rect.fromLTRB(794.0, 0.0, 800.0, 580.0))
|
||||
..rect(rect: const Rect.fromLTRB(794.0, 10.0, 800.0, 590.0))
|
||||
..rect(rect: const Rect.fromLTRB(794.0, 10.0, 800.0, 358.0))
|
||||
);
|
||||
});
|
||||
|
Loading…
x
Reference in New Issue
Block a user