| OLD | NEW |
| 1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
| 6 | 6 |
| 7 #include "../../include/pdfwindow/PDFWindow.h" | 7 #include "../../include/pdfwindow/PDFWindow.h" |
| 8 #include "../../include/pdfwindow/PWL_Wnd.h" | 8 #include "../../include/pdfwindow/PWL_Wnd.h" |
| 9 #include "../../include/pdfwindow/PWL_ScrollBar.h" | 9 #include "../../include/pdfwindow/PWL_ScrollBar.h" |
| 10 #include "../../include/pdfwindow/PWL_Utils.h" | 10 #include "../../include/pdfwindow/PWL_Utils.h" |
| 11 | 11 |
| 12 #define IsFloatZero(f) ((f) < 0.0001 &&
(f) > -0.0001) | 12 #define IsFloatZero(f) ((f) < 0.0001 && (f) > -0.0001) |
| 13 #define IsFloatBigger(fa,fb) ((fa) > (fb) && !IsFloat
Zero((fa) - (fb))) | 13 #define IsFloatBigger(fa, fb) ((fa) > (fb) && !IsFloatZero((fa) - (fb))) |
| 14 #define IsFloatSmaller(fa,fb) ((fa) < (fb) && !IsFloat
Zero((fa) - (fb))) | 14 #define IsFloatSmaller(fa, fb) ((fa) < (fb) && !IsFloatZero((fa) - (fb))) |
| 15 #define IsFloatEqual(fa,fb) IsFloatZero((fa)
-(fb)) | 15 #define IsFloatEqual(fa, fb) IsFloatZero((fa) - (fb)) |
| 16 | 16 |
| 17 | 17 /* ------------------------------- PWL_FLOATRANGE |
| 18 /* ------------------------------- PWL_FLOATRANGE ------------------------------
- */ | 18 * ------------------------------- */ |
| 19 | 19 |
| 20 PWL_FLOATRANGE::PWL_FLOATRANGE() | 20 PWL_FLOATRANGE::PWL_FLOATRANGE() { |
| 21 { | 21 Default(); |
| 22 Default(); | 22 } |
| 23 } | 23 |
| 24 | 24 PWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min, FX_FLOAT max) { |
| 25 PWL_FLOATRANGE::PWL_FLOATRANGE(FX_FLOAT min,FX_FLOAT max) | 25 Set(min, max); |
| 26 { | 26 } |
| 27 Set(min,max); | 27 |
| 28 } | 28 void PWL_FLOATRANGE::Default() { |
| 29 | 29 fMin = 0; |
| 30 void PWL_FLOATRANGE::Default() | 30 fMax = 0; |
| 31 { | 31 } |
| 32 fMin = 0; | 32 |
| 33 fMax = 0; | 33 void PWL_FLOATRANGE::Set(FX_FLOAT min, FX_FLOAT max) { |
| 34 } | 34 if (min > max) { |
| 35 | 35 fMin = max; |
| 36 void PWL_FLOATRANGE::Set(FX_FLOAT min,FX_FLOAT max) | 36 fMax = min; |
| 37 { | 37 } else { |
| 38 if (min > max) | 38 fMin = min; |
| 39 { | 39 fMax = max; |
| 40 fMin = max; | 40 } |
| 41 fMax = min; | 41 } |
| 42 } | 42 |
| 43 else | 43 FX_BOOL PWL_FLOATRANGE::In(FX_FLOAT x) const { |
| 44 { | 44 return (IsFloatBigger(x, fMin) || IsFloatEqual(x, fMin)) && |
| 45 fMin = min; | 45 (IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax)); |
| 46 fMax = max; | 46 } |
| 47 } | 47 |
| 48 } | 48 FX_FLOAT PWL_FLOATRANGE::GetWidth() const { |
| 49 | 49 return fMax - fMin; |
| 50 FX_BOOL PWL_FLOATRANGE::In(FX_FLOAT x) const | 50 } |
| 51 { | 51 |
| 52 return (IsFloatBigger(x,fMin) || IsFloatEqual(x, fMin)) && | 52 /* ------------------------------- PWL_SCROLL_PRIVATEDATA |
| 53 (IsFloatSmaller(x, fMax) || IsFloatEqual(x, fMax)); | 53 * ------------------------------- */ |
| 54 } | 54 |
| 55 | 55 PWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA() { |
| 56 FX_FLOAT PWL_FLOATRANGE::GetWidth() const | 56 Default(); |
| 57 { | 57 } |
| 58 return fMax - fMin; | 58 |
| 59 } | 59 void PWL_SCROLL_PRIVATEDATA::Default() { |
| 60 | 60 ScrollRange.Default(); |
| 61 /* ------------------------------- PWL_SCROLL_PRIVATEDATA ----------------------
--------- */ | 61 fScrollPos = ScrollRange.fMin; |
| 62 | 62 fClientWidth = 0; |
| 63 PWL_SCROLL_PRIVATEDATA::PWL_SCROLL_PRIVATEDATA() | 63 fBigStep = 10; |
| 64 { | 64 fSmallStep = 1; |
| 65 Default(); | 65 } |
| 66 } | 66 |
| 67 | 67 void PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min, FX_FLOAT max) { |
| 68 void PWL_SCROLL_PRIVATEDATA::Default() | 68 ScrollRange.Set(min, max); |
| 69 { | 69 |
| 70 ScrollRange.Default(); | 70 if (IsFloatSmaller(fScrollPos, ScrollRange.fMin)) |
| 71 fScrollPos = ScrollRange.fMin; | 71 fScrollPos = ScrollRange.fMin; |
| 72 fClientWidth = 0; | 72 if (IsFloatBigger(fScrollPos, ScrollRange.fMax)) |
| 73 fBigStep = 10; | 73 fScrollPos = ScrollRange.fMax; |
| 74 fSmallStep = 1; | 74 } |
| 75 } | 75 |
| 76 | 76 void PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width) { |
| 77 void PWL_SCROLL_PRIVATEDATA::SetScrollRange(FX_FLOAT min,FX_FLOAT max) | 77 fClientWidth = width; |
| 78 { | 78 } |
| 79 ScrollRange.Set(min,max); | 79 |
| 80 | 80 void PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step) { |
| 81 if (IsFloatSmaller(fScrollPos, ScrollRange.fMin)) | 81 fSmallStep = step; |
| 82 fScrollPos = ScrollRange.fMin; | 82 } |
| 83 if (IsFloatBigger(fScrollPos, ScrollRange.fMax)) | 83 |
| 84 fScrollPos = ScrollRange.fMax; | 84 void PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step) { |
| 85 } | 85 fBigStep = step; |
| 86 | 86 } |
| 87 void PWL_SCROLL_PRIVATEDATA::SetClientWidth(FX_FLOAT width) | 87 |
| 88 { | 88 FX_BOOL PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos) { |
| 89 fClientWidth = width; | 89 if (ScrollRange.In(pos)) { |
| 90 } | 90 fScrollPos = pos; |
| 91 | 91 return TRUE; |
| 92 void PWL_SCROLL_PRIVATEDATA::SetSmallStep(FX_FLOAT step) | 92 } |
| 93 { | 93 return FALSE; |
| 94 fSmallStep = step; | 94 } |
| 95 } | 95 |
| 96 | 96 void PWL_SCROLL_PRIVATEDATA::AddSmall() { |
| 97 void PWL_SCROLL_PRIVATEDATA::SetBigStep(FX_FLOAT step) | 97 if (!SetPos(fScrollPos + fSmallStep)) |
| 98 { | 98 SetPos(ScrollRange.fMax); |
| 99 fBigStep = step; | 99 } |
| 100 } | 100 |
| 101 | 101 void PWL_SCROLL_PRIVATEDATA::SubSmall() { |
| 102 FX_BOOL PWL_SCROLL_PRIVATEDATA::SetPos(FX_FLOAT pos) | 102 if (!SetPos(fScrollPos - fSmallStep)) |
| 103 { | 103 SetPos(ScrollRange.fMin); |
| 104 if (ScrollRange.In(pos)) | 104 } |
| 105 { | 105 |
| 106 fScrollPos = pos; | 106 void PWL_SCROLL_PRIVATEDATA::AddBig() { |
| 107 return TRUE; | 107 if (!SetPos(fScrollPos + fBigStep)) |
| 108 } | 108 SetPos(ScrollRange.fMax); |
| 109 return FALSE; | 109 } |
| 110 } | 110 |
| 111 | 111 void PWL_SCROLL_PRIVATEDATA::SubBig() { |
| 112 void PWL_SCROLL_PRIVATEDATA::AddSmall() | 112 if (!SetPos(fScrollPos - fBigStep)) |
| 113 { | 113 SetPos(ScrollRange.fMin); |
| 114 if (!SetPos(fScrollPos + fSmallStep)) | 114 } |
| 115 SetPos(ScrollRange.fMax); | 115 |
| 116 } | 116 /* ------------------------------- CPWL_SBButton ------------------------------- |
| 117 | 117 */ |
| 118 void PWL_SCROLL_PRIVATEDATA::SubSmall() | 118 |
| 119 { | 119 CPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType, |
| 120 if (!SetPos(fScrollPos - fSmallStep)) | 120 PWL_SBBUTTON_TYPE eButtonType) { |
| 121 SetPos(ScrollRange.fMin); | 121 m_eScrollBarType = eScrollBarType; |
| 122 } | 122 m_eSBButtonType = eButtonType; |
| 123 | 123 |
| 124 void PWL_SCROLL_PRIVATEDATA::AddBig() | 124 m_bMouseDown = FALSE; |
| 125 { | 125 } |
| 126 if (!SetPos(fScrollPos + fBigStep)) | 126 |
| 127 SetPos(ScrollRange.fMax); | 127 CPWL_SBButton::~CPWL_SBButton() { |
| 128 } | 128 } |
| 129 | 129 |
| 130 void PWL_SCROLL_PRIVATEDATA::SubBig() | 130 CFX_ByteString CPWL_SBButton::GetClassName() const { |
| 131 { | 131 return "CPWL_SBButton"; |
| 132 if (!SetPos(fScrollPos - fBigStep)) | 132 } |
| 133 SetPos(ScrollRange.fMin); | 133 |
| 134 } | 134 void CPWL_SBButton::OnCreate(PWL_CREATEPARAM& cp) { |
| 135 | 135 cp.eCursorType = FXCT_ARROW; |
| 136 /* ------------------------------- CPWL_SBButton -------------------------------
*/ | 136 } |
| 137 | 137 |
| 138 CPWL_SBButton::CPWL_SBButton(PWL_SCROLLBAR_TYPE eScrollBarType,PWL_SBBUTTON_TYPE
eButtonType) | 138 void CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { |
| 139 { | 139 CPWL_Wnd::GetThisAppearanceStream(sAppStream); |
| 140 m_eScrollBarType = eScrollBarType; | 140 |
| 141 m_eSBButtonType = eButtonType; | 141 if (!IsVisible()) |
| 142 | 142 return; |
| 143 m_bMouseDown = FALSE; | 143 |
| 144 } | 144 CFX_ByteTextBuf sButton; |
| 145 | 145 |
| 146 CPWL_SBButton::~CPWL_SBButton() | 146 CPDF_Rect rectWnd = GetWindowRect(); |
| 147 { | 147 |
| 148 | 148 if (rectWnd.IsEmpty()) |
| 149 } | 149 return; |
| 150 | 150 |
| 151 CFX_ByteString CPWL_SBButton::GetClassName() const | 151 sAppStream << "q\n"; |
| 152 { | 152 |
| 153 return "CPWL_SBButton"; | 153 CPDF_Point ptCenter = this->GetCenterPoint(); |
| 154 } | 154 |
| 155 | 155 switch (this->m_eScrollBarType) { |
| 156 void CPWL_SBButton::OnCreate(PWL_CREATEPARAM & cp) | 156 case SBT_HSCROLL: |
| 157 { | 157 switch (this->m_eSBButtonType) { |
| 158 cp.eCursorType = FXCT_ARROW; | 158 case PSBT_MIN: { |
| 159 } | 159 CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); |
| 160 | 160 CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, |
| 161 void CPWL_SBButton::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) | 161 ptCenter.y + PWL_TRIANGLE_HALFLEN); |
| 162 { | 162 CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, |
| 163 CPWL_Wnd::GetThisAppearanceStream(sAppStream); | 163 ptCenter.y - PWL_TRIANGLE_HALFLEN); |
| 164 | 164 |
| 165 if (!IsVisible()) return; | 165 if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && |
| 166 | 166 rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { |
| 167 CFX_ByteTextBuf sButton; | 167 sButton << "0 g\n"; |
| 168 | 168 sButton << pt1.x << " " << pt1.y << " m\n"; |
| 169 CPDF_Rect rectWnd = GetWindowRect(); | 169 sButton << pt2.x << " " << pt2.y << " l\n"; |
| 170 | 170 sButton << pt3.x << " " << pt3.y << " l\n"; |
| 171 if (rectWnd.IsEmpty()) return; | 171 sButton << pt1.x << " " << pt1.y << " l f\n"; |
| 172 | 172 |
| 173 sAppStream << "q\n"; | 173 sAppStream << sButton; |
| 174 | 174 } |
| 175 CPDF_Point ptCenter = this->GetCenterPoint(); | 175 } break; |
| 176 | 176 case PSBT_MAX: { |
| 177 switch (this->m_eScrollBarType) | 177 CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); |
| 178 { | 178 CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, |
| 179 case SBT_HSCROLL: | 179 ptCenter.y + PWL_TRIANGLE_HALFLEN); |
| 180 switch (this->m_eSBButtonType) | 180 CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, |
| 181 { | 181 ptCenter.y - PWL_TRIANGLE_HALFLEN); |
| 182 case PSBT_MIN: | 182 |
| 183 { | 183 if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && |
| 184 CPDF_Point pt1(ptCenter.x - PWL_
TRIANGLE_HALFLEN * 0.5f,ptCenter.y); | 184 rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { |
| 185 CPDF_Point pt2(ptCenter.x + PWL_
TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN); | 185 sButton << "0 g\n"; |
| 186 CPDF_Point pt3(ptCenter.x + PWL_
TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN); | 186 sButton << pt1.x << " " << pt1.y << " m\n"; |
| 187 | 187 sButton << pt2.x << " " << pt2.y << " l\n"; |
| 188 if (rectWnd.right - rectWnd.left
> PWL_TRIANGLE_HALFLEN * 2 && | 188 sButton << pt3.x << " " << pt3.y << " l\n"; |
| 189 rectWnd.top - rectWnd.bo
ttom > PWL_TRIANGLE_HALFLEN ) | 189 sButton << pt1.x << " " << pt1.y << " l f\n"; |
| 190 { | 190 |
| 191 sButton << "0 g\n"; | 191 sAppStream << sButton; |
| 192 sButton << pt1.x << " "
<< pt1.y << " m\n"; | 192 } |
| 193 sButton << pt2.x << " "
<< pt2.y << " l\n"; | 193 } break; |
| 194 sButton << pt3.x << " "
<< pt3.y << " l\n"; | 194 default: |
| 195 sButton << pt1.x << " "
<< pt1.y << " l f\n"; | 195 break; |
| 196 | 196 } |
| 197 sAppStream << sButton; | 197 break; |
| 198 } | 198 case SBT_VSCROLL: |
| 199 } | 199 switch (this->m_eSBButtonType) { |
| 200 break; | 200 case PSBT_MIN: { |
| 201 case PSBT_MAX: | 201 CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN, |
| 202 { | 202 ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); |
| 203 CPDF_Point pt1(ptCenter.x + PWL_
TRIANGLE_HALFLEN * 0.5f,ptCenter.y); | 203 CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN, |
| 204 CPDF_Point pt2(ptCenter.x - PWL_
TRIANGLE_HALFLEN * 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN); | 204 ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); |
| 205 CPDF_Point pt3(ptCenter.x - PWL_
TRIANGLE_HALFLEN * 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN); | 205 CPDF_Point pt3(ptCenter.x, ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); |
| 206 | 206 |
| 207 if (rectWnd.right - rectWnd.left
> PWL_TRIANGLE_HALFLEN * 2 && | 207 if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && |
| 208 rectWnd.top - rectWnd.bo
ttom > PWL_TRIANGLE_HALFLEN ) | 208 rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { |
| 209 { | 209 sButton << "0 g\n"; |
| 210 sButton << "0 g\n"; | 210 sButton << pt1.x << " " << pt1.y << " m\n"; |
| 211 sButton << pt1.x << " "
<< pt1.y << " m\n"; | 211 sButton << pt2.x << " " << pt2.y << " l\n"; |
| 212 sButton << pt2.x << " "
<< pt2.y << " l\n"; | 212 sButton << pt3.x << " " << pt3.y << " l\n"; |
| 213 sButton << pt3.x << " "
<< pt3.y << " l\n"; | 213 sButton << pt1.x << " " << pt1.y << " l f\n"; |
| 214 sButton << pt1.x << " "
<< pt1.y << " l f\n"; | 214 |
| 215 | 215 sAppStream << sButton; |
| 216 sAppStream << sButton; | 216 } |
| 217 } | 217 } break; |
| 218 } | 218 case PSBT_MAX: { |
| 219 break; | 219 CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN, |
| 220 default: | 220 ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); |
| 221 break; | 221 CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN, |
| 222 } | 222 ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); |
| 223 break; | 223 CPDF_Point pt3(ptCenter.x, ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); |
| 224 case SBT_VSCROLL: | 224 |
| 225 switch(this->m_eSBButtonType) | 225 if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && |
| 226 { | 226 rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { |
| 227 case PSBT_MIN: | 227 sButton << "0 g\n"; |
| 228 { | 228 sButton << pt1.x << " " << pt1.y << " m\n"; |
| 229 CPDF_Point pt1(ptCenter.x - PWL_
TRIANGLE_HALFLEN,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); | 229 sButton << pt2.x << " " << pt2.y << " l\n"; |
| 230 CPDF_Point pt2(ptCenter.x + PWL_
TRIANGLE_HALFLEN,ptCenter.y - PWL_TRIANGLE_HALFLEN * 0.5f); | 230 sButton << pt3.x << " " << pt3.y << " l\n"; |
| 231 CPDF_Point pt3(ptCenter.x,ptCent
er.y + PWL_TRIANGLE_HALFLEN * 0.5f); | 231 sButton << pt1.x << " " << pt1.y << " l f\n"; |
| 232 | 232 |
| 233 if (rectWnd.right - rectWnd.left
> PWL_TRIANGLE_HALFLEN * 2 && | 233 sAppStream << sButton; |
| 234 rectWnd.top - rectWnd.bo
ttom > PWL_TRIANGLE_HALFLEN ) | 234 } |
| 235 { | 235 } break; |
| 236 sButton << "0 g\n"; | 236 default: |
| 237 sButton << pt1.x << " "
<< pt1.y << " m\n"; | 237 break; |
| 238 sButton << pt2.x << " "
<< pt2.y << " l\n"; | 238 } |
| 239 sButton << pt3.x << " "
<< pt3.y << " l\n"; | 239 break; |
| 240 sButton << pt1.x << " "
<< pt1.y << " l f\n"; | 240 default: |
| 241 | 241 break; |
| 242 sAppStream << sButton; | 242 } |
| 243 } | 243 |
| 244 } | 244 sAppStream << "Q\n"; |
| 245 break; | 245 } |
| 246 case PSBT_MAX: | 246 |
| 247 { | 247 void CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, |
| 248 CPDF_Point pt1(ptCenter.x - PWL_
TRIANGLE_HALFLEN,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); | 248 CPDF_Matrix* pUser2Device) { |
| 249 CPDF_Point pt2(ptCenter.x + PWL_
TRIANGLE_HALFLEN,ptCenter.y + PWL_TRIANGLE_HALFLEN * 0.5f); | 249 if (!IsVisible()) |
| 250 CPDF_Point pt3(ptCenter.x,ptCent
er.y - PWL_TRIANGLE_HALFLEN * 0.5f); | 250 return; |
| 251 | 251 |
| 252 if (rectWnd.right - rectWnd.left
> PWL_TRIANGLE_HALFLEN * 2 && | 252 CPDF_Rect rectWnd = GetWindowRect(); |
| 253 rectWnd.top - rectWnd.bo
ttom > PWL_TRIANGLE_HALFLEN ) | 253 if (rectWnd.IsEmpty()) |
| 254 { | 254 return; |
| 255 sButton << "0 g\n"; | 255 |
| 256 sButton << pt1.x << " "
<< pt1.y << " m\n"; | 256 CPDF_Point ptCenter = this->GetCenterPoint(); |
| 257 sButton << pt2.x << " "
<< pt2.y << " l\n"; | 257 FX_INT32 nTransparancy = this->GetTransparency(); |
| 258 sButton << pt3.x << " "
<< pt3.y << " l\n"; | 258 |
| 259 sButton << pt1.x << " "
<< pt1.y << " l f\n"; | 259 switch (this->m_eScrollBarType) { |
| 260 | 260 case SBT_HSCROLL: |
| 261 sAppStream << sButton; | 261 CPWL_Wnd::DrawThisAppearance(pDevice, pUser2Device); |
| 262 } | 262 switch (this->m_eSBButtonType) { |
| 263 } | 263 case PSBT_MIN: { |
| 264 break; | 264 CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); |
| 265 default: | 265 CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, |
| 266 break; | 266 ptCenter.y + PWL_TRIANGLE_HALFLEN); |
| 267 } | 267 CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, |
| 268 break; | 268 ptCenter.y - PWL_TRIANGLE_HALFLEN); |
| 269 default: | 269 |
| 270 break; | 270 if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && |
| 271 } | 271 rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { |
| 272 | 272 CFX_PathData path; |
| 273 sAppStream << "Q\n"; | 273 |
| 274 } | 274 path.SetPointCount(4); |
| 275 | 275 path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); |
| 276 void CPWL_SBButton::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix* p
User2Device) | 276 path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); |
| 277 { | 277 path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); |
| 278 if (!IsVisible()) return; | 278 path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); |
| 279 | 279 |
| 280 CPDF_Rect rectWnd = GetWindowRect(); | 280 pDevice->DrawPath(&path, |
| 281 if (rectWnd.IsEmpty()) return; | 281 pUser2Device, |
| 282 | 282 NULL, |
| 283 CPDF_Point ptCenter = this->GetCenterPoint(); | 283 CPWL_Utils::PWLColorToFXColor( |
| 284 FX_INT32 nTransparancy = this->GetTransparency(); | 284 PWL_DEFAULT_BLACKCOLOR, nTransparancy), |
| 285 | 285 0, |
| 286 switch (this->m_eScrollBarType) | 286 FXFILL_ALTERNATE); |
| 287 { | 287 } |
| 288 case SBT_HSCROLL: | 288 } break; |
| 289 CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); | 289 case PSBT_MAX: { |
| 290 switch (this->m_eSBButtonType) | 290 CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN * 0.5f, ptCenter.y); |
| 291 { | 291 CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, |
| 292 case PSBT_MIN: | 292 ptCenter.y + PWL_TRIANGLE_HALFLEN); |
| 293 { | 293 CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN * 0.5f, |
| 294 CPDF_Point pt1(ptCenter.x - PWL_TRIANGLE_HALFLEN
* 0.5f,ptCenter.y); | 294 ptCenter.y - PWL_TRIANGLE_HALFLEN); |
| 295 CPDF_Point pt2(ptCenter.x + PWL_TRIANGLE_HALFLEN
* 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN); | 295 |
| 296 CPDF_Point pt3(ptCenter.x + PWL_TRIANGLE_HALFLEN
* 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN); | 296 if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_HALFLEN * 2 && |
| 297 | 297 rectWnd.top - rectWnd.bottom > PWL_TRIANGLE_HALFLEN) { |
| 298 if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_
HALFLEN * 2 && | 298 CFX_PathData path; |
| 299 rectWnd.top - rectWnd.bottom > PWL_TRIAN
GLE_HALFLEN ) | 299 |
| 300 { | 300 path.SetPointCount(4); |
| 301 CFX_PathData path; | 301 path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVETO); |
| 302 | 302 path.SetPoint(1, pt2.x, pt2.y, FXPT_LINETO); |
| 303 path.SetPointCount(4); | 303 path.SetPoint(2, pt3.x, pt3.y, FXPT_LINETO); |
| 304 path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVE
TO); | 304 path.SetPoint(3, pt1.x, pt1.y, FXPT_LINETO); |
| 305 path.SetPoint(1, pt2.x, pt2.y, FXPT_LINE
TO); | 305 |
| 306 path.SetPoint(2, pt3.x, pt3.y, FXPT_LINE
TO); | 306 pDevice->DrawPath(&path, |
| 307 path.SetPoint(3, pt1.x, pt1.y, FXPT_LINE
TO); | 307 pUser2Device, |
| 308 | 308 NULL, |
| 309 pDevice->DrawPath(&path, pUser2Device, N
ULL, | 309 CPWL_Utils::PWLColorToFXColor( |
| 310 CPWL_Utils::PWLColorToFXColor(PW
L_DEFAULT_BLACKCOLOR,nTransparancy), | 310 PWL_DEFAULT_BLACKCOLOR, nTransparancy), |
| 311 0, FXFILL_ALTERNATE); | 311 0, |
| 312 } | 312 FXFILL_ALTERNATE); |
| 313 } | 313 } |
| 314 break; | 314 } break; |
| 315 case PSBT_MAX: | 315 default: |
| 316 { | 316 break; |
| 317 CPDF_Point pt1(ptCenter.x + PWL_TRIANGLE_HALFLEN
* 0.5f,ptCenter.y); | 317 } |
| 318 CPDF_Point pt2(ptCenter.x - PWL_TRIANGLE_HALFLEN
* 0.5f,ptCenter.y + PWL_TRIANGLE_HALFLEN); | 318 break; |
| 319 CPDF_Point pt3(ptCenter.x - PWL_TRIANGLE_HALFLEN
* 0.5f,ptCenter.y - PWL_TRIANGLE_HALFLEN); | 319 case SBT_VSCROLL: |
| 320 | 320 switch (this->m_eSBButtonType) { |
| 321 if (rectWnd.right - rectWnd.left > PWL_TRIANGLE_
HALFLEN * 2 && | 321 case PSBT_MIN: { |
| 322 rectWnd.top - rectWnd.bottom > PWL_TRIAN
GLE_HALFLEN ) | 322 // draw border |
| 323 { | 323 CPDF_Rect rcDraw = rectWnd; |
| 324 CFX_PathData path; | 324 CPWL_Utils::DrawStrokeRect(pDevice, |
| 325 | 325 pUser2Device, |
| 326 path.SetPointCount(4); | 326 rcDraw, |
| 327 path.SetPoint(0, pt1.x, pt1.y, FXPT_MOVE
TO); | 327 ArgbEncode(nTransparancy, 100, 100, 100), |
| 328 path.SetPoint(1, pt2.x, pt2.y, FXPT_LINE
TO); | 328 0.0f); |
| 329 path.SetPoint(2, pt3.x, pt3.y, FXPT_LINE
TO); | 329 |
| 330 path.SetPoint(3, pt1.x, pt1.y, FXPT_LINE
TO); | 330 // draw inner border |
| 331 | 331 rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); |
| 332 pDevice->DrawPath(&path, pUser2Device, N
ULL, | 332 CPWL_Utils::DrawStrokeRect(pDevice, |
| 333 CPWL_Utils::PWLColorToFXColor(PW
L_DEFAULT_BLACKCOLOR,nTransparancy), | 333 pUser2Device, |
| 334 0, FXFILL_ALTERNATE); | 334 rcDraw, |
| 335 } | 335 ArgbEncode(nTransparancy, 255, 255, 255), |
| 336 } | 336 1.0f); |
| 337 break; | 337 |
| 338 default: | 338 // draw background |
| 339 break; | 339 |
| 340 } | 340 rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f); |
| 341 break; | 341 |
| 342 case SBT_VSCROLL: | 342 if (this->IsEnabled()) |
| 343 switch(this->m_eSBButtonType) | 343 CPWL_Utils::DrawShadow(pDevice, |
| 344 { | 344 pUser2Device, |
| 345 case PSBT_MIN: | 345 TRUE, |
| 346 { | 346 FALSE, |
| 347 //draw border | 347 rcDraw, |
| 348 CPDF_Rect rcDraw = rectWnd; | 348 nTransparancy, |
| 349 CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device
, rcDraw, | 349 80, |
| 350 ArgbEncode(nTransparancy,100,100,100),0.
0f); | 350 220); |
| 351 | 351 else |
| 352 //draw inner border | 352 CPWL_Utils::DrawFillRect( |
| 353 rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f); | 353 pDevice, pUser2Device, rcDraw, ArgbEncode(255, 255, 255, 255)); |
| 354 CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device
, rcDraw, | 354 |
| 355 ArgbEncode(nTransparancy,255,255,255),1.
0f); | 355 // draw arrow |
| 356 | 356 |
| 357 //draw background | 357 if (rectWnd.top - rectWnd.bottom > 6.0f) { |
| 358 | 358 FX_FLOAT fX = rectWnd.left + 1.5f; |
| 359 rcDraw = CPWL_Utils::DeflateRect(rectWnd,1.0f); | 359 FX_FLOAT fY = rectWnd.bottom; |
| 360 | 360 CPDF_Point pts[7] = { CPDF_Point(fX + 2.5f, fY + 4.0f), |
| 361 if (this->IsEnabled()) | 361 CPDF_Point(fX + 2.5f, fY + 3.0f), |
| 362 CPWL_Utils::DrawShadow(pDevice, pUser2De
vice, TRUE, FALSE, rcDraw, nTransparancy, 80, 220); | 362 CPDF_Point(fX + 4.5f, fY + 5.0f), |
| 363 else | 363 CPDF_Point(fX + 6.5f, fY + 3.0f), |
| 364 CPWL_Utils::DrawFillRect(pDevice, pUser2
Device, rcDraw, ArgbEncode(255,255,255,255)); | 364 CPDF_Point(fX + 6.5f, fY + 4.0f), |
| 365 | 365 CPDF_Point(fX + 4.5f, fY + 6.0f), |
| 366 //draw arrow | 366 CPDF_Point(fX + 2.5f, fY + 4.0f) }; |
| 367 | 367 |
| 368 if (rectWnd.top - rectWnd.bottom > 6.0f ) | 368 if (this->IsEnabled()) |
| 369 { | 369 CPWL_Utils::DrawFillArea( |
| 370 FX_FLOAT fX = rectWnd.left + 1.5f; | 370 pDevice, |
| 371 FX_FLOAT fY = rectWnd.bottom; | 371 pUser2Device, |
| 372 CPDF_Point pts[7] = { | 372 pts, |
| 373 CPDF_Point(fX+2.
5f, fY+4.0f), | 373 7, |
| 374 CPDF_Point(fX+2.
5f, fY+3.0f), | 374 ArgbEncode(nTransparancy, 255, 255, 255)); |
| 375 CPDF_Point(fX+4.
5f, fY+5.0f), | 375 else |
| 376 CPDF_Point(fX+6.
5f, fY+3.0f), | 376 CPWL_Utils::DrawFillArea(pDevice, |
| 377 CPDF_Point(fX+6.
5f, fY+4.0f), | 377 pUser2Device, |
| 378 CPDF_Point(fX+4.
5f, fY+6.0f), | 378 pts, |
| 379 CPDF_Point(fX+2.
5f, fY+4.0f)}; | 379 7, |
| 380 | 380 CPWL_Utils::PWLColorToFXColor( |
| 381 | 381 PWL_DEFAULT_HEAVYGRAYCOLOR, 255)); |
| 382 if (this->IsEnabled()) | 382 } |
| 383 CPWL_Utils::DrawFillArea(pDevice
, pUser2Device, pts, 7, ArgbEncode(nTransparancy,255,255,255)); | 383 } break; |
| 384 else | 384 case PSBT_MAX: { |
| 385 CPWL_Utils::DrawFillArea(pDevice
, pUser2Device, pts, 7, | 385 // draw border |
| 386 CPWL_Utils::PWLColorToFX
Color(PWL_DEFAULT_HEAVYGRAYCOLOR,255)); | 386 CPDF_Rect rcDraw = rectWnd; |
| 387 } | 387 CPWL_Utils::DrawStrokeRect(pDevice, |
| 388 } | 388 pUser2Device, |
| 389 break; | 389 rcDraw, |
| 390 case PSBT_MAX: | 390 ArgbEncode(nTransparancy, 100, 100, 100), |
| 391 { | 391 0.0f); |
| 392 //draw border | 392 |
| 393 CPDF_Rect rcDraw = rectWnd; | 393 // draw inner border |
| 394 CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device
, rcDraw, | 394 rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); |
| 395 ArgbEncode(nTransparancy,100,100,100),0.
0f); | 395 CPWL_Utils::DrawStrokeRect(pDevice, |
| 396 | 396 pUser2Device, |
| 397 //draw inner border | 397 rcDraw, |
| 398 rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f); | 398 ArgbEncode(nTransparancy, 255, 255, 255), |
| 399 CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device
, rcDraw, | 399 1.0f); |
| 400 ArgbEncode(nTransparancy,255,255,255),1.
0f); | 400 |
| 401 | 401 // draw background |
| 402 //draw background | 402 rcDraw = CPWL_Utils::DeflateRect(rectWnd, 1.0f); |
| 403 rcDraw = CPWL_Utils::DeflateRect(rectWnd,1.0f); | 403 if (this->IsEnabled()) |
| 404 if (this->IsEnabled()) | 404 CPWL_Utils::DrawShadow(pDevice, |
| 405 CPWL_Utils::DrawShadow(pDevice, pUser2De
vice, TRUE, FALSE, rcDraw, nTransparancy, 80, 220); | 405 pUser2Device, |
| 406 else | 406 TRUE, |
| 407 CPWL_Utils::DrawFillRect(pDevice, pUser2
Device, rcDraw, ArgbEncode(255,255,255,255)); | 407 FALSE, |
| 408 | 408 rcDraw, |
| 409 //draw arrow | 409 nTransparancy, |
| 410 | 410 80, |
| 411 if (rectWnd.top - rectWnd.bottom > 6.0f ) | 411 220); |
| 412 { | 412 else |
| 413 FX_FLOAT fX = rectWnd.left + 1.5f; | 413 CPWL_Utils::DrawFillRect( |
| 414 FX_FLOAT fY = rectWnd.bottom; | 414 pDevice, pUser2Device, rcDraw, ArgbEncode(255, 255, 255, 255)); |
| 415 | 415 |
| 416 CPDF_Point pts[7] = { | 416 // draw arrow |
| 417 CPDF_Point(fX+2.
5f, fY+5.0f), | 417 |
| 418 CPDF_Point(fX+2.
5f, fY+6.0f), | 418 if (rectWnd.top - rectWnd.bottom > 6.0f) { |
| 419 CPDF_Point(fX+4.
5f, fY+4.0f), | 419 FX_FLOAT fX = rectWnd.left + 1.5f; |
| 420 CPDF_Point(fX+6.
5f, fY+6.0f), | 420 FX_FLOAT fY = rectWnd.bottom; |
| 421 CPDF_Point(fX+6.
5f, fY+5.0f), | 421 |
| 422 CPDF_Point(fX+4.
5f, fY+3.0f), | 422 CPDF_Point pts[7] = { CPDF_Point(fX + 2.5f, fY + 5.0f), |
| 423 CPDF_Point(fX+2.
5f, fY+5.0f)}; | 423 CPDF_Point(fX + 2.5f, fY + 6.0f), |
| 424 | 424 CPDF_Point(fX + 4.5f, fY + 4.0f), |
| 425 | 425 CPDF_Point(fX + 6.5f, fY + 6.0f), |
| 426 if (this->IsEnabled()) | 426 CPDF_Point(fX + 6.5f, fY + 5.0f), |
| 427 CPWL_Utils::DrawFillArea(pDevice
, pUser2Device, pts, 7, ArgbEncode(nTransparancy,255,255,255)); | 427 CPDF_Point(fX + 4.5f, fY + 3.0f), |
| 428 else | 428 CPDF_Point(fX + 2.5f, fY + 5.0f) }; |
| 429 CPWL_Utils::DrawFillArea(pDevice
, pUser2Device, pts, 7, | 429 |
| 430 CPWL_Utils::PWLColorToFX
Color(PWL_DEFAULT_HEAVYGRAYCOLOR,255)); | 430 if (this->IsEnabled()) |
| 431 } | 431 CPWL_Utils::DrawFillArea( |
| 432 } | 432 pDevice, |
| 433 break; | 433 pUser2Device, |
| 434 case PSBT_POS: | 434 pts, |
| 435 { | 435 7, |
| 436 //CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Dev
ice); | 436 ArgbEncode(nTransparancy, 255, 255, 255)); |
| 437 | 437 else |
| 438 //draw border | 438 CPWL_Utils::DrawFillArea(pDevice, |
| 439 CPDF_Rect rcDraw = rectWnd; | 439 pUser2Device, |
| 440 CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device
, rcDraw, | 440 pts, |
| 441 ArgbEncode(nTransparancy,100,100,100),0.
0f); | 441 7, |
| 442 | 442 CPWL_Utils::PWLColorToFXColor( |
| 443 //draw inner border | 443 PWL_DEFAULT_HEAVYGRAYCOLOR, 255)); |
| 444 rcDraw = CPWL_Utils::DeflateRect(rectWnd,0.5f); | 444 } |
| 445 CPWL_Utils::DrawStrokeRect(pDevice, pUser2Device
, rcDraw, | 445 } break; |
| 446 ArgbEncode(nTransparancy,255,255,255),1.
0f); | 446 case PSBT_POS: { |
| 447 | 447 // CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); |
| 448 if (this->IsEnabled()) | 448 |
| 449 { | 449 // draw border |
| 450 //draw shadow effect
| 450 CPDF_Rect rcDraw = rectWnd; |
| 451 | 451 CPWL_Utils::DrawStrokeRect(pDevice, |
| 452 CPDF_Point ptTop = CPDF_Point(rectWnd.le
ft,rectWnd.top-1.0f); | 452 pUser2Device, |
| 453 CPDF_Point ptBottom = CPDF_Point(rectWnd
.left,rectWnd.bottom+1.0f); | 453 rcDraw, |
| 454 | 454 ArgbEncode(nTransparancy, 100, 100, 100), |
| 455 ptTop.x += 1.5f; | 455 0.0f); |
| 456 ptBottom.x += 1.5f; | 456 |
| 457 | 457 // draw inner border |
| 458 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 458 rcDraw = CPWL_Utils::DeflateRect(rectWnd, 0.5f); |
| 459 ArgbEncode(nTransparancy,210,210
,210),1.0f); | 459 CPWL_Utils::DrawStrokeRect(pDevice, |
| 460 | 460 pUser2Device, |
| 461 ptTop.x += 1.0f; | 461 rcDraw, |
| 462 ptBottom.x += 1.0f; | 462 ArgbEncode(nTransparancy, 255, 255, 255), |
| 463 | 463 1.0f); |
| 464 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 464 |
| 465 ArgbEncode(nTransparancy,220,220
,220),1.0f); | 465 if (this->IsEnabled()) { |
| 466 | 466 // draw shadow effect |
| 467 ptTop.x += 1.0f; | 467 |
| 468 ptBottom.x += 1.0f; | 468 CPDF_Point ptTop = CPDF_Point(rectWnd.left, rectWnd.top - 1.0f); |
| 469 | 469 CPDF_Point ptBottom = |
| 470 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 470 CPDF_Point(rectWnd.left, rectWnd.bottom + 1.0f); |
| 471 ArgbEncode(nTransparancy,240,240
,240),1.0f); | 471 |
| 472 | 472 ptTop.x += 1.5f; |
| 473 ptTop.x += 1.0f; | 473 ptBottom.x += 1.5f; |
| 474 ptBottom.x += 1.0f; | 474 |
| 475 | 475 CPWL_Utils::DrawStrokeLine(pDevice, |
| 476 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 476 pUser2Device, |
| 477 ArgbEncode(nTransparancy,240,240
,240),1.0f); | 477 ptTop, |
| 478 | 478 ptBottom, |
| 479 ptTop.x += 1.0f; | 479 ArgbEncode(nTransparancy, 210, 210, 210), |
| 480 ptBottom.x += 1.0f; | 480 1.0f); |
| 481 | 481 |
| 482 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 482 ptTop.x += 1.0f; |
| 483 ArgbEncode(nTransparancy,210,210
,210),1.0f); | 483 ptBottom.x += 1.0f; |
| 484 | 484 |
| 485 ptTop.x += 1.0f; | 485 CPWL_Utils::DrawStrokeLine(pDevice, |
| 486 ptBottom.x += 1.0f; | 486 pUser2Device, |
| 487 | 487 ptTop, |
| 488 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 488 ptBottom, |
| 489 ArgbEncode(nTransparancy,180,180
,180),1.0f); | 489 ArgbEncode(nTransparancy, 220, 220, 220), |
| 490 | 490 1.0f); |
| 491 ptTop.x += 1.0f; | 491 |
| 492 ptBottom.x += 1.0f; | 492 ptTop.x += 1.0f; |
| 493 | 493 ptBottom.x += 1.0f; |
| 494 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 494 |
| 495 ArgbEncode(nTransparancy,150,150
,150),1.0f); | 495 CPWL_Utils::DrawStrokeLine(pDevice, |
| 496 | 496 pUser2Device, |
| 497 ptTop.x += 1.0f; | 497 ptTop, |
| 498 ptBottom.x += 1.0f; | 498 ptBottom, |
| 499 | 499 ArgbEncode(nTransparancy, 240, 240, 240), |
| 500 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 500 1.0f); |
| 501 ArgbEncode(nTransparancy,150,150
,150),1.0f); | 501 |
| 502 | 502 ptTop.x += 1.0f; |
| 503 ptTop.x += 1.0f; | 503 ptBottom.x += 1.0f; |
| 504 ptBottom.x += 1.0f; | 504 |
| 505 | 505 CPWL_Utils::DrawStrokeLine(pDevice, |
| 506 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 506 pUser2Device, |
| 507 ArgbEncode(nTransparancy,180,180
,180),1.0f); | 507 ptTop, |
| 508 | 508 ptBottom, |
| 509 ptTop.x += 1.0f; | 509 ArgbEncode(nTransparancy, 240, 240, 240), |
| 510 ptBottom.x += 1.0f; | 510 1.0f); |
| 511 | 511 |
| 512 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptTop, ptBottom, | 512 ptTop.x += 1.0f; |
| 513 ArgbEncode(nTransparancy,210,210
,210),1.0f); | 513 ptBottom.x += 1.0f; |
| 514 } | 514 |
| 515 else | 515 CPWL_Utils::DrawStrokeLine(pDevice, |
| 516 { | 516 pUser2Device, |
| 517 CPWL_Utils::DrawFillRect(pDevice, pUser2
Device, rcDraw, ArgbEncode(255,255,255,255)); | 517 ptTop, |
| 518 } | 518 ptBottom, |
| 519 | 519 ArgbEncode(nTransparancy, 210, 210, 210), |
| 520 //draw friction | 520 1.0f); |
| 521 | 521 |
| 522 if (rectWnd.Height() > 8.0f) | 522 ptTop.x += 1.0f; |
| 523 { | 523 ptBottom.x += 1.0f; |
| 524 FX_COLORREF crStroke = ArgbEncode(nTrans
parancy,120,120,120); | 524 |
| 525 if (!this->IsEnabled()) | 525 CPWL_Utils::DrawStrokeLine(pDevice, |
| 526 crStroke = CPWL_Utils::PWLColorT
oFXColor(PWL_DEFAULT_HEAVYGRAYCOLOR,255); | 526 pUser2Device, |
| 527 | 527 ptTop, |
| 528 FX_FLOAT nFrictionWidth = 5.0f; | 528 ptBottom, |
| 529 FX_FLOAT nFrictionHeight = 5.5f; | 529 ArgbEncode(nTransparancy, 180, 180, 180), |
| 530 | 530 1.0f); |
| 531 CPDF_Point ptLeft = CPDF_Point(ptCenter.
x - nFrictionWidth / 2.0f, ptCenter.y - nFrictionHeight / 2.0f + 0.5f); | 531 |
| 532 CPDF_Point ptRight = CPDF_Point(ptCenter
.x + nFrictionWidth / 2.0f, ptCenter.y - nFrictionHeight / 2.0f + 0.5f); | 532 ptTop.x += 1.0f; |
| 533 | 533 ptBottom.x += 1.0f; |
| 534 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptLeft, ptRight, | 534 |
| 535 crStroke,1.0f); | 535 CPWL_Utils::DrawStrokeLine(pDevice, |
| 536 | 536 pUser2Device, |
| 537 ptLeft.y += 2.0f; | 537 ptTop, |
| 538 ptRight.y += 2.0f; | 538 ptBottom, |
| 539 | 539 ArgbEncode(nTransparancy, 150, 150, 150), |
| 540 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptLeft, ptRight, | 540 1.0f); |
| 541 crStroke,1.0f); | 541 |
| 542 | 542 ptTop.x += 1.0f; |
| 543 ptLeft.y += 2.0f; | 543 ptBottom.x += 1.0f; |
| 544 ptRight.y += 2.0f; | 544 |
| 545 | 545 CPWL_Utils::DrawStrokeLine(pDevice, |
| 546 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptLeft, ptRight, | 546 pUser2Device, |
| 547 crStroke,1.0f); | 547 ptTop, |
| 548 | 548 ptBottom, |
| 549 /* | 549 ArgbEncode(nTransparancy, 150, 150, 150), |
| 550 ptLeft.y += 1.5f; | 550 1.0f); |
| 551 ptRight.y += 1.5f; | 551 |
| 552 | 552 ptTop.x += 1.0f; |
| 553 CPWL_Utils::DrawStrokeLine(pDevice, pUse
r2Device, ptLeft, ptRight, | 553 ptBottom.x += 1.0f; |
| 554 ArgbEncode(nTransparancy,150,150
,150),1.0f); | 554 |
| 555 */ | 555 CPWL_Utils::DrawStrokeLine(pDevice, |
| 556 } | 556 pUser2Device, |
| 557 } | 557 ptTop, |
| 558 break; | 558 ptBottom, |
| 559 default: | 559 ArgbEncode(nTransparancy, 180, 180, 180), |
| 560 break; | 560 1.0f); |
| 561 } | 561 |
| 562 break; | 562 ptTop.x += 1.0f; |
| 563 default: | 563 ptBottom.x += 1.0f; |
| 564 break; | 564 |
| 565 } | 565 CPWL_Utils::DrawStrokeLine(pDevice, |
| 566 } | 566 pUser2Device, |
| 567 | 567 ptTop, |
| 568 FX_BOOL CPWL_SBButton::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) | 568 ptBottom, |
| 569 { | 569 ArgbEncode(nTransparancy, 210, 210, 210), |
| 570 CPWL_Wnd::OnLButtonDown(point,nFlag); | 570 1.0f); |
| 571 | 571 } else { |
| 572 if (CPWL_Wnd * pParent = GetParentWindow()) | 572 CPWL_Utils::DrawFillRect( |
| 573 pParent->OnNotify(this,PNM_LBUTTONDOWN,0,(FX_INTPTR)&point); | 573 pDevice, pUser2Device, rcDraw, ArgbEncode(255, 255, 255, 255)); |
| 574 | 574 } |
| 575 m_bMouseDown = TRUE; | 575 |
| 576 SetCapture(); | 576 // draw friction |
| 577 | 577 |
| 578 return TRUE; | 578 if (rectWnd.Height() > 8.0f) { |
| 579 } | 579 FX_COLORREF crStroke = ArgbEncode(nTransparancy, 120, 120, 120); |
| 580 | 580 if (!this->IsEnabled()) |
| 581 FX_BOOL CPWL_SBButton::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) | 581 crStroke = CPWL_Utils::PWLColorToFXColor( |
| 582 { | 582 PWL_DEFAULT_HEAVYGRAYCOLOR, 255); |
| 583 CPWL_Wnd::OnLButtonUp(point,nFlag); | 583 |
| 584 | 584 FX_FLOAT nFrictionWidth = 5.0f; |
| 585 if (CPWL_Wnd * pParent = GetParentWindow()) | 585 FX_FLOAT nFrictionHeight = 5.5f; |
| 586 pParent->OnNotify(this,PNM_LBUTTONUP,0,(FX_INTPTR)&point); | 586 |
| 587 | 587 CPDF_Point ptLeft = |
| 588 m_bMouseDown = FALSE; | 588 CPDF_Point(ptCenter.x - nFrictionWidth / 2.0f, |
| 589 ReleaseCapture(); | 589 ptCenter.y - nFrictionHeight / 2.0f + 0.5f); |
| 590 | 590 CPDF_Point ptRight = |
| 591 return TRUE; | 591 CPDF_Point(ptCenter.x + nFrictionWidth / 2.0f, |
| 592 } | 592 ptCenter.y - nFrictionHeight / 2.0f + 0.5f); |
| 593 | 593 |
| 594 FX_BOOL CPWL_SBButton::OnMouseMove(const CPDF_Point & point, FX_DWORD nFlag) | 594 CPWL_Utils::DrawStrokeLine( |
| 595 { | 595 pDevice, pUser2Device, ptLeft, ptRight, crStroke, 1.0f); |
| 596 CPWL_Wnd::OnMouseMove(point,nFlag); | 596 |
| 597 | 597 ptLeft.y += 2.0f; |
| 598 if (CPWL_Wnd * pParent = GetParentWindow()) | 598 ptRight.y += 2.0f; |
| 599 { | 599 |
| 600 pParent->OnNotify(this,PNM_MOUSEMOVE,0,(FX_INTPTR)&point); | 600 CPWL_Utils::DrawStrokeLine( |
| 601 | 601 pDevice, pUser2Device, ptLeft, ptRight, crStroke, 1.0f); |
| 602 /* | 602 |
| 603 if (m_bMouseDown && (m_eSBButtonType == PSBT_MIN || m_eSBButtonT
ype == PSBT_MAX)) | 603 ptLeft.y += 2.0f; |
| 604 { | 604 ptRight.y += 2.0f; |
| 605 if (!pParent->OnNotify(this,PNM_LBUTTONDOWN,nFlags,(FX_I
NTPTR)&point)) | 605 |
| 606 return FALSE; | 606 CPWL_Utils::DrawStrokeLine( |
| 607 } | 607 pDevice, pUser2Device, ptLeft, ptRight, crStroke, 1.0f); |
| 608 */ | 608 |
| 609 } | 609 /* |
| 610 | 610 ptLeft.y += 1.5f; |
| 611 return TRUE; | 611 ptRight.y += 1.5f; |
| 612 } | 612 |
| 613 | 613 CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, ptLeft, ptRight, |
| 614 /* ------------------------------- CPWL_ScrollBar ------------------------------
---- */ | 614 ArgbEncode(nTransparancy,150,150,150),1.0f); |
| 615 | 615 */ |
| 616 CPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType): | 616 } |
| 617 m_sbType(sbType), | 617 } break; |
| 618 m_pMinButton(NULL), | 618 default: |
| 619 m_pMaxButton(NULL), | 619 break; |
| 620 m_pPosButton(NULL), | 620 } |
| 621 m_bMouseDown(FALSE), | 621 break; |
| 622 m_bMinOrMax(FALSE), | 622 default: |
| 623 m_bNotifyForever(TRUE) | 623 break; |
| 624 { | 624 } |
| 625 } | 625 } |
| 626 | 626 |
| 627 CPWL_ScrollBar::~CPWL_ScrollBar() | 627 FX_BOOL CPWL_SBButton::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { |
| 628 { | 628 CPWL_Wnd::OnLButtonDown(point, nFlag); |
| 629 } | 629 |
| 630 | 630 if (CPWL_Wnd* pParent = GetParentWindow()) |
| 631 CFX_ByteString CPWL_ScrollBar::GetClassName() const | 631 pParent->OnNotify(this, PNM_LBUTTONDOWN, 0, (FX_INTPTR)&point); |
| 632 { | 632 |
| 633 return "CPWL_ScrollBar"; | 633 m_bMouseDown = TRUE; |
| 634 } | 634 SetCapture(); |
| 635 | 635 |
| 636 void CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM & cp) | 636 return TRUE; |
| 637 { | 637 } |
| 638 cp.eCursorType = FXCT_ARROW; | 638 |
| 639 } | 639 FX_BOOL CPWL_SBButton::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { |
| 640 | 640 CPWL_Wnd::OnLButtonUp(point, nFlag); |
| 641 void CPWL_ScrollBar::RePosChildWnd() | 641 |
| 642 { | 642 if (CPWL_Wnd* pParent = GetParentWindow()) |
| 643 CPDF_Rect rcClient = this->GetClientRect(); | 643 pParent->OnNotify(this, PNM_LBUTTONUP, 0, (FX_INTPTR)&point); |
| 644 | 644 |
| 645 /* | 645 m_bMouseDown = FALSE; |
| 646 switch(m_sbType) | 646 ReleaseCapture(); |
| 647 { | 647 |
| 648 case SBT_HSCROLL: | 648 return TRUE; |
| 649 if (rcClient.right - rcClient.left < PWL_SCROLLBAR_WIDTH
|| | 649 } |
| 650 rcClient.top - rcClient.bottom < PWL_SCROLLBAR_W
IDTH) | 650 |
| 651 { | 651 FX_BOOL CPWL_SBButton::OnMouseMove(const CPDF_Point& point, FX_DWORD nFlag) { |
| 652 SetVisible(FALSE); | 652 CPWL_Wnd::OnMouseMove(point, nFlag); |
| 653 } | 653 |
| 654 break; | 654 if (CPWL_Wnd* pParent = GetParentWindow()) { |
| 655 case SBT_VSCROLL: | 655 pParent->OnNotify(this, PNM_MOUSEMOVE, 0, (FX_INTPTR)&point); |
| 656 if (rcClient.right - rcClient.left < PWL_SCROLLBAR_WIDTH
|| | 656 |
| 657 rcClient.top - rcClient.bottom < PWL_SCROLLBAR_W
IDTH) | 657 /* |
| 658 { | 658 if (m_bMouseDown && (m_eSBButtonType == PSBT_MIN || m_eSBButtonType == |
| 659 SetVisible(FALSE); | 659 PSBT_MAX)) |
| 660 } | 660 { |
| 661 break; | 661 if |
| 662 } | 662 (!pParent->OnNotify(this,PNM_LBUTTONDOWN,nFlags,(FX_INTPTR)&point)) |
| 663 */ | 663 return FALSE; |
| 664 CPDF_Rect rcMinButton,rcMaxButton; | 664 } |
| 665 | 665 */ |
| 666 FX_FLOAT fBWidth = 0; | 666 } |
| 667 | 667 |
| 668 switch (m_sbType) | 668 return TRUE; |
| 669 { | 669 } |
| 670 case SBT_HSCROLL: | 670 |
| 671 if (rcClient.right - rcClient.left > PWL_SCROLLBAR_BUTTON_WIDTH
* 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2) | 671 /* ------------------------------- CPWL_ScrollBar |
| 672 { | 672 * ---------------------------------- */ |
| 673 rcMinButton = CPDF_Rect(rcClient.left,rcClient.bottom, | 673 |
| 674 rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH,rcCli
ent.top); | 674 CPWL_ScrollBar::CPWL_ScrollBar(PWL_SCROLLBAR_TYPE sbType) |
| 675 rcMaxButton = CPDF_Rect(rcClient.right - PWL_SCROLLBAR_B
UTTON_WIDTH,rcClient.bottom, | 675 : m_sbType(sbType), |
| 676 rcClient.right,rcClient.top); | 676 m_pMinButton(NULL), |
| 677 } | 677 m_pMaxButton(NULL), |
| 678 else | 678 m_pPosButton(NULL), |
| 679 { | 679 m_bMouseDown(FALSE), |
| 680 fBWidth = (rcClient.right - rcClient.left - PWL_SCROLLBA
R_POSBUTTON_MINWIDTH - 2) / 2; | 680 m_bMinOrMax(FALSE), |
| 681 | 681 m_bNotifyForever(TRUE) { |
| 682 if (fBWidth > 0) | 682 } |
| 683 { | 683 |
| 684 rcMinButton = CPDF_Rect(rcClient.left,rcClient.b
ottom, | 684 CPWL_ScrollBar::~CPWL_ScrollBar() { |
| 685 rcClient.left + fBWidth,rcClient.top); | 685 } |
| 686 rcMaxButton = CPDF_Rect(rcClient.right - fBWidth
,rcClient.bottom, | 686 |
| 687 rcClient.right,rcClient.top); | 687 CFX_ByteString CPWL_ScrollBar::GetClassName() const { |
| 688 } | 688 return "CPWL_ScrollBar"; |
| 689 else SetVisible(FALSE); | 689 } |
| 690 } | 690 |
| 691 break; | 691 void CPWL_ScrollBar::OnCreate(PWL_CREATEPARAM& cp) { |
| 692 case SBT_VSCROLL: | 692 cp.eCursorType = FXCT_ARROW; |
| 693 if (IsFloatBigger(rcClient.top - rcClient.bottom, PWL_SCROLLBAR_
BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)) | 693 } |
| 694 { | 694 |
| 695 rcMinButton = CPDF_Rect(rcClient.left,rcClient.top - PWL
_SCROLLBAR_BUTTON_WIDTH, | 695 void CPWL_ScrollBar::RePosChildWnd() { |
| 696 rcClient.right,rcClient.top); | 696 CPDF_Rect rcClient = this->GetClientRect(); |
| 697 rcMaxButton = CPDF_Rect(rcClient.left,rcClient.bottom, | 697 |
| 698 rcClient.right,rcClient.bottom + PWL_SCROLLBAR_B
UTTON_WIDTH); | 698 /* |
| 699 } | 699 switch(m_sbType) |
| 700 else | 700 { |
| 701 { | 701 case SBT_HSCROLL: |
| 702 fBWidth = (rcClient.top - rcClient.bottom - PWL_SCROLLBA
R_POSBUTTON_MINWIDTH - 2) / 2; | 702 if (rcClient.right - rcClient.left < |
| 703 | 703 PWL_SCROLLBAR_WIDTH || |
| 704 if (IsFloatBigger(fBWidth, 0)) | 704 rcClient.top - rcClient.bottom < |
| 705 { | 705 PWL_SCROLLBAR_WIDTH) |
| 706 rcMinButton = CPDF_Rect(rcClient.left,rcClient.t
op - fBWidth, | 706 { |
| 707 rcClient.right,rcClient.top); | 707 SetVisible(FALSE); |
| 708 rcMaxButton = CPDF_Rect(rcClient.left,rcClient.b
ottom, | 708 } |
| 709 rcClient.right,rcClient.bottom + fBWidth
); | 709 break; |
| 710 } | 710 case SBT_VSCROLL: |
| 711 else SetVisible(FALSE); | 711 if (rcClient.right - rcClient.left < |
| 712 } | 712 PWL_SCROLLBAR_WIDTH || |
| 713 break; | 713 rcClient.top - rcClient.bottom < |
| 714 } | 714 PWL_SCROLLBAR_WIDTH) |
| 715 | 715 { |
| 716 // if (IsVisible()) | 716 SetVisible(FALSE); |
| 717 { | 717 } |
| 718 if (m_pMinButton) | 718 break; |
| 719 m_pMinButton->Move(rcMinButton,TRUE,FALSE); | 719 } |
| 720 | 720 */ |
| 721 if (m_pMaxButton) | 721 CPDF_Rect rcMinButton, rcMaxButton; |
| 722 m_pMaxButton->Move(rcMaxButton,TRUE,FALSE); | 722 |
| 723 | 723 FX_FLOAT fBWidth = 0; |
| 724 MovePosButton(FALSE); | 724 |
| 725 } | 725 switch (m_sbType) { |
| 726 } | 726 case SBT_HSCROLL: |
| 727 | 727 if (rcClient.right - rcClient.left > |
| 728 void CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf & sAppStream) | 728 PWL_SCROLLBAR_BUTTON_WIDTH * 2 + PWL_SCROLLBAR_POSBUTTON_MINWIDTH + |
| 729 { | 729 2) { |
| 730 CPDF_Rect rectWnd = GetWindowRect(); | 730 rcMinButton = CPDF_Rect(rcClient.left, |
| 731 | 731 rcClient.bottom, |
| 732 if (IsVisible() && !rectWnd.IsEmpty()) | 732 rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH, |
| 733 { | 733 rcClient.top); |
| 734 CFX_ByteTextBuf sButton; | 734 rcMaxButton = CPDF_Rect(rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH, |
| 735 | 735 rcClient.bottom, |
| 736 sButton << "q\n"; | 736 rcClient.right, |
| 737 sButton << "0 w\n" << CPWL_Utils::GetColorAppStream(GetBackgroun
dColor(),TRUE); | 737 rcClient.top); |
| 738 sButton << rectWnd.left << " " << rectWnd.bottom << " " | 738 } else { |
| 739 << rectWnd.right - rectWnd.left << " " << rectWn
d.top - rectWnd.bottom << " re b Q\n"; | 739 fBWidth = (rcClient.right - rcClient.left - |
| 740 | 740 PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / |
| 741 sAppStream << sButton; | 741 2; |
| 742 } | 742 |
| 743 } | 743 if (fBWidth > 0) { |
| 744 | 744 rcMinButton = CPDF_Rect(rcClient.left, |
| 745 void CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice, CPDF_Matrix*
pUser2Device) | 745 rcClient.bottom, |
| 746 { | 746 rcClient.left + fBWidth, |
| 747 // CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); | 747 rcClient.top); |
| 748 CPDF_Rect rectWnd = GetWindowRect(); | 748 rcMaxButton = CPDF_Rect(rcClient.right - fBWidth, |
| 749 | 749 rcClient.bottom, |
| 750 if (IsVisible() && !rectWnd.IsEmpty()) | 750 rcClient.right, |
| 751 { | 751 rcClient.top); |
| 752 CPWL_Utils::DrawFillRect(pDevice, pUser2Device, rectWnd, this->G
etBackgroundColor(), GetTransparency()); | 752 } else |
| 753 | 753 SetVisible(FALSE); |
| 754 CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, | 754 } |
| 755 CPDF_Point(rectWnd.left+2.0f,rectWnd.top-2.0f), CPDF_Poi
nt(rectWnd.left+2.0f,rectWnd.bottom+2.0f), | 755 break; |
| 756 ArgbEncode(this->GetTransparency(),100,100,100),1.0f); | 756 case SBT_VSCROLL: |
| 757 | 757 if (IsFloatBigger(rcClient.top - rcClient.bottom, |
| 758 CPWL_Utils::DrawStrokeLine(pDevice, pUser2Device, | 758 PWL_SCROLLBAR_BUTTON_WIDTH * 2 + |
| 759 CPDF_Point(rectWnd.right-2.0f,rectWnd.top-2.0f), CPDF_Po
int(rectWnd.right-2.0f,rectWnd.bottom+2.0f), | 759 PWL_SCROLLBAR_POSBUTTON_MINWIDTH + 2)) { |
| 760 ArgbEncode(this->GetTransparency(),100,100,100),1.0f); | 760 rcMinButton = CPDF_Rect(rcClient.left, |
| 761 } | 761 rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH, |
| 762 } | 762 rcClient.right, |
| 763 | 763 rcClient.top); |
| 764 FX_BOOL CPWL_ScrollBar::OnLButtonDown(const CPDF_Point & point, FX_DWORD nFlag) | 764 rcMaxButton = CPDF_Rect(rcClient.left, |
| 765 { | 765 rcClient.bottom, |
| 766 CPWL_Wnd::OnLButtonDown(point,nFlag); | 766 rcClient.right, |
| 767 | 767 rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH); |
| 768 //SetFocus(); | 768 } else { |
| 769 | 769 fBWidth = (rcClient.top - rcClient.bottom - |
| 770 if (HasFlag(PWS_AUTOTRANSPARENT)) | 770 PWL_SCROLLBAR_POSBUTTON_MINWIDTH - 2) / |
| 771 { | 771 2; |
| 772 if (GetTransparency() != 255) | 772 |
| 773 { | 773 if (IsFloatBigger(fBWidth, 0)) { |
| 774 SetTransparency(255); | 774 rcMinButton = CPDF_Rect(rcClient.left, |
| 775 InvalidateRect(); | 775 rcClient.top - fBWidth, |
| 776 } | 776 rcClient.right, |
| 777 } | 777 rcClient.top); |
| 778 | 778 rcMaxButton = CPDF_Rect(rcClient.left, |
| 779 CPDF_Rect rcMinArea,rcMaxArea; | 779 rcClient.bottom, |
| 780 | 780 rcClient.right, |
| 781 if (m_pPosButton && m_pPosButton->IsVisible()) | 781 rcClient.bottom + fBWidth); |
| 782 { | 782 } else |
| 783 CPDF_Rect rcClient = this->GetClientRect(); | 783 SetVisible(FALSE); |
| 784 CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect(); | 784 } |
| 785 | 785 break; |
| 786 switch (m_sbType) | 786 } |
| 787 { | 787 |
| 788 case SBT_HSCROLL: | 788 // if (IsVisible()) |
| 789 rcMinArea = CPDF_Rect(rcClient.left + PWL_SCROLLBAR_BUTT
ON_WIDTH,rcClient.bottom, | 789 { |
| 790 rcPosButton.left,rcClien
t.top); | 790 if (m_pMinButton) |
| 791 rcMaxArea = CPDF_Rect(rcPosButton.right,rcClient.bottom, | 791 m_pMinButton->Move(rcMinButton, TRUE, FALSE); |
| 792 rcClient.right - PWL_SCR
OLLBAR_BUTTON_WIDTH,rcClient.top); | 792 |
| 793 | 793 if (m_pMaxButton) |
| 794 break; | 794 m_pMaxButton->Move(rcMaxButton, TRUE, FALSE); |
| 795 case SBT_VSCROLL: | 795 |
| 796 rcMinArea = CPDF_Rect(rcClient.left,rcPosButton.top, | 796 MovePosButton(FALSE); |
| 797 rcClient.right,rcClient.
top - PWL_SCROLLBAR_BUTTON_WIDTH); | 797 } |
| 798 rcMaxArea = CPDF_Rect(rcClient.left,rcClient.bottom + PW
L_SCROLLBAR_BUTTON_WIDTH, | 798 } |
| 799 rcClient.right,rcPosButt
on.bottom); | 799 |
| 800 break; | 800 void CPWL_ScrollBar::GetThisAppearanceStream(CFX_ByteTextBuf& sAppStream) { |
| 801 } | 801 CPDF_Rect rectWnd = GetWindowRect(); |
| 802 | 802 |
| 803 rcMinArea.Normalize(); | 803 if (IsVisible() && !rectWnd.IsEmpty()) { |
| 804 rcMaxArea.Normalize(); | 804 CFX_ByteTextBuf sButton; |
| 805 | 805 |
| 806 if (rcMinArea.Contains(point.x,point.y)) | 806 sButton << "q\n"; |
| 807 { | 807 sButton << "0 w\n" |
| 808 m_sData.SubBig(); | 808 << CPWL_Utils::GetColorAppStream(GetBackgroundColor(), TRUE); |
| 809 MovePosButton(TRUE); | 809 sButton << rectWnd.left << " " << rectWnd.bottom << " " |
| 810 NotifyScrollWindow(); | 810 << rectWnd.right - rectWnd.left << " " |
| 811 } | 811 << rectWnd.top - rectWnd.bottom << " re b Q\n"; |
| 812 | 812 |
| 813 if (rcMaxArea.Contains(point.x,point.y)) | 813 sAppStream << sButton; |
| 814 { | 814 } |
| 815 m_sData.AddBig(); | 815 } |
| 816 MovePosButton(TRUE); | 816 |
| 817 NotifyScrollWindow(); | 817 void CPWL_ScrollBar::DrawThisAppearance(CFX_RenderDevice* pDevice, |
| 818 } | 818 CPDF_Matrix* pUser2Device) { |
| 819 } | 819 // CPWL_Wnd::DrawThisAppearance(pDevice,pUser2Device); |
| 820 | 820 CPDF_Rect rectWnd = GetWindowRect(); |
| 821 return TRUE; | 821 |
| 822 } | 822 if (IsVisible() && !rectWnd.IsEmpty()) { |
| 823 | 823 CPWL_Utils::DrawFillRect(pDevice, |
| 824 FX_BOOL CPWL_ScrollBar::OnLButtonUp(const CPDF_Point & point, FX_DWORD nFlag) | 824 pUser2Device, |
| 825 { | 825 rectWnd, |
| 826 CPWL_Wnd::OnLButtonUp(point,nFlag); | 826 this->GetBackgroundColor(), |
| 827 | 827 GetTransparency()); |
| 828 if (HasFlag(PWS_AUTOTRANSPARENT)) | 828 |
| 829 { | 829 CPWL_Utils::DrawStrokeLine( |
| 830 if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY) | 830 pDevice, |
| 831 { | 831 pUser2Device, |
| 832 SetTransparency(PWL_SCROLLBAR_TRANSPARANCY); | 832 CPDF_Point(rectWnd.left + 2.0f, rectWnd.top - 2.0f), |
| 833 InvalidateRect(); | 833 CPDF_Point(rectWnd.left + 2.0f, rectWnd.bottom + 2.0f), |
| 834 } | 834 ArgbEncode(this->GetTransparency(), 100, 100, 100), |
| 835 } | 835 1.0f); |
| 836 | 836 |
| 837 EndTimer(); | 837 CPWL_Utils::DrawStrokeLine( |
| 838 m_bMouseDown = FALSE; | 838 pDevice, |
| 839 | 839 pUser2Device, |
| 840 return TRUE; | 840 CPDF_Point(rectWnd.right - 2.0f, rectWnd.top - 2.0f), |
| 841 } | 841 CPDF_Point(rectWnd.right - 2.0f, rectWnd.bottom + 2.0f), |
| 842 | 842 ArgbEncode(this->GetTransparency(), 100, 100, 100), |
| 843 void CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd, FX_DWORD msg, FX_INTPTR wParam, FX
_INTPTR lParam) | 843 1.0f); |
| 844 { | 844 } |
| 845 CPWL_Wnd::OnNotify(pWnd,msg,wParam,lParam); | 845 } |
| 846 | 846 |
| 847 switch (msg) | 847 FX_BOOL CPWL_ScrollBar::OnLButtonDown(const CPDF_Point& point, FX_DWORD nFlag) { |
| 848 { | 848 CPWL_Wnd::OnLButtonDown(point, nFlag); |
| 849 case PNM_LBUTTONDOWN: | 849 |
| 850 if (pWnd == m_pMinButton) | 850 // SetFocus(); |
| 851 { | 851 |
| 852 OnMinButtonLBDown(*(CPDF_Point*)lParam); | 852 if (HasFlag(PWS_AUTOTRANSPARENT)) { |
| 853 } | 853 if (GetTransparency() != 255) { |
| 854 | 854 SetTransparency(255); |
| 855 if (pWnd == m_pMaxButton) | 855 InvalidateRect(); |
| 856 { | 856 } |
| 857 OnMaxButtonLBDown(*(CPDF_Point*)lParam); | 857 } |
| 858 } | 858 |
| 859 | 859 CPDF_Rect rcMinArea, rcMaxArea; |
| 860 if (pWnd == m_pPosButton) | 860 |
| 861 { | 861 if (m_pPosButton && m_pPosButton->IsVisible()) { |
| 862 OnPosButtonLBDown(*(CPDF_Point*)lParam);
| 862 CPDF_Rect rcClient = this->GetClientRect(); |
| 863 } | 863 CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect(); |
| 864 break; | 864 |
| 865 case PNM_LBUTTONUP: | 865 switch (m_sbType) { |
| 866 if (pWnd == m_pMinButton) | 866 case SBT_HSCROLL: |
| 867 { | 867 rcMinArea = CPDF_Rect(rcClient.left + PWL_SCROLLBAR_BUTTON_WIDTH, |
| 868 OnMinButtonLBUp(*(CPDF_Point*)lParam); | 868 rcClient.bottom, |
| 869 } | 869 rcPosButton.left, |
| 870 | 870 rcClient.top); |
| 871 if (pWnd == m_pMaxButton) | 871 rcMaxArea = CPDF_Rect(rcPosButton.right, |
| 872 { | 872 rcClient.bottom, |
| 873 OnMaxButtonLBUp(*(CPDF_Point*)lParam);
| 873 rcClient.right - PWL_SCROLLBAR_BUTTON_WIDTH, |
| 874 } | 874 rcClient.top); |
| 875 | 875 |
| 876 if (pWnd == m_pPosButton) | 876 break; |
| 877 { | 877 case SBT_VSCROLL: |
| 878 OnPosButtonLBUp(*(CPDF_Point*)lParam); | 878 rcMinArea = CPDF_Rect(rcClient.left, |
| 879 } | 879 rcPosButton.top, |
| 880 break; | 880 rcClient.right, |
| 881 case PNM_MOUSEMOVE: | 881 rcClient.top - PWL_SCROLLBAR_BUTTON_WIDTH); |
| 882 if (pWnd == m_pMinButton) | 882 rcMaxArea = CPDF_Rect(rcClient.left, |
| 883 { | 883 rcClient.bottom + PWL_SCROLLBAR_BUTTON_WIDTH, |
| 884 OnMinButtonMouseMove(*(CPDF_Point*)lParam); | 884 rcClient.right, |
| 885 } | 885 rcPosButton.bottom); |
| 886 | 886 break; |
| 887 if (pWnd == m_pMaxButton) | 887 } |
| 888 { | 888 |
| 889 OnMaxButtonMouseMove(*(CPDF_Point*)lParam);
| 889 rcMinArea.Normalize(); |
| 890 } | 890 rcMaxArea.Normalize(); |
| 891 | 891 |
| 892 if (pWnd == m_pPosButton) | 892 if (rcMinArea.Contains(point.x, point.y)) { |
| 893 { | 893 m_sData.SubBig(); |
| 894 OnPosButtonMouseMove(*(CPDF_Point*)lParam);
| 894 MovePosButton(TRUE); |
| 895 } | 895 NotifyScrollWindow(); |
| 896 break; | 896 } |
| 897 case PNM_SETSCROLLINFO: | 897 |
| 898 { | 898 if (rcMaxArea.Contains(point.x, point.y)) { |
| 899 if (PWL_SCROLL_INFO * pInfo = (PWL_SCROLL_INFO*)lParam) | 899 m_sData.AddBig(); |
| 900 { | 900 MovePosButton(TRUE); |
| 901 if (FXSYS_memcmp(&m_OriginInfo, pInfo, sizeof(PW
L_SCROLL_INFO)) != 0) | 901 NotifyScrollWindow(); |
| 902 { | 902 } |
| 903 m_OriginInfo = *pInfo; | 903 } |
| 904 FX_FLOAT fMax = pInfo->fContentMax - pIn
fo->fContentMin - pInfo->fPlateWidth; | 904 |
| 905 fMax = fMax > 0.0f ? fMax : 0.0f; | 905 return TRUE; |
| 906 this->SetScrollRange(0,fMax, pInfo->fPla
teWidth); | 906 } |
| 907 this->SetScrollStep(pInfo->fBigStep,pInf
o->fSmallStep); | 907 |
| 908 } | 908 FX_BOOL CPWL_ScrollBar::OnLButtonUp(const CPDF_Point& point, FX_DWORD nFlag) { |
| 909 } | 909 CPWL_Wnd::OnLButtonUp(point, nFlag); |
| 910 } | 910 |
| 911 break; | 911 if (HasFlag(PWS_AUTOTRANSPARENT)) { |
| 912 case PNM_SETSCROLLPOS: | 912 if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY) { |
| 913 { | 913 SetTransparency(PWL_SCROLLBAR_TRANSPARANCY); |
| 914 FX_FLOAT fPos = *(FX_FLOAT*)lParam; | 914 InvalidateRect(); |
| 915 switch (this->m_sbType) | 915 } |
| 916 { | 916 } |
| 917 case SBT_HSCROLL: | 917 |
| 918 fPos = fPos - m_OriginInfo.fContentMin; | 918 EndTimer(); |
| 919 break; | 919 m_bMouseDown = FALSE; |
| 920 case SBT_VSCROLL: | 920 |
| 921 fPos = m_OriginInfo.fContentMax - fPos; | 921 return TRUE; |
| 922 break; | 922 } |
| 923 } | 923 |
| 924 this->SetScrollPos(fPos); | 924 void CPWL_ScrollBar::OnNotify(CPWL_Wnd* pWnd, |
| 925 } | 925 FX_DWORD msg, |
| 926 break; | 926 FX_INTPTR wParam, |
| 927 } | 927 FX_INTPTR lParam) { |
| 928 } | 928 CPWL_Wnd::OnNotify(pWnd, msg, wParam, lParam); |
| 929 | 929 |
| 930 void CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM & cp) | 930 switch (msg) { |
| 931 { | 931 case PNM_LBUTTONDOWN: |
| 932 PWL_CREATEPARAM scp = cp; | 932 if (pWnd == m_pMinButton) { |
| 933 scp.pParentWnd = this; | 933 OnMinButtonLBDown(*(CPDF_Point*)lParam); |
| 934 scp.dwBorderWidth = 2; | 934 } |
| 935 scp.nBorderStyle = PBS_BEVELED; | 935 |
| 936 | 936 if (pWnd == m_pMaxButton) { |
| 937 scp.dwFlags = PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PW
S_NOREFRESHCLIP; | 937 OnMaxButtonLBDown(*(CPDF_Point*)lParam); |
| 938 | 938 } |
| 939 if (!m_pMinButton) | 939 |
| 940 { | 940 if (pWnd == m_pPosButton) { |
| 941 m_pMinButton = new CPWL_SBButton(m_sbType,PSBT_MIN); | 941 OnPosButtonLBDown(*(CPDF_Point*)lParam); |
| 942 m_pMinButton->Create(scp); | 942 } |
| 943 } | 943 break; |
| 944 | 944 case PNM_LBUTTONUP: |
| 945 if (!m_pMaxButton) | 945 if (pWnd == m_pMinButton) { |
| 946 { | 946 OnMinButtonLBUp(*(CPDF_Point*)lParam); |
| 947 m_pMaxButton = new CPWL_SBButton(m_sbType,PSBT_MAX); | 947 } |
| 948 m_pMaxButton->Create(scp); | 948 |
| 949 } | 949 if (pWnd == m_pMaxButton) { |
| 950 | 950 OnMaxButtonLBUp(*(CPDF_Point*)lParam); |
| 951 if (!m_pPosButton) | 951 } |
| 952 { | 952 |
| 953 m_pPosButton = new CPWL_SBButton(m_sbType,PSBT_POS); | 953 if (pWnd == m_pPosButton) { |
| 954 m_pPosButton->SetVisible(FALSE); | 954 OnPosButtonLBUp(*(CPDF_Point*)lParam); |
| 955 m_pPosButton->Create(scp); | 955 } |
| 956 } | 956 break; |
| 957 } | 957 case PNM_MOUSEMOVE: |
| 958 | 958 if (pWnd == m_pMinButton) { |
| 959 FX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const | 959 OnMinButtonMouseMove(*(CPDF_Point*)lParam); |
| 960 { | 960 } |
| 961 if (!IsVisible()) return 0; | 961 |
| 962 | 962 if (pWnd == m_pMaxButton) { |
| 963 return PWL_SCROLLBAR_WIDTH; | 963 OnMaxButtonMouseMove(*(CPDF_Point*)lParam); |
| 964 } | 964 } |
| 965 | 965 |
| 966 void CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin,FX_FLOAT fMax,FX_FLOAT fClient
Width) | 966 if (pWnd == m_pPosButton) { |
| 967 { | 967 OnPosButtonMouseMove(*(CPDF_Point*)lParam); |
| 968 if (m_pPosButton) | 968 } |
| 969 { | 969 break; |
| 970 m_sData.SetScrollRange(fMin,fMax); | 970 case PNM_SETSCROLLINFO: { |
| 971 m_sData.SetClientWidth(fClientWidth); | 971 if (PWL_SCROLL_INFO* pInfo = (PWL_SCROLL_INFO*)lParam) { |
| 972 | 972 if (FXSYS_memcmp(&m_OriginInfo, pInfo, sizeof(PWL_SCROLL_INFO)) != 0) { |
| 973 if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f)) | 973 m_OriginInfo = *pInfo; |
| 974 { | 974 FX_FLOAT fMax = |
| 975 m_pPosButton->SetVisible(FALSE); | 975 pInfo->fContentMax - pInfo->fContentMin - pInfo->fPlateWidth; |
| 976 } | 976 fMax = fMax > 0.0f ? fMax : 0.0f; |
| 977 else | 977 this->SetScrollRange(0, fMax, pInfo->fPlateWidth); |
| 978 { | 978 this->SetScrollStep(pInfo->fBigStep, pInfo->fSmallStep); |
| 979 m_pPosButton->SetVisible(TRUE); | 979 } |
| 980 MovePosButton(TRUE); | 980 } |
| 981 } | 981 } break; |
| 982 } | 982 case PNM_SETSCROLLPOS: { |
| 983 } | 983 FX_FLOAT fPos = *(FX_FLOAT*)lParam; |
| 984 | 984 switch (this->m_sbType) { |
| 985 void CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos) | 985 case SBT_HSCROLL: |
| 986 { | 986 fPos = fPos - m_OriginInfo.fContentMin; |
| 987 FX_FLOAT fOldPos = m_sData.fScrollPos; | 987 break; |
| 988 | 988 case SBT_VSCROLL: |
| 989 m_sData.SetPos(fPos); | 989 fPos = m_OriginInfo.fContentMax - fPos; |
| 990 | 990 break; |
| 991 if (!IsFloatEqual(m_sData.fScrollPos, fOldPos)) | 991 } |
| 992 MovePosButton(TRUE); | 992 this->SetScrollPos(fPos); |
| 993 } | 993 } break; |
| 994 | 994 } |
| 995 void CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep,FX_FLOAT fSmallStep) | 995 } |
| 996 { | 996 |
| 997 m_sData.SetBigStep(fBigStep); | 997 void CPWL_ScrollBar::CreateButtons(const PWL_CREATEPARAM& cp) { |
| 998 m_sData.SetSmallStep(fSmallStep); | 998 PWL_CREATEPARAM scp = cp; |
| 999 } | 999 scp.pParentWnd = this; |
| 1000 | 1000 scp.dwBorderWidth = 2; |
| 1001 void CPWL_ScrollBar::MovePosButton(FX_BOOL bRefresh) | 1001 scp.nBorderStyle = PBS_BEVELED; |
| 1002 { | 1002 |
| 1003 ASSERT (m_pPosButton != NULL); | 1003 scp.dwFlags = |
| 1004 ASSERT (m_pMinButton != NULL); | 1004 PWS_VISIBLE | PWS_CHILD | PWS_BORDER | PWS_BACKGROUND | PWS_NOREFRESHCLIP; |
| 1005 ASSERT (m_pMaxButton != NULL); | 1005 |
| 1006 | 1006 if (!m_pMinButton) { |
| 1007 if (m_pPosButton->IsVisible()) | 1007 m_pMinButton = new CPWL_SBButton(m_sbType, PSBT_MIN); |
| 1008 { | 1008 m_pMinButton->Create(scp); |
| 1009 | 1009 } |
| 1010 | 1010 |
| 1011 | 1011 if (!m_pMaxButton) { |
| 1012 | 1012 m_pMaxButton = new CPWL_SBButton(m_sbType, PSBT_MAX); |
| 1013 CPDF_Rect rcClient; | 1013 m_pMaxButton->Create(scp); |
| 1014 CPDF_Rect rcPosArea,rcPosButton; | 1014 } |
| 1015 | 1015 |
| 1016 rcClient = this->GetClientRect(); | 1016 if (!m_pPosButton) { |
| 1017 rcPosArea = GetScrollArea(); | 1017 m_pPosButton = new CPWL_SBButton(m_sbType, PSBT_POS); |
| 1018 | 1018 m_pPosButton->SetVisible(FALSE); |
| 1019 FX_FLOAT fLeft,fRight,fTop,fBottom; | 1019 m_pPosButton->Create(scp); |
| 1020 | 1020 } |
| 1021 switch (m_sbType) | 1021 } |
| 1022 { | 1022 |
| 1023 case SBT_HSCROLL: | 1023 FX_FLOAT CPWL_ScrollBar::GetScrollBarWidth() const { |
| 1024 fLeft = TrueToFace(m_sData.fScrollPos); | 1024 if (!IsVisible()) |
| 1025 fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClient
Width); | 1025 return 0; |
| 1026 | 1026 |
| 1027 if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH) | 1027 return PWL_SCROLLBAR_WIDTH; |
| 1028 fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDT
H; | 1028 } |
| 1029 | 1029 |
| 1030 if (fRight > rcPosArea.right) | 1030 void CPWL_ScrollBar::SetScrollRange(FX_FLOAT fMin, |
| 1031 { | 1031 FX_FLOAT fMax, |
| 1032 fRight = rcPosArea.right; | 1032 FX_FLOAT fClientWidth) { |
| 1033 fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDT
H; | 1033 if (m_pPosButton) { |
| 1034 } | 1034 m_sData.SetScrollRange(fMin, fMax); |
| 1035 | 1035 m_sData.SetClientWidth(fClientWidth); |
| 1036 rcPosButton = CPDF_Rect(fLeft , | 1036 |
| 1037 rcPosArea.bottom
, | 1037 if (IsFloatSmaller(m_sData.ScrollRange.GetWidth(), 0.0f)) { |
| 1038 fRight , | 1038 m_pPosButton->SetVisible(FALSE); |
| 1039 rcPosArea.top); | 1039 } else { |
| 1040 | 1040 m_pPosButton->SetVisible(TRUE); |
| 1041 break; | 1041 MovePosButton(TRUE); |
| 1042 case SBT_VSCROLL: | 1042 } |
| 1043 fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClien
tWidth); | 1043 } |
| 1044 fTop = TrueToFace(m_sData.fScrollPos); | 1044 } |
| 1045 | 1045 |
| 1046 if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTT
ON_MINWIDTH)) | 1046 void CPWL_ScrollBar::SetScrollPos(FX_FLOAT fPos) { |
| 1047 fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDT
H; | 1047 FX_FLOAT fOldPos = m_sData.fScrollPos; |
| 1048 | 1048 |
| 1049 if (IsFloatSmaller(fBottom, rcPosArea.bottom)) | 1049 m_sData.SetPos(fPos); |
| 1050 { | 1050 |
| 1051 fBottom = rcPosArea.bottom; | 1051 if (!IsFloatEqual(m_sData.fScrollPos, fOldPos)) |
| 1052 fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDT
H; | 1052 MovePosButton(TRUE); |
| 1053 } | 1053 } |
| 1054 | 1054 |
| 1055 rcPosButton = CPDF_Rect(rcPosArea.left, | 1055 void CPWL_ScrollBar::SetScrollStep(FX_FLOAT fBigStep, FX_FLOAT fSmallStep) { |
| 1056 fBottom,
| 1056 m_sData.SetBigStep(fBigStep); |
| 1057 rcPosArea.right, | 1057 m_sData.SetSmallStep(fSmallStep); |
| 1058 fTop); | 1058 } |
| 1059 | 1059 |
| 1060 break; | 1060 void CPWL_ScrollBar::MovePosButton(FX_BOOL bRefresh) { |
| 1061 } | 1061 ASSERT(m_pPosButton != NULL); |
| 1062 | 1062 ASSERT(m_pMinButton != NULL); |
| 1063 m_pPosButton->Move(rcPosButton,TRUE,bRefresh); | 1063 ASSERT(m_pMaxButton != NULL); |
| 1064 } | 1064 |
| 1065 } | 1065 if (m_pPosButton->IsVisible()) { |
| 1066 | 1066 CPDF_Rect rcClient; |
| 1067 void CPWL_ScrollBar::OnMinButtonLBDown(const CPDF_Point & point) | 1067 CPDF_Rect rcPosArea, rcPosButton; |
| 1068 { | 1068 |
| 1069 m_sData.SubSmall(); | 1069 rcClient = this->GetClientRect(); |
| 1070 MovePosButton(TRUE); | 1070 rcPosArea = GetScrollArea(); |
| 1071 NotifyScrollWindow(); | 1071 |
| 1072 | 1072 FX_FLOAT fLeft, fRight, fTop, fBottom; |
| 1073 m_bMinOrMax = TRUE; | 1073 |
| 1074 | 1074 switch (m_sbType) { |
| 1075 EndTimer(); | 1075 case SBT_HSCROLL: |
| 1076 BeginTimer(100); | 1076 fLeft = TrueToFace(m_sData.fScrollPos); |
| 1077 } | 1077 fRight = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth); |
| 1078 | 1078 |
| 1079 void CPWL_ScrollBar::OnMinButtonLBUp(const CPDF_Point & point) | 1079 if (fRight - fLeft < PWL_SCROLLBAR_POSBUTTON_MINWIDTH) |
| 1080 { | 1080 fRight = fLeft + PWL_SCROLLBAR_POSBUTTON_MINWIDTH; |
| 1081 } | 1081 |
| 1082 | 1082 if (fRight > rcPosArea.right) { |
| 1083 void CPWL_ScrollBar::OnMinButtonMouseMove(const CPDF_Point & point) | 1083 fRight = rcPosArea.right; |
| 1084 { | 1084 fLeft = fRight - PWL_SCROLLBAR_POSBUTTON_MINWIDTH; |
| 1085 } | 1085 } |
| 1086 | 1086 |
| 1087 void CPWL_ScrollBar::OnMaxButtonLBDown(const CPDF_Point & point) | 1087 rcPosButton = CPDF_Rect(fLeft, rcPosArea.bottom, fRight, rcPosArea.top); |
| 1088 { | 1088 |
| 1089 m_sData.AddSmall(); | 1089 break; |
| 1090 MovePosButton(TRUE); | 1090 case SBT_VSCROLL: |
| 1091 NotifyScrollWindow(); | 1091 fBottom = TrueToFace(m_sData.fScrollPos + m_sData.fClientWidth); |
| 1092 | 1092 fTop = TrueToFace(m_sData.fScrollPos); |
| 1093 m_bMinOrMax = FALSE; | 1093 |
| 1094 | 1094 if (IsFloatSmaller(fTop - fBottom, PWL_SCROLLBAR_POSBUTTON_MINWIDTH)) |
| 1095 EndTimer(); | 1095 fBottom = fTop - PWL_SCROLLBAR_POSBUTTON_MINWIDTH; |
| 1096 BeginTimer(100); | 1096 |
| 1097 } | 1097 if (IsFloatSmaller(fBottom, rcPosArea.bottom)) { |
| 1098 | 1098 fBottom = rcPosArea.bottom; |
| 1099 void CPWL_ScrollBar::OnMaxButtonLBUp(const CPDF_Point & point) | 1099 fTop = fBottom + PWL_SCROLLBAR_POSBUTTON_MINWIDTH; |
| 1100 { | 1100 } |
| 1101 } | 1101 |
| 1102 | 1102 rcPosButton = CPDF_Rect(rcPosArea.left, fBottom, rcPosArea.right, fTop); |
| 1103 void CPWL_ScrollBar::OnMaxButtonMouseMove(const CPDF_Point & point) | 1103 |
| 1104 { | 1104 break; |
| 1105 } | 1105 } |
| 1106 | 1106 |
| 1107 void CPWL_ScrollBar::OnPosButtonLBDown(const CPDF_Point & point) | 1107 m_pPosButton->Move(rcPosButton, TRUE, bRefresh); |
| 1108 { | 1108 } |
| 1109 m_bMouseDown = TRUE; | 1109 } |
| 1110 | 1110 |
| 1111 if (m_pPosButton) | 1111 void CPWL_ScrollBar::OnMinButtonLBDown(const CPDF_Point& point) { |
| 1112 { | 1112 m_sData.SubSmall(); |
| 1113 CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect(); | 1113 MovePosButton(TRUE); |
| 1114 | 1114 NotifyScrollWindow(); |
| 1115 switch(m_sbType) | 1115 |
| 1116 { | 1116 m_bMinOrMax = TRUE; |
| 1117 case SBT_HSCROLL: | 1117 |
| 1118 m_nOldPos = point.x; | 1118 EndTimer(); |
| 1119 m_fOldPosButton = rcPosButton.left; | 1119 BeginTimer(100); |
| 1120 break; | 1120 } |
| 1121 case SBT_VSCROLL: | 1121 |
| 1122 m_nOldPos = point.y; | 1122 void CPWL_ScrollBar::OnMinButtonLBUp(const CPDF_Point& point) { |
| 1123 m_fOldPosButton = rcPosButton.top; | 1123 } |
| 1124 break; | 1124 |
| 1125 } | 1125 void CPWL_ScrollBar::OnMinButtonMouseMove(const CPDF_Point& point) { |
| 1126 } | 1126 } |
| 1127 } | 1127 |
| 1128 | 1128 void CPWL_ScrollBar::OnMaxButtonLBDown(const CPDF_Point& point) { |
| 1129 void CPWL_ScrollBar::OnPosButtonLBUp(const CPDF_Point & point) | 1129 m_sData.AddSmall(); |
| 1130 { | 1130 MovePosButton(TRUE); |
| 1131 if (m_bMouseDown) | 1131 NotifyScrollWindow(); |
| 1132 { | 1132 |
| 1133 if (!m_bNotifyForever) | 1133 m_bMinOrMax = FALSE; |
| 1134 NotifyScrollWindow(); | 1134 |
| 1135 } | 1135 EndTimer(); |
| 1136 m_bMouseDown = FALSE; | 1136 BeginTimer(100); |
| 1137 } | 1137 } |
| 1138 | 1138 |
| 1139 void CPWL_ScrollBar::OnPosButtonMouseMove(const CPDF_Point & point) | 1139 void CPWL_ScrollBar::OnMaxButtonLBUp(const CPDF_Point& point) { |
| 1140 { | 1140 } |
| 1141 FX_FLOAT fOldScrollPos = m_sData.fScrollPos; | 1141 |
| 1142 | 1142 void CPWL_ScrollBar::OnMaxButtonMouseMove(const CPDF_Point& point) { |
| 1143 FX_FLOAT fNewPos = 0; | 1143 } |
| 1144 | 1144 |
| 1145 switch (m_sbType) | 1145 void CPWL_ScrollBar::OnPosButtonLBDown(const CPDF_Point& point) { |
| 1146 { | 1146 m_bMouseDown = TRUE; |
| 1147 case SBT_HSCROLL: | 1147 |
| 1148 if (FXSYS_fabs(point.x - m_nOldPos) < 1) return; | 1148 if (m_pPosButton) { |
| 1149 fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos); | 1149 CPDF_Rect rcPosButton = m_pPosButton->GetWindowRect(); |
| 1150 break; | 1150 |
| 1151 case SBT_VSCROLL: | 1151 switch (m_sbType) { |
| 1152 if (FXSYS_fabs(point.y - m_nOldPos) < 1) return; | 1152 case SBT_HSCROLL: |
| 1153 fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos); | 1153 m_nOldPos = point.x; |
| 1154 break; | 1154 m_fOldPosButton = rcPosButton.left; |
| 1155 } | 1155 break; |
| 1156 | 1156 case SBT_VSCROLL: |
| 1157 if (m_bMouseDown) | 1157 m_nOldPos = point.y; |
| 1158 { | 1158 m_fOldPosButton = rcPosButton.top; |
| 1159 switch (m_sbType) | 1159 break; |
| 1160 { | 1160 } |
| 1161 case SBT_HSCROLL: | 1161 } |
| 1162 | 1162 } |
| 1163 if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) | 1163 |
| 1164 { | 1164 void CPWL_ScrollBar::OnPosButtonLBUp(const CPDF_Point& point) { |
| 1165 fNewPos = m_sData.ScrollRange.fMin; | 1165 if (m_bMouseDown) { |
| 1166 } | 1166 if (!m_bNotifyForever) |
| 1167 | 1167 NotifyScrollWindow(); |
| 1168 if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) | 1168 } |
| 1169 { | 1169 m_bMouseDown = FALSE; |
| 1170 fNewPos = m_sData.ScrollRange.fMax; | 1170 } |
| 1171 } | 1171 |
| 1172 | 1172 void CPWL_ScrollBar::OnPosButtonMouseMove(const CPDF_Point& point) { |
| 1173 m_sData.SetPos(fNewPos); | 1173 FX_FLOAT fOldScrollPos = m_sData.fScrollPos; |
| 1174 | 1174 |
| 1175 break; | 1175 FX_FLOAT fNewPos = 0; |
| 1176 case SBT_VSCROLL: | 1176 |
| 1177 | 1177 switch (m_sbType) { |
| 1178 if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) | 1178 case SBT_HSCROLL: |
| 1179 { | 1179 if (FXSYS_fabs(point.x - m_nOldPos) < 1) |
| 1180 fNewPos = m_sData.ScrollRange.fMin; | 1180 return; |
| 1181 } | 1181 fNewPos = FaceToTrue(m_fOldPosButton + point.x - m_nOldPos); |
| 1182 | 1182 break; |
| 1183 if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) | 1183 case SBT_VSCROLL: |
| 1184 { | 1184 if (FXSYS_fabs(point.y - m_nOldPos) < 1) |
| 1185 fNewPos = m_sData.ScrollRange.fMax; | 1185 return; |
| 1186 } | 1186 fNewPos = FaceToTrue(m_fOldPosButton + point.y - m_nOldPos); |
| 1187 | 1187 break; |
| 1188 m_sData.SetPos(fNewPos); | 1188 } |
| 1189 | 1189 |
| 1190 break; | 1190 if (m_bMouseDown) { |
| 1191 } | 1191 switch (m_sbType) { |
| 1192 | 1192 case SBT_HSCROLL: |
| 1193 if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos)) | 1193 |
| 1194 { | 1194 if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) { |
| 1195 MovePosButton(TRUE); | 1195 fNewPos = m_sData.ScrollRange.fMin; |
| 1196 | 1196 } |
| 1197 if (m_bNotifyForever) | 1197 |
| 1198 NotifyScrollWindow(); | 1198 if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) { |
| 1199 } | 1199 fNewPos = m_sData.ScrollRange.fMax; |
| 1200 } | 1200 } |
| 1201 } | 1201 |
| 1202 | 1202 m_sData.SetPos(fNewPos); |
| 1203 void CPWL_ScrollBar::NotifyScrollWindow() | 1203 |
| 1204 { | 1204 break; |
| 1205 if (CPWL_Wnd * pParent = this->GetParentWindow()) | 1205 case SBT_VSCROLL: |
| 1206 { | 1206 |
| 1207 FX_FLOAT fPos; | 1207 if (IsFloatSmaller(fNewPos, m_sData.ScrollRange.fMin)) { |
| 1208 switch (this->m_sbType) | 1208 fNewPos = m_sData.ScrollRange.fMin; |
| 1209 { | 1209 } |
| 1210 case SBT_HSCROLL: | 1210 |
| 1211 fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos; | 1211 if (IsFloatBigger(fNewPos, m_sData.ScrollRange.fMax)) { |
| 1212 break; | 1212 fNewPos = m_sData.ScrollRange.fMax; |
| 1213 case SBT_VSCROLL: | 1213 } |
| 1214 fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos; | 1214 |
| 1215 break; | 1215 m_sData.SetPos(fNewPos); |
| 1216 } | 1216 |
| 1217 pParent->OnNotify(this,PNM_SCROLLWINDOW,(FX_INTPTR)m_sbType,(FX_
INTPTR)&fPos); | 1217 break; |
| 1218 } | 1218 } |
| 1219 } | 1219 |
| 1220 | 1220 if (!IsFloatEqual(fOldScrollPos, m_sData.fScrollPos)) { |
| 1221 CPDF_Rect CPWL_ScrollBar::GetScrollArea() const | 1221 MovePosButton(TRUE); |
| 1222 { | 1222 |
| 1223 CPDF_Rect rcClient = GetClientRect(); | 1223 if (m_bNotifyForever) |
| 1224 CPDF_Rect rcArea; | 1224 NotifyScrollWindow(); |
| 1225 | 1225 } |
| 1226 if (!m_pMinButton || !m_pMaxButton)return rcClient; | 1226 } |
| 1227 | 1227 } |
| 1228 CPDF_Rect rcMin = m_pMinButton->GetWindowRect(); | 1228 |
| 1229 CPDF_Rect rcMax = m_pMaxButton->GetWindowRect(); | 1229 void CPWL_ScrollBar::NotifyScrollWindow() { |
| 1230 | 1230 if (CPWL_Wnd* pParent = this->GetParentWindow()) { |
| 1231 FX_FLOAT fMinWidth = rcMin.right - rcMin.left; | 1231 FX_FLOAT fPos; |
| 1232 FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom; | 1232 switch (this->m_sbType) { |
| 1233 FX_FLOAT fMaxWidth = rcMax.right - rcMax.left; | 1233 case SBT_HSCROLL: |
| 1234 FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom; | 1234 fPos = m_OriginInfo.fContentMin + m_sData.fScrollPos; |
| 1235 | 1235 break; |
| 1236 switch(m_sbType) | 1236 case SBT_VSCROLL: |
| 1237 { | 1237 fPos = m_OriginInfo.fContentMax - m_sData.fScrollPos; |
| 1238 case SBT_HSCROLL: | 1238 break; |
| 1239 if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2) | 1239 } |
| 1240 { | 1240 pParent->OnNotify( |
| 1241 rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1,rcClien
t.bottom, | 1241 this, PNM_SCROLLWINDOW, (FX_INTPTR)m_sbType, (FX_INTPTR)&fPos); |
| 1242 rcClient.right - fMaxWidth - 1,r
cClient.top); | 1242 } |
| 1243 } | 1243 } |
| 1244 else | 1244 |
| 1245 { | 1245 CPDF_Rect CPWL_ScrollBar::GetScrollArea() const { |
| 1246 rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1,rcClien
t.bottom, | 1246 CPDF_Rect rcClient = GetClientRect(); |
| 1247 rcClient.left + fMinWidth + 1,rc
Client.top); | 1247 CPDF_Rect rcArea; |
| 1248 } | 1248 |
| 1249 break; | 1249 if (!m_pMinButton || !m_pMaxButton) |
| 1250 case SBT_VSCROLL: | 1250 return rcClient; |
| 1251 if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2
) | 1251 |
| 1252 { | 1252 CPDF_Rect rcMin = m_pMinButton->GetWindowRect(); |
| 1253 rcArea = CPDF_Rect(rcClient.left,rcClient.bottom + fMinH
eight + 1, | 1253 CPDF_Rect rcMax = m_pMaxButton->GetWindowRect(); |
| 1254 rcClient.right,rcClient.top - fM
axHeight - 1); | 1254 |
| 1255 } | 1255 FX_FLOAT fMinWidth = rcMin.right - rcMin.left; |
| 1256 else | 1256 FX_FLOAT fMinHeight = rcMin.top - rcMin.bottom; |
| 1257 { | 1257 FX_FLOAT fMaxWidth = rcMax.right - rcMax.left; |
| 1258 rcArea = CPDF_Rect(rcClient.left,rcClient.bottom + fMinH
eight + 1, | 1258 FX_FLOAT fMaxHeight = rcMax.top - rcMax.bottom; |
| 1259 rcClient.right,rcClient.bottom +
fMinHeight + 1); | 1259 |
| 1260 } | 1260 switch (m_sbType) { |
| 1261 break; | 1261 case SBT_HSCROLL: |
| 1262 } | 1262 if (rcClient.right - rcClient.left > fMinWidth + fMaxWidth + 2) { |
| 1263 | 1263 rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1, |
| 1264 rcArea.Normalize(); | 1264 rcClient.bottom, |
| 1265 | 1265 rcClient.right - fMaxWidth - 1, |
| 1266 return rcArea; | 1266 rcClient.top); |
| 1267 } | 1267 } else { |
| 1268 | 1268 rcArea = CPDF_Rect(rcClient.left + fMinWidth + 1, |
| 1269 FX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue) | 1269 rcClient.bottom, |
| 1270 { | 1270 rcClient.left + fMinWidth + 1, |
| 1271 CPDF_Rect rcPosArea; | 1271 rcClient.top); |
| 1272 rcPosArea = GetScrollArea(); | 1272 } |
| 1273 | 1273 break; |
| 1274 FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWi
dth; | 1274 case SBT_VSCROLL: |
| 1275 fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; | 1275 if (rcClient.top - rcClient.bottom > fMinHeight + fMaxHeight + 2) { |
| 1276 | 1276 rcArea = CPDF_Rect(rcClient.left, |
| 1277 FX_FLOAT fFace = 0; | 1277 rcClient.bottom + fMinHeight + 1, |
| 1278 | 1278 rcClient.right, |
| 1279 switch(m_sbType) | 1279 rcClient.top - fMaxHeight - 1); |
| 1280 { | 1280 } else { |
| 1281 case SBT_HSCROLL: | 1281 rcArea = CPDF_Rect(rcClient.left, |
| 1282 fFace = rcPosArea.left + fTrue * (rcPosArea.right - rcPosArea.le
ft) / fFactWidth; | 1282 rcClient.bottom + fMinHeight + 1, |
| 1283 break; | 1283 rcClient.right, |
| 1284 case SBT_VSCROLL: | 1284 rcClient.bottom + fMinHeight + 1); |
| 1285 fFace = rcPosArea.top - fTrue * (rcPosArea.top - rcPosArea.botto
m) / fFactWidth; | 1285 } |
| 1286 break; | 1286 break; |
| 1287 } | 1287 } |
| 1288 | 1288 |
| 1289 return fFace; | 1289 rcArea.Normalize(); |
| 1290 } | 1290 |
| 1291 | 1291 return rcArea; |
| 1292 FX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace) | 1292 } |
| 1293 { | 1293 |
| 1294 CPDF_Rect rcPosArea; | 1294 FX_FLOAT CPWL_ScrollBar::TrueToFace(FX_FLOAT fTrue) { |
| 1295 rcPosArea = GetScrollArea(); | 1295 CPDF_Rect rcPosArea; |
| 1296 | 1296 rcPosArea = GetScrollArea(); |
| 1297 FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWi
dth; | 1297 |
| 1298 fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; | 1298 FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth; |
| 1299 | 1299 fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; |
| 1300 FX_FLOAT fTrue = 0; | 1300 |
| 1301 | 1301 FX_FLOAT fFace = 0; |
| 1302 switch(m_sbType) | 1302 |
| 1303 { | 1303 switch (m_sbType) { |
| 1304 case SBT_HSCROLL: | 1304 case SBT_HSCROLL: |
| 1305 fTrue = (fFace - rcPosArea.left) * fFactWidth / (rcPosArea.righ
t - rcPosArea.left); | 1305 fFace = rcPosArea.left + |
| 1306 break; | 1306 fTrue * (rcPosArea.right - rcPosArea.left) / fFactWidth; |
| 1307 case SBT_VSCROLL: | 1307 break; |
| 1308 fTrue = (rcPosArea.top - fFace) * fFactWidth / (rcPosArea.top -
rcPosArea.bottom); | 1308 case SBT_VSCROLL: |
| 1309 break; | 1309 fFace = rcPosArea.top - |
| 1310 } | 1310 fTrue * (rcPosArea.top - rcPosArea.bottom) / fFactWidth; |
| 1311 | 1311 break; |
| 1312 return fTrue; | 1312 } |
| 1313 } | 1313 |
| 1314 | 1314 return fFace; |
| 1315 void CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM & cp) | 1315 } |
| 1316 { | 1316 |
| 1317 CreateButtons(cp); | 1317 FX_FLOAT CPWL_ScrollBar::FaceToTrue(FX_FLOAT fFace) { |
| 1318 } | 1318 CPDF_Rect rcPosArea; |
| 1319 | 1319 rcPosArea = GetScrollArea(); |
| 1320 void CPWL_ScrollBar::TimerProc() | 1320 |
| 1321 { | 1321 FX_FLOAT fFactWidth = m_sData.ScrollRange.GetWidth() + m_sData.fClientWidth; |
| 1322 PWL_SCROLL_PRIVATEDATA sTemp = m_sData; | 1322 fFactWidth = fFactWidth == 0 ? 1 : fFactWidth; |
| 1323 | 1323 |
| 1324 if (m_bMinOrMax)m_sData.SubSmall(); | 1324 FX_FLOAT fTrue = 0; |
| 1325 else m_sData.AddSmall(); | 1325 |
| 1326 | 1326 switch (m_sbType) { |
| 1327 if (FXSYS_memcmp(&m_sData, &sTemp, sizeof(PWL_SCROLL_PRIVATEDATA)) != 0) | 1327 case SBT_HSCROLL: |
| 1328 { | 1328 fTrue = (fFace - rcPosArea.left) * fFactWidth / |
| 1329 MovePosButton(TRUE); | 1329 (rcPosArea.right - rcPosArea.left); |
| 1330 NotifyScrollWindow(); | 1330 break; |
| 1331 } | 1331 case SBT_VSCROLL: |
| 1332 fTrue = (rcPosArea.top - fFace) * fFactWidth / |
| 1333 (rcPosArea.top - rcPosArea.bottom); |
| 1334 break; |
| 1335 } |
| 1336 |
| 1337 return fTrue; |
| 1338 } |
| 1339 |
| 1340 void CPWL_ScrollBar::CreateChildWnd(const PWL_CREATEPARAM& cp) { |
| 1341 CreateButtons(cp); |
| 1342 } |
| 1343 |
| 1344 void CPWL_ScrollBar::TimerProc() { |
| 1345 PWL_SCROLL_PRIVATEDATA sTemp = m_sData; |
| 1346 |
| 1347 if (m_bMinOrMax) |
| 1348 m_sData.SubSmall(); |
| 1349 else |
| 1350 m_sData.AddSmall(); |
| 1351 |
| 1352 if (FXSYS_memcmp(&m_sData, &sTemp, sizeof(PWL_SCROLL_PRIVATEDATA)) != 0) { |
| 1353 MovePosButton(TRUE); |
| 1354 NotifyScrollWindow(); |
| 1355 } |
| 1332 } | 1356 } |
| 1333 | 1357 |
| 1334 /* | 1358 /* |
| 1335 void CPWL_ScrollBar::OnSetFocus() | 1359 void CPWL_ScrollBar::OnSetFocus() |
| 1336 { | 1360 { |
| 1337 » if (GetTransparency() != 255) | 1361 if (GetTransparency() != 255) |
| 1338 » { | 1362 { |
| 1339 » » SetTransparency(255); | 1363 SetTransparency(255); |
| 1340 » » InvalidateRect(); | 1364 InvalidateRect(); |
| 1341 » } | 1365 } |
| 1342 } | 1366 } |
| 1343 | 1367 |
| 1344 void CPWL_ScrollBar::OnKillFocus() | 1368 void CPWL_ScrollBar::OnKillFocus() |
| 1345 { | 1369 { |
| 1346 » if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY) | 1370 if (GetTransparency() != PWL_SCROLLBAR_TRANSPARANCY) |
| 1347 » { | 1371 { |
| 1348 » » SetTransparency(PWL_SCROLLBAR_TRANSPARANCY); | 1372 SetTransparency(PWL_SCROLLBAR_TRANSPARANCY); |
| 1349 » » InvalidateRect(); | 1373 InvalidateRect(); |
| 1350 » } | 1374 } |
| 1351 } | 1375 } |
| 1352 */ | 1376 */ |
| 1353 | |
| OLD | NEW |