opt: SegmentProgressBar

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-03 11:42:28 +08:00
parent 49fe27176d
commit 98158c4f0c
3 changed files with 29 additions and 43 deletions

View File

@@ -21,12 +21,10 @@ class Segment {
} }
class SegmentProgressBar extends CustomPainter { class SegmentProgressBar extends CustomPainter {
final double progress;
final List<Segment> segmentColors; final List<Segment> segmentColors;
double? _defHeight; late double _defHeight;
SegmentProgressBar({ SegmentProgressBar({
required this.progress,
required this.segmentColors, required this.segmentColors,
}); });
@@ -38,35 +36,13 @@ class SegmentProgressBar extends CustomPainter {
paint.color = segmentColors[i].color; paint.color = segmentColors[i].color;
final segmentStart = segmentColors[i].start * size.width; final segmentStart = segmentColors[i].start * size.width;
final segmentEnd = segmentColors[i].end * size.width; final segmentEnd = segmentColors[i].end * size.width;
final progressEnd = progress * size.width;
if (progressEnd < segmentStart) { if (segmentEnd > segmentStart ||
break; (segmentEnd == segmentStart && segmentStart > 0)) {
}
final segmentWidth =
(progressEnd < segmentEnd ? progressEnd : segmentEnd) - segmentStart;
if (segmentWidth >= 0) {
if (segmentColors[i].title != null) { if (segmentColors[i].title != null) {
double fontSize = 8; double fontSize = 8;
TextPainter textPainter = TextPainter(
text: TextSpan(
text: segmentColors[i].title,
style: TextStyle(color: Colors.white, fontSize: fontSize),
),
textDirection: TextDirection.ltr,
)..layout();
_defHeight ??= textPainter.height;
double? prevStart; TextPainter getTextPainter() => TextPainter(
if (i != 0) {
prevStart = segmentColors[i - 1].start * size.width;
}
double width = i == 0 ? segmentStart : segmentStart - prevStart!;
while (textPainter.width > width - 2 && fontSize >= 2) {
fontSize -= 1;
textPainter = TextPainter(
text: TextSpan( text: TextSpan(
text: segmentColors[i].title, text: segmentColors[i].title,
style: TextStyle( style: TextStyle(
@@ -75,15 +51,29 @@ class SegmentProgressBar extends CustomPainter {
), ),
), ),
textDirection: TextDirection.ltr, textDirection: TextDirection.ltr,
); )..layout();
textPainter.layout();
TextPainter textPainter = getTextPainter();
if (i == 0) {
_defHeight = textPainter.height;
}
late double prevStart;
if (i != 0) {
prevStart = segmentColors[i - 1].start * size.width;
}
double width = i == 0 ? segmentStart : segmentStart - prevStart;
while (textPainter.width > width - 2 && fontSize >= 2) {
fontSize -= 1;
textPainter = getTextPainter();
} }
if (i == 0) { if (i == 0) {
canvas.drawRect( canvas.drawRect(
Rect.fromLTRB( Rect.fromLTRB(
0, 0,
-_defHeight!, -_defHeight,
size.width, size.width,
0, 0,
), ),
@@ -94,26 +84,26 @@ class SegmentProgressBar extends CustomPainter {
canvas.drawRect( canvas.drawRect(
Rect.fromLTWH( Rect.fromLTWH(
segmentStart, segmentStart,
-_defHeight!, -_defHeight,
segmentWidth == 0 ? 2 : segmentWidth, segmentEnd == segmentStart ? 2 : segmentEnd - segmentStart,
size.height + _defHeight!, size.height + _defHeight,
), ),
paint, paint,
); );
double textX = i == 0 double textX = i == 0
? (segmentStart - textPainter.width) / 2 ? (segmentStart - textPainter.width) / 2
: (segmentStart - prevStart! - textPainter.width) / 2 + : (segmentStart - prevStart - textPainter.width) / 2 +
prevStart + prevStart +
1; 1;
double textY = -_defHeight! / 2 - textPainter.height / 2; double textY = (-_defHeight - textPainter.height) / 2;
textPainter.paint(canvas, Offset(textX, textY)); textPainter.paint(canvas, Offset(textX, textY));
} else { } else {
canvas.drawRect( canvas.drawRect(
Rect.fromLTWH( Rect.fromLTWH(
segmentStart, segmentStart,
0, 0,
segmentWidth == 0 ? 2 : segmentWidth, segmentEnd == segmentStart ? 2 : segmentEnd - segmentStart,
size.height, size.height,
), ),
paint, paint,

View File

@@ -1137,7 +1137,6 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
CustomPaint( CustomPaint(
size: Size(double.infinity, 3.5), size: Size(double.infinity, 3.5),
painter: SegmentProgressBar( painter: SegmentProgressBar(
progress: 1,
segmentColors: plPlayerController.segmentList, segmentColors: plPlayerController.segmentList,
), ),
), ),
@@ -1146,7 +1145,6 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
CustomPaint( CustomPaint(
size: Size(double.infinity, 3.5), size: Size(double.infinity, 3.5),
painter: SegmentProgressBar( painter: SegmentProgressBar(
progress: 1,
segmentColors: plPlayerController.viewPointList, segmentColors: plPlayerController.viewPointList,
), ),
), ),

View File

@@ -100,7 +100,6 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget {
CustomPaint( CustomPaint(
size: Size(double.infinity, 3.5), size: Size(double.infinity, 3.5),
painter: SegmentProgressBar( painter: SegmentProgressBar(
progress: 1,
segmentColors: controller!.segmentList, segmentColors: controller!.segmentList,
), ),
), ),
@@ -109,7 +108,6 @@ class BottomControl extends StatelessWidget implements PreferredSizeWidget {
CustomPaint( CustomPaint(
size: Size(double.infinity, 3.5), size: Size(double.infinity, 3.5),
painter: SegmentProgressBar( painter: SegmentProgressBar(
progress: 1,
segmentColors: controller!.viewPointList, segmentColors: controller!.viewPointList,
), ),
), ),