Home | History | Annotate | Download | only in fxfa
      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_XFA_FFWIDGET_H_
      8 #define XFA_FXFA_XFA_FFWIDGET_H_
      9 
     10 #include <vector>
     11 
     12 #include "core/fxcodec/fx_codec_def.h"
     13 #include "core/fxge/cfx_graphstatedata.h"
     14 #include "xfa/fwl/cfwl_app.h"
     15 #include "xfa/fxfa/fxfa.h"
     16 #include "xfa/fxfa/parser/cxfa_contentlayoutitem.h"
     17 
     18 class CXFA_FFPageView;
     19 class CXFA_FFDocView;
     20 class CXFA_FFDoc;
     21 class CXFA_FFApp;
     22 enum class FWL_WidgetHit;
     23 
     24 inline FX_FLOAT XFA_UnitPx2Pt(FX_FLOAT fPx, FX_FLOAT fDpi) {
     25   return fPx * 72.0f / fDpi;
     26 }
     27 
     28 #define XFA_FLOAT_PERCISION 0.001f
     29 
     30 enum XFA_WIDGETITEM {
     31   XFA_WIDGETITEM_Parent,
     32   XFA_WIDGETITEM_FirstChild,
     33   XFA_WIDGETITEM_NextSibling,
     34   XFA_WIDGETITEM_PrevSibling,
     35 };
     36 
     37 class CXFA_CalcData {
     38  public:
     39   CXFA_CalcData();
     40   ~CXFA_CalcData();
     41 
     42   std::vector<CXFA_WidgetAcc*> m_Globals;
     43   int32_t m_iRefCount;
     44 };
     45 
     46 class CXFA_FFWidget : public CXFA_ContentLayoutItem {
     47  public:
     48   explicit CXFA_FFWidget(CXFA_WidgetAcc* pDataAcc);
     49   ~CXFA_FFWidget() override;
     50 
     51   virtual CFX_RectF GetBBox(uint32_t dwStatus, bool bDrawFocus = false);
     52   virtual void RenderWidget(CFX_Graphics* pGS,
     53                             CFX_Matrix* pMatrix,
     54                             uint32_t dwStatus);
     55   virtual bool IsLoaded();
     56   virtual bool LoadWidget();
     57   virtual void UnloadWidget();
     58   virtual bool PerformLayout();
     59   virtual bool UpdateFWLData();
     60   virtual void UpdateWidgetProperty();
     61   virtual bool OnMouseEnter();
     62   virtual bool OnMouseExit();
     63   virtual bool OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point);
     64   virtual bool OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point);
     65   virtual bool OnLButtonDblClk(uint32_t dwFlags, const CFX_PointF& point);
     66   virtual bool OnMouseMove(uint32_t dwFlags, const CFX_PointF& point);
     67   virtual bool OnMouseWheel(uint32_t dwFlags,
     68                             int16_t zDelta,
     69                             const CFX_PointF& point);
     70   virtual bool OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point);
     71   virtual bool OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point);
     72   virtual bool OnRButtonDblClk(uint32_t dwFlags, const CFX_PointF& point);
     73 
     74   virtual bool OnSetFocus(CXFA_FFWidget* pOldWidget);
     75   virtual bool OnKillFocus(CXFA_FFWidget* pNewWidget);
     76   virtual bool OnKeyDown(uint32_t dwKeyCode, uint32_t dwFlags);
     77   virtual bool OnKeyUp(uint32_t dwKeyCode, uint32_t dwFlags);
     78   virtual bool OnChar(uint32_t dwChar, uint32_t dwFlags);
     79   virtual FWL_WidgetHit OnHitTest(const CFX_PointF& point);
     80   virtual bool OnSetCursor(const CFX_PointF& point);
     81   virtual bool CanUndo();
     82   virtual bool CanRedo();
     83   virtual bool Undo();
     84   virtual bool Redo();
     85   virtual bool CanCopy();
     86   virtual bool CanCut();
     87   virtual bool CanPaste();
     88   virtual bool CanSelectAll();
     89   virtual bool CanDelete();
     90   virtual bool CanDeSelect();
     91   virtual bool Copy(CFX_WideString& wsCopy);
     92   virtual bool Cut(CFX_WideString& wsCut);
     93   virtual bool Paste(const CFX_WideString& wsPaste);
     94   virtual void SelectAll();
     95   virtual void Delete();
     96   virtual void DeSelect();
     97   virtual bool GetSuggestWords(CFX_PointF pointf,
     98                                std::vector<CFX_ByteString>& sSuggest);
     99   virtual bool ReplaceSpellCheckWord(CFX_PointF pointf,
    100                                      const CFX_ByteStringC& bsReplace);
    101 
    102   CXFA_FFPageView* GetPageView() const { return m_pPageView; }
    103   void SetPageView(CXFA_FFPageView* pPageView) { m_pPageView = pPageView; }
    104   CFX_RectF GetWidgetRect();
    105   CFX_RectF RecacheWidgetRect();
    106   uint32_t GetStatus();
    107   void ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved);
    108 
    109   CXFA_WidgetAcc* GetDataAcc();
    110   bool GetToolTip(CFX_WideString& wsToolTip);
    111 
    112   CXFA_FFDocView* GetDocView();
    113   void SetDocView(CXFA_FFDocView* pDocView);
    114   CXFA_FFDoc* GetDoc();
    115   CXFA_FFApp* GetApp();
    116   IXFA_AppProvider* GetAppProvider();
    117   void InvalidateWidget(const CFX_RectF* pRect = nullptr);
    118   void AddInvalidateRect(const CFX_RectF* pRect = nullptr);
    119   bool GetCaptionText(CFX_WideString& wsCap);
    120   bool IsFocused();
    121   CFX_PointF Rotate2Normal(const CFX_PointF& point);
    122   CFX_Matrix GetRotateMatrix();
    123   bool IsLayoutRectEmpty();
    124   CXFA_FFWidget* GetParent();
    125   bool IsAncestorOf(CXFA_FFWidget* pWidget);
    126   const CFWL_App* GetFWLApp();
    127 
    128  protected:
    129   virtual bool PtInActiveRect(const CFX_PointF& point);
    130 
    131   void DrawBorder(CFX_Graphics* pGS,
    132                   CXFA_Box box,
    133                   const CFX_RectF& rtBorder,
    134                   CFX_Matrix* pMatrix,
    135                   uint32_t dwFlags = 0);
    136 
    137   CFX_RectF GetRectWithoutRotate();
    138   bool IsMatchVisibleStatus(uint32_t dwStatus);
    139   void EventKillFocus();
    140   bool IsButtonDown();
    141   void SetButtonDown(bool bSet);
    142 
    143   CXFA_FFDocView* m_pDocView;
    144   CXFA_FFPageView* m_pPageView;
    145   CXFA_WidgetAcc* m_pDataAcc;
    146   CFX_RectF m_rtWidget;
    147 };
    148 
    149 int32_t XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics,
    150                                   int32_t iStrokeType,
    151                                   int32_t iCapType);
    152 CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap);
    153 void XFA_DrawImage(CFX_Graphics* pGS,
    154                    const CFX_RectF& rtImage,
    155                    CFX_Matrix* pMatrix,
    156                    CFX_DIBitmap* pDIBitmap,
    157                    int32_t iAspect,
    158                    int32_t iImageXDpi,
    159                    int32_t iImageYDpi,
    160                    int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left,
    161                    int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top);
    162 
    163 CFX_DIBitmap* XFA_LoadImageData(CXFA_FFDoc* pDoc,
    164                                 CXFA_Image* pImage,
    165                                 bool& bNameImage,
    166                                 int32_t& iImageXDpi,
    167                                 int32_t& iImageYDpi);
    168 
    169 CFX_DIBitmap* XFA_LoadImageFromBuffer(
    170     const CFX_RetainPtr<IFX_SeekableReadStream>& pImageFileRead,
    171     FXCODEC_IMAGE_TYPE type,
    172     int32_t& iImageXDpi,
    173     int32_t& iImageYDpi);
    174 
    175 FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideString& wsType);
    176 FX_CHAR* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len);
    177 void XFA_RectWidthoutMargin(CFX_RectF& rt,
    178                             const CXFA_Margin& mg,
    179                             bool bUI = false);
    180 CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem);
    181 bool XFA_IsCreateWidget(XFA_Element iType);
    182 #define XFA_DRAWBOX_ForceRound 1
    183 #define XFA_DRAWBOX_Lowered3D 2
    184 void XFA_DrawBox(CXFA_Box box,
    185                  CFX_Graphics* pGS,
    186                  const CFX_RectF& rtWidget,
    187                  CFX_Matrix* pMatrix,
    188                  uint32_t dwFlags = 0);
    189 
    190 #endif  // XFA_FXFA_XFA_FFWIDGET_H_
    191