1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 PDFium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fpdfview.h"
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fpdfformfill.h"
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fsdk_define.h"
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/fsdk_mgr.h"
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../include/javascript/IJavaScript.h"
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT int STDCALL FPDPage_HasFormFieldAtPoint(FPDF_FORMHANDLE hHandle, FPDF_PAGE page,double page_x, double page_y)
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!page || !hHandle)
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return -1;
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Page * pPage = (CPDF_Page*) page;
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_InterForm * pInterForm = NULL;
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pInterForm = new CPDF_InterForm(pPage->m_pDocument,FALSE);
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pInterForm)
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return -1;
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_FormControl* pFormCtrl = pInterForm->GetControlAtPoint(pPage, (FX_FLOAT)page_x, (FX_FLOAT)page_y);
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFormCtrl)
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pInterForm;
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return -1;
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_FormField* pFormField = pFormCtrl->GetField();
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFormField)
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pInterForm;
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return -1;
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	int nType = pFormField->GetFieldType();
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	delete pInterForm;
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return nType;
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_FORMHANDLE STDCALL FPDFDOC_InitFormFillEnviroument(FPDF_DOCUMENT document, FPDF_FORMFILLINFO* formInfo)
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!document || !formInfo || formInfo->version!=1)
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return NULL;
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Document * pDocument = (CPDF_Document*) document;
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	CPDFDoc_Environment * pEnv = NULL;
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pEnv = new CPDFDoc_Environment(pDocument);
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pEnv)
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return NULL;
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pEnv->RegAppHandle(formInfo);
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pEnv->GetPDFDocument())
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFSDK_Document* pSDKDoc = new CPDFSDK_Document(pEnv->GetPDFDocument(), pEnv);
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(pSDKDoc)
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pEnv->SetCurrentDoc(pSDKDoc);
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pEnv;
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDFDOC_ExitFormFillEnviroument(FPDF_FORMHANDLE hHandle)
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!hHandle)
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pSDKDoc)
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		((CPDFDoc_Environment*)hHandle)->SetCurrentDoc(NULL);
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pSDKDoc;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	delete (CPDFDoc_Environment*)hHandle;
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	hHandle = NULL;
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FORM_OnMouseMove(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y)
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle || !page)
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	CPDF_Page * pPage = (CPDF_Page*) page;
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	CPDF_Document * pDoc = pPage->m_pDocument;
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pFXDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFXDoc)
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pFXDoc->GetPageView((CPDF_Page*)page);
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pPageView)
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	double page_x = 0;
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	double page_y = 0;
94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	pEnv->FFI_DeviceToPage(page, point_x, point_y, &page_x, &page_y);
95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pPageView->OnMouseMove(pt, modifier);
97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
99ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonDown(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y)
100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle || !page)
102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pFXDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFXDoc)
105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pFXDoc->GetPageView((CPDF_Page*)page);
107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pPageView)
108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	double page_x = 0;
110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	double page_y = 0;
111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	pEnv->FFI_DeviceToPage(page, point_x, point_y, &page_x, &page_y);
112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 	return pPageView->OnLButtonDown(pt, modifier);
114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
116ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FORM_OnLButtonUp(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int modifier, double page_x, double page_y)
117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle || !page)
119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pFXDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFXDoc)
122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pFXDoc->GetPageView((CPDF_Page*)page);
124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pPageView)
125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	double page_x = 0;
127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	double page_y = 0;
128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// 	pEnv->FFI_DeviceToPage(page, point_x, point_y, &page_x, &page_y);
129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Point pt((FX_FLOAT)page_x, (FX_FLOAT)page_y);
130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pPageView->OnLButtonUp(pt, modifier);
131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
133ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyDown(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nKeyCode, int modifier)
134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle || !page)
136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pFXDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFXDoc)
139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pFXDoc->GetPageView((CPDF_Page*)page);
141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pPageView)
142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pPageView->OnKeyDown(nKeyCode, modifier);
146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
148ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FORM_OnKeyUp(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nKeyCode, int modifier)
149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle || !page)
151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pFXDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFXDoc)
154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pFXDoc->GetPageView((CPDF_Page*)page);
156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pPageView)
157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pPageView->OnKeyUp(nKeyCode, modifier);
161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
164ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FORM_OnChar(FPDF_FORMHANDLE hHandle, FPDF_PAGE page, int nChar,  int modifier)
165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle || !page)
167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pFXDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFXDoc)
170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pFXDoc->GetPageView((CPDF_Page*)page);
172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pPageView)
173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pPageView->OnChar(nChar, modifier);
175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
178ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT FPDF_BOOL STDCALL FORM_ForceToKillFocus(FPDF_FORMHANDLE hHandle)
179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!hHandle)
181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pSDKDoc)
184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return FALSE;
185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//Kill the current focus.
186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	return pSDKDoc->KillFocusAnnot(0);
187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
189ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDF_FFLDraw(FPDF_FORMHANDLE hHandle, FPDF_BITMAP bitmap, FPDF_PAGE page, int start_x, int start_y,
190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov												  int size_x, int size_y, int rotate, int flags)
191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle || !page)
193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return ;
194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Page* pPage = (CPDF_Page*)page;
195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_RenderOptions options;
197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (flags & FPDF_LCD_TEXT)
198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		options.m_Flags |= RENDER_CLEARTYPE;
199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	else
200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		options.m_Flags &= ~RENDER_CLEARTYPE;
201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//Grayscale output
203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (flags & FPDF_GRAYSCALE)
204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		options.m_ColorMode = RENDER_COLOR_GRAY;
206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		options.m_ForeColor = 0;
207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		options.m_BackColor = 0xffffff;
208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	options.m_AddFlags = flags >> 8;
211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	options.m_pOCContext = FX_NEW CPDF_OCContext(pPage->m_pDocument);
213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	//FXMT_CSLOCK_OBJ(&pPage->m_PageLock);
215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_AffineMatrix matrix;
217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pPage->GetDisplayMatrix(matrix, start_x, start_y, size_x, size_y, rotate);
218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	FX_RECT clip;
220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	clip.left = start_x;
221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	clip.right = start_x + size_x;
222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	clip.top = start_y;
223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	clip.bottom = start_y + size_y;
224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef _SKIA_SUPPORT_
226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_SkiaDevice* pDevice = FX_NEW CFX_SkiaDevice;
227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else
228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CFX_FxgeDevice* pDevice = NULL;
229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pDevice = FX_NEW CFX_FxgeDevice;
230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif
231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pDevice)
233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pDevice->Attach((CFX_DIBitmap*)bitmap);
235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pDevice->SaveState();
236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pDevice->SetClip_Rect(&clip);
237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_RenderContext* pContext = NULL;
240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pContext = FX_NEW CPDF_RenderContext;
241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!pContext)
242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pDevice;
244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDevice = NULL;
245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	CPDF_Document* pDoc = pPage->m_pDocument;
250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFDoc_Environment* pEnv = (CPDFDoc_Environment*)hHandle;
251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pFXDoc = pEnv->GetCurrentDoc();
252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pFXDoc)
253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pContext;
255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pDevice;
256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pContext = NULL;
257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDevice = NULL;
258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(CPDFSDK_PageView* pPageView = pFXDoc->GetPageView(pPage))
261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pPageView->PageView_OnDraw(pDevice, &matrix, &options);
263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	pDevice->RestoreState();
265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(options.m_pOCContext)
267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete options.m_pOCContext;
269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		options.m_pOCContext = NULL;
270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pContext)
272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pContext;
274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pContext = NULL;
275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pDevice)
277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		delete pDevice;
279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pDevice = NULL;
280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
284ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDF_SetFormFieldHighlightColor(FPDF_FORMHANDLE hHandle, int fieldType, unsigned long color)
285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle)
287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov//	CPDFDoc_Environment* pEnv = (CPDFDoc_Environment* )hHandle;
289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pSDKDoc)
291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm())
293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pInterForm->SetHighlightColor(color, fieldType);
295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
301ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDF_SetFormFieldHighlightAlpha(FPDF_FORMHANDLE hHandle, unsigned char alpha)
302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle)
304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pSDKDoc)
307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm())
309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pInterForm->SetHighlightAlpha(alpha);
310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
313ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FPDF_RemoveFormFieldHighlight(FPDF_FORMHANDLE hHandle)
314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if (!hHandle)
316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pSDKDoc)
319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(CPDFSDK_InterForm* pInterForm = pSDKDoc->GetInterForm())
321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pInterForm->RemoveAllHighLight();
322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
325ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FORM_OnAfterLoadPage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle)
326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!hHandle || !page)
328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!pSDKDoc)
331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Page* pPage = (CPDF_Page*)page;
333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, TRUE);
334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pPageView)
335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pPageView->SetValid(TRUE);
337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
340ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FORM_OnBeforeClosePage(FPDF_PAGE page, FPDF_FORMHANDLE hHandle)
341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!hHandle || !page)
343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Page* pPage = (CPDF_Page*)page;
346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE);
347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pPageView)
348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pPageView->SetValid(FALSE);
350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		// ReMovePageView() takes care of the delete for us.
351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSDKDoc->ReMovePageView(pPage);
352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
354ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FORM_DoDocumentJSAction(FPDF_FORMHANDLE hHandle)
355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!hHandle)
357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if( CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc())
359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		pSDKDoc->InitPageView();
361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(((CPDFDoc_Environment*)hHandle)->IsJSInitiated())
362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pSDKDoc->ProcJavascriptFun();
363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
366ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FORM_DoDocumentOpenAction(FPDF_FORMHANDLE hHandle)
367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!hHandle)
369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if( CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc())
371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(((CPDFDoc_Environment*)hHandle)->IsJSInitiated())
373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pSDKDoc->ProcOpenAction();
374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
376ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FORM_DoDocumentAAction(FPDF_FORMHANDLE hHandle, int aaType)
377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!hHandle)
379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pSDKDoc)
382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Document* pDoc = pSDKDoc->GetDocument();
384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Dictionary* pDic = pDoc->GetRoot();
385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (!pDic)
386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			return;
387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_AAction aa = pDic->GetDict(FX_BSTRC("AA"));
388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if(aa.ActionExist((CPDF_AAction::AActionType)aaType))
390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDF_Action action = aa.GetAction((CPDF_AAction::AActionType)aaType);
392ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			CPDFSDK_ActionHandler *pActionHandler = ((CPDFDoc_Environment*)hHandle)->GetActionHander();
393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			ASSERT(pActionHandler != NULL);
394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			pActionHandler->DoAction_Document(action, (CPDF_AAction::AActionType)aaType, pSDKDoc);
395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
398ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovDLLEXPORT void STDCALL FORM_DoPageAAction(FPDF_PAGE page, FPDF_FORMHANDLE hHandle, int aaType)
399ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
400ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(!hHandle || !page)
401ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		return;
402ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_Document* pSDKDoc = ((CPDFDoc_Environment*)hHandle)->GetCurrentDoc();
403ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDF_Page* pPage = (CPDF_Page*)page;
404ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	CPDFSDK_PageView* pPageView = pSDKDoc->GetPageView(pPage, FALSE);
405ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	if(pPageView)
406ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	{
407ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFDoc_Environment *pEnv = pSDKDoc->GetEnv();
408ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pEnv != NULL);
409ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
410ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDFSDK_ActionHandler *pActionHandler = pEnv->GetActionHander();
411ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pActionHandler != NULL);
412ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
413ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_Dictionary *pPageDict = pPage->m_pFormDict;
414ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		ASSERT(pPageDict != NULL);
415ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
416ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		CPDF_AAction aa = pPageDict->GetDict(FX_BSTRC("AA"));
417ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
418ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_BOOL bExistOAAction = FALSE;
419ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		FX_BOOL bExistCAAction = FALSE;
420ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		if (FPDFPAGE_AACTION_OPEN == aaType)
421ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
422ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bExistOAAction = aa.ActionExist(CPDF_AAction::OpenPage);
423ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (bExistOAAction)
424ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
425ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Action action = aa.GetAction(CPDF_AAction::OpenPage);
426ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pActionHandler->DoAction_Page(action, CPDF_AAction::OpenPage, pSDKDoc);
427ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
428ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
429ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		else
430ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		{
431ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			bExistCAAction = aa.ActionExist(CPDF_AAction::ClosePage);
432ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			if (bExistCAAction)
433ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			{
434ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				CPDF_Action action = aa.GetAction(CPDF_AAction::ClosePage);
435ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov				pActionHandler->DoAction_Page(action, CPDF_AAction::ClosePage, pSDKDoc);
436ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov			}
437ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov		}
438ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov	}
439ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
440ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
441ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
442