Index: xfa/src/fxfa/src/app/xfa_ffimageedit.cpp |
diff --git a/xfa/src/fxfa/src/app/xfa_ffimageedit.cpp b/xfa/src/fxfa/src/app/xfa_ffimageedit.cpp |
index 01088354acbe6efcf8b2b42c8a2ea7c0335ff5c1..e3329a9869e63c484581a4ffeeb31b60e04a09bf 100644 |
--- a/xfa/src/fxfa/src/app/xfa_ffimageedit.cpp |
+++ b/xfa/src/fxfa/src/app/xfa_ffimageedit.cpp |
@@ -1,183 +1,183 @@ |
-// 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_fffield.h" |
-#include "xfa_ffpageview.h" |
-#include "xfa_ffimageedit.h" |
-#include "xfa_ffdocview.h" |
-#include "xfa_ffdoc.h" |
-CXFA_FFImageEdit::CXFA_FFImageEdit(CXFA_FFPageView* pPageView, |
- CXFA_WidgetAcc* pDataAcc) |
- : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {} |
-CXFA_FFImageEdit::~CXFA_FFImageEdit() { |
- CXFA_FFImageEdit::UnloadWidget(); |
-} |
-FX_BOOL CXFA_FFImageEdit::LoadWidget() { |
- CFWL_PictureBox* pPictureBox = new CFWL_PictureBox; |
- if (pPictureBox) { |
- pPictureBox->Initialize(); |
- } |
- m_pNormalWidget = (CFWL_Widget*)pPictureBox; |
- IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); |
- m_pNormalWidget->SetPrivateData(pWidget, this, NULL); |
- IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); |
- pNoteDriver->RegisterEventTarget(pWidget, pWidget); |
- m_pOldDelegate = pPictureBox->SetDelegate(this); |
- CXFA_FFField::LoadWidget(); |
- if (m_pDataAcc->GetImageEditImage() != NULL) { |
- return TRUE; |
- } |
- UpdateFWLData(); |
- return TRUE; |
-} |
-void CXFA_FFImageEdit::UnloadWidget() { |
- m_pDataAcc->SetImageEditImage(NULL); |
- CXFA_FFField::UnloadWidget(); |
-} |
-void CXFA_FFImageEdit::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); |
- CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); |
- DrawBorder(pGS, borderUI, m_rtUI, &mtRotate); |
- RenderCaption(pGS, &mtRotate); |
- if (CFX_DIBitmap* pDIBitmap = m_pDataAcc->GetImageEditImage()) { |
- CFX_RectF rtImage; |
- m_pNormalWidget->GetWidgetRect(rtImage); |
- 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(); |
- } |
- int32_t iAspect = XFA_ATTRIBUTEENUM_Fit; |
- if (CXFA_Value value = m_pDataAcc->GetFormValue()) { |
- if (CXFA_Image imageObj = value.GetImage()) { |
- iAspect = imageObj.GetAspect(); |
- } |
- } |
- int32_t iImageXDpi = 0; |
- int32_t iImageYDpi = 0; |
- m_pDataAcc->GetImageEditDpi(iImageXDpi, iImageYDpi); |
- XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi, |
- iImageYDpi, iHorzAlign, iVertAlign); |
- } |
-} |
-FX_BOOL CXFA_FFImageEdit::OnLButtonDown(FX_DWORD dwFlags, |
- FX_FLOAT fx, |
- FX_FLOAT fy) { |
- if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { |
- return FALSE; |
- } |
- if (!PtInActiveRect(fx, fy)) { |
- return FALSE; |
- } |
- SetButtonDown(TRUE); |
- CFWL_MsgMouse ms; |
- ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown; |
- ms.m_dwFlags = dwFlags; |
- ms.m_fx = fx; |
- ms.m_fy = fy; |
- ms.m_pDstTarget = m_pNormalWidget->m_pIface; |
- FWLToClient(ms.m_fx, ms.m_fy); |
- TranslateFWLMessage(&ms); |
- IXFA_AppProvider* pAppProvider = GetAppProvider(); |
- if (!pAppProvider) { |
- return TRUE; |
- } |
- CFX_WideString wsTitle; |
- CFX_WideString wsFilter; |
- pAppProvider->LoadString(XFA_IDS_ImageFilter, wsFilter); |
- CFX_WideStringArray wsPathArray; |
- pAppProvider->ShowFileDialog(wsTitle, wsFilter, wsPathArray); |
- int32_t iSize = wsPathArray.GetSize(); |
- if (iSize < 1) { |
- return TRUE; |
- } |
- CFX_WideString wsFilePath = wsPathArray[0]; |
- FX_STRSIZE nLen = wsFilePath.GetLength(); |
- FX_STRSIZE nIndex = nLen - 1; |
- while (nIndex > 0 && wsFilePath[nIndex] != '.') { |
- nIndex--; |
- } |
- if (nIndex <= 0) { |
- return TRUE; |
- } |
- CFX_WideString wsContentType(L"image/"); |
- wsContentType += wsFilePath.Right(nLen - nIndex - 1); |
- wsContentType.MakeLower(); |
- FXCODEC_IMAGE_TYPE eImageType = XFA_GetImageType(wsContentType); |
- if (eImageType == FXCODEC_IMAGE_UNKNOWN) { |
- return TRUE; |
- } |
- CFX_WideString wsImage; |
- IFX_FileRead* pFileRead = FX_CreateFileRead(wsFilePath); |
- if (pFileRead != NULL) { |
- int32_t nDataSize = pFileRead->GetSize(); |
- if (nDataSize > 0) { |
- CFX_ByteString bsBuf; |
- FX_CHAR* pImageBuffer = bsBuf.GetBuffer(nDataSize); |
- pFileRead->ReadBlock(pImageBuffer, 0, nDataSize); |
- bsBuf.ReleaseBuffer(); |
- if (!bsBuf.IsEmpty()) { |
- FX_CHAR* pData = XFA_Base64Encode(bsBuf, nDataSize); |
- wsImage = CFX_WideString::FromLocal(pData); |
- if (pData != NULL) { |
- FX_Free(pData); |
- } |
- } |
- } |
- m_pDataAcc->SetImageEditImage(NULL); |
- pFileRead->Release(); |
- } |
- m_pDataAcc->SetImageEdit(wsContentType, CFX_WideStringC(), wsImage); |
- m_pDataAcc->LoadImageEditImage(); |
- AddInvalidateRect(); |
- m_pDocView->SetChangeMark(); |
- return TRUE; |
-} |
-void CXFA_FFImageEdit::SetFWLRect() { |
- if (!m_pNormalWidget) { |
- return; |
- } |
- CFX_RectF rtUIMargin; |
- m_pDataAcc->GetUIMargin(rtUIMargin); |
- CFX_RectF rtImage(m_rtUI); |
- rtImage.Deflate(rtUIMargin.left, rtUIMargin.top, rtUIMargin.width, |
- rtUIMargin.height); |
- m_pNormalWidget->SetWidgetRect(rtImage); |
-} |
-FX_BOOL CXFA_FFImageEdit::CommitData() { |
- return TRUE; |
-} |
-FX_BOOL CXFA_FFImageEdit::UpdateFWLData() { |
- m_pDataAcc->SetImageEditImage(NULL); |
- m_pDataAcc->LoadImageEditImage(); |
- return TRUE; |
-} |
-int32_t CXFA_FFImageEdit::OnProcessMessage(CFWL_Message* pMessage) { |
- return m_pOldDelegate->OnProcessMessage(pMessage); |
-} |
-FWL_ERR CXFA_FFImageEdit::OnProcessEvent(CFWL_Event* pEvent) { |
- CXFA_FFField::OnProcessEvent(pEvent); |
- return m_pOldDelegate->OnProcessEvent(pEvent); |
-} |
-FWL_ERR CXFA_FFImageEdit::OnDrawWidget(CFX_Graphics* pGraphics, |
- const CFX_Matrix* pMatrix) { |
- return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); |
-} |
+// 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_fffield.h" |
+#include "xfa_ffpageview.h" |
+#include "xfa_ffimageedit.h" |
+#include "xfa_ffdocview.h" |
+#include "xfa_ffdoc.h" |
+CXFA_FFImageEdit::CXFA_FFImageEdit(CXFA_FFPageView* pPageView, |
+ CXFA_WidgetAcc* pDataAcc) |
+ : CXFA_FFField(pPageView, pDataAcc), m_pOldDelegate(NULL) {} |
+CXFA_FFImageEdit::~CXFA_FFImageEdit() { |
+ CXFA_FFImageEdit::UnloadWidget(); |
+} |
+FX_BOOL CXFA_FFImageEdit::LoadWidget() { |
+ CFWL_PictureBox* pPictureBox = new CFWL_PictureBox; |
+ if (pPictureBox) { |
+ pPictureBox->Initialize(); |
+ } |
+ m_pNormalWidget = (CFWL_Widget*)pPictureBox; |
+ IFWL_Widget* pWidget = m_pNormalWidget->GetWidget(); |
+ m_pNormalWidget->SetPrivateData(pWidget, this, NULL); |
+ IFWL_NoteDriver* pNoteDriver = FWL_GetApp()->GetNoteDriver(); |
+ pNoteDriver->RegisterEventTarget(pWidget, pWidget); |
+ m_pOldDelegate = pPictureBox->SetDelegate(this); |
+ CXFA_FFField::LoadWidget(); |
+ if (m_pDataAcc->GetImageEditImage() != NULL) { |
+ return TRUE; |
+ } |
+ UpdateFWLData(); |
+ return TRUE; |
+} |
+void CXFA_FFImageEdit::UnloadWidget() { |
+ m_pDataAcc->SetImageEditImage(NULL); |
+ CXFA_FFField::UnloadWidget(); |
+} |
+void CXFA_FFImageEdit::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); |
+ CXFA_Border borderUI = m_pDataAcc->GetUIBorder(); |
+ DrawBorder(pGS, borderUI, m_rtUI, &mtRotate); |
+ RenderCaption(pGS, &mtRotate); |
+ if (CFX_DIBitmap* pDIBitmap = m_pDataAcc->GetImageEditImage()) { |
+ CFX_RectF rtImage; |
+ m_pNormalWidget->GetWidgetRect(rtImage); |
+ 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(); |
+ } |
+ int32_t iAspect = XFA_ATTRIBUTEENUM_Fit; |
+ if (CXFA_Value value = m_pDataAcc->GetFormValue()) { |
+ if (CXFA_Image imageObj = value.GetImage()) { |
+ iAspect = imageObj.GetAspect(); |
+ } |
+ } |
+ int32_t iImageXDpi = 0; |
+ int32_t iImageYDpi = 0; |
+ m_pDataAcc->GetImageEditDpi(iImageXDpi, iImageYDpi); |
+ XFA_DrawImage(pGS, rtImage, &mtRotate, pDIBitmap, iAspect, iImageXDpi, |
+ iImageYDpi, iHorzAlign, iVertAlign); |
+ } |
+} |
+FX_BOOL CXFA_FFImageEdit::OnLButtonDown(FX_DWORD dwFlags, |
+ FX_FLOAT fx, |
+ FX_FLOAT fy) { |
+ if (m_pDataAcc->GetAccess() != XFA_ATTRIBUTEENUM_Open) { |
+ return FALSE; |
+ } |
+ if (!PtInActiveRect(fx, fy)) { |
+ return FALSE; |
+ } |
+ SetButtonDown(TRUE); |
+ CFWL_MsgMouse ms; |
+ ms.m_dwCmd = FWL_MSGMOUSECMD_LButtonDown; |
+ ms.m_dwFlags = dwFlags; |
+ ms.m_fx = fx; |
+ ms.m_fy = fy; |
+ ms.m_pDstTarget = m_pNormalWidget->m_pIface; |
+ FWLToClient(ms.m_fx, ms.m_fy); |
+ TranslateFWLMessage(&ms); |
+ IXFA_AppProvider* pAppProvider = GetAppProvider(); |
+ if (!pAppProvider) { |
+ return TRUE; |
+ } |
+ CFX_WideString wsTitle; |
+ CFX_WideString wsFilter; |
+ pAppProvider->LoadString(XFA_IDS_ImageFilter, wsFilter); |
+ CFX_WideStringArray wsPathArray; |
+ pAppProvider->ShowFileDialog(wsTitle, wsFilter, wsPathArray); |
+ int32_t iSize = wsPathArray.GetSize(); |
+ if (iSize < 1) { |
+ return TRUE; |
+ } |
+ CFX_WideString wsFilePath = wsPathArray[0]; |
+ FX_STRSIZE nLen = wsFilePath.GetLength(); |
+ FX_STRSIZE nIndex = nLen - 1; |
+ while (nIndex > 0 && wsFilePath[nIndex] != '.') { |
+ nIndex--; |
+ } |
+ if (nIndex <= 0) { |
+ return TRUE; |
+ } |
+ CFX_WideString wsContentType(L"image/"); |
+ wsContentType += wsFilePath.Right(nLen - nIndex - 1); |
+ wsContentType.MakeLower(); |
+ FXCODEC_IMAGE_TYPE eImageType = XFA_GetImageType(wsContentType); |
+ if (eImageType == FXCODEC_IMAGE_UNKNOWN) { |
+ return TRUE; |
+ } |
+ CFX_WideString wsImage; |
+ IFX_FileRead* pFileRead = FX_CreateFileRead(wsFilePath); |
+ if (pFileRead != NULL) { |
+ int32_t nDataSize = pFileRead->GetSize(); |
+ if (nDataSize > 0) { |
+ CFX_ByteString bsBuf; |
+ FX_CHAR* pImageBuffer = bsBuf.GetBuffer(nDataSize); |
+ pFileRead->ReadBlock(pImageBuffer, 0, nDataSize); |
+ bsBuf.ReleaseBuffer(); |
+ if (!bsBuf.IsEmpty()) { |
+ FX_CHAR* pData = XFA_Base64Encode(bsBuf, nDataSize); |
+ wsImage = CFX_WideString::FromLocal(pData); |
+ if (pData != NULL) { |
+ FX_Free(pData); |
+ } |
+ } |
+ } |
+ m_pDataAcc->SetImageEditImage(NULL); |
+ pFileRead->Release(); |
+ } |
+ m_pDataAcc->SetImageEdit(wsContentType, CFX_WideStringC(), wsImage); |
+ m_pDataAcc->LoadImageEditImage(); |
+ AddInvalidateRect(); |
+ m_pDocView->SetChangeMark(); |
+ return TRUE; |
+} |
+void CXFA_FFImageEdit::SetFWLRect() { |
+ if (!m_pNormalWidget) { |
+ return; |
+ } |
+ CFX_RectF rtUIMargin; |
+ m_pDataAcc->GetUIMargin(rtUIMargin); |
+ CFX_RectF rtImage(m_rtUI); |
+ rtImage.Deflate(rtUIMargin.left, rtUIMargin.top, rtUIMargin.width, |
+ rtUIMargin.height); |
+ m_pNormalWidget->SetWidgetRect(rtImage); |
+} |
+FX_BOOL CXFA_FFImageEdit::CommitData() { |
+ return TRUE; |
+} |
+FX_BOOL CXFA_FFImageEdit::UpdateFWLData() { |
+ m_pDataAcc->SetImageEditImage(NULL); |
+ m_pDataAcc->LoadImageEditImage(); |
+ return TRUE; |
+} |
+int32_t CXFA_FFImageEdit::OnProcessMessage(CFWL_Message* pMessage) { |
+ return m_pOldDelegate->OnProcessMessage(pMessage); |
+} |
+FWL_ERR CXFA_FFImageEdit::OnProcessEvent(CFWL_Event* pEvent) { |
+ CXFA_FFField::OnProcessEvent(pEvent); |
+ return m_pOldDelegate->OnProcessEvent(pEvent); |
+} |
+FWL_ERR CXFA_FFImageEdit::OnDrawWidget(CFX_Graphics* pGraphics, |
+ const CFX_Matrix* pMatrix) { |
+ return m_pOldDelegate->OnDrawWidget(pGraphics, pMatrix); |
+} |