Home | History | Annotate | Download | only in pdfwindow
      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 _PWL_SCROLLBAR_H_
      8 #define _PWL_SCROLLBAR_H_
      9 
     10 class CPWL_SBButton;
     11 class CPWL_ScrollBar;
     12 
     13 struct PWL_SCROLL_INFO
     14 {
     15 public:
     16 	PWL_SCROLL_INFO() : fContentMin(0.0f), fContentMax(0.0f), fPlateWidth(0.0f), fBigStep(0.0f), fSmallStep(0.0f)
     17 	{
     18 	}
     19 	FX_FLOAT					fContentMin;
     20 	FX_FLOAT					fContentMax;
     21 	FX_FLOAT					fPlateWidth;
     22 	FX_FLOAT					fBigStep;
     23 	FX_FLOAT					fSmallStep;
     24 };
     25 
     26 enum PWL_SCROLLBAR_TYPE
     27 {
     28 	SBT_HSCROLL,
     29 	SBT_VSCROLL
     30 };
     31 
     32 enum PWL_SBBUTTON_TYPE
     33 {
     34 	PSBT_MIN,
     35 	PSBT_MAX,
     36 	PSBT_POS
     37 };
     38 
     39 class CPWL_SBButton : public CPWL_Wnd
     40 {
     41 public:
     42 	CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,PWL_SBBUTTON_TYPE eButtonType);
     43 	virtual ~CPWL_SBButton();
     44 
     45 public:
     46 	virtual CFX_ByteString		GetClassName() const;
     47 	virtual void				OnCreate(PWL_CREATEPARAM & cp);
     48 	virtual void				GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
     49 	virtual void				DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
     50 	virtual FX_BOOL				OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
     51 	virtual FX_BOOL				OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
     52 	virtual FX_BOOL				OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag);
     53 
     54 protected:
     55 	PWL_SCROLLBAR_TYPE			m_eScrollBarType;
     56 	PWL_SBBUTTON_TYPE			m_eSBButtonType;
     57 
     58 	FX_BOOL						m_bMouseDown;
     59 };
     60 
     61 struct PWL_FLOATRANGE
     62 {
     63 public:
     64 	PWL_FLOATRANGE();
     65 	PWL_FLOATRANGE(FX_FLOAT min,FX_FLOAT max);
     66 	void Default();
     67 	void Set(FX_FLOAT min,FX_FLOAT max);
     68 	FX_BOOL	In(FX_FLOAT x) const;
     69 	FX_FLOAT GetWidth() const;
     70 
     71 	FX_FLOAT fMin,fMax;
     72 };
     73 
     74 struct PWL_SCROLL_PRIVATEDATA
     75 {
     76 public:
     77 	PWL_SCROLL_PRIVATEDATA();
     78 
     79 	void Default();
     80 	void SetScrollRange(FX_FLOAT min,FX_FLOAT max);
     81 	void SetClientWidth(FX_FLOAT width);
     82 	void SetSmallStep(FX_FLOAT step);
     83 	void SetBigStep(FX_FLOAT step);
     84 	FX_BOOL SetPos(FX_FLOAT pos);
     85 
     86 	void AddSmall();
     87 	void SubSmall();
     88 	void AddBig();
     89 	void SubBig();
     90 
     91 	PWL_FLOATRANGE				ScrollRange;
     92 	FX_FLOAT					fClientWidth;
     93 	FX_FLOAT					fScrollPos;
     94 	FX_FLOAT					fBigStep;
     95 	FX_FLOAT					fSmallStep;
     96 };
     97 
     98 class CPWL_ScrollBar : public CPWL_Wnd
     99 {
    100 public:
    101 	CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType = SBT_HSCROLL);
    102 	virtual ~CPWL_ScrollBar();
    103 
    104 public:
    105 	virtual CFX_ByteString		GetClassName() const;
    106 	virtual void				OnCreate(PWL_CREATEPARAM & cp);
    107 	virtual void				RePosChildWnd();
    108 	virtual void				GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream);
    109 	virtual void				DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* pUser2Device);
    110 
    111 	virtual FX_BOOL				OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag);
    112 	virtual FX_BOOL				OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag);
    113 	virtual void				OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam = 0, FX_INTPTR lParam = 0);
    114 
    115 	virtual void				CreateChildWnd(const PWL_CREATEPARAM & cp);
    116 
    117 	FX_FLOAT					GetScrollBarWidth() const;
    118 	PWL_SCROLLBAR_TYPE			GetScrollBarType() const {return m_sbType;};
    119 
    120 	void						SetNotifyForever(FX_BOOL bForever) {m_bNotifyForever = bForever;}
    121 
    122 protected:
    123 	void						SetScrollRange(FX_FLOAT fMin,FX_FLOAT fMax,FX_FLOAT fClientWidth);
    124 	void						SetScrollPos(FX_FLOAT fPos);
    125 	void						MovePosButton(FX_BOOL bRefresh);
    126 	void						SetScrollStep(FX_FLOAT fBigStep,FX_FLOAT fSmallStep);
    127 	void						NotifyScrollWindow();
    128 	CPDF_Rect					GetScrollArea() const;
    129 
    130 private:
    131 	void						CreateButtons(const PWL_CREATEPARAM & cp);
    132 
    133 	void						OnMinButtonLBDown(const CPDF_Point & point);
    134 	void						OnMinButtonLBUp(const CPDF_Point & point);
    135 	void						OnMinButtonMouseMove(const CPDF_Point & point);
    136 
    137 	void						OnMaxButtonLBDown(const CPDF_Point & point);
    138 	void						OnMaxButtonLBUp(const CPDF_Point & point);
    139 	void						OnMaxButtonMouseMove(const CPDF_Point & point);
    140 
    141 	void						OnPosButtonLBDown(const CPDF_Point & point);
    142 	void						OnPosButtonLBUp(const CPDF_Point & point);
    143 	void						OnPosButtonMouseMove(const CPDF_Point & point);
    144 
    145 	FX_FLOAT					TrueToFace(FX_FLOAT);
    146 	FX_FLOAT					FaceToTrue(FX_FLOAT);
    147 
    148 	virtual	void				TimerProc();
    149 
    150 private:
    151 	PWL_SCROLLBAR_TYPE			m_sbType;
    152 	PWL_SCROLL_INFO				m_OriginInfo;
    153 	CPWL_SBButton*				m_pMinButton;
    154 	CPWL_SBButton*				m_pMaxButton;
    155 	CPWL_SBButton*				m_pPosButton;
    156 	PWL_SCROLL_PRIVATEDATA		m_sData;
    157 	FX_BOOL						m_bMouseDown;
    158 	FX_BOOL						m_bMinOrMax;
    159 	FX_BOOL						m_bNotifyForever;
    160 	FX_FLOAT					m_nOldPos;
    161 	FX_FLOAT					m_fOldPosButton;
    162 };
    163 
    164 #endif // !defined(AFX_PWL_SCROLLBAR_H__DCFEC082_2651_48A4_B8F3_63F1B3CC5E10__INCLUDED_)
    165 
    166 
    167