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