curved text on wheel
Auto Tag on Version Change / check-version (push) Failing after 14m44s

This commit is contained in:
2026-06-03 14:13:17 +05:00
parent f575941141
commit b4f66342af
@@ -316,8 +316,6 @@ class CircularWheelView @JvmOverloads constructor(
val iconX = cx + cosA * (outerRadius * 0.63f)
val iconY = cy + sinA * (outerRadius * 0.63f)
val textX = cx + cosA * (outerRadius * 0.84f)
val textY = cy + sinA * (outerRadius * 0.84f)
// Icon — radially oriented; top items are naturally upside-down
iconBitmaps.getOrNull(index)?.let { bmp ->
@@ -328,12 +326,23 @@ class CircularWheelView @JvmOverloads constructor(
canvas.restore()
}
// Label — same radial rotation
// Curved label — same radial orientation as icons.
// In the local rotated frame the wheel arc is a circle of radius `labelRadius`
// with its centre directly "above" at (0, -labelRadius). A CCW arc through (0,0)
// flows rightward at that point, matching the natural reading direction at 6 o'clock.
val labelRadius = outerRadius * 0.84f
val textX = cx + cosA * labelRadius
val textY = cy + sinA * labelRadius
val label = items[index].label
textPaint.color = labelColor
textPaint.textAlign = Paint.Align.LEFT
val halfAngleDeg = Math.toDegrees((textPaint.measureText(label) / 2.0) / labelRadius).toFloat()
val localArcRect = RectF(-labelRadius, -2f * labelRadius, labelRadius, 0f)
val arcPath = Path().apply { addArc(localArcRect, 90f + halfAngleDeg, -(halfAngleDeg * 2f)) }
canvas.save()
canvas.translate(textX, textY)
canvas.rotate(midDeg - 90f)
canvas.drawText(items[index].label, 0f, textPaint.textSize * 0.36f, textPaint)
canvas.drawTextOnPath(label, arcPath, 0f, textPaint.textSize * 0.36f, textPaint)
canvas.restore()
}