Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(166)

Side by Side Diff: xfa/fwl/core/ifwl_scrollbar.cpp

Issue 2510793003: Continue formatting fwl/core (Closed)
Patch Set: Fix flag Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "xfa/fwl/core/ifwl_scrollbar.h" 7 #include "xfa/fwl/core/ifwl_scrollbar.h"
8 8
9 #include "third_party/base/ptr_util.h" 9 #include "third_party/base/ptr_util.h"
10 #include "xfa/fwl/core/cfwl_message.h" 10 #include "xfa/fwl/core/cfwl_message.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 m_rtMaxTrack.Reset(); 52 m_rtMaxTrack.Reset();
53 } 53 }
54 54
55 IFWL_ScrollBar::~IFWL_ScrollBar() {} 55 IFWL_ScrollBar::~IFWL_ScrollBar() {}
56 56
57 FWL_Type IFWL_ScrollBar::GetClassID() const { 57 FWL_Type IFWL_ScrollBar::GetClassID() const {
58 return FWL_Type::ScrollBar; 58 return FWL_Type::ScrollBar;
59 } 59 }
60 60
61 void IFWL_ScrollBar::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) { 61 void IFWL_ScrollBar::GetWidgetRect(CFX_RectF& rect, bool bAutoSize) {
62 if (bAutoSize) { 62 if (!bAutoSize) {
63 rect.Set(0, 0, 0, 0);
64 FX_FLOAT* pfMinWidth = static_cast<FX_FLOAT*>(
65 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
66 if (!pfMinWidth)
67 return;
68 if (IsVertical()) {
69 rect.Set(0, 0, (*pfMinWidth), (*pfMinWidth) * 3);
70 } else {
71 rect.Set(0, 0, (*pfMinWidth) * 3, (*pfMinWidth));
72 }
73 IFWL_Widget::GetWidgetRect(rect, true);
74 } else {
75 rect = m_pProperties->m_rtWidget; 63 rect = m_pProperties->m_rtWidget;
64 return;
76 } 65 }
66
67 rect.Set(0, 0, 0, 0);
68 FX_FLOAT* pfMinWidth = static_cast<FX_FLOAT*>(
69 GetThemeCapacity(CFWL_WidgetCapacity::ScrollBarWidth));
70 if (!pfMinWidth)
71 return;
72 if (IsVertical())
73 rect.Set(0, 0, (*pfMinWidth), (*pfMinWidth) * 3);
74 else
75 rect.Set(0, 0, (*pfMinWidth) * 3, (*pfMinWidth));
76 IFWL_Widget::GetWidgetRect(rect, true);
77 } 77 }
78 78
79 void IFWL_ScrollBar::Update() { 79 void IFWL_ScrollBar::Update() {
80 if (IsLocked()) { 80 if (IsLocked())
81 return; 81 return;
82 } 82 if (!m_pProperties->m_pThemeProvider)
83 if (!m_pProperties->m_pThemeProvider) {
84 m_pProperties->m_pThemeProvider = GetAvailableTheme(); 83 m_pProperties->m_pThemeProvider = GetAvailableTheme();
85 } 84
86 Layout(); 85 Layout();
87 } 86 }
88 87
89 void IFWL_ScrollBar::DrawWidget(CFX_Graphics* pGraphics, 88 void IFWL_ScrollBar::DrawWidget(CFX_Graphics* pGraphics,
90 const CFX_Matrix* pMatrix) { 89 const CFX_Matrix* pMatrix) {
91 if (!pGraphics) 90 if (!pGraphics)
92 return; 91 return;
93 if (!m_pProperties->m_pThemeProvider) 92 if (!m_pProperties->m_pThemeProvider)
94 return; 93 return;
94
95 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider; 95 IFWL_ThemeProvider* pTheme = m_pProperties->m_pThemeProvider;
96 if (HasBorder()) { 96 if (HasBorder())
97 DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix); 97 DrawBorder(pGraphics, CFWL_Part::Border, pTheme, pMatrix);
98 } 98 if (HasEdge())
99 if (HasEdge()) {
100 DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix); 99 DrawEdge(pGraphics, CFWL_Part::Edge, pTheme, pMatrix);
101 }
102 DrawTrack(pGraphics, pTheme, true, pMatrix); 100 DrawTrack(pGraphics, pTheme, true, pMatrix);
103 DrawTrack(pGraphics, pTheme, false, pMatrix); 101 DrawTrack(pGraphics, pTheme, false, pMatrix);
104 DrawArrowBtn(pGraphics, pTheme, true, pMatrix); 102 DrawArrowBtn(pGraphics, pTheme, true, pMatrix);
105 DrawArrowBtn(pGraphics, pTheme, false, pMatrix); 103 DrawArrowBtn(pGraphics, pTheme, false, pMatrix);
106 DrawThumb(pGraphics, pTheme, pMatrix); 104 DrawThumb(pGraphics, pTheme, pMatrix);
107 } 105 }
108 106
109 void IFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) { 107 void IFWL_ScrollBar::SetTrackPos(FX_FLOAT fTrackPos) {
110 m_fTrackPos = fTrackPos; 108 m_fTrackPos = fTrackPos;
111 CalcThumbButtonRect(m_rtThumb); 109 CalcThumbButtonRect(m_rtThumb);
(...skipping 29 matching lines...) Expand all
141 const CFX_Matrix* pMatrix) { 139 const CFX_Matrix* pMatrix) {
142 CFWL_ThemeBackground param; 140 CFWL_ThemeBackground param;
143 param.m_pWidget = this; 141 param.m_pWidget = this;
144 param.m_iPart = bMinBtn ? CFWL_Part::ForeArrow : CFWL_Part::BackArrow; 142 param.m_iPart = bMinBtn ? CFWL_Part::ForeArrow : CFWL_Part::BackArrow;
145 param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) 143 param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
146 ? CFWL_PartState_Disabled 144 ? CFWL_PartState_Disabled
147 : (bMinBtn ? m_iMinButtonState : m_iMaxButtonState); 145 : (bMinBtn ? m_iMinButtonState : m_iMaxButtonState);
148 param.m_pGraphics = pGraphics; 146 param.m_pGraphics = pGraphics;
149 param.m_matrix.Concat(*pMatrix); 147 param.m_matrix.Concat(*pMatrix);
150 param.m_rtPart = bMinBtn ? m_rtMinBtn : m_rtMaxBtn; 148 param.m_rtPart = bMinBtn ? m_rtMinBtn : m_rtMaxBtn;
151 if (param.m_rtPart.height > 0 && param.m_rtPart.width > 0) { 149 if (param.m_rtPart.height > 0 && param.m_rtPart.width > 0)
152 pTheme->DrawBackground(&param); 150 pTheme->DrawBackground(&param);
153 }
154 } 151 }
155 152
156 void IFWL_ScrollBar::DrawThumb(CFX_Graphics* pGraphics, 153 void IFWL_ScrollBar::DrawThumb(CFX_Graphics* pGraphics,
157 IFWL_ThemeProvider* pTheme, 154 IFWL_ThemeProvider* pTheme,
158 const CFX_Matrix* pMatrix) { 155 const CFX_Matrix* pMatrix) {
159 CFWL_ThemeBackground param; 156 CFWL_ThemeBackground param;
160 param.m_pWidget = this; 157 param.m_pWidget = this;
161 param.m_iPart = CFWL_Part::Thumb; 158 param.m_iPart = CFWL_Part::Thumb;
162 param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled) 159 param.m_dwStates = (m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled)
163 ? CFWL_PartState_Disabled 160 ? CFWL_PartState_Disabled
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
218 215
219 void IFWL_ScrollBar::CalcThumbButtonRect(CFX_RectF& rect) { 216 void IFWL_ScrollBar::CalcThumbButtonRect(CFX_RectF& rect) {
220 if (!IsEnabled()) { 217 if (!IsEnabled()) {
221 m_rtThumb.Reset(); 218 m_rtThumb.Reset();
222 return; 219 return;
223 } 220 }
224 if (m_bMinSize) { 221 if (m_bMinSize) {
225 m_rtThumb.Empty(); 222 m_rtThumb.Empty();
226 return; 223 return;
227 } 224 }
225
228 FX_FLOAT fRange = m_fRangeMax - m_fRangeMin; 226 FX_FLOAT fRange = m_fRangeMax - m_fRangeMin;
229 memset(&rect, 0, sizeof(CFX_Rect)); 227 memset(&rect, 0, sizeof(CFX_Rect));
230 if (fRange < 0) { 228 if (fRange < 0) {
231 if (IsVertical()) { 229 if (IsVertical())
232 rect.Set(m_rtClient.left, m_rtMaxBtn.bottom(), m_rtClient.width, 0); 230 rect.Set(m_rtClient.left, m_rtMaxBtn.bottom(), m_rtClient.width, 0);
233 } else { 231 else
234 rect.Set(m_rtMaxBtn.right(), m_rtClient.top, 0, m_rtClient.height); 232 rect.Set(m_rtMaxBtn.right(), m_rtClient.top, 0, m_rtClient.height);
235 }
236 return; 233 return;
237 } 234 }
235
238 CFX_RectF rtClient = m_rtClient; 236 CFX_RectF rtClient = m_rtClient;
239 FX_FLOAT fLength = IsVertical() ? rtClient.height : rtClient.width; 237 FX_FLOAT fLength = IsVertical() ? rtClient.height : rtClient.width;
240 FX_FLOAT fSize = m_fButtonLen; 238 FX_FLOAT fSize = m_fButtonLen;
241 if (m_bCustomLayout) { 239 if (m_bCustomLayout) {
242 if (IsVertical()) { 240 if (IsVertical()) {
243 fLength = fLength - m_rtMinBtn.height - m_rtMaxBtn.height; 241 fLength = fLength - m_rtMinBtn.height - m_rtMaxBtn.height;
244 if (fLength < m_rtMinBtn.height || fLength < m_rtMaxBtn.height) { 242 if (fLength < m_rtMinBtn.height || fLength < m_rtMaxBtn.height)
245 fLength = 0.0f; 243 fLength = 0.0f;
246 }
247 } else { 244 } else {
248 fLength = fLength - m_rtMinBtn.width - m_rtMaxBtn.width; 245 fLength = fLength - m_rtMinBtn.width - m_rtMaxBtn.width;
249 if (fLength < m_rtMinBtn.width || fLength < m_rtMaxBtn.width) { 246 if (fLength < m_rtMinBtn.width || fLength < m_rtMaxBtn.width)
250 fLength = 0.0f; 247 fLength = 0.0f;
251 }
252 } 248 }
253 } else { 249 } else {
254 fLength -= fSize * 2.0f; 250 fLength -= fSize * 2.0f;
255 if (fLength < fSize) { 251 if (fLength < fSize)
256 fLength = 0.0f; 252 fLength = 0.0f;
257 }
258 } 253 }
254
259 FX_FLOAT fThumbSize = fLength * fLength / (fRange + fLength); 255 FX_FLOAT fThumbSize = fLength * fLength / (fRange + fLength);
260 if (fThumbSize < m_fMinThumb) { 256 fThumbSize = std::max(fThumbSize, m_fMinThumb);
261 fThumbSize = m_fMinThumb; 257
262 } 258 FX_FLOAT fDiff = std::max(fLength - fThumbSize, 0.0f);
263 FX_FLOAT fDiff = fLength - fThumbSize; 259 FX_FLOAT fTrackPos =
264 if (fDiff < 0.0f) { 260 std::min(std::max(m_fTrackPos, m_fRangeMin), m_fRangeMax);
npm 2016/11/16 20:57:54 Shoudln't this be: std::max(std::min(m_fRangeMax,
dsinclair 2016/11/16 21:31:27 Done.
265 fDiff = 0.0f;
266 }
267 FX_FLOAT fTrackPos = m_fTrackPos;
268 if (fTrackPos > m_fRangeMax) {
269 fTrackPos = m_fRangeMax;
270 }
271 if (fTrackPos < m_fRangeMin) {
272 fTrackPos = m_fRangeMin;
273 }
274 if (!fRange) 261 if (!fRange)
275 return; 262 return;
263
276 if (m_bCustomLayout) { 264 if (m_bCustomLayout) {
277 FX_FLOAT iPos = fDiff * (fTrackPos - m_fRangeMin) / fRange; 265 FX_FLOAT iPos = fDiff * (fTrackPos - m_fRangeMin) / fRange;
278 rect.left = rtClient.left; 266 rect.left = rtClient.left;
279 if (!IsVertical()) { 267 if (!IsVertical()) {
280 if ((m_rtMinBtn.right() == m_rtMaxBtn.left && m_rtMinBtn.width > 0 && 268 if ((m_rtMinBtn.right() == m_rtMaxBtn.left && m_rtMinBtn.width > 0 &&
281 m_rtMaxBtn.width > 0) || 269 m_rtMaxBtn.width > 0) ||
282 (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width)) { 270 (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width)) {
283 rect.left += iPos; 271 rect.left += iPos;
284 } else { 272 } else {
285 rect.left += m_rtMinBtn.right() + iPos; 273 rect.left += m_rtMinBtn.right() + iPos;
286 } 274 }
287 } 275 }
288 rect.top = rtClient.top; 276 rect.top = rtClient.top;
289 if (IsVertical()) { 277 if (IsVertical()) {
290 if ((m_rtMinBtn.bottom() == m_rtMaxBtn.top && m_rtMinBtn.height > 0 && 278 if ((m_rtMinBtn.bottom() == m_rtMaxBtn.top && m_rtMinBtn.height > 0 &&
291 m_rtMaxBtn.height > 0) || 279 m_rtMaxBtn.height > 0) ||
292 (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height)) { 280 (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height)) {
293 rect.top += iPos; 281 rect.top += iPos;
294 } else { 282 } else {
295 rect.top += m_rtMinBtn.bottom() + iPos; 283 rect.top += m_rtMinBtn.bottom() + iPos;
296 } 284 }
297 } 285 }
298 rect.width = IsVertical() ? rtClient.width : fThumbSize; 286 rect.width = IsVertical() ? rtClient.width : fThumbSize;
299 rect.height = IsVertical() ? fThumbSize : rtClient.height; 287 rect.height = IsVertical() ? fThumbSize : rtClient.height;
300 } else { 288 } else {
301 FX_FLOAT iPos = fSize + fDiff * (fTrackPos - m_fRangeMin) / fRange; 289 FX_FLOAT iPos = fSize + fDiff * (fTrackPos - m_fRangeMin) / fRange;
302 rect.left = rtClient.left; 290 rect.left = rtClient.left;
303 if (!IsVertical()) { 291 if (!IsVertical())
304 rect.left += iPos; 292 rect.left += iPos;
305 } 293
306 rect.top = rtClient.top; 294 rect.top = rtClient.top;
307 if (IsVertical()) { 295 if (IsVertical())
308 rect.top += iPos; 296 rect.top += iPos;
309 } 297
310 rect.width = IsVertical() ? rtClient.width : fThumbSize; 298 rect.width = IsVertical() ? rtClient.width : fThumbSize;
311 rect.height = IsVertical() ? fThumbSize : rtClient.height; 299 rect.height = IsVertical() ? fThumbSize : rtClient.height;
312 } 300 }
313 } 301 }
314 302
315 void IFWL_ScrollBar::CalcMinTrackRect(CFX_RectF& rect) { 303 void IFWL_ScrollBar::CalcMinTrackRect(CFX_RectF& rect) {
316 if (m_bMinSize) { 304 if (m_bMinSize) {
317 rect.Empty(); 305 rect.Empty();
318 return; 306 return;
319 } 307 }
308
320 FX_FLOAT fBottom = m_rtThumb.bottom(); 309 FX_FLOAT fBottom = m_rtThumb.bottom();
321 FX_FLOAT fRight = m_rtThumb.right(); 310 FX_FLOAT fRight = m_rtThumb.right();
322 FX_FLOAT ix = (m_rtThumb.left + fRight) / 2; 311 FX_FLOAT ix = (m_rtThumb.left + fRight) / 2;
323 FX_FLOAT iy = (m_rtThumb.top + fBottom) / 2; 312 FX_FLOAT iy = (m_rtThumb.top + fBottom) / 2;
324 rect.left = m_rtClient.left; 313 rect.left = m_rtClient.left;
325 rect.top = m_rtClient.top; 314 rect.top = m_rtClient.top;
326 bool bVertical = IsVertical(); 315 bool bVertical = IsVertical();
327 rect.width = bVertical ? m_rtClient.width : ix; 316 rect.width = bVertical ? m_rtClient.width : ix;
328 rect.height = bVertical ? iy : m_rtClient.height; 317 rect.height = bVertical ? iy : m_rtClient.height;
329 if (m_bCustomLayout) { 318 if (!m_bCustomLayout)
330 if (bVertical) { 319 return;
331 if (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height) { 320
332 rect.top = m_rtClient.top; 321 if (bVertical) {
333 } else if (m_rtMinBtn.top < m_rtThumb.top) { 322 if (m_rtMinBtn.height == 0 && m_rtMaxBtn.height == 0) {
334 rect.top = m_rtMinBtn.bottom(); 323 rect.top = m_rtClient.top;
335 rect.height -= (m_rtMinBtn.bottom() - m_rtClient.top); 324 } else if (m_rtMinBtn.top < m_rtThumb.top) {
336 } 325 rect.top = m_rtMinBtn.bottom();
337 } else { 326 rect.height -= (m_rtMinBtn.bottom() - m_rtClient.top);
338 if (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width) {
339 rect.left = m_rtClient.left;
340 } else if (m_rtMinBtn.left < m_rtThumb.left) {
341 rect.left = m_rtMinBtn.right();
342 rect.width -= (m_rtMinBtn.right() - m_rtClient.left);
343 }
344 } 327 }
328 } else if (m_rtMinBtn.width == 0 && m_rtMaxBtn.width == 0) {
329 rect.left = m_rtClient.left;
330 } else if (m_rtMinBtn.left < m_rtThumb.left) {
331 rect.left = m_rtMinBtn.right();
332 rect.width -= (m_rtMinBtn.right() - m_rtClient.left);
345 } 333 }
346 } 334 }
347 335
348 void IFWL_ScrollBar::CalcMaxTrackRect(CFX_RectF& rect) { 336 void IFWL_ScrollBar::CalcMaxTrackRect(CFX_RectF& rect) {
349 if (m_bMinSize) { 337 if (m_bMinSize) {
350 rect.Empty(); 338 rect.Empty();
351 return; 339 return;
352 } 340 }
341
353 FX_FLOAT ix = (m_rtThumb.left + m_rtThumb.right()) / 2; 342 FX_FLOAT ix = (m_rtThumb.left + m_rtThumb.right()) / 2;
354 FX_FLOAT iy = (m_rtThumb.top + m_rtThumb.bottom()) / 2; 343 FX_FLOAT iy = (m_rtThumb.top + m_rtThumb.bottom()) / 2;
355 bool bVertical = IsVertical(); 344 bool bVertical = IsVertical();
356 rect.left = bVertical ? m_rtClient.left : ix; 345 rect.left = bVertical ? m_rtClient.left : ix;
357 rect.top = bVertical ? iy : m_rtClient.top; 346 rect.top = bVertical ? iy : m_rtClient.top;
358 rect.width = bVertical ? m_rtClient.width : m_rtClient.right() - ix; 347 rect.width = bVertical ? m_rtClient.width : m_rtClient.right() - ix;
359 rect.height = bVertical ? m_rtClient.bottom() - iy : m_rtClient.height; 348 rect.height = bVertical ? m_rtClient.bottom() - iy : m_rtClient.height;
360 if (m_bCustomLayout) { 349 if (!m_bCustomLayout)
361 if (bVertical) { 350 return;
362 if (m_rtMinBtn.top > m_rtThumb.top && m_rtMinBtn.height > 0 && 351
363 m_rtMaxBtn.height > 0) { 352 if (bVertical) {
364 rect.height -= (m_rtClient.bottom() - m_rtMinBtn.top); 353 if (m_rtMinBtn.top > m_rtThumb.top && m_rtMinBtn.height > 0 &&
365 } else if (m_rtMinBtn.height > 0 && m_rtMaxBtn.height > 0) { 354 m_rtMaxBtn.height > 0) {
366 rect.height -= (m_rtClient.bottom() - m_rtMaxBtn.top); 355 rect.height -= (m_rtClient.bottom() - m_rtMinBtn.top);
367 } 356 } else if (m_rtMinBtn.height > 0 && m_rtMaxBtn.height > 0) {
368 } else { 357 rect.height -= (m_rtClient.bottom() - m_rtMaxBtn.top);
369 if (m_rtMinBtn.left > m_rtThumb.left && m_rtMinBtn.width > 0 &&
370 m_rtMaxBtn.width > 0) {
371 rect.width -= (m_rtClient.right() - m_rtMinBtn.left);
372 } else if (m_rtMinBtn.width > 0 && m_rtMaxBtn.width > 0) {
373 rect.width -= (m_rtClient.right() - m_rtMaxBtn.left);
374 }
375 } 358 }
359 } else if (m_rtMinBtn.left > m_rtThumb.left && m_rtMinBtn.width > 0 &&
360 m_rtMaxBtn.width > 0) {
361 rect.width -= (m_rtClient.right() - m_rtMinBtn.left);
362 } else if (m_rtMinBtn.width > 0 && m_rtMaxBtn.width > 0) {
363 rect.width -= (m_rtClient.right() - m_rtMaxBtn.left);
376 } 364 }
377 } 365 }
378 366
379 FX_FLOAT IFWL_ScrollBar::GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy) { 367 FX_FLOAT IFWL_ScrollBar::GetTrackPointPos(FX_FLOAT fx, FX_FLOAT fy) {
380 FX_FLOAT fDiffX = fx - m_cpTrackPointX; 368 FX_FLOAT fDiffX = fx - m_cpTrackPointX;
381 FX_FLOAT fDiffY = fy - m_cpTrackPointY; 369 FX_FLOAT fDiffY = fy - m_cpTrackPointY;
382 FX_FLOAT fRange = m_fRangeMax - m_fRangeMin; 370 FX_FLOAT fRange = m_fRangeMax - m_fRangeMin;
383 FX_FLOAT fPos; 371 FX_FLOAT fPos;
384 if (m_bCustomLayout) { 372 if (m_bCustomLayout) {
385 if (IsVertical()) { 373 if (IsVertical()) {
386 if (0 == m_rtMinBtn.height && 0 == m_rtMaxBtn.height) { 374 if (m_rtMinBtn.height == 0 && m_rtMaxBtn.height == 0) {
387 fPos = fRange * fDiffY / (m_rtClient.height - m_rtThumb.height); 375 fPos = fRange * fDiffY / (m_rtClient.height - m_rtThumb.height);
388 } else if (m_rtMinBtn.bottom() == m_rtMaxBtn.top) { 376 } else if (m_rtMinBtn.bottom() == m_rtMaxBtn.top) {
389 fPos = fRange * fDiffY / 377 fPos = fRange * fDiffY /
390 (m_rtMinBtn.top - m_rtClient.top - m_rtThumb.height); 378 (m_rtMinBtn.top - m_rtClient.top - m_rtThumb.height);
391 } else { 379 } else {
392 fPos = fRange * fDiffY / 380 fPos = fRange * fDiffY /
393 (m_rtMaxBtn.top - m_rtMinBtn.bottom() - m_rtThumb.height); 381 (m_rtMaxBtn.top - m_rtMinBtn.bottom() - m_rtThumb.height);
394 } 382 }
395 } else { 383 } else {
396 if (0 == m_rtMinBtn.width && 0 == m_rtMaxBtn.width) { 384 if (m_rtMinBtn.width == 0 && m_rtMaxBtn.width == 0) {
397 fPos = fRange * fDiffX / (m_rtClient.width - m_rtThumb.width); 385 fPos = fRange * fDiffX / (m_rtClient.width - m_rtThumb.width);
398 } else if (m_rtMinBtn.right() == m_rtMaxBtn.left) { 386 } else if (m_rtMinBtn.right() == m_rtMaxBtn.left) {
399 fPos = fRange * fDiffX / 387 fPos = fRange * fDiffX /
400 (m_rtMinBtn.left - m_rtClient.left - m_rtThumb.width); 388 (m_rtMinBtn.left - m_rtClient.left - m_rtThumb.width);
401 } else { 389 } else {
402 fPos = fRange * fDiffX / 390 fPos = fRange * fDiffX /
403 (m_rtMaxBtn.left - m_rtMinBtn.right() - m_rtThumb.width); 391 (m_rtMaxBtn.left - m_rtMinBtn.right() - m_rtThumb.width);
404 } 392 }
405 } 393 }
406 } else { 394 } else {
407 if (IsVertical()) { 395 if (IsVertical()) {
408 fPos = fRange * fDiffY / 396 fPos = fRange * fDiffY /
409 (m_rtMaxBtn.top - m_rtMinBtn.bottom() - m_rtThumb.height); 397 (m_rtMaxBtn.top - m_rtMinBtn.bottom() - m_rtThumb.height);
410 } else { 398 } else {
411 fPos = fRange * fDiffX / 399 fPos = fRange * fDiffX /
412 (m_rtMaxBtn.left - m_rtMinBtn.right() - m_rtThumb.width); 400 (m_rtMaxBtn.left - m_rtMinBtn.right() - m_rtThumb.width);
413 } 401 }
414 } 402 }
415 fPos += m_fLastTrackPos; 403 fPos += m_fLastTrackPos;
416 if (fPos < m_fRangeMin) { 404 return std::min(std::max(fPos, m_fRangeMin), m_fRangeMax);
417 fPos = m_fRangeMin;
418 }
419 if (fPos > m_fRangeMax) {
420 fPos = m_fRangeMax;
421 }
422 return fPos;
423 } 405 }
424 406
425 void IFWL_ScrollBar::GetTrackRect(CFX_RectF& rect, bool bLower) { 407 void IFWL_ScrollBar::GetTrackRect(CFX_RectF& rect, bool bLower) {
426 bool bDisabled = !!(m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled); 408 bool bDisabled = !!(m_pProperties->m_dwStates & FWL_WGTSTATE_Disabled);
427 if (bDisabled || m_bCustomLayout) { 409 if (bDisabled || m_bCustomLayout) {
428 rect = bLower ? m_rtMinTrack : m_rtMaxTrack; 410 rect = bLower ? m_rtMinTrack : m_rtMaxTrack;
429 } else { 411 return;
430 FX_FLOAT fW = m_rtThumb.width / 2; 412 }
431 FX_FLOAT fH = m_rtThumb.height / 2; 413
432 bool bVert = IsVertical(); 414 FX_FLOAT fW = m_rtThumb.width / 2;
433 if (bLower) { 415 FX_FLOAT fH = m_rtThumb.height / 2;
434 if (bVert) { 416 bool bVert = IsVertical();
435 FX_FLOAT fMinTrackHeight = m_rtMinTrack.height - fH - m_rtMinBtn.height; 417 if (bLower) {
436 fMinTrackHeight = (fMinTrackHeight >= 0.0f) ? fMinTrackHeight : 0.0f; 418 if (bVert) {
437 rect.Set(m_rtMinTrack.left, m_rtMinTrack.top + m_rtMinBtn.height, 419 FX_FLOAT fMinTrackHeight = m_rtMinTrack.height - fH - m_rtMinBtn.height;
438 m_rtMinTrack.width, fMinTrackHeight); 420 fMinTrackHeight = (fMinTrackHeight >= 0.0f) ? fMinTrackHeight : 0.0f;
439 } else { 421 rect.Set(m_rtMinTrack.left, m_rtMinTrack.top + m_rtMinBtn.height,
440 FX_FLOAT fMinTrackWidth = 422 m_rtMinTrack.width, fMinTrackHeight);
441 m_rtMinTrack.width - fW - m_rtMinBtn.width + 2; 423 return;
442 fMinTrackWidth = (fMinTrackWidth >= 0.0f) ? fMinTrackWidth : 0.0f;
443 rect.Set(m_rtMinTrack.left + m_rtMinBtn.width - 1, m_rtMinTrack.top,
444 fMinTrackWidth, m_rtMinTrack.height);
445 }
446 } else {
447 if (bVert) {
448 FX_FLOAT fMaxTrackHeight = m_rtMaxTrack.height - fH - m_rtMaxBtn.height;
449 fMaxTrackHeight = (fMaxTrackHeight >= 0.0f) ? fMaxTrackHeight : 0.0f;
450 rect.Set(m_rtMaxTrack.left, m_rtMaxTrack.top + fH, m_rtMaxTrack.width,
451 fMaxTrackHeight);
452 } else {
453 FX_FLOAT fMaxTrackWidth =
454 m_rtMaxTrack.width - fW - m_rtMaxBtn.width + 2;
455 fMaxTrackWidth = (fMaxTrackWidth >= 0.0f) ? fMaxTrackWidth : 0.0f;
456 rect.Set(m_rtMaxTrack.left + fW, m_rtMaxTrack.top, fMaxTrackWidth,
457 m_rtMaxTrack.height);
458 }
459 } 424 }
425
426 FX_FLOAT fMinTrackWidth = m_rtMinTrack.width - fW - m_rtMinBtn.width + 2;
427 fMinTrackWidth = (fMinTrackWidth >= 0.0f) ? fMinTrackWidth : 0.0f;
428 rect.Set(m_rtMinTrack.left + m_rtMinBtn.width - 1, m_rtMinTrack.top,
429 fMinTrackWidth, m_rtMinTrack.height);
430 return;
460 } 431 }
432
433 if (bVert) {
434 FX_FLOAT fMaxTrackHeight = m_rtMaxTrack.height - fH - m_rtMaxBtn.height;
435 fMaxTrackHeight = (fMaxTrackHeight >= 0.0f) ? fMaxTrackHeight : 0.0f;
436 rect.Set(m_rtMaxTrack.left, m_rtMaxTrack.top + fH, m_rtMaxTrack.width,
437 fMaxTrackHeight);
438 return;
439 }
440
441 FX_FLOAT fMaxTrackWidth = m_rtMaxTrack.width - fW - m_rtMaxBtn.width + 2;
442 fMaxTrackWidth = (fMaxTrackWidth >= 0.0f) ? fMaxTrackWidth : 0.0f;
443 rect.Set(m_rtMaxTrack.left + fW, m_rtMaxTrack.top, fMaxTrackWidth,
444 m_rtMaxTrack.height);
461 } 445 }
462 446
463 bool IFWL_ScrollBar::SendEvent() { 447 bool IFWL_ScrollBar::SendEvent() {
464 if (m_iMinButtonState == CFWL_PartState_Pressed) { 448 if (m_iMinButtonState == CFWL_PartState_Pressed) {
465 DoScroll(FWL_SCBCODE::StepBackward, m_fTrackPos); 449 DoScroll(FWL_SCBCODE::StepBackward, m_fTrackPos);
466 return false; 450 return false;
467 } 451 }
468 if (m_iMaxButtonState == CFWL_PartState_Pressed) { 452 if (m_iMaxButtonState == CFWL_PartState_Pressed) {
469 DoScroll(FWL_SCBCODE::StepForward, m_fTrackPos); 453 DoScroll(FWL_SCBCODE::StepForward, m_fTrackPos);
470 return false; 454 return false;
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 578
595 void IFWL_ScrollBar::DoMouseDown(int32_t iItem, 579 void IFWL_ScrollBar::DoMouseDown(int32_t iItem,
596 const CFX_RectF& rtItem, 580 const CFX_RectF& rtItem,
597 int32_t& iState, 581 int32_t& iState,
598 FX_FLOAT fx, 582 FX_FLOAT fx,
599 FX_FLOAT fy) { 583 FX_FLOAT fy) {
600 if (!rtItem.Contains(fx, fy)) 584 if (!rtItem.Contains(fx, fy))
601 return; 585 return;
602 if (iState == CFWL_PartState_Pressed) 586 if (iState == CFWL_PartState_Pressed)
603 return; 587 return;
588
604 iState = CFWL_PartState_Pressed; 589 iState = CFWL_PartState_Pressed;
605 Repaint(&rtItem); 590 Repaint(&rtItem);
606 } 591 }
607 592
608 void IFWL_ScrollBar::DoMouseUp(int32_t iItem, 593 void IFWL_ScrollBar::DoMouseUp(int32_t iItem,
609 const CFX_RectF& rtItem, 594 const CFX_RectF& rtItem,
610 int32_t& iState, 595 int32_t& iState,
611 FX_FLOAT fx, 596 FX_FLOAT fx,
612 FX_FLOAT fy) { 597 FX_FLOAT fy) {
613 int32_t iNewState = 598 int32_t iNewState =
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 649
665 void IFWL_ScrollBar::Timer::Run(IFWL_TimerInfo* pTimerInfo) { 650 void IFWL_ScrollBar::Timer::Run(IFWL_TimerInfo* pTimerInfo) {
666 IFWL_ScrollBar* pButton = static_cast<IFWL_ScrollBar*>(m_pWidget); 651 IFWL_ScrollBar* pButton = static_cast<IFWL_ScrollBar*>(m_pWidget);
667 652
668 if (pButton->m_pTimerInfo) 653 if (pButton->m_pTimerInfo)
669 pButton->m_pTimerInfo->StopTimer(); 654 pButton->m_pTimerInfo->StopTimer();
670 655
671 if (!pButton->SendEvent()) 656 if (!pButton->SendEvent())
672 pButton->m_pTimerInfo = StartTimer(0, true); 657 pButton->m_pTimerInfo = StartTimer(0, true);
673 } 658 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698