18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
2dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2008 Alex Mathews <possessedpenguinbob@gmail.com>
3dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005, 2006, 2007 Nikolas Zimmermann <zimmermann@kde.org>
4dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2004, 2005 Rob Buis <buis@kde.org>
5dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Copyright (C) 2005 Eric Seidel <eric@webkit.org>
6dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
7dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is free software; you can redistribute it and/or
8dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * modify it under the terms of the GNU Library General Public
9dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * License as published by the Free Software Foundation; either
10dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * version 2 of the License, or (at your option) any later version.
11dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
12dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * This library is distributed in the hope that it will be useful,
13dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * but WITHOUT ANY WARRANTY; without even the implied warranty of
14dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Library General Public License for more details.
16dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch *
17dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * You should have received a copy of the GNU Library General Public License
18dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * along with this library; see the file COPYING.LIB.  If not, write to
19dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch * Boston, MA 02110-1301, USA.
21dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch */
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
23bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#ifndef SpotLightSource_h
24bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#define SpotLightSource_h
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
26bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#if ENABLE(FILTERS)
27bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#include "LightSource.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass SpotLightSource : public LightSource {
326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic:
336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    static PassRefPtr<SpotLightSource> create(const FloatPoint3D& position,
346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        const FloatPoint3D& direction, float specularExponent, float limitingConeAngle)
356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        return adoptRef(new SpotLightSource(position, direction, specularExponent, limitingConeAngle));
376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const FloatPoint3D& position() const { return m_position; }
402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool setX(float);
412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool setY(float);
422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool setZ(float);
436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    const FloatPoint3D& direction() const { return m_direction; }
442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool setPointsAtX(float);
452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool setPointsAtY(float);
462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool setPointsAtZ(float);
476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    float specularExponent() const { return m_specularExponent; }
492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool setSpecularExponent(float);
506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    float limitingConeAngle() const { return m_limitingConeAngle; }
512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block    bool setLimitingConeAngle(float);
526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void initPaintingData(PaintingData&);
546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual void updatePaintingData(PaintingData&, int x, int y, float z);
556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    virtual TextStream& externalRepresentation(TextStream&) const;
576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenprivate:
596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    SpotLightSource(const FloatPoint3D& position, const FloatPoint3D& direction,
606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        float specularExponent, float limitingConeAngle)
616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        : LightSource(LS_SPOT)
626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_position(position)
636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_direction(direction)
646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_specularExponent(specularExponent)
656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen        , m_limitingConeAngle(limitingConeAngle)
666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    {
676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    }
686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    FloatPoint3D m_position;
706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    FloatPoint3D m_direction;
716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen
726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    float m_specularExponent;
736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen    float m_limitingConeAngle;
746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen};
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
78bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif // ENABLE(FILTERS)
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
80bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen#endif // SpotLightSource_h
81