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 #ifndef XFA_FXFA_APP_XFA_FFFIELD_H_
8 #define XFA_FXFA_APP_XFA_FFFIELD_H_
9 
10 #include "xfa/fwl/core/ifwl_widgetdelegate.h"
11 #include "xfa/fwl/lightwidget/cfwl_widget.h"
12 #include "xfa/fxfa/include/xfa_ffpageview.h"
13 #include "xfa/fxfa/include/xfa_ffwidget.h"
14 
15 #define XFA_MINUI_HEIGHT 4.32f
16 #define XFA_DEFAULTUI_HEIGHT 2.0f
17 
18 class CXFA_FFField : public CXFA_FFWidget, public IFWL_WidgetDelegate {
19  public:
20   CXFA_FFField(CXFA_FFPageView* pPageView, CXFA_WidgetAcc* pDataAcc);
21   ~CXFA_FFField() override;
22 
23   // CXFA_FFWidget
24   FX_BOOL GetBBox(CFX_RectF& rtBox,
25                   uint32_t dwStatus,
26                   FX_BOOL bDrawFocus = FALSE) override;
27   void RenderWidget(CFX_Graphics* pGS,
28                     CFX_Matrix* pMatrix,
29                     uint32_t dwStatus) override;
30   FX_BOOL IsLoaded() override;
31   FX_BOOL LoadWidget() override;
32   void UnloadWidget() override;
33   FX_BOOL PerformLayout() override;
34   FX_BOOL OnMouseEnter() override;
35   FX_BOOL OnMouseExit() override;
36   FX_BOOL OnLButtonDown(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) override;
37   FX_BOOL OnLButtonUp(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) override;
38   FX_BOOL OnLButtonDblClk(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) override;
39   FX_BOOL OnMouseMove(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) override;
40   FX_BOOL OnMouseWheel(uint32_t dwFlags,
41                        int16_t zDelta,
42                        FX_FLOAT fx,
43                        FX_FLOAT fy) override;
44   FX_BOOL OnRButtonDown(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) override;
45   FX_BOOL OnRButtonUp(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) override;
46   FX_BOOL OnRButtonDblClk(uint32_t dwFlags, FX_FLOAT fx, FX_FLOAT fy) override;
47 
48   FX_BOOL OnSetFocus(CXFA_FFWidget* pOldWidget) override;
49   FX_BOOL OnKillFocus(CXFA_FFWidget* pNewWidget) override;
50   FX_BOOL OnKeyDown(uint32_t dwKeyCode, uint32_t dwFlags) override;
51   FX_BOOL OnKeyUp(uint32_t dwKeyCode, uint32_t dwFlags) override;
52   FX_BOOL OnChar(uint32_t dwChar, uint32_t dwFlags) override;
53   FWL_WidgetHit OnHitTest(FX_FLOAT fx, FX_FLOAT fy) override;
54   FX_BOOL OnSetCursor(FX_FLOAT fx, FX_FLOAT fy) override;
55 
56   // IFWL_WidgetDelegate
57   void OnProcessMessage(CFWL_Message* pMessage) override;
58   void OnProcessEvent(CFWL_Event* pEvent) override;
59   void OnDrawWidget(CFX_Graphics* pGraphics,
60                     const CFX_Matrix* pMatrix = nullptr) override;
61 
62   void UpdateFWL();
63   uint32_t UpdateUIProperty();
64 
65  protected:
66   FX_BOOL PtInActiveRect(FX_FLOAT fx, FX_FLOAT fy) override;
67 
68   virtual void SetFWLRect();
69   void SetFWLThemeProvider();
GetNormalWidget()70   CFWL_Widget* GetNormalWidget() { return m_pNormalWidget; }
71   void FWLToClient(FX_FLOAT& fx, FX_FLOAT& fy);
72   void LayoutCaption();
73   void RenderCaption(CFX_Graphics* pGS, CFX_Matrix* pMatrix = nullptr);
74 
75   int32_t CalculateOverride();
76   int32_t CalculateWidgetAcc(CXFA_WidgetAcc* pAcc);
77   FX_BOOL ProcessCommittedData();
78   virtual FX_BOOL CommitData();
79   virtual FX_BOOL IsDataChanged();
80   void DrawHighlight(CFX_Graphics* pGS,
81                      CFX_Matrix* pMatrix,
82                      uint32_t dwStatus,
83                      FX_BOOL bEllipse = FALSE);
84   void DrawFocus(CFX_Graphics* pGS, CFX_Matrix* pMatrix);
85   void TranslateFWLMessage(CFWL_Message* pMessage);
86   void CapPlacement();
87   void CapTopBottomPlacement(CXFA_Caption caption,
88                              const CFX_RectF& rtWidget,
89                              int32_t iCapPlacement);
90   void CapLeftRightPlacement(CXFA_Caption caption,
91                              const CFX_RectF& rtWidget,
92                              int32_t iCapPlacement);
93   void SetEditScrollOffset();
94 
95   CFWL_Widget* m_pNormalWidget;
96   CFX_RectF m_rtUI;
97   CFX_RectF m_rtCaption;
98 };
99 
100 #endif  // XFA_FXFA_APP_XFA_FFFIELD_H_
101