1// Copyright 2014 PDFium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6
7#include "xfa/src/foxitlib.h"
8#include "xfa/src/fxfa/src/common/xfa_common.h"
9#include "xfa_fwladapter.h"
10#include "xfa_ffwidget.h"
11#include "xfa_fffield.h"
12#include "xfa_ffdoc.h"
13IFWL_AdapterNative* FWL_CreateFuelAdapterNative() {
14  return NULL;
15}
16void FWL_ReleaseFuelAdapterNative(IFWL_AdapterNative* native) {}
17void FWL_PostMessageToMainRoop(CFWL_Message* pMessage) {}
18FX_BOOL FWL_ShowCaret(IFWL_Widget* pWidget,
19                      FX_BOOL bVisible,
20                      const CFX_RectF* pRtAnchor) {
21  CXFA_FFWidget* pXFAWidget = (CXFA_FFWidget*)pWidget->GetPrivateData(pWidget);
22  if (!pXFAWidget) {
23    return FALSE;
24  }
25  IXFA_DocProvider* pDocProvider = pXFAWidget->GetDoc()->GetDocProvider();
26  if (!pDocProvider) {
27    return FALSE;
28  }
29  if (bVisible) {
30    CFX_Matrix mt;
31    pXFAWidget->GetRotateMatrix(mt);
32    CFX_RectF rt(*pRtAnchor);
33    mt.TransformRect(rt);
34    pDocProvider->DisplayCaret(pXFAWidget, bVisible, &rt);
35    return TRUE;
36  }
37  pDocProvider->DisplayCaret(pXFAWidget, bVisible, pRtAnchor);
38  return TRUE;
39}
40FWL_ERR CXFA_FWLAdapterWidgetMgr::RepaintWidget(IFWL_Widget* pWidget,
41                                                const CFX_RectF* pRect) {
42  if (!pWidget)
43    return FWL_ERR_Indefinite;
44  CXFA_FFField* pField = (CXFA_FFField*)pWidget->GetPrivateData(pWidget);
45  if (!pField)
46    return FWL_ERR_Indefinite;
47#ifdef _XFA_EMB
48  CFX_RectF rtInvalidate;
49  pWidget->GetWidgetRect(rtInvalidate);
50  if (pRect) {
51    rtInvalidate.left += pRect->left;
52    rtInvalidate.top += pRect->top;
53    rtInvalidate.width = pRect->width;
54    rtInvalidate.height = pRect->height;
55  }
56  CFX_Matrix mt;
57  pField->GetRotateMatrix(mt);
58  mt.TransformRect(rtInvalidate);
59  pField->AddInvalidateRect(&rtInvalidate);
60#else
61  pField->AddInvalidateRect(NULL);
62#endif
63  return FWL_ERR_Succeeded;
64}
65FX_BOOL CXFA_FWLAdapterWidgetMgr::GetPopupPos(IFWL_Widget* pWidget,
66                                              FX_FLOAT fMinHeight,
67                                              FX_FLOAT fMaxHeight,
68                                              const CFX_RectF& rtAnchor,
69                                              CFX_RectF& rtPopup) {
70  CXFA_FFWidget* pFFWidget = (CXFA_FFWidget*)(pWidget->GetPrivateData(pWidget));
71  CFX_Matrix mt;
72  pFFWidget->GetRotateMatrix(mt);
73  CFX_RectF rtRotateAnchor(rtAnchor);
74  mt.TransformRect(rtRotateAnchor);
75  pFFWidget->GetDoc()->GetDocProvider()->GetPopupPos(
76      pFFWidget, fMinHeight, fMaxHeight, rtRotateAnchor, rtPopup);
77  return TRUE;
78}
79