top-bottom-radius added (#215)
This commit is contained in:
committed by
GitHub
parent
3893880fae
commit
1ec0371e64
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user