@@ -22,10 +22,10 @@ internal class NowLineDrawer(
22
22
.map { (_, startPixel) -> startPixel }
23
23
.firstOrNull() ? : return
24
24
25
- drawLine(startPixel, canvas )
25
+ canvas. drawLine(startPixel)
26
26
}
27
27
28
- private fun drawLine (startPixel : Float , canvas : Canvas ) {
28
+ private fun Canvas. drawLine (startPixel : Float ) {
29
29
val top = config.headerHeight + config.currentOrigin.y
30
30
val now = now()
31
31
@@ -35,17 +35,24 @@ internal class NowLineDrawer(
35
35
36
36
val startX = max(startPixel, config.timeColumnWidth)
37
37
val endX = startPixel + config.totalDayWidth
38
- canvas. drawLine(startX, verticalOffset, endX, verticalOffset, config.nowLinePaint)
38
+ drawLine(startX, verticalOffset, endX, verticalOffset, config.nowLinePaint)
39
39
40
40
if (config.showNowLineDot) {
41
- drawDot(startPixel, verticalOffset, canvas )
41
+ drawDot(startPixel, verticalOffset)
42
42
}
43
43
}
44
44
45
- private fun drawDot (startPixel : Float , lineStartY : Float , canvas : Canvas ) {
46
- // We use a margin to prevent the dot from sticking on the left side of the screen
45
+ private fun Canvas.drawDot (startPixel : Float , lineStartY : Float ) {
47
46
val dotRadius = config.nowDotPaint.strokeWidth
48
- val dotMargin = 32f
49
- canvas.drawCircle(startPixel + dotMargin, lineStartY, dotRadius, config.nowDotPaint)
47
+ val actualStartPixel = max(startPixel, config.timeColumnWidth)
48
+
49
+ val fullLineWidth = config.totalDayWidth
50
+ val actualEndPixel = startPixel + fullLineWidth
51
+
52
+ val currentlyDisplayedWidth = actualEndPixel - actualStartPixel
53
+ val currentlyDisplayedPortion = currentlyDisplayedWidth / fullLineWidth
54
+
55
+ val adjustedRadius = currentlyDisplayedPortion * dotRadius
56
+ drawCircle(actualStartPixel, lineStartY, adjustedRadius, config.nowDotPaint)
50
57
}
51
58
}
0 commit comments