12103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth/*
22103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth * Copyright 2017 Google Inc.
32103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth *
42103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth * Use of this source code is governed by a BSD-style license that can be
52103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth * found in the LICENSE file.
62103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth */
72103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth
82103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth#ifndef SkSpotShadowMaskFilter_DEFINED
92103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth#define SkSpotShadowMaskFilter_DEFINED
102103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth
112103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth#include "SkMaskFilter.h"
122103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth#include "SkShadowFlags.h"
132103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth
142103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth/*
152103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth * This filter implements a shadow for an occluding object
162103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth * representing a displaced shadow from a point light.
172103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth */
182103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verthclass SK_API SkSpotShadowMaskFilter {
192103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verthpublic:
202103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth    /** Create a shadow maskfilter.
212103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth     *  @param occluderHeight Height of occluding object off of ground plane.
222103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth     *  @param lightPos       Position of the light applied to this object.
232103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth     *  @param lightRadius    Radius of the light (light is assumed to be spherical).
242103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth     *  @param spotAlpha      Base opacity of the displaced spot shadow.
252103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth     *  @param flags          Flags to use - defaults to none
262103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth     *  @return The new shadow maskfilter
272103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth     */
282103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth    static sk_sp<SkMaskFilter> Make(SkScalar occluderHeight, const SkPoint3& lightPos,
292103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth                                    SkScalar lightRadius, SkScalar spotAlpha,
302103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth                                    uint32_t flags = SkShadowFlags::kNone_ShadowFlag);
312103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth
322103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth    SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP()
332103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth
342103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verthprivate:
352103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth    SkSpotShadowMaskFilter(); // can't be instantiated
362103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth};
372103cf0ff09763aeaa35508734f765aec9b75665Jim Van Verth#endif
38