text: // 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 FPDFSDK_PDFWINDOW_PWL_CARET_H_
  #define FPDFSDK_PDFWINDOW_PWL_CARET_H_
  
  #include "fpdfsdk/pdfwindow/PWL_Wnd.h"
  
  struct PWL_CARET_INFO {
   public:
    PWL_CARET_INFO() : bVisible(FALSE), ptHead(0, 0), ptFoot(0, 0) {}
  
    FX_BOOL bVisible;
    CFX_FloatPoint ptHead;
    CFX_FloatPoint ptFoot;
  };
  
  class CPWL_Caret : public CPWL_Wnd {
   public:
    CPWL_Caret();
    ~CPWL_Caret() override;
  
    // CPWL_Wnd
    CFX_ByteString GetClassName() const override;
    void GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) override;
    void DrawThisAppearance(CFX_RenderDevice* pDevice,
                            CFX_Matrix* pUser2Device) override;
    void InvalidateRect(CFX_FloatRect* pRect = nullptr) override;
    void SetVisible(FX_BOOL bVisible) override {}
    void TimerProc() override;
  
    void SetCaret(FX_BOOL bVisible,
                  const CFX_FloatPoint& ptHead,
                  const CFX_FloatPoint& ptFoot);
    CFX_ByteString GetCaretAppearanceStream(const CFX_FloatPoint& ptOffset);
    void SetInvalidRect(CFX_FloatRect rc) { m_rcInvalid = rc; }
  
   private:
    void GetCaretApp(CFX_ByteTextBuf& sAppStream, const CFX_FloatPoint& ptOffset);
    CFX_FloatRect GetCaretRect() const;
  
    FX_BOOL m_bFlash;
    CFX_FloatPoint m_ptHead;
    CFX_FloatPoint m_ptFoot;
    FX_FLOAT m_fWidth;
    int32_t m_nDelay;
    CFX_FloatRect m_rcInvalid;
  };
  
  #endif  // FPDFSDK_PDFWINDOW_PWL_CARET_H_
  