#ifndef _Viewport_h_
#define _Viewport_h_

//////////////////////////////////////////////////////////////////////////////
//
// Viewport header
//
//////////////////////////////////////////////////////////////////////////////

class Viewport : public Value {
public:
    DefineCastMember(Viewport);

    Viewport(Camera* pcamera, RectValue* prectView) :
        Value(pcamera, prectView)
    {
    }

    void SetCamera(Camera* pvalue)      { SetChild(0, pvalue); }
    void SetViewRect(RectValue* pvalue) { SetChild(1, pvalue); }

    Camera*    GetCamera()   { return Camera::Cast(GetChild(0));    }
    RectValue* GetViewRect() { return RectValue::Cast(GetChild(1)); }

    const Rect&    GetRect();
          float    GetAspect();
          Point    TransformNDCToImage(const Point& point);
          WinPoint TransformNDCToScreen(const Point& point);
          WinPoint TransformImageToScreen(const Point& point);
};

#endif