Merge XFA to PDFium master at 4dc95e7 on 10/28/2014
[pdfium.git] / xfa / src / fxfa / src / app / xfa_ffimage.cpp
1 // Copyright 2014 PDFium Authors. All rights reserved.\r
2 // Use of this source code is governed by a BSD-style license that can be\r
3 // found in the LICENSE file.\r
4 \r
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com\r
6 \r
7 #include "../../../foxitlib.h"\r
8 #include "../common/xfa_common.h"\r
9 #include "xfa_ffwidget.h"\r
10 #include "xfa_ffdraw.h"\r
11 #include "xfa_ffimage.h"\r
12 #include "xfa_ffpageview.h"\r
13 #include "xfa_ffdoc.h"\r
14 #include "xfa_ffapp.h"\r
15 CXFA_FFImage::CXFA_FFImage(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc)\r
16     : CXFA_FFDraw(pPageView, pDataAcc)\r
17 {\r
18 }\r
19 CXFA_FFImage::~CXFA_FFImage()\r
20 {\r
21     CXFA_FFImage::UnloadWidget();\r
22 }\r
23 FX_BOOL CXFA_FFImage::IsLoaded()\r
24 {\r
25     return GetDataAcc()->GetImageImage() != NULL;\r
26 }\r
27 FX_BOOL CXFA_FFImage::LoadWidget()\r
28 {\r
29     if (GetDataAcc()->GetImageImage()) {\r
30         return TRUE;\r
31     }\r
32     GetDataAcc()->LoadImageImage();\r
33     return CXFA_FFDraw::LoadWidget();\r
34 }\r
35 void CXFA_FFImage::UnloadWidget()\r
36 {\r
37     GetDataAcc()->SetImageImage(NULL);\r
38 }\r
39 void CXFA_FFImage::RenderWidget(CFX_Graphics* pGS, CFX_Matrix* pMatrix , FX_DWORD dwStatus , FX_INT32 iRotate )\r
40 {\r
41     if (!IsMatchVisibleStatus(dwStatus)) {\r
42         return;\r
43     }\r
44     CFX_Matrix mtRotate;\r
45     GetRotateMatrix(mtRotate);\r
46     if (pMatrix) {\r
47         mtRotate.Concat(*pMatrix);\r
48     }\r
49     CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus);\r
50     if (CFX_DIBitmap* pDIBitmap = GetDataAcc()->GetImageImage()) {\r
51         CFX_RectF rtImage;\r
52         GetRectWithoutRotate(rtImage);\r
53         if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) {\r
54             XFA_RectWidthoutMargin(rtImage, mgWidget);\r
55         }\r
56         FX_INT32 iHorzAlign = XFA_ATTRIBUTEENUM_Left;\r
57         FX_INT32 iVertAlign = XFA_ATTRIBUTEENUM_Top;\r
58         if (CXFA_Para para = m_pDataAcc->GetPara()) {\r
59             iHorzAlign = para.GetHorizontalAlign();\r
60             iVertAlign = para.GetVerticalAlign();\r
61         }\r
62         CXFA_Value value = m_pDataAcc->GetFormValue();\r
63         CXFA_Image imageObj = value.GetImage();\r
64         FX_INT32 iAspect = imageObj.GetAspect();\r
65         FX_INT32 iImageXDpi = 0;\r
66         FX_INT32 iImageYDpi = 0;\r
67         m_pDataAcc->GetImageDpi(iImageXDpi, iImageYDpi);\r
68         XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi, iImageYDpi, iHorzAlign, iVertAlign);\r
69     }\r
70 }\r