@@ -22,29 +22,29 @@ import android.os.Looper
2222import android.util.Log
2323import androidx.annotation.FloatRange
2424import androidx.compose.foundation.Canvas
25- // import androidx.compose.foundation.Image
25+ import androidx.compose.foundation.Image
26+ import androidx.compose.foundation.background
2627import androidx.compose.foundation.layout.Box
2728import androidx.compose.foundation.layout.BoxScope
2829import androidx.compose.foundation.layout.LayoutScopeMarker
29- // import androidx.compose.material.Button
30- // import androidx.compose.material.Text
30+ import androidx.compose.foundation.layout.padding
31+ import androidx.compose.foundation.shape.RoundedCornerShape
32+ import androidx.compose.foundation.text.BasicText
33+ import androidx.compose.foundation.text.BasicTextField
3134import androidx.compose.runtime.*
3235import androidx.compose.runtime.snapshots.SnapshotStateObserver
3336import androidx.compose.ui.Modifier
37+ import androidx.compose.ui.draw.clip
3438import androidx.compose.ui.draw.scale
3539import androidx.compose.ui.geometry.Offset
3640import androidx.compose.ui.graphics.*
3741import androidx.compose.ui.layout.*
3842import androidx.compose.ui.platform.InspectorValueInfo
3943import androidx.compose.ui.platform.debugInspectorInfo
44+ import androidx.compose.ui.res.painterResource
4045import androidx.compose.ui.semantics.semantics
41- import androidx.compose.ui.unit.Constraints
42- import androidx.compose.ui.unit.Density
43- import androidx.compose.ui.unit.Dp
44- import androidx.compose.ui.unit.IntOffset
45- import androidx.compose.ui.unit.IntSize
46- import androidx.compose.ui.unit.LayoutDirection
47- import androidx.compose.ui.unit.dp
46+ import androidx.compose.ui.text.TextStyle
47+ import androidx.compose.ui.unit.*
4848import androidx.compose.ui.util.fastForEach
4949import androidx.compose.ui.util.fastForEachIndexed
5050import androidx.constraintlayout.core.parser.CLKey
@@ -63,7 +63,6 @@ import androidx.constraintlayout.core.widgets.ConstraintWidget.DimensionBehaviou
6363import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure
6464import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measure.TRY_GIVEN_DIMENSIONS
6565import androidx.constraintlayout.core.widgets.analyzer.BasicMeasure.Measure.USE_GIVEN_DIMENSIONS
66- // import com.google.accompanist.coil.rememberCoilPainter
6766import org.intellij.lang.annotations.Language
6867import java.lang.StringBuilder
6968import java.util.*
@@ -1567,7 +1566,7 @@ open class EditableJSONLayout(@Language("json5") content: String) :
15671566 }
15681567}
15691568
1570- data class DesignElement (var id : String , var type : String , var param : String )
1569+ data class DesignElement (var id : String , var type : String , var params : HashMap < String , String > )
15711570
15721571class JSONConstraintSet (@Language(" json5" ) content : String ,
15731572 @Language(" json5" ) overrideVariables : String? = null )
@@ -2183,27 +2182,53 @@ internal open class Measurer : BasicMeasure.Measurer, DesignInfoProvider {
21832182 fun createDesignElements () {
21842183 for (element in designElements) {
21852184 var id = element.id
2186- when (element.type) {
2187- /* // commenting for now until we provide hooks
2188- "button" -> {
2189- Button(
2190- modifier = Modifier.layoutId(id),
2191- onClick = {},
2192- ) {
2193- Text(text = element.param)
2185+ var function = DesignElements .map[element.type]
2186+ if (function != null ) {
2187+ function(id, element.params)
2188+ } else {
2189+ when (element.type) {
2190+ " button" -> {
2191+ val text = element.params[" text" ] ? : " text"
2192+ var style = TextStyle .Default
2193+ val fontSizeString = element.params[" size" ]
2194+ if (fontSizeString != null ) {
2195+ val fontSize = fontSizeString.toFloat().sp
2196+ style = TextStyle (fontSize = fontSize)
2197+ }
2198+ BasicText (modifier = Modifier
2199+ .layoutId(id)
2200+ .clip(RoundedCornerShape (20 ))
2201+ .background(Color .LightGray )
2202+ .padding(8 .dp),
2203+ text = text, style = style)
2204+ }
2205+ " text" -> {
2206+ val text = element.params[" text" ] ? : " text"
2207+ var style = TextStyle .Default
2208+ val fontSizeString = element.params[" size" ]
2209+ if (fontSizeString != null ) {
2210+ val fontSize = fontSizeString.toFloat().sp
2211+ style = TextStyle (fontSize = fontSize)
2212+ }
2213+ BasicText (modifier = Modifier .layoutId(id),
2214+ text = text, style = style)
2215+ }
2216+ " textfield" -> {
2217+ val text = element.params[" text" ] ? : " text"
2218+ BasicTextField (
2219+ modifier = Modifier .layoutId(id),
2220+ value = text,
2221+ onValueChange = {}
2222+ )
2223+ }
2224+ " image" -> {
2225+ Image (
2226+ modifier = Modifier .layoutId(id),
2227+ painter = painterResource(id = android.R .drawable.ic_menu_gallery),
2228+ contentDescription = " Placeholder Image"
2229+ )
21942230 }
21952231 }
2196- "text" -> {
2197- Text(modifier = Modifier.layoutId(id),
2198- text=element.param)
2199- }
2200- "image" -> {
2201- Image(modifier = Modifier.layoutId(id),
2202- painter = rememberCoilPainter(element.param),
2203- contentDescription = ""
2204- )
2205- }
2206- */
22072232 }
22082233 }
22092234 }
@@ -2215,6 +2240,13 @@ internal open class Measurer : BasicMeasure.Measurer, DesignInfoProvider {
22152240 }
22162241}
22172242
2243+ object DesignElements {
2244+ var map = HashMap <String , @Composable (String , HashMap <String , String >) - > Unit > ()
2245+ fun define (name : String , function : @Composable (String , HashMap <String , String >) -> Unit ) {
2246+ map[name] = function
2247+ }
2248+ }
2249+
22182250internal fun buildMapping (state : State , measurables : List <Measurable >) {
22192251 measurables.fastForEach { measurable ->
22202252 val parentData = measurable.parentData as ? ConstraintLayoutParentData
0 commit comments