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 { ...@@ -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 { ...@@ -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() { ...@@ -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() { ...@@ -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() { ...@@ -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() { ...@@ -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() { ...@@ -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))
); );
}); });
......
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