Replaced drawn in canvas commit node by box composable

This commit is contained in:
Abdelilah El Aissaoui 2021-11-17 05:23:32 +01:00
parent 9322691565
commit 3dd9b4a2cd

View File

@ -6,6 +6,7 @@ import androidx.compose.foundation.gestures.draggable
import androidx.compose.foundation.gestures.rememberDraggableState import androidx.compose.foundation.gestures.rememberDraggableState
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.runtime.* import androidx.compose.runtime.*
@ -27,6 +28,7 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import app.DialogManager import app.DialogManager
import app.extensions.md5
import app.extensions.simpleName import app.extensions.simpleName
import app.extensions.toSmartSystemString import app.extensions.toSmartSystemString
import app.git.GitManager import app.git.GitManager
@ -274,7 +276,8 @@ fun Log(
) { ) {
CommitsGraphLine( CommitsGraphLine(
modifier = Modifier modifier = Modifier
.width(graphWidth), .width(graphWidth)
.fillMaxHeight(),
plotCommit = graphNode plotCommit = graphNode
) )
@ -422,78 +425,88 @@ fun CommitsGraphLine(
val passingLanes = plotCommit.passingLanes val passingLanes = plotCommit.passingLanes
val forkingOffLanes = plotCommit.forkingOffLanes val forkingOffLanes = plotCommit.forkingOffLanes
val mergingLanes = plotCommit.mergingLanes val mergingLanes = plotCommit.mergingLanes
val backgroundColor = MaterialTheme.colors.surface
Box(modifier = modifier) { Box(modifier = modifier) {
val itemPosition = plotCommit.lane.position
Canvas( Canvas(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
) { ) {
val itemPosition = plotCommit.lane.position
clipRect { clipRect {
if (plotCommit.childCount > 0) { if (plotCommit.childCount > 0) {
drawLine( drawLine(
color = colors[itemPosition % colors.size], color = colors[itemPosition % colors.size],
start = Offset(20f * (itemPosition + 1), this.center.y), start = Offset(30f * (itemPosition + 1), this.center.y),
end = Offset(20f * (itemPosition + 1), 0f), end = Offset(30f * (itemPosition + 1), 0f),
) )
} }
forkingOffLanes.forEach { plotLane -> forkingOffLanes.forEach { plotLane ->
drawLine( drawLine(
color = colors[plotLane.position % colors.size], color = colors[plotLane.position % colors.size],
start = Offset(20f * (itemPosition + 1), this.center.y), start = Offset(30f * (itemPosition + 1), this.center.y),
end = Offset(20f * (plotLane.position + 1), 0f), end = Offset(30f * (plotLane.position + 1), 0f),
) )
} }
mergingLanes.forEach { plotLane -> mergingLanes.forEach { plotLane ->
drawLine( drawLine(
color = colors[plotLane.position % colors.size], color = colors[plotLane.position % colors.size],
start = Offset(20f * (plotLane.position + 1), this.size.height), start = Offset(30f * (plotLane.position + 1), this.size.height),
end = Offset(20f * (itemPosition + 1), this.center.y), end = Offset(30f * (itemPosition + 1), this.center.y),
) )
} }
if (plotCommit.parentCount > 0) { if (plotCommit.parentCount > 0) {
drawLine( drawLine(
color = colors[itemPosition % colors.size], color = colors[itemPosition % colors.size],
start = Offset(20f * (itemPosition + 1), this.center.y), start = Offset(30f * (itemPosition + 1), this.center.y),
end = Offset(20f * (itemPosition + 1), this.size.height), end = Offset(30f * (itemPosition + 1), this.size.height),
) )
} }
passingLanes.forEach { plotLane -> passingLanes.forEach { plotLane ->
drawLine( drawLine(
color = colors[plotLane.position % colors.size], color = colors[plotLane.position % colors.size],
start = Offset(20f * (plotLane.position + 1), 0f), start = Offset(30f * (plotLane.position + 1), 0f),
end = Offset(20f * (plotLane.position + 1), this.size.height), end = Offset(30f * (plotLane.position + 1), this.size.height),
) )
} }
}
}
if(plotCommit.parentCount >= 2) { // A merge CommitNode(
drawCircle( modifier = Modifier
.align(Alignment.CenterStart)
.padding(start = ((itemPosition + 1) * 30 - 15).dp),
plotCommit = plotCommit,
color = colors[itemPosition % colors.size], color = colors[itemPosition % colors.size],
radius = 7.dp.toPx(),
center = Offset(20f * (itemPosition + 1), this.center.y),
)
} else {
drawCircle(
color = backgroundColor,
radius = 10.dp.toPx(),
center = Offset(20f * (itemPosition + 1), this.center.y),
) )
}
}
drawCircle( @Composable
color = colors[itemPosition % colors.size], fun CommitNode(
radius = 10.dp.toPx(), modifier: Modifier = Modifier,
center = Offset(20f * (itemPosition + 1), this.center.y), plotCommit: GraphNode,
style = Stroke(width = 2.dp.toPx()) color: Color,
) {
Box(
modifier = modifier
.size(30.dp)
.border(2.dp, color, shape = CircleShape)
.clip(CircleShape)
) {
val url = "https://www.gravatar.com/avatar/${plotCommit.authorIdent.emailAddress.md5}"
Image(
bitmap = rememberNetworkImage(url),
modifier = Modifier
.fillMaxSize(),
contentDescription = null
) )
} }
} }
}
}
}
@Composable @Composable
fun UncommitedChangesGraphLine( fun UncommitedChangesGraphLine(
@ -510,14 +523,14 @@ fun UncommitedChangesGraphLine(
if (hasPreviousCommits) if (hasPreviousCommits)
drawLine( drawLine(
color = colors[0], color = colors[0],
start = Offset(20f, this.center.y), start = Offset(30f, this.center.y),
end = Offset(20f, this.size.height), end = Offset(30f, this.size.height),
) )
drawCircle( drawCircle(
color = colors[0], color = colors[0],
radius = 10f, radius = 15f,
center = Offset(20f, this.center.y), center = Offset(30f, this.center.y),
) )
} }
} }