Skip to content

Commit

Permalink
lasso draw path mode added
Browse files Browse the repository at this point in the history
  • Loading branch information
T8RIN committed Nov 30, 2023
1 parent ce153f8 commit d0d9a0d
Show file tree
Hide file tree
Showing 10 changed files with 140 additions and 70 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,11 @@ class AndroidImageDrawApplier @Inject constructor(
DrawPathMode.Oval
).any { pathMode::class.isInstance(it) }

val isFilled = pathMode is DrawPathMode.Rect || pathMode is DrawPathMode.Oval
val isFilled = listOf(
DrawPathMode.Rect,
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { pathMode::class.isInstance(it) }

if (effect is DrawMode.PathEffect && !isErasing) {
val shaderSource = imageManager.transform(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,10 +78,15 @@ class AndroidFilterMaskApplier @Inject constructor(
DrawPathMode.OutlinedRect,
DrawPathMode.OutlinedOval,
DrawPathMode.Rect,
DrawPathMode.Oval
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { pathMode::class.isInstance(it) }

val isFilled = pathMode is DrawPathMode.Rect || pathMode is DrawPathMode.Oval
val isFilled = listOf(
DrawPathMode.Rect,
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { pathMode::class.isInstance(it) }

drawPath(
path,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ sealed class DrawPathMode(open val ordinal: Int) {
data object DoublePointingArrow : DrawPathMode(2)
data object LinePointingArrow : DrawPathMode(3)
data object DoubleLinePointingArrow : DrawPathMode(4)
data object OutlinedRect : DrawPathMode(5)
data object OutlinedOval : DrawPathMode(6)
data object Rect : DrawPathMode(7)
data object Oval : DrawPathMode(8)
data object Lasso : DrawPathMode(5)
data object OutlinedRect : DrawPathMode(6)
data object OutlinedOval : DrawPathMode(7)
data object Rect : DrawPathMode(8)
data object Oval : DrawPathMode(9)

//TODO data object DoubleLinePointingArrowWithText: DrawPathMode(5)

Expand All @@ -24,6 +25,7 @@ sealed class DrawPathMode(open val ordinal: Int) {
DoublePointingArrow,
LinePointingArrow,
DoubleLinePointingArrow,
Lasso,
OutlinedRect,
OutlinedOval,
Rect,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -398,21 +398,15 @@ fun DrawScreen(
value = drawMode,
onValueChange = { drawMode = it }
)
AnimatedVisibility(
visible = !isEraserOn,
enter = fadeIn() + expandVertically(),
exit = fadeOut() + shrinkVertically()
) {
DrawPathModeSelector(
modifier = Modifier.padding(
start = 16.dp,
end = 16.dp,
bottom = 16.dp
),
value = drawPathMode,
onValueChange = { drawPathMode = it }
)
}
DrawPathModeSelector(
modifier = Modifier.padding(
start = 16.dp,
end = 16.dp,
bottom = 16.dp
),
value = drawPathMode,
onValueChange = { drawPathMode = it }
)
SaveExifWidget(
modifier = Modifier.padding(horizontal = 16.dp),
checked = viewModel.saveExif,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -216,11 +216,15 @@ fun BitmapDrawer(
DrawPathMode.OutlinedRect,
DrawPathMode.OutlinedOval,
DrawPathMode.Rect,
DrawPathMode.Oval
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { drawPathMode::class.isInstance(it) }

val isFilled =
drawPathMode is DrawPathMode.Rect || drawPathMode is DrawPathMode.Oval
val isFilled = listOf(
DrawPathMode.Rect,
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { drawPathMode::class.isInstance(it) }

Paint().apply {
blendMode = if (!isEraserOn) blendMode else BlendMode.Clear
Expand Down Expand Up @@ -504,11 +508,15 @@ fun BitmapDrawer(
DrawPathMode.OutlinedRect,
DrawPathMode.OutlinedOval,
DrawPathMode.Rect,
DrawPathMode.Oval
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { pathMode::class.isInstance(it) }

val isFilled =
pathMode is DrawPathMode.Rect || pathMode is DrawPathMode.Oval
val isFilled = listOf(
DrawPathMode.Rect,
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { pathMode::class.isInstance(it) }

if (effect is DrawMode.PathEffect && !isErasing) {
var shaderSource by remember(backgroundColor) {
Expand Down Expand Up @@ -641,11 +649,15 @@ fun BitmapDrawer(
DrawPathMode.OutlinedRect,
DrawPathMode.OutlinedOval,
DrawPathMode.Rect,
DrawPathMode.Oval
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { drawPathMode::class.isInstance(it) }

val isFilled =
drawPathMode is DrawPathMode.Rect || drawPathMode is DrawPathMode.Oval
val isFilled = listOf(
DrawPathMode.Rect,
DrawPathMode.Oval,
DrawPathMode.Lasso
).any { drawPathMode::class.isInstance(it) }

val paint = Paint().apply {
if (isFilled) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ import ru.tech.imageresizershrinker.domain.image.draw.DrawPathMode
import ru.tech.imageresizershrinker.presentation.root.icons.material.FreeArrow
import ru.tech.imageresizershrinker.presentation.root.icons.material.FreeDoubleArrow
import ru.tech.imageresizershrinker.presentation.root.icons.material.FreeDraw
import ru.tech.imageresizershrinker.presentation.root.icons.material.Lasso
import ru.tech.imageresizershrinker.presentation.root.icons.material.Line
import ru.tech.imageresizershrinker.presentation.root.icons.material.LineArrow
import ru.tech.imageresizershrinker.presentation.root.icons.material.LineDoubleArrow
Expand Down Expand Up @@ -264,6 +265,7 @@ private fun DrawPathMode.getSubtitle(): Int = when (this) {
DrawPathMode.OutlinedRect -> R.string.outlined_rect_sub
DrawPathMode.Oval -> R.string.oval_sub
DrawPathMode.Rect -> R.string.rect_sub
DrawPathMode.Lasso -> R.string.lasso_sub
}

private fun DrawPathMode.getTitle(): Int = when (this) {
Expand All @@ -277,6 +279,7 @@ private fun DrawPathMode.getTitle(): Int = when (this) {
DrawPathMode.OutlinedRect -> R.string.outlined_rect
DrawPathMode.Oval -> R.string.oval
DrawPathMode.Rect -> R.string.rect
DrawPathMode.Lasso -> R.string.lasso
}

private fun DrawPathMode.getIcon(): ImageVector = when (this) {
Expand All @@ -290,4 +293,5 @@ private fun DrawPathMode.getIcon(): ImageVector = when (this) {
DrawPathMode.OutlinedRect -> Icons.Rounded.CheckBoxOutlineBlank
DrawPathMode.Oval -> Icons.Rounded.Circle
DrawPathMode.Rect -> Icons.Rounded.Square
DrawPathMode.Lasso -> Icons.Rounded.Lasso
}
Original file line number Diff line number Diff line change
Expand Up @@ -395,30 +395,25 @@ fun AddEditMaskSheet(
top = 16.dp
)
)
AnimatedVisibility(
visible = !isEraserOn,
enter = fadeIn() + expandVertically(),
exit = fadeOut() + shrinkVertically()
) {
DrawPathModeSelector(
modifier = Modifier.padding(
start = 16.dp,
end = 16.dp,
top = 16.dp
),
values = remember {
listOf(
DrawPathMode.Free,
DrawPathMode.OutlinedRect,
DrawPathMode.OutlinedOval,
DrawPathMode.Rect,
DrawPathMode.Oval
)
},
value = drawPathMode,
onValueChange = { drawPathMode = it }
)
}
DrawPathModeSelector(
modifier = Modifier.padding(
start = 16.dp,
end = 16.dp,
top = 16.dp
),
values = remember {
listOf(
DrawPathMode.Free,
DrawPathMode.Lasso,
DrawPathMode.OutlinedRect,
DrawPathMode.OutlinedOval,
DrawPathMode.Rect,
DrawPathMode.Oval
)
},
value = drawPathMode,
onValueChange = { drawPathMode = it }
)
LineWidthSelector(
modifier = Modifier.padding(
start = 16.dp,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package ru.tech.imageresizershrinker.presentation.root.icons.material

import androidx.compose.material.icons.Icons
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.PathFillType.Companion.NonZero
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.StrokeCap.Companion.Butt
import androidx.compose.ui.graphics.StrokeJoin.Companion.Miter
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.ImageVector.Builder
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.unit.dp

val Icons.Rounded.Lasso: ImageVector by lazy {
Builder(
name = "Lasso", defaultWidth = 24.0.dp, defaultHeight = 24.0.dp,
viewportWidth = 24.0f, viewportHeight = 24.0f
).apply {
path(
fill = SolidColor(Color(0xFF000000)), stroke = null, strokeLineWidth = 0.0f,
strokeLineCap = Butt, strokeLineJoin = Miter, strokeLineMiter = 4.0f,
pathFillType = NonZero
) {
moveTo(12.0f, 2.0f)
curveTo(17.5f, 2.0f, 22.0f, 5.13f, 22.0f, 9.0f)
curveTo(22.0f, 12.26f, 18.81f, 15.0f, 14.5f, 15.78f)
lineTo(14.5f, 15.5f)
curveTo(14.5f, 14.91f, 14.4f, 14.34f, 14.21f, 13.81f)
curveTo(17.55f, 13.21f, 20.0f, 11.28f, 20.0f, 9.0f)
curveTo(20.0f, 6.24f, 16.42f, 4.0f, 12.0f, 4.0f)
curveTo(7.58f, 4.0f, 4.0f, 6.24f, 4.0f, 9.0f)
curveTo(4.0f, 10.19f, 4.67f, 11.29f, 5.79f, 12.15f)
curveTo(5.35f, 12.64f, 5.0f, 13.21f, 4.78f, 13.85f)
curveTo(3.06f, 12.59f, 2.0f, 10.88f, 2.0f, 9.0f)
curveTo(2.0f, 5.13f, 6.5f, 2.0f, 12.0f, 2.0f)
moveTo(9.5f, 12.0f)
curveTo(11.43f, 12.0f, 13.0f, 13.57f, 13.0f, 15.5f)
curveTo(13.0f, 17.4f, 11.5f, 18.95f, 9.6f, 19.0f)
curveTo(9.39f, 19.36f, 9.18f, 20.0f, 9.83f, 20.68f)
curveTo(11.0f, 21.88f, 13.28f, 19.72f, 16.39f, 19.71f)
curveTo(18.43f, 19.7f, 20.03f, 19.97f, 20.03f, 19.97f)
curveTo(20.03f, 19.97f, 21.08f, 20.1f, 20.97f, 21.04f)
curveTo(20.86f, 21.97f, 19.91f, 21.97f, 19.91f, 21.97f)
curveTo(19.53f, 21.93f, 18.03f, 21.58f, 16.22f, 21.68f)
curveTo(14.41f, 21.77f, 13.47f, 22.41f, 12.56f, 22.69f)
curveTo(11.66f, 22.97f, 9.91f, 23.38f, 8.3f, 22.05f)
curveTo(6.97f, 20.96f, 7.46f, 19.11f, 7.67f, 18.5f)
curveTo(6.67f, 17.87f, 6.0f, 16.76f, 6.0f, 15.5f)
curveTo(6.0f, 13.57f, 7.57f, 12.0f, 9.5f, 12.0f)
moveTo(9.5f, 14.0f)
curveTo(8.67f, 14.0f, 8.0f, 14.67f, 8.0f, 15.5f)
curveTo(8.0f, 16.33f, 8.67f, 17.0f, 9.5f, 17.0f)
curveTo(10.33f, 17.0f, 11.0f, 16.33f, 11.0f, 15.5f)
curveTo(11.0f, 14.67f, 10.33f, 14.0f, 9.5f, 14.0f)
close()
}
}.build()
}
Original file line number Diff line number Diff line change
Expand Up @@ -247,21 +247,15 @@ fun DrawEditOption(
value = drawMode,
onValueChange = { drawMode = it }
)
AnimatedVisibility(
visible = !isEraserOn,
enter = fadeIn() + expandVertically(),
exit = fadeOut() + shrinkVertically()
) {
DrawPathModeSelector(
modifier = Modifier.padding(
start = 16.dp,
end = 16.dp,
bottom = 16.dp
),
value = drawPathMode,
onValueChange = { drawPathMode = it }
)
}
DrawPathModeSelector(
modifier = Modifier.padding(
start = 16.dp,
end = 16.dp,
bottom = 16.dp
),
value = drawPathMode,
onValueChange = { drawPathMode = it }
)
},
fabButtons = null,
actions = {
Expand Down
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -510,4 +510,6 @@
<string name="oval_sub">Draws oval from start point to end point</string>
<string name="outlined_oval_sub">Draws outlined oval from start point to end point</string>
<string name="outlined_rect_sub">Draws outlined rect from start point to end point</string>
<string name="lasso">Lasso</string>
<string name="lasso_sub">Draws closed filled path by given path</string>
</resources>

0 comments on commit d0d9a0d

Please sign in to comment.