Index: xfa/fwl/core/ifwl_widget.h |
diff --git a/xfa/fwl/core/ifwl_widget.h b/xfa/fwl/core/ifwl_widget.h |
index 3540a3c87c87d6765b51e0bfb163ce42e68b859f..ea57c4e3fa60ae45540940b72ac7677e6370a9e3 100644 |
--- a/xfa/fwl/core/ifwl_widget.h |
+++ b/xfa/fwl/core/ifwl_widget.h |
@@ -7,21 +7,38 @@ |
#ifndef XFA_FWL_CORE_IFWL_WIDGET_H_ |
#define XFA_FWL_CORE_IFWL_WIDGET_H_ |
+#include <memory> |
+ |
#include "core/fxcrt/include/fx_basic.h" |
#include "core/fxcrt/include/fx_coordinates.h" |
#include "core/fxcrt/include/fx_system.h" |
#include "xfa/fwl/core/fwl_error.h" |
-#include "xfa/fwl/core/ifwl_target.h" |
+#include "xfa/fwl/core/fwl_widgetimp.h" |
+ |
+// FWL contains three parallel inheritance hierarchies, which reference each |
+// other via pointers as follows: |
+// |
+// m_pIface m_pImpl |
+// CFWL_Widget ----------> IFWL_Widget ----------> CFWL_WidgetImp |
+// | | | |
+// A A A |
+// | | | |
+// CFWL_... IFWL_... CFWL_...Imp |
+// |
+class CFWL_WidgetImp; |
class CFX_Graphics; |
+class IFWL_App; |
class IFWL_DataProvider; |
class IFWL_Form; |
-class IFWL_Thread; |
class IFWL_ThemeProvider; |
class IFWL_WidgetDelegate; |
-class IFWL_Widget : public IFWL_Target { |
+class IFWL_Widget { |
public: |
+ IFWL_Widget() : m_pImpl(nullptr) {} |
+ virtual ~IFWL_Widget(); |
+ |
FWL_ERR GetWidgetRect(CFX_RectF& rect, FX_BOOL bAutoSize = FALSE); |
FWL_ERR GetGlobalRect(CFX_RectF& rect); |
FWL_ERR SetWidgetRect(const CFX_RectF& rect); |
@@ -54,8 +71,25 @@ class IFWL_Widget : public IFWL_Target { |
FWL_ERR SetThemeProvider(IFWL_ThemeProvider* pThemeProvider); |
FWL_ERR SetDataProvider(IFWL_DataProvider* pDataProvider); |
IFWL_WidgetDelegate* SetDelegate(IFWL_WidgetDelegate* pDelegate); |
- IFWL_Thread* GetOwnerThread() const; |
+ IFWL_App* GetOwnerApp() const; |
CFX_SizeF GetOffsetFromParent(IFWL_Widget* pParent); |
+ |
+ // These call into equivalent polymorphic methods of m_pImpl. There |
+ // should be no need to override these in subclasses. |
+ FWL_ERR GetClassName(CFX_WideString& wsClass) const; |
+ uint32_t GetClassID() const; |
+ FX_BOOL IsInstance(const CFX_WideStringC& wsClass) const; |
+ FWL_ERR Initialize(); |
+ FWL_ERR Finalize(); |
+ |
+ CFWL_WidgetImp* GetImpl() const { return m_pImpl.get(); } |
+ |
+ protected: |
+ // Takes ownership of |pImpl|. |
+ void SetImpl(CFWL_WidgetImp* pImpl) { m_pImpl.reset(pImpl); } |
+ |
+ private: |
+ std::unique_ptr<CFWL_WidgetImp> m_pImpl; |
}; |
#endif // XFA_FWL_CORE_IFWL_WIDGET_H_ |