// 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_FWL_CORE_IFWL_TOOLTIP_H_ #define XFA_FWL_CORE_IFWL_TOOLTIP_H_ #include "xfa/fwl/core/ifwl_form.h" #include "xfa/fwl/core/ifwl_timer.h" class CFWL_WidgetProperties; class IFWL_Widget; class CFWL_ToolTipImpDelegate; #define FWL_STYLEEXT_TTP_Rectangle (0L << 3) #define FWL_STYLEEXT_TTP_RoundCorner (1L << 3) #define FWL_STYLEEXT_TTP_Balloon (1L << 4) #define FWL_STYLEEXT_TTP_Multiline (1L << 5) #define FWL_STYLEEXT_TTP_NoAnchor (1L << 6) class IFWL_ToolTipDP : public IFWL_DataProvider { public: // IFWL_DataProvider FWL_Error GetCaption(IFWL_Widget* pWidget, CFX_WideString& wsCaption) override = 0; virtual int32_t GetInitialDelay(IFWL_Widget* pWidget) = 0; virtual int32_t GetAutoPopDelay(IFWL_Widget* pWidget) = 0; virtual CFX_DIBitmap* GetToolTipIcon(IFWL_Widget* pWidget) = 0; virtual CFX_SizeF GetToolTipIconSize(IFWL_Widget* pWidget) = 0; }; class IFWL_ToolTip : public IFWL_Form { public: IFWL_ToolTip(const IFWL_App* app, std::unique_ptr properties, IFWL_Widget* pOuter); ~IFWL_ToolTip() override; // IFWL_Widget FWL_Type GetClassID() const override; FWL_Error GetWidgetRect(CFX_RectF& rect, bool bAutoSize = false) override; FWL_Error Update() override; FWL_Error DrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix = nullptr) override; void SetStates(uint32_t dwStates, bool bSet) override; FWL_Error GetClientRect(CFX_RectF& rect) override; void OnDrawWidget(CFX_Graphics* pGraphics, const CFX_Matrix* pMatrix) override; void SetAnchor(const CFX_RectF& rtAnchor); void Show(); void Hide(); protected: class Timer : public IFWL_Timer { public: explicit Timer(IFWL_ToolTip* pToolTip); ~Timer() override {} void Run(IFWL_TimerInfo* pTimerInfo) override; }; friend class IFWL_ToolTip::Timer; void DrawBkground(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, const CFX_Matrix* pMatrix); void DrawText(CFX_Graphics* pGraphics, IFWL_ThemeProvider* pTheme, const CFX_Matrix* pMatrix); void UpdateTextOutStyles(); void RefreshToolTipPos(); CFX_RectF m_rtClient; CFX_RectF m_rtCaption; bool m_bBtnDown; uint32_t m_dwTTOStyles; int32_t m_iTTOAlign; CFX_RectF m_rtAnchor; IFWL_TimerInfo* m_pTimerInfoShow; IFWL_TimerInfo* m_pTimerInfoHide; IFWL_ToolTip::Timer m_TimerShow; IFWL_ToolTip::Timer m_TimerHide; private: void OnFocusChanged(CFWL_Message* pMsg, bool bSet); void OnLButtonDown(CFWL_MsgMouse* pMsg); void OnLButtonUp(CFWL_MsgMouse* pMsg); void OnMouseMove(CFWL_MsgMouse* pMsg); void OnMouseLeave(CFWL_MsgMouse* pMsg); void OnKeyDown(CFWL_MsgKey* pMsg); }; #endif // XFA_FWL_CORE_IFWL_TOOLTIP_H_