1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
// 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 _FWL_WIDGET_IMP_H
#define _FWL_WIDGET_IMP_H
class CFWL_NoteTarget;
class CFWL_NoteThread;
class CFWL_WidgetImpProperties;
class CFWL_WidgetMgr;
class IFWL_Widget;
class IFWL_ThemeProvider;
class IFWL_DataProvider;
class IFWL_WidgetDelegate;
class CFWL_WidgetImp;
class CFWL_WidgetImp : public CFWL_Target
{
public:
virtual FWL_ERR Initialize();
virtual FWL_ERR Finalize();
virtual FWL_ERR GetWidgetRect(CFX_RectF &rect, FX_BOOL bAutoSize = FALSE);
virtual FWL_ERR GetGlobalRect(CFX_RectF &rect);
virtual FWL_ERR SetWidgetRect(const CFX_RectF &rect);
virtual FWL_ERR GetClientRect(CFX_RectF &rect);
virtual IFWL_Widget* GetParent();
virtual FWL_ERR SetParent(IFWL_Widget *pParent);
virtual IFWL_Widget* GetOwner();
virtual FWL_ERR SetOwner(IFWL_Widget *pOwner);
virtual IFWL_Widget* GetOuter();
virtual FX_DWORD GetStyles();
virtual FWL_ERR ModifyStyles(FX_DWORD dwStylesAdded, FX_DWORD dwStylesRemoved);
virtual FX_DWORD GetStylesEx();
virtual FWL_ERR ModifyStylesEx(FX_DWORD dwStylesExAdded, FX_DWORD dwStylesExRemoved);
virtual FX_DWORD GetStates();
virtual FWL_ERR SetStates(FX_DWORD dwStates, FX_BOOL bSet = TRUE);
virtual FWL_ERR SetPrivateData(FX_LPVOID module_id, FX_LPVOID pData, PD_CALLBACK_FREEDATA callback);
virtual FX_LPVOID GetPrivateData(FX_LPVOID module_id);
virtual FWL_ERR Update();
virtual FWL_ERR LockUpdate();
virtual FWL_ERR UnlockUpdate();
virtual FX_DWORD HitTest(FX_FLOAT fx, FX_FLOAT fy);
virtual FWL_ERR TransformTo(IFWL_Widget *pWidget, FX_FLOAT &fx, FX_FLOAT &fy);
virtual FWL_ERR TransformTo(IFWL_Widget *pWidget, CFX_RectF &rt);
virtual FWL_ERR GetMatrix(CFX_Matrix &matrix, FX_BOOL bGlobal = FALSE);
virtual FWL_ERR SetMatrix(const CFX_Matrix &matrix);
virtual FWL_ERR DrawWidget(CFX_Graphics *pGraphics, const CFX_Matrix *pMatrix = NULL);
virtual IFWL_ThemeProvider* GetThemeProvider();
virtual FWL_ERR SetThemeProvider(IFWL_ThemeProvider *pThemeProvider);
virtual FWL_ERR SetDataProvider(IFWL_DataProvider *pDataProvider);
virtual IFWL_WidgetDelegate*SetDelegate(IFWL_WidgetDelegate *pDelegate);
virtual IFWL_NoteThread* GetOwnerThread() const;
FWL_ERR SetOwnerThread(CFWL_NoteThread *pOwnerThread);
FWL_ERR GetProperties(CFWL_WidgetImpProperties &properties);
FWL_ERR SetProperties(const CFWL_WidgetImpProperties &properties);
IFWL_Widget* GetInterface();
void SetInterface(IFWL_Widget *pInterface);
CFX_SizeF GetOffsetFromParent(IFWL_Widget *pParent);
protected:
CFWL_WidgetImp(IFWL_Widget *pOuter = NULL);
CFWL_WidgetImp(const CFWL_WidgetImpProperties &properties, IFWL_Widget *pOuter = NULL);
virtual ~CFWL_WidgetImp();
FX_BOOL IsEnabled();
FX_BOOL IsVisible();
FX_BOOL IsActive();
FX_BOOL IsOverLapper();
FX_BOOL IsPopup();
FX_BOOL IsChild();
FX_BOOL IsLocked();
FX_BOOL IsOffscreen();
FX_BOOL HasBorder();
FX_BOOL HasEdge();
void GetEdgeRect(CFX_RectF &rtEdge);
FX_FLOAT GetBorderSize(FX_BOOL bCX = TRUE);
FX_FLOAT GetEdgeWidth();
void GetRelativeRect(CFX_RectF &rect);
FX_LPVOID GetThemeCapacity(FX_DWORD dwCapacity);
IFWL_ThemeProvider* GetAvailableTheme();
CFWL_WidgetImp* GetRootOuter();
CFWL_WidgetImp* GetSameAncestor(CFWL_WidgetImp *pWidget);
CFX_SizeF GetOffsetFromAncestor(CFWL_WidgetImp *pAncestor);
FX_BOOL TransformToOuter(FX_FLOAT &fx, FX_FLOAT &fy);
FX_BOOL TransformFromOuter(FX_FLOAT &fx, FX_FLOAT &fy);
CFX_SizeF CalcTextSize(const CFX_WideString &wsText, IFWL_ThemeProvider *pTheme, FX_BOOL bMultiLine = FALSE, int32_t iLineWidth = -1);
void CalcTextRect(const CFX_WideString &wsText, IFWL_ThemeProvider *pTheme, FX_DWORD dwTTOStyles, int32_t iTTOAlign, CFX_RectF &rect);
void SetFocus(FX_BOOL bFocus);
void SetGrab(FX_BOOL bSet);
FX_BOOL GetPopupPos(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight, const CFX_RectF &rtAnchor, CFX_RectF &rtPopup);
FX_BOOL GetPopupPosMenu(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight, const CFX_RectF &rtAnchor, CFX_RectF &rtPopup);
FX_BOOL GetPopupPosComboBox(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight, const CFX_RectF &rtAnchor, CFX_RectF &rtPopup);
FX_BOOL GetPopupPosGeneral(FX_FLOAT fMinHeight, FX_FLOAT fMaxHeight, const CFX_RectF &rtAnchor, CFX_RectF &rtPopup);
FX_BOOL GetScreenSize(FX_FLOAT &fx, FX_FLOAT &fy);
void RegisterEventTarget(IFWL_Widget *pEventSource = NULL, FX_DWORD dwFilter = FWL_EVENT_ALL_MASK);
void UnregisterEventTarget();
void DispatchKeyEvent(CFWL_MsgKey *pNote);
void DispatchEvent(CFWL_Event *pEvent);
void Repaint(const CFX_RectF *pRect = NULL);
void DrawBackground(CFX_Graphics *pGraphics, int32_t iPartBk, IFWL_ThemeProvider *pTheme, const CFX_Matrix *pMatrix = NULL);
void DrawBorder(CFX_Graphics *pGraphics, int32_t iPartBorder, IFWL_ThemeProvider *pTheme, const CFX_Matrix *pMatrix = NULL);
void DrawEdge(CFX_Graphics *pGraphics, int32_t iPartEdge, IFWL_ThemeProvider *pTheme, const CFX_Matrix *pMatrix = NULL);
void NotifyDriver();
FX_BOOL IsParent(IFWL_Widget *pParent);
CFWL_WidgetMgr *m_pWidgetMgr;
CFWL_NoteThread *m_pOwnerThread;
CFWL_WidgetImpProperties *m_pProperties;
CFX_PrivateData *m_pPrivateData;
IFWL_WidgetDelegate *m_pDelegate;
IFWL_WidgetDelegate *m_pCurDelegate;
IFWL_Widget *m_pOuter;
IFWL_Widget *m_pInterface;
int32_t m_iLock;
friend class CFWL_WidgetImpDelegate;
friend void FWL_SetWidgetRect(IFWL_Widget *widget, const CFX_RectF &rect);
friend void FWL_SetWidgetStates(IFWL_Widget *widget, FX_DWORD dwStates);
friend void FWL_SetWidgetStyles(IFWL_Widget *widget, FX_DWORD dwStyles);
};
class CFWL_WidgetImpDelegate
{
public:
CFWL_WidgetImpDelegate();
virtual int32_t OnProcessMessage(CFWL_Message *pMessage);
virtual FWL_ERR OnProcessEvent(CFWL_Event *pEvent);
virtual FWL_ERR OnDrawWidget(CFX_Graphics *pGraphics, const CFX_Matrix *pMatrix = NULL);
};
#endif
|