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

skikoMain.androidx.compose.ui.graphics.SkiaBackedPathEffect.skiko.kt Maven / Gradle / Ivy

/*
 * 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.compose.ui.graphics

import org.jetbrains.skia.PathEffect as SkPathEffect

internal class SkiaBackedPathEffect(val nativePathEffect: SkPathEffect) : PathEffect

/**
 * Convert the [org.jetbrains.skia.PathEffect] instance into a Compose-compatible PathEffect
 */
fun SkPathEffect.asComposePathEffect(): PathEffect = SkiaBackedPathEffect(this)

/**
 * Obtain a reference to skia PathEffect type
 */
fun PathEffect.asSkiaPathEffect(): SkPathEffect =
    (this as SkiaBackedPathEffect).nativePathEffect

internal actual fun actualCornerPathEffect(radius: Float): PathEffect =
    SkiaBackedPathEffect(SkPathEffect.makeCorner(radius))

internal actual fun actualDashPathEffect(
    intervals: FloatArray,
    phase: Float
): PathEffect = SkiaBackedPathEffect(SkPathEffect.makeDash(intervals, phase))

internal actual fun actualChainPathEffect(outer: PathEffect, inner: PathEffect): PathEffect =
    SkiaBackedPathEffect(outer.asSkiaPathEffect().makeCompose(inner.asSkiaPathEffect()))

internal actual fun actualStampedPathEffect(
    shape: Path,
    advance: Float,
    phase: Float,
    style: StampedPathEffectStyle
): PathEffect =
    SkiaBackedPathEffect(
        SkPathEffect.makePath1D(
            shape.asSkiaPath(),
            advance,
            phase,
            style.toSkiaStampedPathEffectStyle()
        )
    )

internal fun StampedPathEffectStyle.toSkiaStampedPathEffectStyle(): SkPathEffect.Style =
    when (this) {
        StampedPathEffectStyle.Morph -> SkPathEffect.Style.MORPH
        StampedPathEffectStyle.Rotate -> SkPathEffect.Style.ROTATE
        StampedPathEffectStyle.Translate -> SkPathEffect.Style.TRANSLATE
        else -> SkPathEffect.Style.TRANSLATE
    }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy