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