| /* |
| * Copyright (C) 2022 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 com.android.systemui.dreams.complication |
| |
| import android.graphics.Canvas |
| import android.widget.TextView |
| import androidx.annotation.ColorInt |
| |
| class DoubleShadowTextHelper |
| constructor( |
| private val keyShadowInfo: ShadowInfo, |
| private val ambientShadowInfo: ShadowInfo, |
| ) { |
| data class ShadowInfo( |
| val blur: Float, |
| val offsetX: Float = 0f, |
| val offsetY: Float = 0f, |
| @ColorInt val color: Int |
| ) |
| |
| fun applyShadows(view: TextView, canvas: Canvas, onDrawCallback: () -> Unit) { |
| // We enhance the shadow by drawing the shadow twice |
| view.paint.setShadowLayer( |
| ambientShadowInfo.blur, |
| ambientShadowInfo.offsetX, |
| ambientShadowInfo.offsetY, |
| ambientShadowInfo.color |
| ) |
| onDrawCallback() |
| canvas.save() |
| canvas.clipRect( |
| view.scrollX, |
| view.scrollY + view.extendedPaddingTop, |
| view.scrollX + view.width, |
| view.scrollY + view.height |
| ) |
| |
| view.paint.setShadowLayer( |
| keyShadowInfo.blur, |
| keyShadowInfo.offsetX, |
| keyShadowInfo.offsetY, |
| keyShadowInfo.color |
| ) |
| onDrawCallback() |
| canvas.restore() |
| } |
| } |