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: PWL_SCROLL_INFOPWL_SCROLL_INFO16 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; GetScrollBarType()118 PWL_SCROLLBAR_TYPE GetScrollBarType() const {return m_sbType;}; 119 SetNotifyForever(FX_BOOL bForever)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