// Copyright 2014 PDFium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
 
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com

#ifndef _FPDF_PROGRESSIVE_H_
#define _FPDF_PROGRESSIVE_H_

#include "fpdfview.h"

//Flags for progressive process status.
#define FPDF_RENDER_READER			0
#define FPDF_RENDER_TOBECOUNTINUED	1
#define FPDF_RENDER_DONE			2
#define FPDF_RENDER_FAILED			3


#ifdef __cplusplus
extern "C" {
#endif


//IFPDF_RENDERINFO interface.
typedef struct _IFSDK_PAUSE
{
	/**
	* Version number of the interface. Currently must be 1.
	**/
	int version;

	/*
	* Method: NeedToPauseNow
	*			Check if we need to pause a progressive process now.
	* Interface Version:
	*			1
	* Implementation Required:
	*			yes
	* Parameters:
	*			pThis		-	Pointer to the interface structure itself
	* Return Value:
	*			 Non-zero for pause now, 0 for continue.
	*
	*/
	FPDF_BOOL (*NeedToPauseNow) (struct _IFSDK_PAUSE* pThis);
	
	//A user defined data pointer, used by user's application. Can be NULL.
	void*		user;
} IFSDK_PAUSE;

// Function: FPDF_RenderPageBitmap_Start
//			Start to render page contents to a device independent bitmap progressively.
// Parameters: 
//			bitmap		-	Handle to the device independent bitmap (as the output buffer).
//							Bitmap handle can be created by FPDFBitmap_Create function.
//			page		-	Handle to the page. Returned by FPDF_LoadPage function.
//			start_x		-	Left pixel position of the display area in the bitmap coordinate.
//			start_y		-	Top pixel position of the display area in the bitmap coordinate.
//			size_x		-	Horizontal size (in pixels) for displaying the page.
//			size_y		-	Vertical size (in pixels) for displaying the page.
//			rotate		-	Page orientation: 0 (normal), 1 (rotated 90 degrees clockwise),
//								2 (rotated 180 degrees), 3 (rotated 90 degrees counter-clockwise).
//			flags		-	0 for normal display, or combination of flags defined above.
//			pause		-	The IFSDK_PAUSE interface.A callback mechanism allowing the page rendering process
// Return value:
//			Rendering Status. See flags for progressive process status for the details.
// Notes:
//			The method cannot not support to render page which the document consists of dynamic XFA fields.
//
DLLEXPORT int STDCALL FPDF_RenderPageBitmap_Start(FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y, int size_x,
												   int size_y, int rotate, int flags,IFSDK_PAUSE * pause);

// Function: FPDF_RenderPage_Continue
//			Continue rendering a PDF page.
// Parameters: 
//			page		-	Handle to the page. Returned by FPDF_LoadPage function.
//			pause		-	The IFSDK_PAUSE interface.A callback mechanism allowing the page rendering process
//							to be paused before it's finished. This can be NULL if you don't want to pause.
// Return value:
//			The rendering status. See flags for progressive process status for the details.
// Notes:
//			The method cannot not support to render page which the document consists of dynamic XFA fields.
//
DLLEXPORT int STDCALL FPDF_RenderPage_Continue(FPDF_PAGE page,IFSDK_PAUSE * pause);

// Function: FPDF_RenderPage_Close
//			Release the resource allocate during page rendering. Need to be called after finishing rendering or
//			cancel the rendering.
// Parameters: 
//			page		-	Handle to the page. Returned by FPDF_LoadPage function.
// Return value:
//			NULL
// Notes:
//			The method cannot not support to render page which the document consists of dynamic XFA fields.
//
DLLEXPORT void STDCALL FPDF_RenderPage_Close(FPDF_PAGE page);

#ifdef __cplusplus
}
#endif

#endif	//_FPDF_PROGRESSIVE_H_