/*****************************************************************************
 * $LastChangedDate: 2011-04-09 21:58:06 -0400 (Sat, 09 Apr 2011) $
 * @file
 * @author  Jim E. Brooks  http://www.palomino3d.org
 * @brief   Functor attached to a View that computes view matrix for manipulator mode.
 *//*
 * LEGAL:   COPYRIGHT (C) 2008 JIM E. BROOKS
 *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
 *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
 *****************************************************************************/

#ifndef VIEW_VIEWPOINT_MANIPULATOR_HH
#define VIEW_VIEWPOINT_MANIPULATOR_HH 1

#include "view/viewpoint.hh"

namespace view {

class Manipulator;

////////////////////////////////////////////////////////////////////////////////
/// @brief Functor attached to a View that computes view matrix for manipulator mode.
///
/// A ManipulatorViewpoint can be composed with a Manipulator object.
/// See Viewpoint class.
///
class ManipulatorViewpoint : public Viewpoint
{
PREVENT_COPYING(ManipulatorViewpoint)
public:
                        ManipulatorViewpoint( RefPtr<Manipulator> manipulator );
    virtual             ~ManipulatorViewpoint();
protected:
    virtual Matrix      ComputeViewMatrix( shptr<View> view );

private:
    RefPtr<Manipulator> mManipulator;
public:
    DECLARE_TYPESIG(TYPESIG_MANIPULATOR_VIEWPOINT)
};

} // namespace view

#endif // VIEW_VIEWPOINT_MANIPULATOR_HH
