mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: SegmentProgressBar
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
@@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -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,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user