Unverified Commit 905ac63e authored by xubaolin's avatar xubaolin Committed by GitHub

Fix some scrollbar track and border painting issues (#90311)

parent 91dd3276
......@@ -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))
);
});
......
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