/**
 * @file hv_cal_OsdRect.h
 * @brief Osd Cal layer rect interface.
 * @verbatim
 * ==============================================================================
 *                        ##### How to use this driver #####
 * ==============================================================================
 * @endverbatim
 *
 * @author HiView SoC Software Team
 * @version 0.0.1
 * @date 2022-08-22
 */

#ifndef _HV_CAL_OSDRECT_H
#define _HV_CAL_OSDRECT_H

#include "hv_comm_DataType.h"

/**
 * @brief set current rect
 * @param[in] rect index
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetCurrentRect(OsdRectPhyId enIndex);

/**
 * @brief set rect enable/disable status
 * @param[in] bEnable enable or disable
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetEnable(BOOL bEnable);

/**
 * @brief get rect enable/disable status
 * @param[in] None
 * @return HV_TRUE for enable, HV_FALSE for disable
 */
BOOL Hv_Cal_OsdRect_GetEnable(VOID);

/**
 * @brief set rect position
 * @param[in] usX X-axis value
 * @param[in] usY Y-axis value
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetPos(USHORT16 usX, USHORT16 usY);

/**
 * @brief get rect position
 * @param[in] pusX X-axis value
 * @param[in] pusY Y-axis value
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_GetPos(USHORT16 *pusX, USHORT16 *pusY);

/**
 * @brief set rect size
 * @param[in] usWidth width of rect
 * @param[in] usHeight height of rect
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetSize(USHORT16 usWidth, USHORT16 usHeight);

/**
 * @brief get rect size
 * @param[out] pusWidth width of rect
 * @param[out] pusHeight height of rect
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_GetSize(USHORT16 *pusWidth, USHORT16 *pusHeight);

/**
 * @brief set border enable/disable status
 * @param[in] bEnable enable or disable
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBorderEnable(BOOL bEnable);

/**
 * @brief set border type
 * @param[in] enType OSD_BORDER_2D: 2D border
 *                   OSD_BORDER_3D: 3D border
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBorderType(OsdRectBorderType enType);

/**
 * @brief set border size
 * @param[in] ucSizeX X-axis value
 * @param[in] ucSizeY Y-axis value
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBorderSize(UCHAR8 ucSizeX, UCHAR8 ucSizeY);

/**
 * @brief set border color
 * @param[in] usTopColor top border color in RGB565 format
 * @param[in] usBottomColor bottom border color in RGB565 format
 * @param[in] usLeftColor left border color in RGB565 format
 * @param[in] usRightColor right border color in RGB565 format
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBorderColor(USHORT16 usTopColor, USHORT16 usBottomColor, USHORT16 usLeftColor, USHORT16 usRightColor);

/**
 * @brief set shadow enable/disable status
 * @param[in] bEnable enable or disable
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetShadowEnable(BOOL bEnable);

/**
 * @brief set shadow type
 * @param[in] enType shadow position selection OSD_SHADOW_BOTTOM_RIGHT
 *                                             OSD_SHADOW_TOP_RIGHT
 *                                             OSD_SHADOW_BOTTOM_LEFT
 *                                             OSD_SHADOW_TOP_LEFT
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetShadowType(OsdRectShadowType enType);

/**
 * @brief set shadow size
 * @param[in] ucSizeX X-axis value
 * @param[in] ucSizeY Y-axis value
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetShadowSize(UCHAR8 ucSizeX, UCHAR8 ucSizeY);

/**
 * @brief set shadow color
 * @param[in] usColor shadow color in RGB565 format
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetShadowColor(USHORT16 usColor);

/**
 * @brief set background enable/disable status
 * @param[in] bEnable enable or disable
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBackgroundEnable(BOOL bEnable);

/**
 * @brief set background color
 * @param[in] usStartColor start color in RGB565 format
 * @param[in] usEndColor end color in RGB565 format, only for gradient
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBackgroundColor(USHORT16 usStartColor, USHORT16 usEndColor);

/**
 * @brief set gradient background enable/disable status
 * @param[in] bEnableGradient enable or disable
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBackgroundGradientEnable(BOOL bEnableGradient);

/**
 * @brief set gradient background type
 * @param[in] enType gradient type OSD_GRADIENT_LEFT_RIGHT: left to right
 *                                 OSD_GRADIENT_TOP_BOTTOM: top to bottom
 *                                 OSD_GRADIENT_CENTER_BORDER: center to border
 *                                 OSD_GRADIENT_BORDER_CENTER: border to center
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBackgroundGradientType(OsdGradientType enType);

/**
 * @brief set gradient background step
 * @param[in] usStepR step for R
 * @param[in] usStepG step for G
 * @param[in] usStepB step for B
 * @return VOID without return
 */
VOID Hv_Cal_OsdRect_SetBackgroundGradientStep(USHORT16 usStepR, USHORT16 usStepG, USHORT16 usStepB);

#endif
