summaryrefslogtreecommitdiff
path: root/xfa/fxfa/cxfa_ffwidget.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/cxfa_ffwidget.h')
-rw-r--r--xfa/fxfa/cxfa_ffwidget.h190
1 files changed, 190 insertions, 0 deletions
diff --git a/xfa/fxfa/cxfa_ffwidget.h b/xfa/fxfa/cxfa_ffwidget.h
new file mode 100644
index 0000000000..02a7b21b15
--- /dev/null
+++ b/xfa/fxfa/cxfa_ffwidget.h
@@ -0,0 +1,190 @@
+// 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
+
+#ifndef XFA_FXFA_CXFA_FFWIDGET_H_
+#define XFA_FXFA_CXFA_FFWIDGET_H_
+
+#include <vector>
+
+#include "core/fxcodec/fx_codec_def.h"
+#include "core/fxge/cfx_graphstatedata.h"
+#include "xfa/fwl/cfwl_app.h"
+#include "xfa/fxfa/fxfa.h"
+#include "xfa/fxfa/parser/cxfa_contentlayoutitem.h"
+
+class CXFA_FFPageView;
+class CXFA_FFDocView;
+class CXFA_FFDoc;
+class CXFA_FFApp;
+enum class FWL_WidgetHit;
+
+inline float XFA_UnitPx2Pt(float fPx, float fDpi) {
+ return fPx * 72.0f / fDpi;
+}
+
+#define XFA_FLOAT_PERCISION 0.001f
+
+enum XFA_WIDGETITEM {
+ XFA_WIDGETITEM_Parent,
+ XFA_WIDGETITEM_FirstChild,
+ XFA_WIDGETITEM_NextSibling,
+ XFA_WIDGETITEM_PrevSibling,
+};
+
+int32_t XFA_StrokeTypeSetLineDash(CFX_Graphics* pGraphics,
+ int32_t iStrokeType,
+ int32_t iCapType);
+CFX_GraphStateData::LineCap XFA_LineCapToFXGE(int32_t iLineCap);
+void XFA_DrawImage(CFX_Graphics* pGS,
+ const CFX_RectF& rtImage,
+ CFX_Matrix* pMatrix,
+ CFX_DIBitmap* pDIBitmap,
+ int32_t iAspect,
+ int32_t iImageXDpi,
+ int32_t iImageYDpi,
+ int32_t iHorzAlign = XFA_ATTRIBUTEENUM_Left,
+ int32_t iVertAlign = XFA_ATTRIBUTEENUM_Top);
+
+CFX_DIBitmap* XFA_LoadImageData(CXFA_FFDoc* pDoc,
+ CXFA_Image* pImage,
+ bool& bNameImage,
+ int32_t& iImageXDpi,
+ int32_t& iImageYDpi);
+
+CFX_DIBitmap* XFA_LoadImageFromBuffer(
+ const CFX_RetainPtr<IFX_SeekableReadStream>& pImageFileRead,
+ FXCODEC_IMAGE_TYPE type,
+ int32_t& iImageXDpi,
+ int32_t& iImageYDpi);
+
+FXCODEC_IMAGE_TYPE XFA_GetImageType(const CFX_WideString& wsType);
+char* XFA_Base64Encode(const uint8_t* buf, int32_t buf_len);
+void XFA_RectWidthoutMargin(CFX_RectF& rt,
+ const CXFA_Margin& mg,
+ bool bUI = false);
+CXFA_FFWidget* XFA_GetWidgetFromLayoutItem(CXFA_LayoutItem* pLayoutItem);
+bool XFA_IsCreateWidget(XFA_Element iType);
+#define XFA_DRAWBOX_ForceRound 1
+#define XFA_DRAWBOX_Lowered3D 2
+void XFA_DrawBox(CXFA_Box box,
+ CFX_Graphics* pGS,
+ const CFX_RectF& rtWidget,
+ CFX_Matrix* pMatrix,
+ uint32_t dwFlags = 0);
+
+class CXFA_CalcData {
+ public:
+ CXFA_CalcData();
+ ~CXFA_CalcData();
+
+ std::vector<CXFA_WidgetAcc*> m_Globals;
+ int32_t m_iRefCount;
+};
+
+class CXFA_FFWidget : public CXFA_ContentLayoutItem {
+ public:
+ explicit CXFA_FFWidget(CXFA_WidgetAcc* pDataAcc);
+ ~CXFA_FFWidget() override;
+
+ virtual CFX_RectF GetBBox(uint32_t dwStatus, bool bDrawFocus = false);
+ virtual void RenderWidget(CFX_Graphics* pGS,
+ CFX_Matrix* pMatrix,
+ uint32_t dwStatus);
+ virtual bool IsLoaded();
+ virtual bool LoadWidget();
+ virtual void UnloadWidget();
+ virtual bool PerformLayout();
+ virtual bool UpdateFWLData();
+ virtual void UpdateWidgetProperty();
+ virtual bool OnMouseEnter();
+ virtual bool OnMouseExit();
+ virtual bool OnLButtonDown(uint32_t dwFlags, const CFX_PointF& point);
+ virtual bool OnLButtonUp(uint32_t dwFlags, const CFX_PointF& point);
+ virtual bool OnLButtonDblClk(uint32_t dwFlags, const CFX_PointF& point);
+ virtual bool OnMouseMove(uint32_t dwFlags, const CFX_PointF& point);
+ virtual bool OnMouseWheel(uint32_t dwFlags,
+ int16_t zDelta,
+ const CFX_PointF& point);
+ virtual bool OnRButtonDown(uint32_t dwFlags, const CFX_PointF& point);
+ virtual bool OnRButtonUp(uint32_t dwFlags, const CFX_PointF& point);
+ virtual bool OnRButtonDblClk(uint32_t dwFlags, const CFX_PointF& point);
+
+ virtual bool OnSetFocus(CXFA_FFWidget* pOldWidget);
+ virtual bool OnKillFocus(CXFA_FFWidget* pNewWidget);
+ virtual bool OnKeyDown(uint32_t dwKeyCode, uint32_t dwFlags);
+ virtual bool OnKeyUp(uint32_t dwKeyCode, uint32_t dwFlags);
+ virtual bool OnChar(uint32_t dwChar, uint32_t dwFlags);
+ virtual FWL_WidgetHit OnHitTest(const CFX_PointF& point);
+ virtual bool OnSetCursor(const CFX_PointF& point);
+ virtual bool CanUndo();
+ virtual bool CanRedo();
+ virtual bool Undo();
+ virtual bool Redo();
+ virtual bool CanCopy();
+ virtual bool CanCut();
+ virtual bool CanPaste();
+ virtual bool CanSelectAll();
+ virtual bool CanDelete();
+ virtual bool CanDeSelect();
+ virtual bool Copy(CFX_WideString& wsCopy);
+ virtual bool Cut(CFX_WideString& wsCut);
+ virtual bool Paste(const CFX_WideString& wsPaste);
+ virtual void SelectAll();
+ virtual void Delete();
+ virtual void DeSelect();
+ virtual bool GetSuggestWords(CFX_PointF pointf,
+ std::vector<CFX_ByteString>& sSuggest);
+ virtual bool ReplaceSpellCheckWord(CFX_PointF pointf,
+ const CFX_ByteStringC& bsReplace);
+
+ CXFA_FFPageView* GetPageView() const { return m_pPageView; }
+ void SetPageView(CXFA_FFPageView* pPageView) { m_pPageView = pPageView; }
+ CFX_RectF GetWidgetRect();
+ CFX_RectF RecacheWidgetRect();
+ uint32_t GetStatus();
+ void ModifyStatus(uint32_t dwAdded, uint32_t dwRemoved);
+
+ CXFA_WidgetAcc* GetDataAcc();
+ bool GetToolTip(CFX_WideString& wsToolTip);
+
+ CXFA_FFDocView* GetDocView();
+ void SetDocView(CXFA_FFDocView* pDocView);
+ CXFA_FFDoc* GetDoc();
+ CXFA_FFApp* GetApp();
+ IXFA_AppProvider* GetAppProvider();
+ void InvalidateWidget(const CFX_RectF* pRect = nullptr);
+ void AddInvalidateRect(const CFX_RectF* pRect = nullptr);
+ bool GetCaptionText(CFX_WideString& wsCap);
+ bool IsFocused();
+ CFX_PointF Rotate2Normal(const CFX_PointF& point);
+ CFX_Matrix GetRotateMatrix();
+ bool IsLayoutRectEmpty();
+ CXFA_FFWidget* GetParent();
+ bool IsAncestorOf(CXFA_FFWidget* pWidget);
+ const CFWL_App* GetFWLApp();
+
+ protected:
+ virtual bool PtInActiveRect(const CFX_PointF& point);
+
+ void DrawBorder(CFX_Graphics* pGS,
+ CXFA_Box box,
+ const CFX_RectF& rtBorder,
+ CFX_Matrix* pMatrix,
+ uint32_t dwFlags = 0);
+
+ CFX_RectF GetRectWithoutRotate();
+ bool IsMatchVisibleStatus(uint32_t dwStatus);
+ void EventKillFocus();
+ bool IsButtonDown();
+ void SetButtonDown(bool bSet);
+
+ CXFA_FFDocView* m_pDocView;
+ CXFA_FFPageView* m_pPageView;
+ CXFA_WidgetAcc* m_pDataAcc;
+ CFX_RectF m_rtWidget;
+};
+
+#endif // XFA_FXFA_CXFA_FFWIDGET_H_