Skip to content

Commit

Permalink
Add inner padding support
Browse files Browse the repository at this point in the history
  • Loading branch information
zhelenskiy committed Apr 7, 2024
1 parent 783c41a commit 6f994be
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 6 deletions.
12 changes: 12 additions & 0 deletions composeApp/src/commonMain/kotlin/CorrectBracketSequence.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import CorrectBracketSequenceToken.*
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.rememberScrollState
import androidx.compose.material3.HorizontalDivider
Expand All @@ -10,6 +13,7 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.text.*
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.input.TextFieldValue
Expand Down Expand Up @@ -122,6 +126,12 @@ fun CorrectBracketSequence() {
var maximumStickyHeaderHeight: Dp by remember { mutableStateOf(0.dp) }

val lineNumbersColor = Color.DarkGray
val innerPadding = PaddingValues(10.dp)
val stickyHeaderInnerPadding = PaddingValues(
start = innerPadding.calculateStartPadding(LocalLayoutDirection.current),
end = innerPadding.calculateEndPadding(LocalLayoutDirection.current),
top = innerPadding.calculateTopPadding(),
)
BasicSourceCodeTextField(
state = codeTextFieldState,
onStateUpdate = { codeTextFieldState = it },
Expand Down Expand Up @@ -153,6 +163,7 @@ fun CorrectBracketSequence() {
maximumStickyHeaderHeight = (maxHeight / 3).also { maximumStickyHeaderHeight = it },
onClick = { coroutineScope.launch { externalScrollToFlow.emit(SourceCodePosition(it, 0)) } },
divider = { HorizontalDivider(thickness = 1.dp) },
innerPadding = stickyHeaderInnerPadding,
additionalInnerComposable = { linesToWrite, _ ->
AnimatedVisibility(showIndentation) {
val lineMapping = linesToWrite.keys.withIndex().associate { (index, line) -> line to index }
Expand All @@ -171,6 +182,7 @@ fun CorrectBracketSequence() {
textStyle = textStyle,
verticalScrollState = verticalState,
modifier = Modifier.fillMaxWidth().background(color = Color.White),
innerPadding = innerPadding,
editorOffsetsForPosition = {
EditorOffsets(
top = getOffsetForLineToAppearOnTop(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import androidx.compose.ui.input.key.KeyEvent
import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextLayoutResult
import androidx.compose.ui.text.TextRange
Expand Down Expand Up @@ -308,23 +309,26 @@ public fun <T : Token> BasicSourceCodeTextField(
onHoveredSourceCodePositionChange: (position: SourceCodePosition) -> Unit = {},
horizontalThresholdEdgeChars: Int = 5,
verticalThresholdEdgeLines: Int = 1,
innerPadding: PaddingValues = PaddingValues(0.dp),
) {
val coroutineScope = rememberCoroutineScope()
val textSize = measureText(textStyle)
val textHeightDp = with(LocalDensity.current) { textSize.height.toDp() }
var textLayout: TextLayoutResult? by remember(state.text) { mutableStateOf(null) }

val innerTopPadding = innerPadding.calculateTopPadding()
val innerBottomPadding = innerPadding.calculateBottomPadding()
BoxWithConstraints(modifier) {
val editorOuterHeight = maxHeight
val editorOuterMinHeight = minHeight
val editorOuterHeight = maxHeight - innerBottomPadding - innerTopPadding
val editorOuterMinHeight = minHeight - innerBottomPadding - innerTopPadding
val editorOuterHeightPx = with(LocalDensity.current) { editorOuterHeight.toPx() }

Wrapper(
content = { innerComposable ->
additionalOuterComposable(textLayout, innerComposable)
}
) {
Row(modifier = Modifier.verticalScroll(verticalScrollState).widthIn(minWidth)) {
Row(modifier = Modifier.padding(innerPadding).verticalScroll(verticalScrollState).widthIn(minWidth)) {
AnimatedVisibility(showLineNumbers) {
Column(horizontalAlignment = Alignment.End) {
repeat(state.offsets.size) {
Expand Down
9 changes: 7 additions & 2 deletions editor/src/commonMain/kotlin/editor/basic/Decorators.kt
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ public inline fun <reified Bracket : ScopeChangingToken, T : Token> BoxWithConst
lineNumberModifier: Modifier = defaultLineNumberModifier,
lineStringModifier: Modifier = Modifier,
visualTransformation: VisualTransformation = VisualTransformation.None,
innerPadding: PaddingValues = PaddingValues(0.dp),
crossinline stickyHeaderLinesChooser: (Bracket) -> IntRange? = { bracket -> state.tokenLines[bracket as T] },
crossinline onClick: (lineNumber: Int) -> Unit = {},
crossinline onHoveredSourceCodePositionChange: (position: SourceCodePosition) -> Unit = {},
Expand All @@ -201,12 +202,16 @@ public inline fun <reified Bracket : ScopeChangingToken, T : Token> BoxWithConst
val requestedLinesSet = getStickyHeaderLines(topVisibleRow, state, matchedBrackets, stickyHeaderLinesChooser)
if (requestedLinesSet.isEmpty()) return
Column {
Column(Modifier.heightIn(max = maximumStickyHeaderHeight)) {
Column(
modifier = Modifier
.heightIn(max = maximumStickyHeaderHeight)
.background(backgroundColor)
.padding(innerPadding)
) {
Row(
modifier = Modifier
.width(this@StickyHeader.maxWidth)
.verticalScroll(rememberScrollState())
.background(backgroundColor)
) {
val lineCount: Int = state.offsets.size
val linesToWrite = requestedLinesSet.associateWith { lineNumber ->
Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,4 @@ development=true

#Publication
group=com.zhelenskiy
version=0.0.7
version=0.0.8

0 comments on commit 6f994be

Please sign in to comment.