#ifndef _FS_PSI_C_H_
#define _FS_PSI_C_H_

#ifdef __cplusplus
extern "C" {
#endif


typedef struct _FSPSICallback {
  void* user_data;
  void (*Release)(void* user_data);
  void (*Refresh)(void* user_data, FS_PSI_HANDLE psi, const FSRectF rect);
}FSPSICallback;

FSErrorCode FSDK_PSI_Create( FS_BITMAP_HANDLE bitmap, FS_BOOL simulate, FS_PSI_HANDLE* psi_return_value);
FSErrorCode FSDK_PSI_Create0(int width, int height, FS_BOOL simulate, FS_PSI_HANDLE* psi_return_value);
FSErrorCode FSDK_PSI_IsEmpty(FS_PSI_HANDLE psi_handle, FS_BOOL* return_value);
FSErrorCode FSDK_PSI_Release(FS_PSI_HANDLE psi_handle);
FSErrorCode FSDK_PSI_SetCallback(FS_PSI_HANDLE psi_handle, FSPSICallback* callback);
FSErrorCode FSDK_PSI_SetColor(FS_PSI_HANDLE psi_handle, FS_RGB color);
FSErrorCode FSDK_PSI_SetDiameter(FS_PSI_HANDLE psi_handle, int diameter);
FSErrorCode FSDK_PSI_SetOpacity(FS_PSI_HANDLE psi_handle, float opacity);
FSErrorCode FSDK_PSI_AddPoint(FS_PSI_HANDLE psi_handle, const FSPointF point, FSPointType type, float pressure);
FSErrorCode FSDK_PSI_GetContentsRect(FS_PSI_HANDLE psi_handle, FSRectF* return_value);
FSErrorCode FSDK_PSI_GetBitmap(FS_PSI_HANDLE psi_handle, FS_BITMAP_HANDLE* return_value);
FSErrorCode FSDK_PSI_ConvertToPDFAnnot(FS_PSI_HANDLE psi_handle, const FS_PDFPAGE_HANDLE page, const FSRectF annot_rect, FSRotation rotate, FS_PSINKANNOT_HANDLE* return_value);
#ifdef __cplusplus
}
#endif
#endif
