1/*
2 * Copyright (C) 2008 Alex Mathews <possessedpenguinbob@gmail.com>
3 * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
4 * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
5 * Copyright (C) 2005 Eric Seidel <eric@webkit.org>
6 *
7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version.
11 *
12 * This library is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15 * Library General Public License for more details.
16 *
17 * You should have received a copy of the GNU Library General Public License
18 * along with this library; see the file COPYING.LIB.  If not, write to
19 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301, USA.
21 */
22
23#ifndef SpotLightSource_h
24#define SpotLightSource_h
25
26#if ENABLE(FILTERS)
27#include "LightSource.h"
28
29namespace WebCore {
30
31class SpotLightSource : public LightSource {
32public:
33    static PassRefPtr<SpotLightSource> create(const FloatPoint3D& position,
34        const FloatPoint3D& direction, float specularExponent, float limitingConeAngle)
35    {
36        return adoptRef(new SpotLightSource(position, direction, specularExponent, limitingConeAngle));
37    }
38
39    const FloatPoint3D& position() const { return m_position; }
40    const FloatPoint3D& direction() const { return m_direction; }
41    float specularExponent() const { return m_specularExponent; }
42    float limitingConeAngle() const { return m_limitingConeAngle; }
43
44    virtual bool setX(float) OVERRIDE;
45    virtual bool setY(float) OVERRIDE;
46    virtual bool setZ(float) OVERRIDE;
47    virtual bool setPointsAtX(float) OVERRIDE;
48    virtual bool setPointsAtY(float) OVERRIDE;
49    virtual bool setPointsAtZ(float) OVERRIDE;
50
51    virtual bool setSpecularExponent(float) OVERRIDE;
52    virtual bool setLimitingConeAngle(float) OVERRIDE;
53
54    virtual void initPaintingData(PaintingData&);
55    virtual void updatePaintingData(PaintingData&, int x, int y, float z);
56
57    virtual TextStream& externalRepresentation(TextStream&) const;
58
59private:
60    SpotLightSource(const FloatPoint3D& position, const FloatPoint3D& direction,
61        float specularExponent, float limitingConeAngle)
62        : LightSource(LS_SPOT)
63        , m_position(position)
64        , m_direction(direction)
65        , m_specularExponent(specularExponent)
66        , m_limitingConeAngle(limitingConeAngle)
67    {
68    }
69
70    FloatPoint3D m_position;
71    FloatPoint3D m_direction;
72
73    float m_specularExponent;
74    float m_limitingConeAngle;
75};
76
77} // namespace WebCore
78
79#endif // ENABLE(FILTERS)
80
81#endif // SpotLightSource_h
82