All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.androidx.compose.ui.graphics.TileMode.kt Maven / Gradle / Ivy

There is a newer version: 1.7.1
Show newest version
/*
 * Copyright 2018 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.compose.ui.graphics

import androidx.compose.runtime.Immutable

/**
 * Defines what happens at the edge of the gradient.
 * A gradient is defined along a finite inner area. In the case of a linear
 * gradient, it's between the parallel lines that are orthogonal to the line
 * drawn between two points. In the case of radial gradients, it's the disc
 * that covers the circle centered on a particular point up to a given radius.
 *
 * This enum is used to define how the gradient should paint the regions
 * outside that defined inner area.
 *
 * See also:
 * [LinearGradientShader], [RadialGradientShader] which works in
 * relative coordinates and can create a [Shader] representing the gradient
 * for a particular [Rect] on demand.
 */
@Immutable
@kotlin.jvm.JvmInline
value class TileMode internal constructor(@Suppress("unused") private val value: Int) {
    companion object {
        /**
         * Edge is clamped to the final color.
         *
         * The gradient will paint the all the regions outside the inner area with
         * the color of the point closest to that region.
         * ![TileMode.Clamp](https://developer.android.com/static/images/jetpack/compose/graphics/brush/tile_mode_clamp.png)
         */
        val Clamp = TileMode(0)

        /**
         * Edge is repeated from first color to last.
         *
         * This is as if the stop points from 0.0 to 1.0 were then repeated from 1.0
         * to 2.0, 2.0 to 3.0, and so forth (and for linear gradients, similarly from
         * -1.0 to 0.0, -2.0 to -1.0, etc).
         * ![TileMode.Repeated](https://developer.android.com/static/images/jetpack/compose/graphics/brush/tile_mode_repeated.png)
         */
        val Repeated = TileMode(1)

        /**
         * Edge is mirrored from last color to first.
         * This is as if the stop points from 0.0 to 1.0 were then repeated backwards
         * from 2.0 to 1.0, then forwards from 2.0 to 3.0, then backwards again from
         * 4.0 to 3.0, and so forth (and for linear gradients, similarly from in the
         * negative direction).
         * ![TileMode.Mirror](https://developer.android.com/static/images/jetpack/compose/graphics/brush/tile_mode_mirror.png)
         */
        val Mirror = TileMode(2)

        /**
         * Render the shader's image pixels only within its original bounds. If the shader
         * draws outside of its original bounds, transparent black is drawn instead.
         * ![TileMode.Decal](https://developer.android.com/static/images/jetpack/compose/graphics/brush/tile_mode_decal.png)
         */
        val Decal = TileMode(3)
    }

    override fun toString() = when (this) {
        Clamp -> "Clamp"
        Repeated -> "Repeated"
        Mirror -> "Mirror"
        Decal -> "Decal"
        else -> "Unknown"
    }
}

/**
 * Capability query to determine if the particular platform supports the [TileMode]. Not
 * all platforms support all tile mode algorithms, however, [TileMode.Clamp], [TileMode.Repeated]
 * and [TileMode.Mirror] are guaranteed to be supported. If a [TileMode] that is not supported is
 * used, the default of [TileMode.Clamp] is consumed instead.
 */
expect fun TileMode.isSupported(): Boolean




© 2015 - 2024 Weber Informatics LLC | Privacy Policy