// 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 | |
#include "xfa/src/foxitlib.h" | |
#include "xfa/src/fxfa/src/common/xfa_common.h" | |
#include "xfa_ffwidget.h" | |
#include "xfa_ffdraw.h" | |
#include "xfa_ffimage.h" | |
#include "xfa_ffpageview.h" | |
#include "xfa_ffdoc.h" | |
#include "xfa_ffapp.h" | |
CXFA_FFImage::CXFA_FFImage(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc) | |
: CXFA_FFDraw(pPageView, pDataAcc) {} | |
CXFA_FFImage::~CXFA_FFImage() { | |
CXFA_FFImage::UnloadWidget(); | |
} | |
FX_BOOL CXFA_FFImage::IsLoaded() { | |
return GetDataAcc()->GetImageImage() != NULL; | |
} | |
FX_BOOL CXFA_FFImage::LoadWidget() { | |
if (GetDataAcc()->GetImageImage()) { | |
return TRUE; | |
} | |
GetDataAcc()->LoadImageImage(); | |
return CXFA_FFDraw::LoadWidget(); | |
} | |
void CXFA_FFImage::UnloadWidget() { | |
GetDataAcc()->SetImageImage(NULL); | |
} | |
void CXFA_FFImage::RenderWidget(CFX_Graphics* pGS, | |
CFX_Matrix* pMatrix, | |
FX_DWORD dwStatus, | |
int32_t iRotate) { | |
if (!IsMatchVisibleStatus(dwStatus)) { | |
return; | |
} | |
CFX_Matrix mtRotate; | |
GetRotateMatrix(mtRotate); | |
if (pMatrix) { | |
mtRotate.Concat(*pMatrix); | |
} | |
CXFA_FFWidget::RenderWidget(pGS, &mtRotate, dwStatus); | |
if (CFX_DIBitmap* pDIBitmap = GetDataAcc()->GetImageImage()) { | |
CFX_RectF rtImage; | |
GetRectWithoutRotate(rtImage); | |
if (CXFA_Margin mgWidget = m_pDataAcc->GetMargin()) { | |
XFA_RectWidthoutMargin(rtImage, mgWidget); | |
} | |
int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left; | |
int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top; | |
if (CXFA_Para para = m_pDataAcc->GetPara()) { | |
iHorzAlign = para.GetHorizontalAlign(); | |
iVertAlign = para.GetVerticalAlign(); | |
} | |
CXFA_Value value = m_pDataAcc->GetFormValue(); | |
CXFA_Image imageObj = value.GetImage(); | |
int32_t iAspect = imageObj.GetAspect(); | |
int32_t iImageXDpi = 0; | |
int32_t iImageYDpi = 0; | |
m_pDataAcc->GetImageDpi(iImageXDpi, iImageYDpi); | |
XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi, | |
iImageYDpi, iHorzAlign, iVertAlign); | |
} | |
} |