Added fix for ticketShape which was causing it to break when using an… (#224)

This commit is contained in:
Sohan Reddy Atukula
2023-11-04 17:45:17 +05:30
committed by GitHub
parent 5508755fde
commit 05c8d7a368
3 changed files with 34 additions and 12 deletions

View File

@@ -361,7 +361,16 @@ data class Cuts(
val right: List<Cut>? = null,
val bottom: List<Cut>? = null,
val left: List<Cut>? = null
)
): Cloneable {
public override fun clone(): Cuts {
return Cuts(
top = top?.map { it.copy() },
right = right?.map { it.copy() },
bottom = bottom?.map { it.copy() },
left = left?.map { it.copy() }
)
}
}
data class Cut(
val centerRatio: Float,

View File

@@ -81,7 +81,7 @@ object ShapeUtil {
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)
cuts = shape.cuts
)
}
}

View File

@@ -1,6 +1,5 @@
package com.navi.uitron.utils.shapes
import androidx.compose.runtime.Composable
import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Outline
@@ -10,7 +9,6 @@ import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import com.navi.uitron.model.ui.Cuts
import toPx
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 {
@@ -20,32 +18,47 @@ class TicketShape(private val cornerRadius: Float,private val cornerRadiusTop:Fl
density: Density
): Outline {
return Outline.Generic(
path = drawTicket(size = size, cornerRadius = cornerRadius,cornerRadiusTop=cornerRadiusTop,cornerRadiusBottom=cornerRadiusBottom, ticketSplitRatio = ticketSplitRatio, ticketSplitRadius = ticketSplitRadius, cuts = cuts)
path = drawTicket(
size = size,
cornerRadius = cornerRadius,
cornerRadiusTop = cornerRadiusTop,
cornerRadiusBottom = cornerRadiusBottom,
ticketSplitRatio = ticketSplitRatio,
ticketSplitRadius = ticketSplitRadius,
cuts = convertRadii(cuts?.clone(), density)
)
)
}
}
@Composable
fun convertRadii(cuts: Cuts?): Cuts?{
fun convertRadii(cuts: Cuts?, density: Density): Cuts?{
cuts?.let {
it.top?.forEach {cut ->
cut.radius = cut.radius.dp.toPx()
cut.radius = with(density) { cut.radius.dp.toPx() }
}
it.bottom?.forEach {cut ->
cut.radius = cut.radius.dp.toPx()
cut.radius = with(density) { cut.radius.dp.toPx() }
}
it.left?.forEach {cut ->
cut.radius = cut.radius.dp.toPx()
cut.radius = with(density) { cut.radius.dp.toPx() }
}
it.right?.forEach {cut ->
cut.radius = cut.radius.dp.toPx()
cut.radius = with(density) { cut.radius.dp.toPx() }
}
return cuts
}
return null
}
fun drawTicket(size: Size, cornerRadius: Float,cornerRadiusTop: Float,cornerRadiusBottom: 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) {