opt: RepaintBoundary (#1840)

* opt: RepaintBoundary

* fix [skip ci]

* opt time width

* opt: video position

* update

---------

Co-authored-by: dom <githubaccount56556@proton.me>
This commit is contained in:
My-Responsitories
2026-02-20 21:04:34 +08:00
committed by GitHub
parent a63ca93762
commit d7d9655f81
12 changed files with 226 additions and 128 deletions

View File

@@ -123,17 +123,17 @@ class RenderProgressBar extends BaseRenderProgressBar<Segment> {
for (final segment in segments) {
paint.color = segment.color;
final segmentStart = segment.start * size.width;
final segmentEnd = segment.end * size.width;
final segmentStart = offset.dx + segment.start * size.width;
final segmentEnd = offset.dx + segment.end * size.width;
if (segmentEnd > segmentStart ||
(segmentEnd == segmentStart && segmentStart > 0)) {
canvas.drawRect(
Rect.fromLTRB(
segmentStart,
0,
offset.dy,
segmentEnd == segmentStart ? segmentStart + 2 : segmentEnd,
size.height,
size.height + offset.dy,
),
paint,
);
@@ -225,6 +225,12 @@ class RenderViewPointProgressBar
final canvas = context.canvas;
final paint = Paint()..style = PaintingStyle.fill;
if (offset != .zero) {
canvas
..save()
..translate(offset.dx, offset.dy);
}
assert(segments.isSortedBy((i) => i.end));
canvas.drawRect(
@@ -276,6 +282,7 @@ class RenderViewPointProgressBar
}
prevEnd = segmentEnd + _dividerWidth;
}
if (offset != .zero) canvas.restore();
}
ValueSetter<Duration>? _onSeek;
@@ -371,7 +378,4 @@ class BaseRenderProgressBar<T extends BaseSegment> extends RenderBox {
void performLayout() {
size = constraints.constrainDimensions(constraints.maxWidth, height);
}
@override
bool get isRepaintBoundary => true;
}

View File

@@ -119,7 +119,9 @@ class RenderProgressBar extends RenderBox {
@override
void paint(PaintingContext context, Offset offset) {
final size = this.size;
final canvas = context.canvas;
final canvas = context.canvas
..save()
..translate(offset.dx, offset.dy);
final paint = Paint()..style = .fill;
canvas.clipRect(
@@ -147,8 +149,6 @@ class RenderProgressBar extends RenderBox {
..drawRect(left, paint..color = _color)
..drawRect(right, paint..color = _backgroundColor);
}
canvas.restore();
}
@override
bool get isRepaintBoundary => true;
}