// 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_ADAPTER_CURSORMGR_H
#define _FWL_ADAPTER_CURSORMGR_H
class CFX_DIBitmap;
class IFWL_AdapterCursorMgr;
enum FWL_CURSORTYPE {
  FWL_CURSORTYPE_Arrow = 0,
  FWL_CURSORTYPE_Cross,
  FWL_CURSORTYPE_Hand,
  FWL_CURSORTYPE_InputBeam,
  FWL_CURSORTYPE_Wait,
  FWL_CURSORTYPE_SizeAll,
  FWL_CURSORTYPE_SizeNWSE,
  FWL_CURSORTYPE_SizeNESW,
  FWL_CURSORTYPE_SizeWE,
  FWL_CURSORTYPE_SizeNS,
  FWL_CURSORTYPE_Prohibition,
  FWL_CURSORTYPE_Help
};
typedef struct _FWL_HCURSOR { void* pData; } * FWL_HCURSOR;

class IFWL_AdapterCursorMgr {
 public:
  virtual ~IFWL_AdapterCursorMgr() {}
  virtual FWL_HCURSOR GetSystemCursor(FWL_CURSORTYPE eCursorType) = 0;
  virtual FWL_HCURSOR GetCustomCursor(const CFX_DIBitmap* pBitmap,
                                      FX_FLOAT xHotspot = 0,
                                      FX_FLOAT yHotspot = 0) = 0;
  virtual FWL_ERR SetCursor(FWL_HCURSOR hCursor) = 0;
  virtual FWL_ERR ShowCursor(FX_BOOL bShow) = 0;
  virtual FWL_ERR GetCursorPos(CFX_PointF& pt) = 0;
};
#endif
