Skip to content

Commit 7789be2

Browse files
author
Patxi Bocos
committed
Add support for triangle shape
1 parent 1ebaf94 commit 7789be2

File tree

4 files changed

+33
-0
lines changed

4 files changed

+33
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,6 @@ captures/
5959
jarRepositories.xml
6060
androidTestResultsUserPreferences.xml
6161
migrations.xml
62+
63+
# macOS
64+
.DS_Store

konfetti/compose/src/main/java/nl/dionsegijn/konfetti/compose/DrawShapes.kt

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import androidx.compose.ui.geometry.Offset
88
import androidx.compose.ui.geometry.Size
99
import androidx.compose.ui.graphics.Color
1010
import androidx.compose.ui.graphics.ImageBitmap
11+
import androidx.compose.ui.graphics.Path
1112
import androidx.compose.ui.graphics.drawscope.DrawScope
1213
import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
1314
import androidx.compose.ui.graphics.nativeCanvas
@@ -19,6 +20,7 @@ import nl.dionsegijn.konfetti.core.models.Shape.DrawableShape
1920
import nl.dionsegijn.konfetti.core.models.Shape.Rectangle
2021
import nl.dionsegijn.konfetti.core.models.Shape.Square
2122
import nl.dionsegijn.konfetti.xml.image.ImageStore
23+
import kotlin.math.sqrt
2224

2325
/**
2426
* Draw a shape to `compose canvas`. Implementations are expected to draw within a square of size
@@ -84,5 +86,19 @@ fun Shape.draw(
8486
}
8587
}
8688
}
89+
Shape.Triangle -> {
90+
val triangleWidth = particle.width
91+
val triangleHeight = triangleWidth * sqrt(3.0) / 2
92+
val trianglePath =
93+
Path().apply {
94+
moveTo(particle.x + particle.width / 2, particle.y)
95+
lineTo(particle.x + triangleWidth, particle.y + triangleHeight.toFloat())
96+
lineTo(particle.x, particle.y + triangleHeight.toFloat())
97+
}
98+
drawScope.drawPath(
99+
color = Color(particle.color),
100+
path = trianglePath,
101+
)
102+
}
87103
}
88104
}

konfetti/core/src/main/java/nl/dionsegijn/konfetti/core/models/Shape.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ sealed interface Shape {
88

99
object Square : Shape
1010

11+
object Triangle : Shape
12+
1113
class Rectangle(
1214
/** The ratio of height to width. Must be within range [0, 1] */
1315
val heightRatio: Float,

konfetti/xml/src/main/java/nl/dionsegijn/konfetti/xml/DrawShapes.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.graphics.BlendMode
44
import android.graphics.BlendModeColorFilter
55
import android.graphics.Canvas
66
import android.graphics.Paint
7+
import android.graphics.Path
78
import android.graphics.PorterDuff
89
import android.graphics.RectF
910
import android.os.Build
@@ -15,6 +16,7 @@ import nl.dionsegijn.konfetti.core.models.Shape.DrawableShape
1516
import nl.dionsegijn.konfetti.core.models.Shape.Rectangle
1617
import nl.dionsegijn.konfetti.core.models.Shape.Square
1718
import nl.dionsegijn.konfetti.xml.image.ImageStore
19+
import kotlin.math.sqrt
1820

1921
/**
2022
* Draw a shape to `canvas`. Implementations are expected to draw within a square of size
@@ -61,5 +63,15 @@ fun Shape.draw(
6163
drawable.draw(canvas)
6264
}
6365
}
66+
Shape.Triangle -> {
67+
val triangleHeight = size * sqrt(3.0) / 2
68+
val trianglePath =
69+
Path().apply {
70+
moveTo(size / 2, 0f)
71+
lineTo(size, triangleHeight.toFloat())
72+
lineTo(0f, triangleHeight.toFloat())
73+
}
74+
canvas.drawPath(trianglePath, paint)
75+
}
6476
}
6577
}

0 commit comments

Comments
 (0)