From 37a79f1d556054218e278d189236cf4cfda90b6c Mon Sep 17 00:00:00 2001 From: Aparna Vadlamani Date: Tue, 28 Jan 2025 19:04:09 +0530 Subject: [PATCH] NTP-20431 | Added LineHeight style to TextStyle (#678) --- .../com/navi/uitron/model/ui/TextProperty.kt | 4 ++++ .../com/navi/uitron/model/ui/UiTronView.kt | 14 +++++++++++ .../com/navi/uitron/render/TextRenderer.kt | 8 +++++++ .../main/java/com/navi/uitron/utils/Ext.kt | 23 +++++++++++++++++++ 4 files changed, 49 insertions(+) diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/TextProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/TextProperty.kt index 40159a9..2526234 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/TextProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/TextProperty.kt @@ -29,6 +29,8 @@ open class TextProperty( var valueTransformation: OutlinedTextFieldValueTransformation? = null, var textShadow: TextShadow? = null, var includeFontPadding: Boolean? = null, + var lineHeightAlignment: String? = null, + var lineHeightTrimStyle: String? = null, ) : BaseProperty() { override fun copyNonNullFrom(property: BaseProperty?) { super.copyNonNullFrom(property) @@ -49,6 +51,8 @@ open class TextProperty( textProperty?.valueTransformation?.let { valueTransformation = it } textProperty?.textShadow?.let { textShadow = it } textProperty?.includeFontPadding?.let { includeFontPadding = it } + textProperty?.lineHeightAlignment?.let { lineHeightAlignment = it } + textProperty?.lineHeightTrimStyle?.let { lineHeightTrimStyle = it } } data class TextShadow( diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt index b6f0322..b73a962 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt @@ -356,6 +356,20 @@ enum class ContentAlignmentType { BottomEnd, } +enum class LineHeightAlignmentType { + Center, + Top, + Bottom, + Proportional, +} + +enum class LineHeightTrimType { + Both, + None, + FirstLineTop, + LastLineBottom, +} + enum class ContentScaleType { Crop, FillBounds, diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/TextRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/TextRenderer.kt index 867509a..82491f5 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/TextRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/TextRenderer.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.platform.LocalView import androidx.compose.ui.text.PlatformTextStyle import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.style.LineHeightStyle import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.em import androidx.compose.ui.unit.sp @@ -41,6 +42,8 @@ import com.navi.uitron.utils.customClickable import com.navi.uitron.utils.customCombinedClick import com.navi.uitron.utils.customOffset import com.navi.uitron.utils.dpToPx +import com.navi.uitron.utils.getLineHeightAlignment +import com.navi.uitron.utils.getLineHeightTrimStyle import com.navi.uitron.utils.getText import com.navi.uitron.utils.getTextAlignment import com.navi.uitron.utils.getTextDecoration @@ -160,6 +163,11 @@ class TextRenderer : Renderer { PlatformTextStyle( includeFontPadding = property.includeFontPadding.orTrue() ), + lineHeightStyle = + LineHeightStyle( + alignment = getLineHeightAlignment(property.lineHeightAlignment), + trim = getLineHeightTrimStyle(property.lineHeightTrimStyle), + ), ), modifier = if (UiTronSdkManager.isModifierBuilderEnabled()) { diff --git a/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt b/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt index b6c7ddb..855774a 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt @@ -76,6 +76,7 @@ import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.PlatformTextStyle import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.style.LineHeightStyle import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.style.TextOverflow @@ -120,6 +121,8 @@ import com.navi.uitron.model.ui.HorizontalArrangementType import com.navi.uitron.model.ui.InputTransformationType import com.navi.uitron.model.ui.InteractionType import com.navi.uitron.model.ui.LazyRowConstraints +import com.navi.uitron.model.ui.LineHeightAlignmentType +import com.navi.uitron.model.ui.LineHeightTrimType import com.navi.uitron.model.ui.Offset as UiTronOffset import com.navi.uitron.model.ui.OutlinedTextFieldKeyBoardOptions import com.navi.uitron.model.ui.OutlinedTextFieldTextStyle @@ -665,6 +668,26 @@ fun String?.toDoubleWithSafe(): Double { } } +fun getLineHeightAlignment(alignment: String?): LineHeightStyle.Alignment { + return when (alignment) { + LineHeightAlignmentType.Center.name -> LineHeightStyle.Alignment.Center + LineHeightAlignmentType.Top.name -> LineHeightStyle.Alignment.Top + LineHeightAlignmentType.Proportional.name -> LineHeightStyle.Alignment.Proportional + LineHeightAlignmentType.Bottom.name -> LineHeightStyle.Alignment.Bottom + else -> LineHeightStyle.Alignment.Center + } +} + +fun getLineHeightTrimStyle(trimStyle: String?): LineHeightStyle.Trim { + return when (trimStyle) { + LineHeightTrimType.None.name -> LineHeightStyle.Trim.None + LineHeightTrimType.Both.name -> LineHeightStyle.Trim.Both + LineHeightTrimType.LastLineBottom.name -> LineHeightStyle.Trim.LastLineBottom + LineHeightTrimType.FirstLineTop.name -> LineHeightStyle.Trim.FirstLineTop + else -> LineHeightStyle.Trim.None + } +} + fun getTextAlignment(textAlignment: String?): TextAlign { return when (textAlignment) { TextAlign.Start.toString() -> TextAlign.Start