[Schema] add new types for content-aligment: space-between, space-around, space-evenly

This commit is contained in:
ivanovsky-v
2023-05-22 16:12:23 +03:00
parent 48b54bf9f7
commit 726eac2c6f
5 changed files with 67 additions and 7 deletions
@@ -51,6 +51,8 @@ import com.yandex.div2.DivBase
import com.yandex.div2.DivBlendMode
import com.yandex.div2.DivBorder
import com.yandex.div2.DivContainer
import com.yandex.div2.DivContentAlignmentHorizontal
import com.yandex.div2.DivContentAlignmentVertical
import com.yandex.div2.DivDefaultIndicatorItemPlacement
import com.yandex.div2.DivDimension
import com.yandex.div2.DivDrawable
@@ -349,6 +351,24 @@ internal fun evaluateGravity(horizontal: DivAlignmentHorizontal?, vertical: DivA
return horizontalGravity or verticalGravity
}
internal fun evaluateGravity(horizontal: DivContentAlignmentHorizontal?, vertical: DivContentAlignmentVertical?): Int {
val horizontalGravity = when (horizontal) {
DivContentAlignmentHorizontal.LEFT -> Gravity.LEFT
DivContentAlignmentHorizontal.CENTER -> Gravity.CENTER_HORIZONTAL
DivContentAlignmentHorizontal.RIGHT -> Gravity.RIGHT
else -> Gravity.LEFT // TODO(grechka62): support additional variants
}
val verticalGravity = when (vertical) {
DivContentAlignmentVertical.TOP -> Gravity.TOP
DivContentAlignmentVertical.CENTER -> Gravity.CENTER_VERTICAL
DivContentAlignmentVertical.BOTTOM -> Gravity.BOTTOM
else -> Gravity.TOP // TODO(grechka62): support additional variants
}
return horizontalGravity or verticalGravity
}
private fun View.applyBaselineAlignment(baselineAligned: Boolean) {
val lp = layoutParams as? DivLayoutParams ?: return
if (lp.isBaselineAligned != baselineAligned) {
@@ -826,3 +846,18 @@ internal fun View.observeAspectRatio(resolver: ExpressionResolver, aspect: DivAs
}
)
}
internal fun DivContentAlignmentHorizontal.toAlignmentHorizontal(): DivAlignmentHorizontal = when (this) {
DivContentAlignmentHorizontal.LEFT -> DivAlignmentHorizontal.LEFT
DivContentAlignmentHorizontal.CENTER -> DivAlignmentHorizontal.CENTER
DivContentAlignmentHorizontal.RIGHT -> DivAlignmentHorizontal.RIGHT
else -> DivAlignmentHorizontal.LEFT
}
internal fun DivContentAlignmentVertical.toAlignmentVertical(): DivAlignmentVertical = when (this) {
DivContentAlignmentVertical.TOP -> DivAlignmentVertical.TOP
DivContentAlignmentVertical.CENTER -> DivAlignmentVertical.CENTER
DivContentAlignmentVertical.BOTTOM -> DivAlignmentVertical.BOTTOM
DivContentAlignmentVertical.BASELINE -> DivAlignmentVertical.BASELINE
else -> DivAlignmentVertical.TOP
}
@@ -35,6 +35,8 @@ import com.yandex.div2.DivContainer
import com.yandex.div2.DivMatchParentSize
import com.yandex.div2.DivSize
import com.yandex.div2.DivWrapContentSize
import com.yandex.div2.DivAlignmentHorizontal
import com.yandex.div2.DivAlignmentVertical
import javax.inject.Inject
import javax.inject.Provider
@@ -305,19 +307,19 @@ internal class DivContainerBinder @Inject constructor(
val applyAlignments = { _: Any ->
val childAlignmentHorizontal = childDivValue.alignmentHorizontal
val alignmentHorizontal = when {
childAlignmentHorizontal != null -> childAlignmentHorizontal
childAlignmentHorizontal != null -> childAlignmentHorizontal.evaluate(resolver)
div.isWrapContainer(resolver) -> null
else -> div.contentAlignmentHorizontal
else -> div.contentAlignmentHorizontal.evaluate(resolver).toAlignmentHorizontal()
}
val childAlignmentVertical = childDivValue.alignmentVertical
val alignmentVertical = when {
childAlignmentVertical != null -> childAlignmentVertical
childAlignmentVertical != null -> childAlignmentVertical.evaluate(resolver)
div.isWrapContainer(resolver) -> null
else -> div.contentAlignmentVertical
else -> div.contentAlignmentVertical.evaluate(resolver).toAlignmentVertical()
}
childView.applyAlignment(alignmentHorizontal?.evaluate(resolver), alignmentVertical?.evaluate(resolver))
childView.applyAlignment(alignmentHorizontal, alignmentVertical)
}
expressionSubscriber.addSubscription(
+2 -2
View File
@@ -79,12 +79,12 @@
]
},
"content_alignment_vertical": {
"$ref": "div-alignment-vertical.json",
"$ref": "div-content-alignment-vertical.json",
"default_value": "top",
"$description": "translations.json#/div_container_content_alignment_vertical"
},
"content_alignment_horizontal": {
"$ref": "div-alignment-horizontal.json",
"$ref": "div-content-alignment-horizontal.json",
"default_value": "left",
"$description": "translations.json#/div_container_content_alignment_horizontal"
},
@@ -0,0 +1,11 @@
{
"type": "string",
"enum": [
"left",
"center",
"right",
"space-between",
"space-around",
"space-evenly"
]
}
@@ -0,0 +1,12 @@
{
"type": "string",
"enum": [
"top",
"center",
"bottom",
"baseline",
"space-between",
"space-around",
"space-evenly"
]
}