blob: c0b83b8691e9090f38d6a8742b7a63ad847e274f [file] [log] [blame] [edit]
/*
* Copyright 2023 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.
*/
#pragma once
#include <math/vec4.h>
#include "FloatRect.h"
namespace android {
/*
* Contains the configuration for the shadows drawn by single layer. Shadow follows
* material design guidelines.
*/
struct ShadowSettings {
// Boundaries of the shadow.
FloatRect boundaries = FloatRect();
// Color to the ambient shadow. The alpha is premultiplied.
vec4 ambientColor = vec4();
// Color to the spot shadow. The alpha is premultiplied. The position of the spot shadow
// depends on the light position.
vec4 spotColor = vec4();
// Position of the light source used to cast the spot shadow.
vec3 lightPos = vec3();
// Radius of the spot light source. Smaller radius will have sharper edges,
// larger radius will have softer shadows
float lightRadius = 0.f;
// Length of the cast shadow. If length is <= 0.f no shadows will be drawn.
float length = 0.f;
// If true fill in the casting layer is translucent and the shadow needs to fill the bounds.
// Otherwise the shadow will only be drawn around the edges of the casting layer.
bool casterIsTranslucent = false;
};
static inline bool operator==(const ShadowSettings& lhs, const ShadowSettings& rhs) {
return lhs.boundaries == rhs.boundaries && lhs.ambientColor == rhs.ambientColor &&
lhs.spotColor == rhs.spotColor && lhs.lightPos == rhs.lightPos &&
lhs.lightRadius == rhs.lightRadius && lhs.length == rhs.length &&
lhs.casterIsTranslucent == rhs.casterIsTranslucent;
}
static inline bool operator!=(const ShadowSettings& lhs, const ShadowSettings& rhs) {
return !(operator==(lhs, rhs));
}
} // namespace android