top-bottom-radius added (#215)

This commit is contained in:
Kamalesh Garnayak
2023-10-16 14:18:54 +05:30
committed by GitHub
parent 3893880fae
commit 1ec0371e64
3 changed files with 33 additions and 23 deletions

View File

@@ -121,6 +121,8 @@ data class ToolTipShapeData(
@Parcelize
data class TicketShapeData(
val cornerRadius: Int? = null,
val cornerRadiusTop: Int? = null,
val cornerRadiusBottom: Int? = null,
val ticketSplitRatio: Float? = null,
val ticketSplitRadius: Int? = null,
val cuts: @RawValue Cuts? = null

View File

@@ -77,6 +77,8 @@ object ShapeUtil {
(shape as TicketShapeData).let {
TicketShape(
cornerRadius = shape.cornerRadius?.dp?.toPx() ?: 0.dp.toPx(),
cornerRadiusTop = shape.cornerRadiusTop?.dp?.toPx() ?: 0.dp.toPx(),
cornerRadiusBottom = shape.cornerRadiusBottom?.dp?.toPx() ?: 0.dp.toPx(),
ticketSplitRatio = shape.ticketSplitRatio ?: 0.0f,
ticketSplitRadius = shape.ticketSplitRadius?.dp?.toPx() ?: 0.dp.toPx(),
cuts = convertRadii(shape.cuts)

View File

@@ -12,7 +12,7 @@ import androidx.compose.ui.unit.dp
import com.navi.uitron.model.ui.Cuts
import toPx
class TicketShape(private val cornerRadius: Float, private val ticketSplitRatio: Float, private val ticketSplitRadius: Float, private val cuts: Cuts? = null) :
class TicketShape(private val cornerRadius: Float,private val cornerRadiusTop:Float,private val cornerRadiusBottom:Float, private val ticketSplitRatio: Float, private val ticketSplitRadius: Float, private val cuts: Cuts? = null) :
Shape {
override fun createOutline(
size: Size,
@@ -20,7 +20,7 @@ class TicketShape(private val cornerRadius: Float, private val ticketSplitRatio:
density: Density
): Outline {
return Outline.Generic(
path = drawTicket(size = size, cornerRadius = cornerRadius, ticketSplitRatio = ticketSplitRatio, ticketSplitRadius = ticketSplitRadius, cuts = cuts)
path = drawTicket(size = size, cornerRadius = cornerRadius,cornerRadiusTop=cornerRadiusTop,cornerRadiusBottom=cornerRadiusBottom, ticketSplitRatio = ticketSplitRatio, ticketSplitRadius = ticketSplitRadius, cuts = cuts)
)
}
}
@@ -45,16 +45,22 @@ fun convertRadii(cuts: Cuts?): Cuts?{
return null
}
fun drawTicket(size: Size, cornerRadius: Float, ticketSplitRatio: Float, ticketSplitRadius: Float, cuts: Cuts?): Path {
fun drawTicket(size: Size, cornerRadius: Float,cornerRadiusTop: Float,cornerRadiusBottom: Float, ticketSplitRatio: Float, ticketSplitRadius: Float, cuts: Cuts?): Path {
var ticketCornerRadiusTop = cornerRadiusTop
var ticketCornerRadiusBottom = cornerRadiusBottom
if (cornerRadiusTop == 0f && cornerRadiusBottom == 0f) {
ticketCornerRadiusTop = cornerRadius
ticketCornerRadiusBottom = cornerRadius
}
return Path().apply {
reset()
// Top left arc
arcTo(
rect = Rect(
left = -cornerRadius,
top = -cornerRadius,
right = cornerRadius,
bottom = cornerRadius
left = -ticketCornerRadiusTop,
top = -ticketCornerRadiusTop,
right = ticketCornerRadiusTop,
bottom = ticketCornerRadiusTop
),
startAngleDegrees = 90.0f,
sweepAngleDegrees = -90.0f,
@@ -77,14 +83,14 @@ fun drawTicket(size: Size, cornerRadius: Float, ticketSplitRatio: Float, ticketS
forceMoveTo = false
)
}
lineTo(x = size.width - cornerRadius, y = 0f)
lineTo(x = size.width - ticketCornerRadiusTop, y = 0f)
// Top right arc
arcTo(
rect = Rect(
left = size.width - cornerRadius,
top = -cornerRadius,
right = size.width + cornerRadius,
bottom = cornerRadius
left = size.width - ticketCornerRadiusTop,
top = -ticketCornerRadiusTop,
right = size.width + ticketCornerRadiusTop,
bottom = ticketCornerRadiusTop
),
startAngleDegrees = 180.0f,
sweepAngleDegrees = -90.0f,
@@ -123,13 +129,13 @@ fun drawTicket(size: Size, cornerRadius: Float, ticketSplitRatio: Float, ticketS
)
// Bottom right arc
lineTo(x = size.width, y = size.height - cornerRadius)
lineTo(x = size.width, y = size.height - ticketCornerRadiusBottom)
arcTo(
rect = Rect(
left = size.width - cornerRadius,
top = size.height - cornerRadius,
right = size.width + cornerRadius,
bottom = size.height + cornerRadius
left = size.width - ticketCornerRadiusBottom,
top = size.height - ticketCornerRadiusBottom,
right = size.width + ticketCornerRadiusBottom,
bottom = size.height + ticketCornerRadiusBottom
),
startAngleDegrees = 270.0f,
sweepAngleDegrees = -90.0f,
@@ -155,13 +161,13 @@ fun drawTicket(size: Size, cornerRadius: Float, ticketSplitRatio: Float, ticketS
}
// Bottom left arc
lineTo(x = cornerRadius, y = size.height)
lineTo(x = ticketCornerRadiusBottom, y = size.height)
arcTo(
rect = Rect(
left = -cornerRadius,
top = size.height - cornerRadius,
right = cornerRadius,
bottom = size.height + cornerRadius
left = -ticketCornerRadiusBottom,
top = size.height - ticketCornerRadiusBottom,
right = ticketCornerRadiusBottom,
bottom = size.height + ticketCornerRadiusBottom
),
startAngleDegrees = 0.0f,
sweepAngleDegrees = -90.0f,
@@ -194,7 +200,7 @@ fun drawTicket(size: Size, cornerRadius: Float, ticketSplitRatio: Float, ticketS
sweepAngleDegrees = -180.0f,
forceMoveTo = false
)
lineTo(x = 0f, y = cornerRadius)
lineTo(x = 0f, y = ticketCornerRadiusTop)
close()
}
}