opt: viewpoints

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-01 19:34:03 +08:00
parent aa05ae3f32
commit a0b1e23727

View File

@@ -12,6 +12,7 @@ class Segment {
class SegmentProgressBar extends CustomPainter { class SegmentProgressBar extends CustomPainter {
final double progress; final double progress;
final List<Segment> segmentColors; final List<Segment> segmentColors;
double? _defHeight;
SegmentProgressBar({ SegmentProgressBar({
required this.progress, required this.progress,
@@ -36,19 +37,42 @@ class SegmentProgressBar extends CustomPainter {
(progressEnd < segmentEnd ? progressEnd : segmentEnd) - segmentStart; (progressEnd < segmentEnd ? progressEnd : segmentEnd) - segmentStart;
if (segmentWidth >= 0) { if (segmentWidth >= 0) {
if (segmentColors[i].title != null) { if (segmentColors[i].title != null) {
double fontSize = 8;
TextPainter textPainter = TextPainter( TextPainter textPainter = TextPainter(
text: TextSpan( text: TextSpan(
text: segmentColors[i].title, text: segmentColors[i].title,
style: TextStyle(color: Colors.white, fontSize: 8), style: TextStyle(color: Colors.white, fontSize: fontSize),
), ),
textDirection: TextDirection.ltr, textDirection: TextDirection.ltr,
)..layout(); )..layout();
_defHeight ??= textPainter.height;
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 = TextPainter(
text: TextSpan(
text: segmentColors[i].title,
style: TextStyle(
color: Colors.white,
fontSize: fontSize,
),
),
textDirection: TextDirection.ltr,
);
textPainter.layout();
}
if (i == 0) { if (i == 0) {
canvas.drawRect( canvas.drawRect(
Rect.fromLTRB( Rect.fromLTRB(
0, 0,
size.height - textPainter.height, -_defHeight!,
size.width, size.width,
0, 0,
), ),
@@ -59,21 +83,19 @@ class SegmentProgressBar extends CustomPainter {
canvas.drawRect( canvas.drawRect(
Rect.fromLTWH( Rect.fromLTWH(
segmentStart, segmentStart,
-textPainter.height + 3, -_defHeight!,
segmentWidth == 0 ? 2 : segmentWidth, segmentWidth == 0 ? 2 : segmentWidth,
size.height + textPainter.height - 3, size.height + _defHeight!,
), ),
paint, paint,
); );
double? prevStart;
if (i != 0) {
prevStart = segmentColors[i - 1].start * size.width;
}
double textX = i == 0 double textX = i == 0
? (segmentStart - textPainter.width) / 2 ? (segmentStart - textPainter.width) / 2
: (segmentStart - prevStart! - textPainter.width) / 2 + prevStart; : (segmentStart - prevStart! - textPainter.width) / 2 +
double textY = size.height - textPainter.height - 2; prevStart +
1;
double textY = -_defHeight! / 2 - textPainter.height / 2;
textPainter.paint(canvas, Offset(textX, textY)); textPainter.paint(canvas, Offset(textX, textY));
} else { } else {
canvas.drawRect( canvas.drawRect(