mirror of
https://github.com/divkit/divkit.git
synced 2026-05-07 20:02:32 +00:00
[Schema] add new types for content-aligment: space-between, space-around, space-evenly
This commit is contained in:
+35
@@ -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
|
||||
}
|
||||
|
||||
+7
-5
@@ -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(
|
||||
|
||||
@@ -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"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user