#ifndef DISPLAY_SETTING_H
#define DISPLAY_SETTING_H

//////////////////////////////////////////////////////////////////////////////////
// The interface is used to control and setup video display in the NuuoGLRenderer.
//////////////////////////////////////////////////////////////////////////////////

class IDisplaySetting
{
public:
    // Setup geometry and matrix information of the input camera views, and the size of matrix must be 16. (4x4 matrix)
    virtual void SetNumOfViews(int nViews) = 0;
    virtual void SetupCameraViews(int viewIdx, float* TransMatrix, float* HomoMatrix) = 0;

    virtual void EnableKeepAspectRatio(bool bEnable) = 0;   // keep video original aspect ratio
    virtual void EnableKeepFieldOfView(bool bEnable) = 0;   // bEnable = true:  keep field of view to see only one video
                                                            // bEnable = false: to see more video and the video frames are also keep ratio automatically. (for panorama)
    virtual void SetViewRotate(double dHOffset, double dVOffset) = 0;   // dOffset : -1.0 ~ +1.0 (normalized movement)
    virtual void SetViewTranslate(double dHOffset, double dVOffset, bool boundaryCheck) = 0;
    virtual void SetViewZoom(double dZoomOffset, bool boundaryCheck) = 0;
    virtual void GetViewPosition(double* pPosX, double* pPosY) = 0;     // (x,y) is normalized to (-1.0 ~ +1.0)
    virtual void GetZoomFactor(double* pdZoomFactor) = 0;
    virtual void ResetViewPosition() = 0;
    virtual void ResetViewMovement() = 0;

    virtual void SetEyeRotation(double dHorizontal, double dVertical) = 0;
    virtual void GetEyeRotation(double* pdHorizontal, double* pdVertical) = 0;

    virtual void EnableOverview(bool bEnable) = 0;          // overview thumbnail for digital PTZ
};
#endif