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    bool setX(float);
41    bool setY(float);
42    bool setZ(float);
43    const FloatPoint3D& direction() const { return m_direction; }
44    bool setPointsAtX(float);
45    bool setPointsAtY(float);
46    bool setPointsAtZ(float);
47
48    float specularExponent() const { return m_specularExponent; }
49    bool setSpecularExponent(float);
50    float limitingConeAngle() const { return m_limitingConeAngle; }
51    bool setLimitingConeAngle(float);
52
53    virtual void initPaintingData(PaintingData&);
54    virtual void updatePaintingData(PaintingData&, int x, int y, float z);
55
56    virtual TextStream& externalRepresentation(TextStream&) const;
57
58private:
59    SpotLightSource(const FloatPoint3D& position, const FloatPoint3D& direction,
60        float specularExponent, float limitingConeAngle)
61        : LightSource(LS_SPOT)
62        , m_position(position)
63        , m_direction(direction)
64        , m_specularExponent(specularExponent)
65        , m_limitingConeAngle(limitingConeAngle)
66    {
67    }
68
69    FloatPoint3D m_position;
70    FloatPoint3D m_direction;
71
72    float m_specularExponent;
73    float m_limitingConeAngle;
74};
75
76} // namespace WebCore
77
78#endif // ENABLE(FILTERS)
79
80#endif // SpotLightSource_h
81