[go: nahoru, domu]

blob: 5253a30bf163e285270ff370458682931343c610 [file] [log] [blame]
/*
* Copyright 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package androidx.ui.layout
import androidx.ui.core.Constraints
import androidx.ui.core.IntrinsicMeasurable
import androidx.ui.core.IntrinsicMeasureScope
import androidx.ui.core.LayoutDirection
import androidx.ui.core.LayoutModifier
import androidx.ui.core.Measurable
import androidx.ui.core.MeasureScope
import androidx.ui.core.Modifier
/**
* [Modifier] that changes the [LayoutDirection] of the wrapped layout to [LayoutDirection.Ltr].
*/
val Modifier.ltr: Modifier get() = this + LtrModifier
/**
* [Modifier] that changes the [LayoutDirection] of the wrapped layout to [LayoutDirection.Rtl].
*/
val Modifier.rtl: Modifier get() = this + RtlModifier
private val LtrModifier = LayoutDirectionModifier(LayoutDirection.Ltr)
private val RtlModifier = LayoutDirectionModifier(LayoutDirection.Rtl)
private data class LayoutDirectionModifier(
val prescribedLayoutDirection: LayoutDirection
) : LayoutModifier {
override fun MeasureScope.measure(
measurable: Measurable,
constraints: Constraints,
layoutDirection: LayoutDirection
): MeasureScope.MeasureResult {
val placeable = measurable.measure(constraints, prescribedLayoutDirection)
return layout(placeable.width, placeable.height) {
placeable.place(0, 0)
}
}
override fun IntrinsicMeasureScope.minIntrinsicWidth(
measurable: IntrinsicMeasurable,
height: Int,
layoutDirection: LayoutDirection
) = measurable.minIntrinsicWidth(height, prescribedLayoutDirection)
override fun IntrinsicMeasureScope.minIntrinsicHeight(
measurable: IntrinsicMeasurable,
width: Int,
layoutDirection: LayoutDirection
) = measurable.minIntrinsicHeight(width, prescribedLayoutDirection)
override fun IntrinsicMeasureScope.maxIntrinsicWidth(
measurable: IntrinsicMeasurable,
height: Int,
layoutDirection: LayoutDirection
) = measurable.maxIntrinsicWidth(height, prescribedLayoutDirection)
override fun IntrinsicMeasureScope.maxIntrinsicHeight(
measurable: IntrinsicMeasurable,
width: Int,
layoutDirection: LayoutDirection
) = measurable.maxIntrinsicHeight(width, prescribedLayoutDirection)
}