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 FPDFSDK_INCLUDE_PDFWINDOW_PWL_CARET_H_
8 #define FPDFSDK_INCLUDE_PDFWINDOW_PWL_CARET_H_
9 
10 #include "PWL_Wnd.h"
11 
12 struct PWL_CARET_INFO {
13  public:
PWL_CARET_INFOPWL_CARET_INFO14   PWL_CARET_INFO() : bVisible(FALSE), ptHead(0, 0), ptFoot(0, 0) {}
15 
16   FX_BOOL bVisible;
17   CPDF_Point ptHead;
18   CPDF_Point ptFoot;
19 };
20 
21 class CPWL_Caret : public CPWL_Wnd {
22  public:
23   CPWL_Caret();
24   ~CPWL_Caret() override;
25 
26   // CPWL_Wnd
27   CFX_ByteString GetClassName() const override;
28   void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) override;
29   void DrawThisAppearance(CFX_RenderDevice* pDevice,
30                           CFX_Matrix* pUser2Device) override;
31   void InvalidateRect(CPDF_Rect* pRect = NULL) override;
SetVisible(FX_BOOL bVisible)32   void SetVisible(FX_BOOL bVisible) override {}
33   void TimerProc() override;
34 
35   void SetCaret(FX_BOOL bVisible,
36                 const CPDF_Point& ptHead,
37                 const CPDF_Point& ptFoot);
38   CFX_ByteString GetCaretAppearanceStream(const CPDF_Point& ptOffset);
SetInvalidRect(CPDF_Rect rc)39   void SetInvalidRect(CPDF_Rect rc) { m_rcInvalid = rc; }
40 
41  private:
42   void GetCaretApp(CFX_ByteTextBuf& sAppStream, const CPDF_Point& ptOffset);
43   CPDF_Rect GetCaretRect() const;
44 
45   FX_BOOL m_bFlash;
46   CPDF_Point m_ptHead;
47   CPDF_Point m_ptFoot;
48   FX_FLOAT m_fWidth;
49   int32_t m_nDelay;
50   CPDF_Rect m_rcInvalid;
51 };
52 
53 #endif  // FPDFSDK_INCLUDE_PDFWINDOW_PWL_CARET_H_
54