Skip to content

Commit

Permalink
Unit tests for Box, Filler, Spacer, Row and Column modifiers
Browse files Browse the repository at this point in the history
  • Loading branch information
EpicDima committed May 16, 2024
1 parent 6efdb15 commit 2071d9f
Show file tree
Hide file tree
Showing 5 changed files with 1,179 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
@file:Suppress("NOTHING_TO_INLINE")

package com.jakewharton.mosaic

import androidx.compose.runtime.Composable
Expand All @@ -17,6 +19,8 @@ import com.jakewharton.mosaic.ui.unit.Constraints
import com.jakewharton.mosaic.ui.unit.IntOffset
import com.jakewharton.mosaic.ui.unit.IntSize
import com.jakewharton.mosaic.ui.unit.constrain
import com.jakewharton.mosaic.ui.unit.constrainHeight
import com.jakewharton.mosaic.ui.unit.constrainWidth
import kotlin.math.max

const val s = " "
Expand Down Expand Up @@ -150,3 +154,65 @@ fun testIntrinsics(
}
}
}

@Composable
internal fun ConstrainedBox(
constraints: Constraints,
modifier: Modifier = Modifier,
content: @Composable () -> Unit = {},
) {
@Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE")
val measurePolicy = object : MeasurePolicy {
override fun MeasureScope.measure(
measurables: List<Measurable>,
incomingConstraints: Constraints,
): MeasureResult {
val measurable = measurables.firstOrNull()
val childConstraints = incomingConstraints.constrain(constraints)
val placeable = measurable?.measure(childConstraints)

val layoutWidth = placeable?.width ?: childConstraints.minWidth
val layoutHeight = placeable?.height ?: childConstraints.minHeight
return layout(layoutWidth, layoutHeight) {
placeable?.place(0, 0)
}
}

override fun minIntrinsicWidth(
measurables: List<IntrinsicMeasurable>,
height: Int,
): Int {
val width = measurables.firstOrNull()?.minIntrinsicWidth(height) ?: 0
return constraints.constrainWidth(width)
}

override fun minIntrinsicHeight(
measurables: List<IntrinsicMeasurable>,
width: Int,
): Int {
val height = measurables.firstOrNull()?.minIntrinsicHeight(width) ?: 0
return constraints.constrainHeight(height)
}

override fun maxIntrinsicWidth(
measurables: List<IntrinsicMeasurable>,
height: Int,
): Int {
val width = measurables.firstOrNull()?.maxIntrinsicWidth(height) ?: 0
return constraints.constrainWidth(width)
}

override fun maxIntrinsicHeight(
measurables: List<IntrinsicMeasurable>,
width: Int,
): Int {
val height = measurables.firstOrNull()?.maxIntrinsicHeight(width) ?: 0
return constraints.constrainHeight(height)
}
}
Layout(
content = content,
modifier = modifier,
measurePolicy = measurePolicy,
)
}
Loading

0 comments on commit 2071d9f

Please sign in to comment.